问题描述:
PROGRAM TITLE GOES HERE-ex_movs
***************************************************
data segment define data segment
source_buffer db 40 dup('a')
data ends
***************************************************
extra segment define extra segment
dest_buffer db 40 dup(?)
extra ends
***************************************************
code segment define code segment
---------------------------------------------------
main proc far
assume cs:code,ds:data,es:extra
start:
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
lea si,source_buffer
lea di,dest_buffer
cld
mov cx,40
rep mov ***
ret
main endp
code ends
end start
输入c:>ex_movs.exe
结果得到--->NTVDM cpu 遇到无效的指令
CS:0DE5 IP:0028 OP:FF FF FF FF FF AO 选择关闭拿姿终止应用程序
如果能运行的话
怎么看到运行迹虚的结果?
请高手指教~
解析:
我没试过你的程序,不过很有可能是你的es也没有赋值姿敏燃,需要像ds那样赋值。
这样写无法看到结果,可以考虑打印输出你想看得地址的值,不难写。还有一种方法就是用debug模式看,命令行下面输入debug <filename>就行了,具体命令和用法可以参考help。
首先你在asm程序中如下定义堆栈:stack segment stack
dw 0,0,0,0,0,0
stack ends
注意:segment后面要加stack
也可以这蔽纤样定义:
a segment stack
dw 0,0,0,0,0
a ends
这样明白了么?
另外你用link程序的时耐中候可以这样昌并山写
link 2-22.asm
一个分号省了大事。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)