DJ12-1 8086系列指令系统-2 数据传送指令
创始人
2024-02-07 07:31:24
0

目录

1. 通用数据传送指令

(1)MOV 一般数据传送指令

(2)堆栈操作指令

(3)XCHG 交换指令

(4)XLAT 查表指令

(5)CBW 和 CWD 字位扩展指令

2. 输入输出指令

3. LEA 取偏移地址指令

4. 其它传送类指令

(1)LDS 和 LES 装入地址指针指令

(2)标志传送指令


 

符号说明:

Acc 隐含规定使用 AL、AX(一般不用 AH)。

 

数据传送指令按功能可以分为:通用数据传送指令、输入输出指令、目的地址传送指令、标志传送指令。

FLAGS 不能作操作数。

虽然不能直接对其进行操作,但是可以间接对其进行操作。

SAHF 把 AH 写入 FLAGS,CAHF 把 FLAGS 写入 AH 。

1. 通用数据传送指令

(1)MOV 一般数据传送指令

格式:MOV  Dest,Src

执行:Src → Dest

举例:MOV  AL,BL

 


对操作数的要求:

① 两操作数长度必须相同;

MOV AX,BL(×)

MOV AX,09H(√)

在可识别的情况下,编译器会自动把 09H 转换为 0009H。实际上还是满足要求的。

MOV AX,[SI]

根据 AX 是 16 位,会从 M 取出 16 位。

② 存储单元之间不能直接传送;

③ 段寄存器 CS 只能作源操作数,段寄存器之间不能直接传送;

④ 当源操作数是立即数时,目的操作数不能是段寄存器;

MOV  DS,1000H(×)应该修正为:

MOV  DX,1000H

MOV  DS,DX

⑤ FLAGS 一般不作为操作数在指令中出现。

 (重点背记)MOV 传送指令的操作数:


 


例、将 * 的 ASCII 码 2AH 送入内存数据段 1010H 开始的 100 个单元中。

CX 作计数器。


 

(2)堆栈操作指令

压栈指令格式:PUSH OPRD

出栈指令格式:POP OPRD

要求:

① 指令的操作数必须是 16 位。

② 操作数可以是寄存器或存储器字单元,但不能是立即数。

这里的寄存器包括段寄存器和通用寄存器。

因为立即数无法作目的操作数,所以不适用于单操作数指令。

③ 不能从栈顶弹出一个字给 CS。

原则上只有 MOV 中可以使用 CS,其它的都不让用。

④ PUSH 和 POP 指令在程序中一般成对出现。

⑤ PUSH 指令的操作方向是从高地址向低地址,而 POP 指令的操作正好相反。


PUSH 指令执行过程:


POP 指令执行过程: 


PUSH 和 POP 指令在程序中一般成对出现,但有时候我们故意不按顺序,以实现交换的效果。


(3)XCHG 交换指令

格式:XCHG OPRD1,OPRD2

执行:OPRD1 ←→ OPRD2

效果:交换源地址中的内容和目的地址中的内容。

要求:

  • 操作数中至少有一个是通用寄存器,即不能同时为存储器。
  • 段寄存器不能作操作数。(段寄存器主要适用于一般传送和堆栈操作)
  • 两个操作数的字长必须相同。

举例:

        XCHG AX,BX

        XCHG [2000],CL

(4)XLAT 查表指令

格式:XLAT

执行:[ BX + AL ] → AL

特点:

  • 指令为零操作数指令,采用隐含寻址。
  • BX 的内容为表格首地址,AL 的内容为表内位移量,  BX + AL 得到要查找元素的偏移地址。
  • 表格的最大长度不超过 256 字节

例题、假设数据段中存放有一张 ASCII 码转换表,若首地址为 2000H,现欲查出表中第 11 个代码的 ASCII 码。

 

(5)CBW 和 CWD 字位扩展指令

将带符号数的符号位扩展到高位。

注:默认将无符号数和带符号数一概视为带符号数。

指令为零操作数指令,采用隐含寻址,隐含的操作数为 AX 或 AX+DX。

① CBW

将 AL 的符号位扩展到 AH。

若 AL 的最高位 = 1,则执行后 AH = 0FFH;

若 AL 的最高位 = 0,则执行后 AH = 00H。

② CWD

将 AX 的符号位扩展到 DX。

若 AX 的最高位 = 1,则执行后 DX = 0FFFFH;

若 AX 的最高位 = 0,则执行后 DX = 0000H。

例题、判断下列指令的执行结果。

2. 输入输出指令

专门面向 I/O 端口操作的指令。

格式:

  • 输入指令:IN  Acc,Port
  • 输出指令:OUT  Port,Acc

Port 为端口地址,Acc 为累加器 AL 或 AX。

若端口号为 0 ~ 0FFH,那么我们可以直接使用端口号;否则,需要把端口号送入 DX,以 DX 内容去访问端口。

根据端口地址码的长度,指令具有两种不同的寻址方式。

① 直接寻址

端口地址为 8 位时,指令中直接给出 8 位端口地址;可寻址256个端口。

② 间接寻址

端口地址为 16 位时,指令中的端口地址必须由 DX 指定;可寻址 64K 个端口。

举例:

IN  AX,80H

MOV DX,2400H

IN  AL,DX

OUT  35H,AX

OUT  DX,AX

 

3. LEA 取偏移地址指令

格式:LEA  Reg16,Mem

LOAD EA,这里的 EA 指偏移地址。

效果:LEA 指令将存储器操作数的 16 位偏移地址送到指定的通用寄存器。

要求:

  • 源操作数必须是存储器操作数;
  • 目标操作数必须是 16 位通用寄存器,而且最好是间址寄存器。

例题、

 

4. 其它传送类指令

(1)LDS 和 LES 装入地址指针指令

格式:

  • LDS  Reg16,Mem32
  • LES  Reg16,Mem32

要求:REG16 任意一个 16 位通用寄存器,Mem32 必须是一个存储器操作数。

作用:

  • 把 Mem32 存储单元开始的 4 个字节单元的内容送入通用寄存器和段寄存器 DS(LDS指令)或ES(LES指令)。
  • 低字单元内容为偏移量送通用寄存器,高字单元内容为段基值送 DS 或 ES。

 

(2)标志传送指令

(1)LAHF:将 FLAGS 低 8 位的内容装入 AH。

(2)SAHF:将 AH 的内容送给 FLAGS 的低 8 位。

(3)PUSHF:将 FLAGS 的内容压栈保存。

(4)POPF:将当前的栈顶内容送给 FLAGS。

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...