分析下面的程序,然后再在Debug程序中单步执行,观察每一步完成后的结果,并解释出现的现象。
程序如下:
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
分析:
取了s和s2标号的地址分别放入di和si中,
然后把s2标号处的代码的机器码放入ax,
然后把ax的内容放入标号s的地址处,
执行s0处的代码,即跳转到标号s处,
标号s处对应的是标号s2处的代码,所以执行跳转到标号s1处,而s1处的代码对应的即为0地址处,所以直接跳转到地址为零的地方执行了结束语句。
总结:
从这个程序中,我们可以看到结束语句并不一定放到最后,在需要的时候可以通过跳转跳到结束语句