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

请教在nasm中怎么实现段间跳转

2012-09-18 
请问在nasm中如何实现段间跳转?比如我要跳到段INITSEG中。跳转后继续执行如下的代码:go:指令1指令2我应该如

请问在nasm中如何实现段间跳转?
比如我要跳到段INITSEG中。跳转后继续执行如下的代码:
go:
  指令1
  指令2
我应该如何写?
我尝试过jmp INITSEG:go,但是好像没有执行的go的代码。
我在网上看到一个例子,好像可以,但是他写的是jmp INITSEG:0x002a
我不知道这个0x002a是如何得到的?请各位指教一下。
谢谢!
 

[解决办法]

探讨
比如我要跳到段INITSEG中。跳转后继续执行如下的代码:
go:
指令1
指令2
我应该如何写?
我尝试过jmp INITSEG:go,但是好像没有执行的go的代码。
我在网上看到一个例子,好像可以,但是他写的是jmp INITSEG:0x002a
我不知道这个0x002a是如何得到的?请各位指教一下。
谢谢!

[解决办法]
nasm可以,masm需要构造
[解决办法]
nasm对跳转的设计很人性化. 一般来说nasm中跳转标明长度就可以了. 在实模式跨入保护模式的那条经典jmp中, Linux的代码是直接编的机器码, nasm加一个dword就可以了. 
如果jmp这种方法解决不了的话, 你可以试一试把地址压栈, 然后执行一个retf就可以了
[解决办法]
nasm远跳指令就是JMP BASE:OFFSET,一个段需要用[section]作为开头,这样它才会重新以此为几点计算偏移。
[解决办法]
探讨
引用:
nasm远跳指令就是JMP BASE:OFFSET,一个段需要用[section]作为开头,这样它才会重新以此为几点计算偏移。

请问如果要跳到go处,那个OFFSET应该为多少?我现在是写了一个具体的地址实现了跳转。

[解决办法]
打错字了,因该是base_go,这里需要换算一下得到go
[解决办法]
jmp INITSEG:go
jmp INITSEG:go-INITSEG

热点排行