微机原理与接口 第4章2数据传输类指令

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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
相关文档
最新文档