实验8 分析一个奇怪的程序
分析下面的程序,在运行前思考,这个程序可以正确返回吗?
运行后再思考:为什么是这种结果?
通过这个程序加深对相关内容的理解。
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
分析:
这个程序可以正确返回,注意:jmp short s1是跳转相对位移,程序在编译时确定了这个相对位移,往上跳 * 个单元,之后这句指令被复制到s起始地址后,还是往上跳 * 个单元,到达程序结束指令 mov ax, 4c00h int 21h处,正常结束程序并返回。
千万不要理解为总是跳往s1,它是位移跳转!!