NEXT: mov bx,ax ;[机器码2个字节]
jmp WORD PTR NEXT ;[机器码3个字节]
xor bx,bx ;[机器码2个字节]
NEXT的地址为:10050H
CS=1005H
NEXT的偏移量,即跳转后的IP值为:10050H-(1005H*16)=0
从另一个角度理解,转移地址偏移地址=当前(IP)+偏移量
其中偏移量是:JMP指令后跟着的数值:0FFFBH;当前IP是0005H,因为IP存放的是下一条指令的偏移量,=2+3=5;根据公式计算出来的NEXT偏移应该为:0FFFB+0005H=0000H。
反过来,0FFFB结果是怎么来的呢?现在我们知道NEXT位置的IP=0;当前IP=5;0-5=-5。在计算机内部负数是用补码表示的,计算-5的补码=0FFFB
追问我不懂那个表格中机器指令那一竖条是什么意思,为什么有时候有两个有时候有三个
追答X86指令编码采用的是动态长度编码的,有的指令长,有的指短
mov bx,ax ;[机器码2个字节],对应的机器码是8B D8
jmp WORD PTR NEXT ;[机器码3个字节],对应的机器码是E9 FB FF