汇编语言,这一题的位移量是怎么算出来的?

如题所述

第1个回答  2015-04-27
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

第2个回答  2015-04-27
往上跳,偏移量是负数嘛,你想啊,跳到ip为0的地方就是-5(前面5字节),-5的补码是多少你应该会算吧本回答被提问者采纳
相似回答