汇编语言程序设计基本方法
3.2.1 数据传送类指令
5. 堆栈操作指令 堆栈
PUSH 源操作数 进栈指令:先调整堆栈指针,再把源操作数压 栈。
PUSH AX PUSH [SI+5]
3.2.1 数据传送类指令
– POP 目标操作数
– 出栈指令:先将栈顶2字节送目标操作数,再
调整
堆栈指针。
–
POP AX
–
POP [SI+5]
• 指令类型: • (1) 数据传送指令 • (2) 算术运算指令 • (3) 逻辑运算指令 • (4) 移位指令 • (5) 标志处理指令和CPU控制指令 • (6) 转移和循环控制指令 • (7) 调用和返回指令 • (8) 字符串操作指令 • ( 9 ) 输入、输出指令
缩写与符号
• OPR :操作数 • SRC:源操作数 • DST:目的操作数 • REG:寄存器 • CNT:计数 • DISP:位移量 • ADDR:地址 • EA :有效地址
05H
• DATA2 DB 0FH,10H,0AH
• DATA3 DB 5 DUP(?)
• MOV
AX, BL
• MOV
AL, DATA1
• MOV
BX, DATA3[SI]
• 可以采用如下方式纠正:
• MOV
AL, BYTE PTR DATA1
内容归纳
• (1)两操作数进行数据传送的正常通路
• 寄存器间接寻址、寄存器相对寻址、基
4.2.1 数据传送类指令
• 通用传送指令包括: • 传送指令 • 进栈指令 • 出栈指令 • 交换指令
1. 传送指令(MOV)
• 功能:将源操作数SRC的一个字节或一个字 传送到目的操作数DST所指单元。
• 格式:MOV DST,SRC ; (DST)(SRC) • 其中SRC表示源操作数,DST表示目的操作
入寄存器REG中
比较: MOV AX,10H[DI] LEA AX,10H[DI] (DI)=0500H,(DS)=0200H
3.2.1 数据传送类指令
3. 取地址指针指令 LDS/LES目标寄存器, 源操作数 指针传送指令 ADDR DD 1A2B3C4DH LDS SI, ADDR 4. 数据交换指令 XCHG 操作数1, 操作数2 交换指令,操作数1、2不能同为内存操作数 XCHG AX, [SI+0400H]
• DATA3 DW 10H DUP(?)
• 相应传送指令:
• MOV AX,DATA1
• MOV DATA3,BX
• MOV AL,DATA2[DI] • MOV DATA3[SI],DX • MOV CX,LENGTH DATA3 • MOV BX,SIZE DATA3 • MOV SI,OFFSET DATA2 • 指令中传送的是一个字还是一个字节,
AX,[BX]+DISP
• (4) 段寄存器不是DS,而是ES时,用如下 方式表示:
• MOV AX, ES:[SI]
•
对BP寄存器
• MOV AL, DATA2[BP];对应DS段
• MOV AL, 10[BP]; 对应SS段
3.2.1 数据传送类指令
2、取有效地址指令(LEA) 将源操作数SRC的有效地址(偏移地址)送
• 例如: • MOV • MOV • MOV • MOV • MOV • MOV • MOV
AX,BX AL,DL AX,02 SI,[BX] AL,4[DI] AX,[BX+2] [BX][DI],DX
• 变量的定义:
• DATA1
DW
20H,30H
• DATA2
DB 50H,60H,70H
通常由操作数的类型确定。
• 下列指令中,没有确定的类型,是错误 的。
• MOV DATA3[SI],02H • MOV 2[SI],AL • MOV 4[DI],02
• 可以采用如下方式纠正: • MOV BYTE PTR 4[DI],02
• 如果两个操作数的类型不一致,也是错 误的:
• DATA1 DW
– PUSHF
– POPF – 16位标志寄存器进栈/出栈指令
数。
• 源操作数:通用寄存器、段寄存器、立即数 和内存单元。
• 目的操作数:通用寄存器、段寄存器和内存 单元。
• 常用的六种格式 • (1)通用寄存器之间 • (2)通用寄存器和存储单元之间 • (3)通用寄存器和段寄存器之间 • (4)段寄存器和存储单元之间 • (5)立即数传送到通用寄存器 • (6)立即数传送到存储单元
址变址寻址和基址变址相对寻址方式只 能使用变址寄存器DI,SI和基址寄存器 BX,BP。
• (3)寄存器相对寻址和寄存器基址变址 MOV
AX,DISP[BX]
• MOV
AX,[BX+DISP]
• MOV
AX,[BX].DISP
• MOV