当前位置: 代码迷 >> 汇编语言 >> 请问实现段间跳转的方法
  详细解决方案

请问实现段间跳转的方法

热度:9945   发布时间:2013-02-26 00:00:00.0
请教实现段间跳转的方法
方法多多益善。

------解决方案--------------------------------------------------------
jmp far
------解决方案--------------------------------------------------------
1、
jmp segment:offset
如果编译器不支持,可以直接用机器码:
DB 0EAH
DW offset
DW segment
2、
push segment
push offset
retf
3、
jmp DWORD PTR 各种内存寻址方式访问远指针变量
------解决方案--------------------------------------------------------
mov word ptr [bx],0
 mov word ptr [bx+2],1500h
 JMP far ptr [bx] ;转移至1500h:0

段间间接转移指令,用一个双字存储单元表示要跳转的目标地址。这个目标地址存放在主存中连续的两个字单元中的,其中低位字送IP寄存器,高位字送CS寄存器。
------解决方案--------------------------------------------------------
1、使用LJMP,AT&T和INTEL都支持,比如AT&T的
ljmpl $段基址或者选择符, $段内偏移

2、使用LCALL,进行远程调用
lcall 段基址(这个要存在4个段寄存器里面):(段内偏移)
 
3、使用PUSHL,把地址存在CALL调用后返回后自动装载EIP里,就是2楼的第二种方法,比如LINUX的HEAD.s有这样的例子:
after_page_tables:
pushl $0
pushl $0
pushl $0
pushl $L6
pushl $main
jmp setup_paging

4、似乎linux里面的系统调用算的上是一种段间调用吧

5、2楼的第一种方法
  相关解决方案