【8086汇编语言】——转移指令原理

一、转移指令

        只修改IP 叫做段内转移

                短转移:ip修改氛围-128~127

                近转移:ip修改范围-32768~32767

        修改CS和IP叫做段间转移

转移指令氛围:

        无条件跳转   jmp;

        条件跳转       jcxz;

        循环指令        loop;

        过程;

        中断;

    操作符offset 标号     (取得标号出的偏移地址)

二、依据位移的jmp指令原理

jmp指令要给出两种信息;

        转移的目的地址和转移的距离;(转移距离就相当于指出段间转移、段内段转移还是段内近转移);

1、jmp short 标号;

        实现的是段内短转移;对ip的修改氛围是-128~127;比如说:

assume cs: code 

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


code ends

end start

jmp的指令和机器代码分析;

assume cs:code

code segment

start:
    mov ax,0
    mov bx,0
    jmp short s
    add bx ,1
s:
    inc ax;
code ends
end start

这个代码的机器码是:

可以看出来,jmp short s 转换为了jmp 000B ,也就是s编号的汇编地址;

而jmp指令的机器码是EB03

代码的执行过程:

  1. 首先代码是从0BBD:0000开始执行;
  2. 执行第一条指令是,首先取指 mov ax,0,然后IP加上指令的长度也就是+3
  3. 然后cpu就会在指令缓冲器中开始执行
  4. 依次到(cs)=0BBDH,(ip)=0006H,取得的指令是EB03;然后指令码进入指令缓冲器
  5. ip=ip+2,cs:ip指向吓一跳指令也就是 0BBDH:0008的位置;
  6. 然后CPU开始执行EB03;
  7. 执行完EB03后,ip由0008H变成了000BH;

实际上 jmp short 标号     的功能是:(IP) =(ip) +8位的位移;

八位的位移=标号出的地址-jmp指令后的第一个字节的地址;

比如说:上面jmp后一个字节的地址是:0BBD7,标号的地址是0BBBD;

这个03 也是是0B-08的结果,也就是S标号位置的地址-下一个字节的地址;

类似的:

2、jmp near ptr 标号

实现的是段内的近转移;

三、转移的目的地址在指令中的jmp指令原理

1、jmp far ptr 标号

start:mov ax,0
    mov bx,0
    jmp far ptr s
    db 256 dup (0)
s:  add ax ,1
    inc ax

jmp far ptr s 的机器码是EA0B01BD0B ,其中目的地址是0B 01 BD 0B;

                        高位BD 0B是段地址:0BBDH;

                        地位0B 01是偏移地址:010BH;

四、转移地址在内存单元中的jmp指令

一共有两种格式:

        1、jmp word ptr 内存单元地址;

        属于段内转移

        

        2、jmp dword ptr 内存单元地址;

        属于段间转移;

五、jcxz指令

有条件跳转指令:

jcxz       标号;(判断cx=0时,跳转到标号位置往下执行);

其实“jcxz  标号”相当于:

        if((cx)==0)        jmp short 标号;

所有的有条件跳转指令都是短转移,对于的机器码中包含转移的位移,而不是目的地址;对ip的修改范围是-128~127;

六、loop指令

所有的 循环指令都属于短转移;

“loop 标号”相当于:

    (cx)--;

     if((cx)!=0)  jmp short 标号;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值