实验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

EBF6.png
- 1、代码会把 标号s2 之后的
jmp short s1指令复制到 标号s: nop nop 这里,本质上复制的就是指令对应的机器码EBF6,指令也是数据,指令就是数据 - 2、机器码
EBF6分两部分看EB表示跳转,F6表示位移量 - 3、
F6是十进制数 负十 的补码形式,功能是 向低地址跳转十个内存单元
F6 H = 1111 0110 B
取反+1
= 0000 1001 B+1
= 0000 1010 B
= 10 D
- 4、
F6如何而来?
jmp short s1
标号s1处的偏移地址 0018H
减去
jmp指令后第一个字节的地址 0022H
0018H-0022H = F6H(保留2个字节)
- 5、程序跳转到
mov ax,4c00h开始执行,最终程序结束