分析8086汇编指令jmp的跳转程序

程序如下所示

assume cs:codesg
codesg segment

    mov ax,4c00h
    int 21h

start:mov ax,0

    s:nop
      nop

      mov di,offset s
      mov si, offset s2
      mov ax, cs:[si]
      mov cs:[di],ax


    s0:jmp short s

    s1:mov ax,0
       int 21h
       mov ax,0

    s2: jmp short s1
        nop

codesg ends
end start

在这里就简单分析下,jmp指令的跳转情况

指令真正开始执行是在start处,然后mov di,offset s 代表的就是把标号s处的偏移地址给了di,然后mov si,offset s2 得到的就是标号s2处的偏移地址,对于mov ax,cs:[si]其实就是将s2的指令的jmp short s1给了ax,其实给的就是其对应的机器码,其实就是相当于给的是 向前 s1-s2这个指令,我们先看看s1-s2相差多少,这里其实就是相差8,这里再提一下nop指令的作用,这个指令其实就是什么都不做的指令,其实就是一个空指令,但是会占用一个指令的时间

分析8086汇编指令jmp的跳转程序_第1张图片

所以在执行到s0: jmp short s处的时候会跳到s处

分析8086汇编指令jmp的跳转程序_第2张图片

s处会执行的其实就是把ip寄存器的值移到mov ax 4c00h对应的起始地址,s处的地址和mov ax 4c00h之间相差了8

分析8086汇编指令jmp的跳转程序_第3张图片

你可能感兴趣的:(ios-逆向)