回 帖 发 新 帖 刷新版面

主题:8086的指令问题!!


  有一道试题是这样的:若短转移指令 JMP NEXT 位于代码段内 CS:0180H 开始
de内存单元内,且其操作数(偏移量)为F7H,即“CS:0180 EB F7   JMP NEXT:”。
试问此指令的转移地址NEXT是多少?(用十六进制表示)


  上面是考研的一道题,我搞得不是很明白,希望各位大虾能给出个结果,并说明一下
原因,谢谢了[em18]

回复列表 (共1个回复)

沙发

短转移表示转移地址是一个8bit长度的数, 故 F7 表示 -9
答案应该是:
    0180 + 2 - 9 = 0179H

1. 可以实证求解. 写个简单的包含跳转语句的汇编程序, 编译的时候要求生成LST文件, 到LST文件里看看就知道了.

2. 为什么要 +2 呢? 以下是俺的猜测:
   这条jmp指令实际的效果是给 IP(指令指针) 加上一个值(本例中这个值是-9). 但是, 当执行到这条jmp语句的时候, IP的值已经不是0180H了, 而是紧接着的下一条指令, jmp语句本身的长度是2 (本例中是EB F7), 所以此时的IP值是0180H + 2; 于是再加上-9就是NEXT的地址了, 下一条指令真正将从该地址执行.
    真正的原因得去查Intel的汇编指令手册, 哪位来确认一下.

我来回复

您尚未登录,请登录后再回复。点此登录或注册