与转移地址有关的寻址方式

1.如何确定当前要执行指令在内存中的位置
    IP:instruction pointer.指令指针寄存器。IP寄存器是CPU内部的一个寄存器,用来存储将要执行的下一条指令的偏移量。
    CS:Code Segment.代码段寄存器。CS也是CPU内部的一个寄存器,用来存放当前程序代码段的地址。
这里涉及到8086处理器的寻址方式,即 段:偏移量 寻址方式。一条指令(数据)再内存中的物理地址等于对应的段值×16再加上偏移量。这样作的原因是为了扩大16为地址线的寻址空间。16根地址线只能直接寻址2的16次方个字节。用段加偏移量的方式可以寻址1M字节。
CPU 通过两个寄存器来指向代码段
CS:IP 这两个寄存器就是用来表示当前要执行的机器指令在内存中的位置
 
2. 段内直接寻址
8088中
这种寻址方式用于条件转移和无条件转移指令,但是,当它用于条件转移时,位移量只允许8位。无条件转移指令在位移量为8位时,叫短跳转。
    指令的汇编语言格式为:
JMP    NEAR  PTR  PROGIA
JMP    SHORT  QUEST
其中,PROGIA和QUEST均为转向的符号地址,在机器指令中,用位移量来表示。在汇编指令中,如果位移量为16位,则在符号地址前加操作符NEAR  PTR。如果位移量为8位,则在符号地址前加操作符SHORT。
3. 段内间接寻址
    转向有效地址是一个寄存器或是存储单元的内容,这个寄存器或存储单元的内容可以用数据寻址方式中除立即数以外的任何一种寻址方式取得,所得到的转向的有效地址用来取代IP寄存器的内容。 
    注意:这种寻址方式以及以下的两种段间寻址方式都不能用于条件转移指令。也就是说,条件转移指令只能使用段内直接寻址的8位位移量,而JMP和CALL指令则可以使用任何跳转方式。
段内间接寻址转移指令的汇编格式可以表示为
           JMP    BX
           JMP    WORD  PTR[BP+TABLE]
等。其中WORD  PTR又称为操作符(伪),用以指出其后的寻址方式所取得的转向地址是一个字的有效地址,也就是说它是一种段内转移。
         以上两种寻址方式均为段内转移,所以直接把求得的转移的有效地址送到IP寄存器就可以了。如果需要计算转移的物理地址,则计算公式应该是:
        物理地址=l 6d×(CS)十EA
其中EA即为上述转移的有效地址

4.段间直接转移
    指令中直接提供了转向段地址和偏移地址,所以只要用指令中指定的偏移地址取代IP寄存器的内容,用指令中指定的段地址取代CS寄存器的内容就完成了从一个段到另一个段的转移操作, 
       这种指令的汇编语言格式可表示为:
JMP   FAR  PTR  NEXTROUTINT
其中,NEXTROUTINT为转向的符号地址,PAR FAR 则是表示段间转移的操作符。
 
5.段间间接转移
用存储器中的二个相继字的内容来取代IP和CS寄存器中的原始内容以达到段间转移约目的。这里存储单元的地址是由指令指定除立即数方式和寄存器方式以外的任何一种数据寻址方式取得,如下图所示。
 
        这种指令的汇编语言格式可表示为:
JMP    DWORD  PTR[INTERS+BX]
其中,[INTERS+BX]说明数据寻址方式为直接变址寻址方式,DWORD  PTR为双字操作符,
Ptr相当于显示声明,跳转到的地址以DWORD双字的形式访问。说明转向地址需要取双字为段间转移指令。

 
 
  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值