: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
s0:jmp short s
s1:
mov ax,0
int 21H
mov ax,0
s2:
jmp short
答案:可以正常运行。
我们来逐步分析:
这是我们的程序对应的机器指令!
首先我们的 cs:ip 指向的是
076A:005
,由此我们可以看出来
076A:000~076A:004
这段地址保存的汇编指令应该是:
mov ax,4c00H
int 21H
然后我们逐步执行,nop 是空指令,占一个字节,做完实验后我们就会发现它的作用,应该就是为我们凑一个地址,最后让指令能cs:ip能指向
076A:000
这个地址。执行至076A:000A 后,di寄存器获得 s 标号的偏移地址,之后si寄存器又获得 s2 标号的偏移地址,然后我们获取 s2标号处的指令,存入ax,寄存器,此时 ax=EBF6这条指令含义是个关键。
现在我们来分析下面这段代码:
s1:
mov ax,0
int 21H
mov ax,0
s2:
jmp short
jmp short s1 这个段代码的指令 就是EBF6,在这里的含义是跳到了s1标号处,但是jmp short s1并不包含s1的地址,它包含的是和当前地址的相对距离,所以这条指令的含义是ip向后移动 x 距离,那么我们看一下x是多少?