关于汇编的段内转移

来源:百度知道 编辑:UC知道 时间:2024/05/31 23:24:14
在"段内直接转移"寻址方式中,转移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地址),编译器它会帮你计算出转移的目的地址的。

这样当然无法用"段内直接转移"寻址了,需要采用跨段寻址,设置IP的值到目标标号所在段内,再计算偏移