8086汇编转移指令

转移指令

我们把可以修改IP,或者同时修改CS和IP的指令统称为转移指令

  • 如果只修改IP的称为段内转移,比如说jmp ax
  • 同时修改CS和IP的称为段间指令,比如说jmp 1000:0

由于转移指令对IP的修改范围的不同,软内转移又可以分为短转移和近转移
短指令IP的修改范围为-128~127
近转移IP的修改范围为-32768~32767

jmp为无条件转移指令,可以只修改IP,也可以同时的去修改CS和IP,jmp指令的用法如下所示

  • jmp short 标号 这种格式的jmp指令实现的是段内短转移,它对IP的修改范围为-128~127,也就是说,它向前转移的时候可以最多为128个字节,向后转移可以最多是越过127个字节,这里的short指的是短转移的意思,对于这种格式的指令,CPU在执行jmp指令的时候不需要转移的目的地址

我们先看看CPU执行指令的过程再看后面的实例

  • 1、从CS:IP指向内存单元读取指令,读取的指令进入指令缓冲器
  • 2、(IP)=(IP)+ 所读取的指令的长度,这样可以指向下一条指令
  • 3、执行指令,然后再接着执行1

汇编指令如下所示

assume cs:codesg

codesg segment

    start:mov ax,0
          mov bx,0
          jmp short s
          add ax,1
        s:inc ax

        mov ax,4c00h
        int 21h

codesg ends
end start

这里写图片描述

执行结果,AX为1
这里写图片描述

jmp short 标号 的功能就是(IP)= (IP)+ 8位位移
- 8位位移=标号处的地址-jmp指令后的第一个字节的地址
- short指明此处的位移为8位位移
- 8位位移的范围为-128~127
- 8位位移由编译程序在编译的时候算出

对于jmp far ptr 标号 这种形式实现的是段间转移,又称为远转移
还可以有jmp 16位的寄存器,这个改变的就是(IP)=(16位的寄存器)

转移地址在内存当中的jmp指令,有两种格式

  • 1、jmp word ptr 内存单元地址(段内转移)
  • 2、jmp dword ptr 内存单元地址(段间转移)

jcxz指令为有条件转移指令,所有的有条件转移指令都是短转移,在对应机器码中包含转移的位置,而不是目的地址,对IP的修改范围都为-128~127,jcxz指令其实就是如果cx=0就转移到标号处执行

对于loop指令,它为循环指令,所有的循环指令都为短转移,在对应的机器码当中包含的是转移的位移,而不是目的地址,对IP的修改范围都为-128~127,loop指令其实就是如果cx!=0,就转移到标号处去执行,执行步骤如下所示


  • (cx)=(cx)-1
  • 如果(cx)!=0,(IP)=(IP)+8位位移

8位位移= 标号处的地址-loop指令后的第一个字节的地址 8位位移的范围为-128~127,用补码来表示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值