是否可以在8086汇编中操作指令指针?

Aht*_*ham -2 assembly x86-16

我想知道我是否可以在8086汇编中操作(读取和更改值)指令指针(IP).

例如,

说IP当前正在存储0200h.我想读取这个值并将其更改为其他内容4020h.我怎么能这样做?

mks*_*eve 5

如果要将指令指针设置为已知值,例如十六进制值4020h,则可以直接跳转到该地址:

jmp 4020h
Run Code Online (Sandbox Code Playgroud)

或者,如果某个内存位置myVariable保存了您想要存储的值,则IP可以进行间接跳转:

jmp [myVariable]
Run Code Online (Sandbox Code Playgroud)

jmp(间接或直接)的结果修改指令指针.

读取指令指针是有问题的.Linux上的位置独立代码通常使用一组代码来工作:

 call getIP
Run Code Online (Sandbox Code Playgroud)

 :getIP
 mov bx, [sp] ; Read the return address into BX.
 ret
Run Code Online (Sandbox Code Playgroud)

有关读取IP的其他方法,请参阅堆栈溢出:读取IP.

  • @Doda阅读9086架构用户手册,阅读汇编手册获取说明.然后,您将能够理解mksteve的答案并对其进行投票.ATM,你似乎在得到一个好答案后会问无关紧要的问题.JMP指令直接改变IP寄存器值 - 就是这样.IP寄存器在内存映射中没有地址.0x1234只是一个值mksteve用作示例.你问的是毫无意义的问题.阅读手册.在询问指令详细信息之前,您需要了解架构以及计算机的工作方式. (2认同)
  • @Doda - 处理downvotes的方法是创建新帖子并获得upvotes.:-)对于downvotes的一个可能的解释可能是有些人知道`MOV IP,X`并没有丢失,只是拼写了`JMP X`,并且你可能通过阅读英特尔的手册找到了自己. (2认同)
  • @Doda你得到了投票,因为你提出的问题可以通过谷歌或查看手册轻松回答.没有办法摆脱downvotes.不要删除这个问题,但下次请先写一些问题,然后再告诉我们您在问题中已经知道的所有内容,以便我们确切知道您需要帮助的地方.像你这样的模糊问题(例如,你并不具体说明"操纵指令指针"应该是什么意思),这些问题很难回答并且很难得到. (2认同)
  • @Doda好多了!现在可以合理地回答这个问题. (2认同)