P187
分析下面的程序凡资,在運(yùn)行前思考:這個(gè)程序可以正確返回嗎籍胯?
運(yùn)行后再思考:為什么是這個(gè)結(jié)果?
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
這段代碼執(zhí)行后景殷,s處的兩字節(jié)改寫(xiě)為s2處的指令jmp short s1
溅呢。
觀察s2與s1和s與code的位置澡屡,可以發(fā)現(xiàn),兩者之間的字節(jié)數(shù)相等咐旧,即:s處的指令相當(dāng)于jmp short code
驶鹉。
當(dāng)代碼執(zhí)行到s1處,跳轉(zhuǎn)s铣墨,接著跳轉(zhuǎn)code室埋,故程序最終能正確返回。