计算机组成解疑补漏之“短转移、近转移、远转移”

短转移、近转移、运转移

首先,短转移是最短的,近转移和远转移是相对的近和远。

  • 短转移(JMP SHORT LABEL)的位移量:IP ← IP + 8位的位移量
  • 近转移(JMP NEAR PTR LABEL)的位移量:IP ← IP + 16位的位移量
  • 远转移(JMP FAR PTR LABEL)的位移量:IP ← LABEL的偏移地址,CS ← LABEL的段基址

关于三种转移的IP值

  • 短转移:JMP位置的IP值加2,即IP指向了下一条指令,再加上IP+1位置的一个8bit位移量。
  • 近转移:因为位移量是16bit,需要占两个字节,所以JMP位置的IP值加3,再加上IP+1和IP+2组成的位移量。
  • 远转移:采用段加偏移,CS的值在高地址、IP值在低地址(注意小端模式)

注解:
x86采用小端模式,即低有效字节放在低地址位置。

如此,再看下面三道题,就清晰很多了

阅读下面的x86汇编程序,回答问题。

JMP NEAR PTR PROG1
……
JMP  SHORT LAB
……
JMP  FAR PTR PROG2
……
PROG1: MOV  CX, DX
……
LAB: ADD  AX, BX
……
PROG2:MOV  CX, DX

假设第一条JMP指令(JMP NEAR)在存储器中的地址是23000H,位移量是4010H,则该跳转指令的目标地址为多少?(注意当前IP值已经指向下一条指令)?
23000H + 3 + 4010H = 27013H √

假设第一条JMP指令(JMP SHORT)在存储器中的地址是23000H,位移量是10H,则该跳转指令的目标地址为多少?(注意当前IP值已经指向下一条指令)?
23000H + 2 + 10H = 23012H √

假设第三条JMP指令(JMP FAR)在存储器中的地址是25000H,该指令长度为5个字节,第一个字节为EA表示操作码,后四个字节的内容依次为10H,20H,30H,40H,则该跳转指令的目标地址为多少?
CS:4030H
IP:2010H
4030H * 10H + 2010H = 42310H √

posted @ 2019-05-14 16:41  ZealYoung  阅读(1050)  评论(0编辑  收藏  举报