P187
分析下面的程序,在运行前思考:这个程序可以正确返回吗?
运行后再思考:为什么是这个结果?
assume cs:code
code 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
s1: jmp short s
int 21h
mov ax,0
s2: jmp short s1
nop
code ends
end start
分析:
mov di,offset s
mov si,offset s2
mov ax,cs:[si]
mov cs:[di],ax
这段代码执行后,s处的两字节改写为s2处的指令jmp short s1
。
观察s2与s1和s与code的位置,可以发现,两者之间的字节数相等,即:s处的指令相当于jmp short code
。
当代码执行到s1处,跳转s,接着跳转code,故程序最终能正确返回。