关于汇编的段内转移

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于汇编的段内转移相关的知识,希望对你有一定的参考价值。

在"段内直接转移"寻址方式中,转移IP是当前IP+16位位移量,此16位数表示的范围是-32768~32767之间的.但如果当前IP是20,而目标标号的偏移量是40020,他们的位移量超过了32767,请问在机器码中怎么用16位数表示该位移量(差值)?
我的意思是:在一个段内,从偏移地址为20的地方能否跳转至偏移地址为40020的地方?怎么表示这个相对位移量?

段内直接转移分为段内直接短转移和段内直接近转移。
段内直接短转移是在-128到+127的范围,如JMP SHORT L1
段内直接短转移是在-32768到+32767的范围,如JMP NEAR PTR L1
转移的目的地址=当前IP地址的值+(L1地址-当前IP地址)
若标号的偏移量超过了16位的范围就说明一定是跨段了(最大的段不外乎也是不超过16位的范围),那么这个时候就只能用段间转移,IP得到新段的偏移地址,CS得到新的段段地址,新段的段地址:新段的偏移地址(20位地址)就可以任意找到内存的任何单元。如JMP WORD PTR L1,不论L1有多远,都能跳到。
段内转移是不可以到那么远的,只能使用段间转移指令可以到达。转移的目的地址=当前IP地址的值+(L1地址-当前IP地址),编译器它会帮你计算出转移的目的地址的。
参考技术A 这样当然无法用"段内直接转移"寻址了,需要采用跨段寻址,设置IP的值到目标标号所在段内,再计算偏移

以上是关于关于汇编的段内转移的主要内容,如果未能解决你的问题,请参考以下文章

汇编学习笔记

汇编--控制转移指令 jmp

2017.10.18 汇编语言语法和DOS功能调用

下面程序为啥不行??jmp指令不能越段转移吗??有啥方法越段呢??

汇编——转移

汇编入门学习笔记 —— 转移指令