指令系统(学习资料)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(一)通用数据传送指令 1. 最基本的传送指令 指令格式及操作:
MOV dst,src ;(dst)←(src) 将源操作数s指定的内容送到d目的操作数 dst 是目的操作数,它可以是存储器、通用寄存器(不能为 IP)和段寄存器(不能为CS),不能为立即数。 Src 是源操作数,它可以是存储器、通用寄存器、段寄存器 和立即数。
IN acc, port ;(acc) ←(port)
第4章 80x86指令系统
②间接寻址的输入指令 寻址范围0-65535(少于或超过8位地址) 指令格式及操作:
IN acc, DX ;(acc) ←((DX))
⑵ 输出指令 ①直接寻址的输出指令 指令格式及操作:
OUT port, acc ; (port) ← (acc) ②间接寻址的输出指令 指令格式及操作:
第4章 80x86指令系统
[例]在内存的数据段有一张16进制数的ASCII码表,其首地址为
Hex_table,如下图所示,为了查出第10个元素, 即十六进制数A的ASCII码, 则可用以下几条指令实现:
MOV BX, OFFSET Hex_tale
;(BX) ←表首址
MOV AL, 0AH
;(AL) ←序号
一、 数据传送类指令
数据传送类指令时将数据、地址或立即数传送到寄存器或存 储器单元中。可完成寄存器与寄存器之间、寄存器与存储器之间、 寄存器与I/O端口之间的字节或字传送。它又可分为通用数据传送 指令、输入/输出指令、目标地址传送指令和标志传送指令四组。 特点:除SAHF和POPF不影响标志寄存器内容。
②堆栈按字操作;
③每执行一条入栈指令,堆栈地址指针SP减2,入栈 的数据位于栈顶;
④高位字节先入栈,放在高位地址单元,低位字节 后入栈,放在较低地址单元;先进先出原则;
⑤执行弹出指令时,过程相反,栈顶指针的值加2;
⑥CS段寄存器的值可以入栈,但不能反过来弹出一 个字到CS
第4章 80x86指令系统
XLAT指令是用来将一种字节代码转换成另一种 字节代码。执行的结果放在AL中。
使用指令前: BX寄存器的内容指向表格首址; AL中存放待查的码,即某一项与表首地址的距离。
XLAT指令还可以有以下几种表示形式:
XLAT
;不写操作数
XLATB
;有B就不允许再写操作数。
XLAT ES:src_table ;重设段寄存器为ES
XLAT Hex_table
;查表转换
Hex_table=1000H
…
60000H
Hex_table
30H
61000H
Hex_table+1
31H
61001H
A Hex_tabAle+2
32H
61002H
S C
S C
…
I Hex_tableI+A
41H
6100AH
I Hex_tableI+B
表
表
42H
第4章 80x86指令系统
⑵ 弹出堆栈指令 指令格式及操作:
POP dst ; (dst) ←((SP)+1:(SP)), (SP) ←(SP)+2
dst 目的操作数可以是寄存器操作数和存储 器操作数,且必须是16位的操作数,但不能是立 即数。
第4章 80x86指令系统
特点:
①s和d可以是16位寄存器或存储器两相邻单元;
第4章 80x86指令系统
4.1.3 8086/8088指令系统
8086/8088CPU指令系统包含有133条基本指 令。按其功能可以分为6类,它们是:
⑴ 数据传送类指令 ⑵ 算术运算类指令 ⑶ 逻辑运算与位移类指令 ⑷ 字符串指令 ⑸ 控制转移类指令 ⑹ 处理器控制类指令。
第4章 80x86指令系统
3.交换指令 将源操作数和目的操作数(字或字节)相互对 应交换位置。 指令格式及操作: XCHG opr1, opr2 ;(opr1) ←→ (opr2)
第4章 80x86指令系统
4.字节转换指令 通过查表来完成代码转换,用于实现字节翻译的 功能。
指令格式及操作:
XLAT src_table ;(AL) ←((BX)+(AL))
OUT DX, acc ; ((DX)) ← (acc)
第4章 80x86指令系统
(三)目标地址传送指令 1. 取有效地址指令 指令格式:
LEA reg16, mem 此指令的功能是将存放源操作数的16位偏移地址 (即有效地址EA)送到一个16位的通用寄存器中。即源 操作数必须是一个存储器操作数,目的操作数必须是一 个通用寄存器操作数。例如: LEA BX, buffer LEA AX, [BP][DI] LEA DX, beta[BX][SI] 注意LEA指令和MOV指令的异同。
…
6100BH
Hex_table+F
Baidu Nhomakorabea
46H
6100FH
DS:60000H
BX: 1000H
+ AX: 000AH
EA
6100AH
AL 04A1HH
第4章 80x86指令系统
(二) 输入/输出指令 只能用累加器作为执行I/0数据传送的机构。 输入输出指令可以分为两大类:一类是直接端口 地址的输入/输出指令:一类是通过DX寄存器 间接端口地址的输入/输出指令。 ⑴ 输入指令 ①直接寻址的输入指令 寻址范围0-255(少于8位地址) 指令格式及操作:
第4章 80x86指令系统
MOVE指令需要注意的问题: ①MOVE指令可传送8位数据,也可传送16位数据。 ②MOVE指令中的两操作数s和d,必用1个寄存器, 不允许同时为存储单元。 ③不能用CS和IP做目的操作数。 ④不允许段寄存器之间直接数据传送。 ⑤不允许立即数做目的操作数。 ⑥不能向段寄存器送立即数。
第4章 80x86指令系统
2.堆栈操作指令 堆栈操作指令是用来完成压入和弹出堆栈操作的。 8086/8088指令系统中提供了完成这两种操作的相应 指令。 ⑴ 压入堆栈指令 指令格式及操作:
PUSH src ;(SP) ←(SP)-2, ((SP)+1:(SP)) ←(src)
src 源操作数可以是寄存器操作数和存储器操作 数,且必须是16位的操作数,但不能是立即数。
第4章 80x86指令系统
段寄存器
CS DS SS ES
16 位
存储器
16位 8\16位 立即数
8\16位
通用寄存器
AX BX CX DX 8\ BP SP SI DI 16 AL BL CL DL 位
AH BH CH DH
MOV 指令数据传送方向
需说明一点,对于代码段寄存器CS和指令 指针寄存器IP,通常无需用户利用传送指令改 变其中的内容。但是CS可以作为源操作数。
MOV dst,src ;(dst)←(src) 将源操作数s指定的内容送到d目的操作数 dst 是目的操作数,它可以是存储器、通用寄存器(不能为 IP)和段寄存器(不能为CS),不能为立即数。 Src 是源操作数,它可以是存储器、通用寄存器、段寄存器 和立即数。
IN acc, port ;(acc) ←(port)
第4章 80x86指令系统
②间接寻址的输入指令 寻址范围0-65535(少于或超过8位地址) 指令格式及操作:
IN acc, DX ;(acc) ←((DX))
⑵ 输出指令 ①直接寻址的输出指令 指令格式及操作:
OUT port, acc ; (port) ← (acc) ②间接寻址的输出指令 指令格式及操作:
第4章 80x86指令系统
[例]在内存的数据段有一张16进制数的ASCII码表,其首地址为
Hex_table,如下图所示,为了查出第10个元素, 即十六进制数A的ASCII码, 则可用以下几条指令实现:
MOV BX, OFFSET Hex_tale
;(BX) ←表首址
MOV AL, 0AH
;(AL) ←序号
一、 数据传送类指令
数据传送类指令时将数据、地址或立即数传送到寄存器或存 储器单元中。可完成寄存器与寄存器之间、寄存器与存储器之间、 寄存器与I/O端口之间的字节或字传送。它又可分为通用数据传送 指令、输入/输出指令、目标地址传送指令和标志传送指令四组。 特点:除SAHF和POPF不影响标志寄存器内容。
②堆栈按字操作;
③每执行一条入栈指令,堆栈地址指针SP减2,入栈 的数据位于栈顶;
④高位字节先入栈,放在高位地址单元,低位字节 后入栈,放在较低地址单元;先进先出原则;
⑤执行弹出指令时,过程相反,栈顶指针的值加2;
⑥CS段寄存器的值可以入栈,但不能反过来弹出一 个字到CS
第4章 80x86指令系统
XLAT指令是用来将一种字节代码转换成另一种 字节代码。执行的结果放在AL中。
使用指令前: BX寄存器的内容指向表格首址; AL中存放待查的码,即某一项与表首地址的距离。
XLAT指令还可以有以下几种表示形式:
XLAT
;不写操作数
XLATB
;有B就不允许再写操作数。
XLAT ES:src_table ;重设段寄存器为ES
XLAT Hex_table
;查表转换
Hex_table=1000H
…
60000H
Hex_table
30H
61000H
Hex_table+1
31H
61001H
A Hex_tabAle+2
32H
61002H
S C
S C
…
I Hex_tableI+A
41H
6100AH
I Hex_tableI+B
表
表
42H
第4章 80x86指令系统
⑵ 弹出堆栈指令 指令格式及操作:
POP dst ; (dst) ←((SP)+1:(SP)), (SP) ←(SP)+2
dst 目的操作数可以是寄存器操作数和存储 器操作数,且必须是16位的操作数,但不能是立 即数。
第4章 80x86指令系统
特点:
①s和d可以是16位寄存器或存储器两相邻单元;
第4章 80x86指令系统
4.1.3 8086/8088指令系统
8086/8088CPU指令系统包含有133条基本指 令。按其功能可以分为6类,它们是:
⑴ 数据传送类指令 ⑵ 算术运算类指令 ⑶ 逻辑运算与位移类指令 ⑷ 字符串指令 ⑸ 控制转移类指令 ⑹ 处理器控制类指令。
第4章 80x86指令系统
3.交换指令 将源操作数和目的操作数(字或字节)相互对 应交换位置。 指令格式及操作: XCHG opr1, opr2 ;(opr1) ←→ (opr2)
第4章 80x86指令系统
4.字节转换指令 通过查表来完成代码转换,用于实现字节翻译的 功能。
指令格式及操作:
XLAT src_table ;(AL) ←((BX)+(AL))
OUT DX, acc ; ((DX)) ← (acc)
第4章 80x86指令系统
(三)目标地址传送指令 1. 取有效地址指令 指令格式:
LEA reg16, mem 此指令的功能是将存放源操作数的16位偏移地址 (即有效地址EA)送到一个16位的通用寄存器中。即源 操作数必须是一个存储器操作数,目的操作数必须是一 个通用寄存器操作数。例如: LEA BX, buffer LEA AX, [BP][DI] LEA DX, beta[BX][SI] 注意LEA指令和MOV指令的异同。
…
6100BH
Hex_table+F
Baidu Nhomakorabea
46H
6100FH
DS:60000H
BX: 1000H
+ AX: 000AH
EA
6100AH
AL 04A1HH
第4章 80x86指令系统
(二) 输入/输出指令 只能用累加器作为执行I/0数据传送的机构。 输入输出指令可以分为两大类:一类是直接端口 地址的输入/输出指令:一类是通过DX寄存器 间接端口地址的输入/输出指令。 ⑴ 输入指令 ①直接寻址的输入指令 寻址范围0-255(少于8位地址) 指令格式及操作:
第4章 80x86指令系统
MOVE指令需要注意的问题: ①MOVE指令可传送8位数据,也可传送16位数据。 ②MOVE指令中的两操作数s和d,必用1个寄存器, 不允许同时为存储单元。 ③不能用CS和IP做目的操作数。 ④不允许段寄存器之间直接数据传送。 ⑤不允许立即数做目的操作数。 ⑥不能向段寄存器送立即数。
第4章 80x86指令系统
2.堆栈操作指令 堆栈操作指令是用来完成压入和弹出堆栈操作的。 8086/8088指令系统中提供了完成这两种操作的相应 指令。 ⑴ 压入堆栈指令 指令格式及操作:
PUSH src ;(SP) ←(SP)-2, ((SP)+1:(SP)) ←(src)
src 源操作数可以是寄存器操作数和存储器操作 数,且必须是16位的操作数,但不能是立即数。
第4章 80x86指令系统
段寄存器
CS DS SS ES
16 位
存储器
16位 8\16位 立即数
8\16位
通用寄存器
AX BX CX DX 8\ BP SP SI DI 16 AL BL CL DL 位
AH BH CH DH
MOV 指令数据传送方向
需说明一点,对于代码段寄存器CS和指令 指针寄存器IP,通常无需用户利用传送指令改 变其中的内容。但是CS可以作为源操作数。