JMP如何寻址???

jacky_shen 2004-06-28 02:38:08
JMP FAR PTR XXXX
JMP DWORD PTR XXXX[基/变址寄存器]
对上面两个寻址的方式有点模糊,能否详细的告诉我。谢谢


"偏移地址" 是否就是 "有效地址" ???

"偏移地址" = "有效地址" ???
...全文
366 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
W32API 2004-06-29
  • 打赏
  • 举报
回复
哦,
FF /4 JMP r/m16 Jump near, absolute indirect, address given in r/m16
FF /4 JMP r/m32 Jump near, absolute indirect, address given in r/m32
这两个使用段内偏移地址,而不是相对于下一指令的相对地址。
W32API 2004-06-29
  • 打赏
  • 举报
回复
EB cb JMP rel8 Jump short, relative, displacement relative to next instruction
E9 cw JMP rel16 Jump near, relative, displacement relative to next instruction
E9 cd JMP rel32 Jump near, relative, displacement relative to next instruction
FF /4 JMP r/m16 Jump near, absolute indirect, address given in r/m16
FF /4 JMP r/m32 Jump near, absolute indirect, address given in r/m32
以上是近跳转(段内偏移地址(相对于下一条指令)),英文说明里面都有了
far 使用完整的跳转格式 16:16 或者 16:32,绝对地址(注意,不是物理地址)

JMP FAR PTR XXXX
仅是这样给出的话,我还真的不能确定是用哪个,如果用 ptr 16:16 或 ptr 16:32 的话,那应该给出完整的跳转格式地址。如果用 m16:16 或 m16:32 的话,那 xxxx 就是存储跳转目的的内存地址。

JMP DWORD PTR XXXX[基/变址寄存器]
这个跳转使用
FF /4 JMP m16:32 Jump near, absolute indirect, address given in m16:32
XXXX[基/变址寄存器] 是存储跳转目的的内存地址

上面的那些地址限定标记都是由编译器提供的,让你可以选定需要使用的跳转类别,否则编译器无法断定应该使用哪种跳转指令。


至于偏移地址和有效地址,从我的观点,只能说是国人写的书比较喜欢创造,有效地址不要理会也罢。。。
W32API 2004-06-29
  • 打赏
  • 举报
回复
JMP DWORD PTR XXXX[基/变址寄存器]
这个跳转使用
FF /4 JMP m32 Jump near, absolute indirect, address given in m32
XXXX[基/变址寄存器] 是存储跳转目的的内存地址

真的有点疯,COPY 都会出错。。。

programfanny 2004-06-28
  • 打赏
  • 举报
回复
在汇编中用的是标号,经过汇编后的obj及exe/com文件是用的是(+/-)偏移量(记ofs),来表示从该指令下一条指令的首地址转移的偏移值,即 NewIP=CurrentIP+ofs
jacky_shen 2004-06-28
  • 打赏
  • 举报
回复
跳转到的地方是如何计算的呢?
Areslee 2004-06-28
  • 打赏
  • 举报
回复
SHORT NEAR WORD都是段内跳转
DWORD FAR是段间跳转
PTR是介词
jacky_shen 2004-06-28
  • 打赏
  • 举报
回复
JMP FAR PTR XXXX

XXXX 前面的修饰 FAR PTR 还有更多的 SHORT,WORD PTR ,NEAR 等等,都是如何操作的,如何使用的?
Areslee 2004-06-28
  • 打赏
  • 举报
回复
李诚你举个例吧,对初学者来说你给的这段和天书没啥区别。。。。。。
JMP XXXX
意思就是跳转到XXXX执行
JMP DWORD XXXX[YYY]
意思就是取内存XXXX的偏移地址加上YYY的值处的一个双字作为目标地址,跳转到目标地址执行
W32API 2004-06-28
  • 打赏
  • 举报
回复
EB cb JMP rel8 Jump short, relative, displacement relative to next instruction

E9 cw JMP rel16 Jump near, relative, displacement relative to next instruction

E9 cd JMP rel32 Jump near, relative, displacement relative to next instruction

FF /4 JMP r/m16 Jump near, absolute indirect, address given in r/m16

FF /4 JMP r/m32 Jump near, absolute indirect, address given in r/m32

EA cd JMP ptr16:16 Jump far, absolute, address given in operand

EA cp JMP ptr16:32 Jump far, absolute, address given in operand

FF /5 JMP m16:16 Jump far, absolute indirect, address given in m16:16

FF /5 JMP m16:32 Jump far, absolute indirect, address given in m16:32
  • 打赏
  • 举报
回复
我觉得偏移地址就是当前代码所在的地址到目标地址的偏移量。
JMP DWORD PTR XXXX[基/变址寄存器] 应该是 JMP FAR PTR XXXX
再加上[基/变址寄存器]内的偏移量的地址。

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧