6 转移指令

转移指令

1 数据存储位置的表示

我们定义的描述性符号: reg 和sreg 。使用描述性的符号reg 来表示一个寄存器,用sreg 表示一个段寄存器。

reg 的集合包括: ax 、bx 、ex 、dx 、ah 、al 、bh 、bl 、ch 、cl 、dh 、di 、sp 、bp 、si 、di;
sreg 的集合包括: ds 、SS 、cs 、es 。

  • 在8086CPU 中,只有这4 个寄存器可以用在“[...]”中来进行内存单元的寻址。

  • 在[...]中,这4 个寄存器可以单个出现,或只能以4 种组合出现: bx 和si、bx 和di 、bp 和si 、bp 和di

  • 要在[...]中使用寄存器bp ,而指令中没有显性地给出段地址,段地址就默认在SS 中

2 数据处理的长度表示

8086CPU 的指令, 可以处理两种尺寸的数据, byte 和word所以在机器指令中要指明,指令进行的是宇操作还是字节操作。

  • 通过寄存器名指明要处理的数据的尺寸。

  • 在没有寄存器名存在的情况下,用操作符X p位指明内存单元的长度, X 在汇编指令中可以为word 或byte

3 转移指令简述

可以修改IP,或同时修改cs 和IP 的指令统称为转移指令

8086CPU 的转移行为有以下几类。

  • 只修改IP 时,称为段内转移,比如: jmp ax 。
  • 同时修改cs 和IP 时,称为段间转移,比如: jmp 1000:0 。

由于转移指令对IP 的修改范围不同,段内转移又分为: 短转移和近转移

  • 短转移IP 的修改范围为一128~127
  • 近转移IP 的修改范围为-32768~32767

8086CPU 的转移指令分为以下几类:

  • 无条件转移指令(如: jmp) .
  • 条件转移指令 .
  • 循环指令(如: loop) .
  • 过程
  • 中断

4 offset

操作符offset 在汇编语言中是由编译器处理的符号,它的功能是取得标号的偏移地址

在上面的程序中, offset 操作符取得了标号start 和s 的偏移地址0和3 ,所以指令:mov ax,offset start 相当于指令mov ax,O ,因为start 是代码段中的标号,它所标记的指令是代码段中的第一条指令,偏移地址为0

5 jmp指令

jmp 为无条件转移指令,可以只修改IP ,也可以同时修改CS和IP

jmp 指令要给出两种信息:

  • 转移的目的地址
  • 转移的距离(段间转移、段内短转移、段内近转移)

5.1 jmp short 标号

转到标号处执行指令,是短转移

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mdXHfzKM-1670664612422)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221207181651493.png)]

5.2 jmp near ptr 标号

它实现的是段内近转移

“ jmp near ptr 标号”的功能为:(IP)=(IP)+ 16 位位移。

  1. 16 位位移=标号处的地址-jmp 指令后的第一个字节的地址;
  2. near p位指明此处的位移为16 位位移,进行的是段内近转移:
  3. 16 位位移的范围为-32768~32767 ,用补码表示:
  4. 16 位位移由编译程序在编译时算出。

5.3 jmp far ptr 标号

实现的是段间转移,又称为远转移

5.4 jmp 16 位reg

转移地址在寄存器中的jmp 指令

5.5 转移地址在内存中的jmp 指令

  1. jmp word ptr 内存单元地址(段内转移)

从内存单元地址处开始存放着一个字,是转移的目的偏移地址。

  1. jmp dword ptr 内存单元地址(段间转移)

功能: 从内存单元地址处开始存放着两个字,高地址处的字是转移的目的段地址,低地址处是转移的目的偏移地址。

6 jcxz 指令

jcxz 指令为有条件转移指令,所有的有条件转移指令都是短转移,在对应的机器码中包含转移的位移,而不是目的地址。对IP 的修改范围都为:-128~ 127 。

指令格式: jcxz 标号(如果(cx)=O,转移到标号处执行。

操作:当(cx)=0 时,(IP)=(IP)+8 位位移:
我们从jcxz 的功能中可以看出, “ jcxz 标号”的功能相当于:
:-128~ 127 。

指令格式: jcxz 标号(如果(cx)=O,转移到标号处执行。

操作:当(cx)=0 时,(IP)=(IP)+8 位位移:
我们从jcxz 的功能中可以看出, “ jcxz 标号”的功能相当于:
if ((ex) ==0) jmp short 标号;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值