分析下面的程序,在运行前思考:这个程序可以正确返回吗?
运行后再思考:为什么时这种结果?
通过这个程序加深对相关内容的额理解。
assume cs:codesg
codesg segment
mov ax,4c00h
int 21h
start:mov ax,0
s:nop
nop
mov di,offset s
mov si,offset s2
mov ax,cs:[si]
mov cs:[di],ax
s0:jmp short s
s1:mov ax,0
int 21h
mov ax,0
s2:jmp short s1
nop
codesg ends
end start
初看时到s1,然后是返回中止?
不多说,运行分析
是从start开始的指令,与想法没错,end start告诉了masm那里是入口
JMP 0008是S的标号地址,后来JMP 0000 这样一来发现了原本的IP是0005,是前面两个返回语句,是直接略过的
jmp 0008下一条是jmp0000,nop执行后分配90H机器码空间,跳转到codesg 结束