微机原理与接口 第4章2数据传输类指令
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8/16位
8/16位
MOV指令数据传送方向
3
第4章 80x86指令系统
•
1. 2. 3. 4. 5. 6. 7.
mov 注意:
dst不能是立即数 dst不能是cs与ip src不能是ip 传送的两个数据,类型一定要一致 不能直接段Rimm 不能直接段R 段R 不能直接存储器存储器
mov操作不会影响标识 寄存器。
8
第4章 80x86指令系统
堆栈操作的特点
堆栈操作的单位对象是字,进栈和出栈只对字量 原则:字量数据从栈顶压入和弹出时,都是低地
址字节送低字节,高地址字节送高字节 顺序:堆栈操作遵循先进后出原则,但可用存储 器寻址方式随机存取堆栈中的数据 作用:堆栈段是程序中不可或缺的一个内存区, 常用来
24
第4章 80x86指令系统
通用R cpu MM
总线
• 将存放源操作数的16位偏移地址(即有效地址 EA)送到一个16位的通用寄存器中。 • 源操作数必须是一个存储器操作数,目的操作 数必须是一个寄存器操作数。
25
第4章 80x86指令系统
注意LEA指令和MOV指令的异同,比较下面两 组指令: 不同:LEA BX,buffer ;将存储器buffer的偏 移地址送到BX MOV BX,buffer ;将存储器buffer的内 容传送到BX 相同:LEA BX,buffer MOV BX,OFFSET buffer 以上两条指令都是将存储器buffer的偏移地 址送到BX。其中OFFSET buffer 表示存储器偏移 地址。
21
第4章 80x86指令系统
(2) 输入/输出指令
输入输出指令可以分为两大类:一类是直接端口地 址的输入/输出指令;一类是通过DX寄存器间接端口地 址的输入/输出指令。
R 总线
只能由AL或AX输入 输出到外设 如果是AL,则对应一 个端口 如果是AX,则对应两 个连续的端口
cpu I/O 接 口
4
第4章 80x86指令系统
•
1.
mov指令的正误判断
MOV AL, 050AH 错误。类型不匹配 mov ax,050ah mov dh,0 mov si,dx 错误。类型不明确 mov byte ptr [bx+si],01h byte ptr 说明是字节操作 mov word ptr [bx+si],01h word ptr 说明是字操作
临时存放数据 传递参数 保存和恢复寄存器
9
第4章 80x86指令系统
2) 堆栈操作指令
存储器操作数
src表示源操作数(字)
寄存器操作数(包括段寄存器)
① 压入堆栈指令
指令格式及操作:
PUSH src
;(SP)←(SP)-2,
;((SP)+1:(SP))←(src)
10
第4章 80x86指令系统
其中:acc为8位或16位累加器AL/AX。DX为16位 间接寻址的端口地址寄存器,故可寻址64K个端口。
23
第4章 80x86指令系统
2) 输出指令
① 直接寻址的输出指令 指令格式及操作: OUT port, acc ;(port)←(acc)
② 间接寻址的输出指令 指令格式及操作: OUT DX, acc ;(DX)←((acc))
6
第4章 80x86指令系统
•
5.
mov指令的正误判断
MOV DS, ES 错误。不能直接在段寄存器之间传送 mov ax,es mov ds,ax 错误。不能由立即数直接到段寄存器 mov ax,100h mov ds,ax 错误。cs不能被mov修改
6.
MOV DS, 100H
7.
Mov cs, 1234h
出栈操作( POP):先出后移
11
第4章 80x86指令系统
SS PUSH AX AX 12 34 BX 78 78 56 低地址
POP BX
PUSH CX CX 56
SP
高地址
12
第4章 80x86指令系统
•
1. 2. 3. 4.
push,pop 注意:
不能操作立即数 只能操作字 可以操作存储器操作数 cs可以被push,但不能被pop
第4章 80x86指令系统
3)标志压入堆栈指令 指令格式及操作: PUSHF ;(SP)←(SP)-2, ((SP)+1;(SP))←(FLAG) 4)标志弹出堆栈指令 指令格式及操作: POPF ;(FLAG)←((SP)+1;(SP)), (SP)←(SP)+2
在进行过程调用 (子程序调用) 的时候,可以用 来保护当前的 FLAGS
•
1.
xchg指令应用举例
mov ax,1199h xchg ah,al
ax 11
99
;ax=9911h
2.
mov wvar,5566h;wvar是一个字变量 xchg ax,wvar ;交换后ax=5566h,wvar=9911h
DS
… wvar … 66 55
3. xchg al,byte ptr wvar+1 ;ax=5599h,wvar=6611h ;“byte ptr wvar+1”强制为字节量 ;只取高字节与AL类型交换 ;否则数据类型不匹配
② 弹出堆栈指令 指令格式及操作:
POP dst
;(dst)←((SP)+1:(SP)),
;(SP)←(SP)+2
注意:堆栈指令的操作数只能是字操作数 dst表示目的操作数(字) (即16位操作数),且不能是立即数。 寄存器操作数(不包括IP,CS段寄存器)
存储器操作数 进栈操作( PUSH):先移后进
Hex_table=1000H
Hex_table Hex_table+1 A Hex_table+2 S C I Hex_table+A I Hex_table+B 表 Hex_table+F
…
30H 31H 32H
60000H 61000H 61001H 61002H 6100AH 6100BH
A S C I I 表
DI
1234H
ES
4000H
34H 12H 00H 40H
2130H 2132H
28
第4章 80x86指令系统
(4) 标志传送指令 1)取标志指令 指令格式: LAHF 2)置标志指令 指令格式: SAHF
AH
FLAG
OF DF IF TF SF ZF
AF
PF
CF
LAHF和SAHF指令操作示意图
29
2.
MOV SI, DL
3.
MOV [BX+SI], 01H
5
第4章 80x86指令系统
•
4.
mov指令的正误判断
MOV buf2, buf1 错误。不能直接在存储器之间传送 假设buf2和buf1是两个字变量 mov ax,buf1 mov buf2,ax 假设buf2和buf1是两个字节变量 mov al,buf1 mov buf2,al
7
第4章 80x86指令系统
2) 堆栈操作指令
• 堆栈是一个“后进先出FILO”(或说“先进后出FILO”)的 主存区域,位于堆栈段中;SS段寄存器记录其段地址。 • 堆栈只有一个出口,即当前栈顶;用堆栈指针寄存器SP指定。 堆栈段是程序中不可或缺的一个内存区,常用来 • 临时存放数据 • 传递参数 • 保存和恢复寄存器
DS
4000H
34H 12H 00H 40H
2130H 2132H
27
第4章 80x86指令系统
3)地址指针装入ES指令 指令格式: LES reg16,mem32 此指令的功能是将源操作数所对应的双字长 的内存单元中的高字内容(一般为16位段基址) 送入ES,低字内容(一般为偏移地址)送入指令 所指定的寄存器中。例如: DM LES DI,[2130H]
1
第4章 80x86指令系统
通用R cpu
段R
总线
MM
imm
• mov指令可以传送的数据是立即数,通用R,段R, MM。
2
第4章 80x86指令系统
指令功能:将源操作数传送(复制)到目 的操作数。 传送方向:如下图所示。
段寄存器 CS DS SS ES
16位
16位
8/16位
立即数
存储器
通用寄存器 AX BX CX DX BP SP SI DI AL BL CL DL AH BH CH DH
30
第4章 80x86指令系统
在使用这些传送类指令时应注意以下几点:
① 目的操作数不能为立即数。 ② 目的操作数为段寄存器 (CS 不能作为目 的操作数),源操作数不能为立即数。 ③ 两操作数不能同时为存储器操作数。
19
第ຫໍສະໝຸດ Baidu章 80x86指令系统 [例]在内存的数据段有一张16进制数的ASCII码表,其首 地址为Hex_table,如下图所示,为欲将十六进制数0AH转换成 ASCII码,则可用以下几条指令实现: MOV BX, OFFSET Hex_tale ;(BX) ←表首址 MOV AL, 0AH ;(AL) ←十六进制数A XLAT Hex_table ;查表转换
第4章 80x86指令系统
1. 数据传送类指令
数据传送指令的主要功能是传送数据、地 址和标志。可分为通用数据传送指令、输入输 出指令、地址传送指令和标志传送指令。 src表示源操作数 (字 字节 ) ) dst 表示目的操作数 (/ 字 /字节 (1 )通用数据传送指令 立即数操作数 寄存器操作数 (不包括IP,CS段寄存器) 通用数据传送指令可完成字节或字数据的 寄存器操作数(包括段寄存器) 存储器操作数 传送。它可分为数据传送指令、堆栈操作指令 存储器操作数 、数据交换指令和字节转换指令。 1) 数据传送指令 指令格式:MOV dst,src ;(dst)←(src)
26
第4章 80x86指令系统
2)地址指针装入DS指令 指令格式: LDS reg16,mem32 此指令的功能是将源操作数所对应的双字长 的内存单元中的高字内容(一般为16位段基址) 送入DS,低字内容(一般为偏移地址)送入指令 所指定的寄存器中。例如: DM LDS DI,[2130H]
DI
1234H
18
第4章 80x86指令系统
4)字节转换指令(又称:查表指令) 指令格式及操作: XLAT src_table ;(AL) ←((BX)+(AL)) XLAT指令是用来将一种字节代码转换成另一 种字节代码。即将BX的内容(代码表格首址 src_table)和AL的内容(表格偏移量)相加作 为有效地址。并从中读出此内存表格地址单元 的内容传送到AL累加器中。 XLAT指令还可以有以下几种表示形式: XLAT ;不写操作数 XLATB ;有B就不允许再写操作数。 XLAT ES:src_table ;重设段寄存器为ES
DS:60000H BX: 1000H + AX: 000AH
6100AH
EA
… …
41H 42H 46H
AL 6100FH
41H 0AH
20
第4章 80x86指令系统
•
xlat 注意:
1. mov bx, offset table ;不写offset错误 上句等价于:lea bx, table 2. xlatb不允许再写操作数 3. 允许段超越,xlat es:table
段R
总线
MM
imm
• R与R之间交换(非段R) • R与MM之间交换 • 不能在MM与MM之间交换
16
第4章 80x86指令系统
•
1. 2. 3. 4.
xchg 注意:
两个操作数为R或者是MM 不能都是存储器 不能是段寄存器 源、目的操作数类型一致,可以同是字 或字节
17
第4章 80x86指令系统
14
第4章 80x86指令系统
3. 交换指令XCHG(exchange)
XCHG reg,reg/mem ;reg reg/mem
• 把两个地方的数据进行互换
• 寄存器与寄存器之间对换数据
• 寄存器与存储器之间对换数据
• 不能在存储器与存储器之间对换数据
15
第4章 80x86指令系统
通用R cpu
打印机 键盘 … … … 硬盘
22
第4章 80x86指令系统
1) 输入指令 ① 直接寻址的输入指令 指令格式及操作: IN acc, port ;(acc)←(port) 其中:acc为8位或16位累加器AL/AX。port为8位 端口地址,故可寻址256个端口。 ② 间接寻址的输入指令 指令格式及操作: IN acc, DX ;(acc)←((DX))
13
第4章 80x86指令系统
•
1. 2. 3. 4. 5. 6. 7. 8.
Push,pop指令的正误判断
push ax push [2000h] pop [si] pop word ptr wvar push 1234h pop 1234h push ah pop cs 正确 正确 正确 正确 错误。不能操作立即数 错误。不能操作立即数 错误。不能操作字节操作数 错误。不能由pop改变cs