Is it possible to manipulate the instruction pointer in 8086 assembly?

后端 未结 2 1818
我寻月下人不归
我寻月下人不归 2020-12-07 06:02

I want to know if I can manipulate (read and change the value of) the instruction pointer (IP) in 8086 assembly.

For example,

Say IP is currently storing

2条回答
  •  青春惊慌失措
    2020-12-07 06:56

    If you wanted to set the instruction pointer to a known value, say hex value 4020h, you could jump directly to that address:

    jmp 4020h
    

    Or if some memory location, myVariable, held the value you wanted to store in IP you could do an indirect jump:

    jmp [myVariable]
    

    The result of a jmp (indirect or direct) modifies the instruction pointer.

    Reading the instruction pointer is problematic. Position independent code on Linux used to work by using a set of code something like:

     call getIP
    

    with

     :getIP
     mov bx, [sp] ; Read the return address into BX.
     ret
    

    For other methods of reading IP, see Stack Overflow: reading IP.

提交回复
热议问题