当前位置:文档之家› 第4章2_数据传输类指令

第4章2_数据传输类指令

LEA reg16, mem 此指令的功能:是将存放源操作数的16位偏移地址 (即有效地址EA)送到一个16位的通用寄存器中。 即源操作数必须是一个存储器操作数,目的操作 数必须是一个寄存器操作数。例如: LEA BX, buffer LEA AX, [BP][DI] LEA DX, bety[BX][SI] 注意LEA指令和MOV指令的异同。
32H
61002H
S C
S C

I Hex_tableI+A
41H
6100AH
I Hex_tableI+B


42H

6100BH
Hex_table+F
46H
6100FH
DS:60000H
BX: 1000H
+ AX: 000AH
EA
6100AH
AL 04A1HH
29
第4章 80x86指令系统
(三)地址传送指令 1. 取有效地址指令 指令格式:
• 寄存器与寄存器之间对换数据 • 寄存器与存储器之间对换数据 • 不能在存储器与存储器之间对换数据
21
第4章 80x86指令系统
XCHG指令举例:数据交换
mov ax,1199h
;ax=1199h
xchg ah,al
;ax=9911h
;等同于 xchg al,ah
mov wvar,5566h
;wvar是一个字变量
⑴进栈指令PUSH
• 进栈指令先使堆栈指针SP减2,然后把一个字操作 数存入堆栈顶部
• src源操作数可以是寄存器操作数和存储器操作数, 且必须是16位的操作数,但不能是立即数。
PUSH src ;(SP) ←(SP)-2, ((SP)+1:(SP)) ←(src) 演示
PUSH r16/m16/seg ;SP←SP-2 ;SS:[SP]←r16/m16/seg
第4章 80x86指令系统
4.1.3 8086/8088指令系统
8086/8088CPU指令系统包含有133条基 本指令。按其功能可以分为6类,它们是:
⑴ 数据传送类指令 ⑵ 算术运算类指令 ⑶ 逻辑运算与位移类指令 ⑷ 字符串指令 ⑸ 控制转移类指令 ⑹ 处理器控制类指令。
1
第4章 80x86指令系统
IN acc, port ;(acc) ←(port) ,acc 为AL或AX
26
第4章 80x86指令系统
②间接寻址的输入指令 指令格式及操作: IN acc, DX ;(acc) ←((DX)), acc 为AL或AX
⑵ 输出指令 ①直接寻址的输出指令 指令格式及操作: OUT port, acc ; (port) ← (acc), acc 为AL或AX ②间接寻址的输出指令 指令格式及操作: OUT DX, acc ; ((DX)) ← (acc) ,acc 为AL或AX
以字母开头的常数要有前导0
明确指令是字节操作还是字操作
5
第4章 80x86指令系统
MOV指令--寄存器传送
mov ah,al ;ah←al,字节传送 mov bvar,ch ;bvar←ch ,字节传送 mov ax,bx ;ax←bx,字传送 mov ds,ax ;ds←ax,字传送 mov [bx],al ;[bx]←al,字节传送
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可以作为源操作数,IP不可。
• 重点掌握
MOV XCHG XLAT PUSH POP LEA
2
第4章 80x86指令系统
一、 数据传送类指令
数据传送类指令时将数据、地址或立即数传送到寄存器 或存储器单元中。它又可分为:通用数据传送指令、累加器专 用传送指令、地址传送指令和标志传送指令等四组。
(一)通用数据传送指令 1. 最基本的传送指令 指令格式及操作:
27
第4章 80x86指令系统
2.字节转换指令 指令格式及操作:
XLAT src_table ;(AL) ←((BX)+(AL))
XLAT指令是用来将一种字节代码转换成另一种字 节代码。即将BX的内容(代码表格首址src_table)和 AL的内容(表格偏移量)相加作为有效地址。并从中 读出此内存表格地址单元的内容传送到AL累加器中。
MOV DS, ES
;非法指令,修正:
;mov ax,es
;mov ds,ax
MOV DS, 100H
;非法指令,修正:
;mov ax,100h
;mov ds,ax
MOV CS, [SI]
;非法指令
CS可以作为源操作数,CS、IP不可做目的操作数。
13
第4章 80x86指令系统
段寄存器
CS DS SS ES
MOV reg/mem,imm MOV reg/me;m立/s即eg数,r送eg寄存器或主存 MOV ;re寄g/存se器g送,m(em段)寄存器或主存 MOV reg/mem,;se主g;存段送寄(存段器)送寄寄存存器器或主存
4
第4章 80x86指令系统
MOV指令--立即数传送
mov cl,4 ;cl←4,字节传送 mov dx,0ffh;dx←00ffh,字传送 mov si,200h;si←0200h,字传送 mov bvar,0ah ;字节传送 ;假设bvar是一个字节变量,定义如下:bvar db 0 mov wvar,0bh ;字传送 ;假设wvar是一个字变量,定义如下:wvar dw 0
;mov byte ptr [bx+si],255
;byte ptr 说明是字节操作
;mov word ptr [bx+si],255
;word ptr 说明是字操作
11
第4章 80x86指令系统
非法指令--两个操作数都是存储器
➢ 8088指令系统除串操作指令外,不允许两个操作数都 是存储单元(存储器操作数)
30
第4章 80x86指令系统
不同:
LEA BX, buffer ;将存储器buffer的偏移地址送到BX MOV BX, buffer;将存储器buffer的内容传送到BX
MOV指令也并非任意传送! 非法指令的主要现象: • 两个操作数的类型不一致 • 无法确定是字节量还是字量操作 • 两个操作数都是存储器 • 对段寄存器的操作有一些限制
9
第4章 80x86指令系统
非法指令--两个操作数类型不一致
➢ 在绝大多数双操作数指令中,目的操作数和源 操作数必须具有一致的数据类型,或者同为字 量,或者同为字节量,否则为非法指令
xchg ax,wvar
;ax=5566h,wvx
xchg al,byte ptr wvar+1
;ax=5599h,wvar=6611h
;“byte ptr wvar+1”强制为字节量,只取高字 节与AL类型交换,否则数据类型不匹配
23
第4章 80x86指令系统
MOV dst,src ;(dst)←(src) dst 是目的操作数,它可以是存储器、寄存器(不能为 IP)和段寄存器(不能为CS)。为什么? Src 是源操作数,它可以是存储器、寄存器、段寄存器 和立即数。
3
第4章 80x86指令系统
传送指令MOV(move)
• 把一个字节或字的操作数从源地址传送至 目的地址
push ax
push [2000h]
push [si]
16
第4章 80x86指令系统
⑵出栈指令POP
• 出栈指令把栈顶的一个字传送至指定的目的操作数, 然后堆栈指针SP加2
• dst 目的操作数可以是寄存器操作数和存储器操作数, 且必须是16位的操作数,但不能是立即数。
POP dst ; (dst) ←((SP)+1:(SP)),
MOV BX, OFFSET Hex_tale
;(BX) ←表首址
MOV AL, 0AH
;(AL) ←十六进制数A
XLAT Hex_table
;查表转换
Hex_table=1000H

60000H
Hex_table
30H
61000H
Hex_table+1
31H
61001H
A Hex_tabAle+2
寄存器具有明确的字节和字类型
6
第4章 80x86指令系统
MOV指令--存储器传送
mov al,[bx]
;al←ds:[bx]
mov dx,[bp]
;dx←ss:[bp+0]
mov dx,[bp+4] ;dx←ss:[bp+4]
mov es,[si] ;es←ds:[si]
不存在存储器向存储器的传送指令
一、 数据传送类指令
• 包括:通用传送指令;累加器专用传送指令; 地址传送指令;标志传送指令;
• 数据传送是计算机中最基本、最重要的一种操作, 传送指令也是最常使用的一类指令
• 传送指令把数据从一个位置传送到另一个位置 • 除标志寄存器传送指令外,均不影响标志位
WORD PTR 字长度标记; BYTE PTR 字节长度标记 DWORD PTR 双字长度标记 (伪指令)
MOV AL, 050AH
;非法指令,修正:
;mov ax,050ah
MOV SI, DL
;非法指令,修正:
相关主题