首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

请问实现段间跳转的方法

2012-05-01 
请教实现段间跳转的方法方法多多益善。[解决办法]jmp far[解决办法]1、jmp segment:offset如果编译器不支持,

请教实现段间跳转的方法
方法多多益善。

[解决办法]
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楼的第一种方法

热点排行