分析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指令的作用,这个指令其实就是什么都不做的指令,其实就是一个空指令,但是会占用一个指令的时间

这里写图片描述

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

这里写图片描述

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

这里写图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值