当前位置:
文档之家› 第4章汇编语言程序设计基本方法1
第4章汇编语言程序设计基本方法1
微机原理与系统设计
PUSH
设AX=1234H,SP=1200H 执行 PUSH AX 指令后堆栈区的状态:
入栈前
入栈后
┇
12H 34H
┇
AX
堆
SP-2=11FEH
栈
34H
段
堆 栈
12H
1200H
段
1200H
微机原理与系统设计
POP
执行 POP AX 堆栈区的状态:
12 34
AX SP+2
PUSH
指令的操作正好相反。(栈底在最高地址)
微机原理与系统设计
堆栈操作指令举例
❖PUSH AX ❖PUSH BX
┇
❖POP AX ❖POP BX
微机原理与系统设计
CBW,CWD(字位扩展指令) ❖ 将符号数的符号位扩展到高位; ❖ 无符号数的扩展规则为在高位补0 ❖ 指令为零操作数指令,采用隐含寻址,隐含的操
XLAT
AL,隐含寻址
❖ 用BX的内容代表表格首地址,AL内容为表内位移 量,BX+AL得到要查找元素的偏移地址。
微机原理与系统设计
XLAT
数据段中存放有一 张ASCII码转换表,设 首 地 址 为 2000H , 现 欲查出表中第11个代 码 的 ASCII 码 ( 设 DS=4000H)
42000H+0
1200H
DS 60H 00H
DI 12H 34H
61234H
┇
34H
数
12H
据
段
00H
1
60H
┇
33H
数 据
22H
段
┇
2
微机原理与系统设计
LES 指令举例
LES DI,[1200H] MOV AX,[DI]
ES 60H 00H
1200H
DI 12H 34H
61234H
┇
34H
数
12H
据
段
00H
60H
微机原理与系统设计
PUSH, POP
❖压栈指令 PUSH 格式: PUSH OPRD
❖出栈指令 POP 格式: POP OPRD
指令执行过程:
(SP)← (SP) -2 (SP) ←操作数高字节 (SP) +1←操作数低字节
指令执行过程: (SP) 操作数低字节 (SP) +1 操作数高字节 (SP) ← (SP) +2
作数为AX及AX,DX
微机原理与系统设计
CBW(字节到字)
❖ 格式: CBW
❖ 操作:将AL内容扩展到AX ❖ 规则:若最高位=1,则执行后AH=FFH
若最高位=0,则执行后AH=00H
微机原理与系统设计
CWD(字到双字)
❖ 格式: CWD
❖ 操作:将AX内容扩展到DX AX ❖ 规则:若最高位=1,则执行后DX=FFFFH
XCHG(数据交换指令)
寄存器与寄存器,或寄存器与存储器之间 ❖ 格式:
XCHG REG,MEM/REG ❖ 两操作数必须有一个是寄存器操作数 ❖ 不允许使用段寄存器。 ❖例: XCHG AX,BX
XCHG [2000],CL
微机原理与系统设计
XLAT(字节转换指令,查表指令)
[BX+AL] ❖ 格式:
❖ 堆栈:以后进先出(LIFO)的规则存取信息的一种存储 机构。开始放入数据的单元叫做“栈底”;数据一个一 个地存入,这个过程叫做“压栈”;最后存入信息的单 元称为“栈顶” 。
❖ 堆栈是一个存放数据的区域,这个区域特殊的是它存放 和取用数据的方式,即所谓的‘先进后出,后进先出’。
❖ 堆栈有特殊的数据传输指令,即‘PUSH’和‘POP’; 有一个特殊的专为其服务的单元,即堆栈指针SP,每当 执一次PUSH指令时,SP就自动减2,每当执行一次POP指 令,SP就自动加2。
a.通用数据传送
一般数据传送指令 MOV 交换指令 XCHG 查表转换指令 XLAT 堆栈操作指令 PUSH, POP 字位扩展指令 CBW, CWD
**该类指令的执行对标志位不产生影响
微机原理与系统设计
MOV
❖一般数据传送指令 MOV
❖格式:MOV DST,SRC
❖操作:SRC
DST
❖例: MOV AL,BL
西安电子科技大学机电工程学院
第4章 汇编语言程序设计基本方法
张大兴
4.2 8086/8088指令系统
❖数据传送指令 ❖算术运算指令 ❖逻辑运算指令 ❖移位指令 ❖标志处理指令和CPU控制指令
微机原理与系统设计
缩写与符号
微机原理与系统设计
数据传送指令
❖通用数据传送 ❖标志位操作 ❖地址传送
微机原理与系统设计
LAHF,SAHF
❖ LAHF
FLAGS
D15
❖ SAHF
;将FLAGS的低8位装入AH
D7
AH ….
SF ZF AF PF
;执行与LAHF相反的操作
D0
D0
CF
微机原理与系统设计
PUSHF,POPF ❖ 针对FLAGS的堆栈操作指令
将标志寄存器压栈或从堆栈弹出
微机原理与系统设计
c. 地址传送指令
❖取有效地址指令LEA
❖取地址指针指令
LDS指令 LES指令
微机原理与系统设计
LEA(取有效地址指令)
❖ 将变量的16位偏移地址取出送目标寄存器 ❖ 格式:
LEA REG,MEM 相当于 MOV REG,OFFSET MEM ❖指令要求源操作数必须是一个存储器操作数,
目标操作数通常是间址寄存器,不能是段寄存 器
微机原理与系统设计
LEA
❖ 比较下列指令: LEA SI,DATA1 MOV SI,DATA1
MOV BX,[BX] LEA BX,[BX]
符号 地址
┇
DATA1 34H 12H
┇
1100H 88H 77H ┇
BX=1100H
微机原理与系统设计
LDS、LES (取地址指针指令)
LDS reg,MEM32 LES reg,MEM32
┇
33H
附 加
22H
段
┇微机原理与系统设计
小结
数据传送指令
通用数据传送指令 标志位操作指令 地址传送指令
微机原理与系统设计
Continue
Thanks.
42000H+11
MOV BX,2000H ;(BX)←表首地址
MOV AL,0BH ;(AL)←序号
XALT
; 查表转换
执行后得到:(AL)=42H
30
‘
31
0‘’
32
1‘’
...
2’
39
‘
41
‘9‘
46
E‘’
微机原...理与系统设计F’
PUSH, POP (堆栈操作指令)
若最高位=0,则执行后DX=0000H
微机原理与系统设计
CBW,CWD 举例
MOV AL,44H CBW
MOV AX,0AFDEH CWD
MOV AL,86H CBW
;执行结果?
微机原理与系统设计
b. 标志位传送指令
LAHF SAHF
PUSHF POPF
隐含操作数AH 隐含操作数FLAGS
微机原理与系统设计
; 高地址送DS ; 高地址送ES
❖ 指令中源操作数是存储器某4个连续单元的偏移地址,目标 操作数是间址寄存器,BX、BP、SI和DI。
微机原理与系统设计
LDS 指令举例 ❖ 例:
LDS DI,[1200H] MOV AX,[DI]
微机原理与系统设计
LDS 指令举例
❖DI = 1234H ❖AX = 2233H
微机原理与系统设计
MOV
注:MOV指令不能传送的5条路径 ❖立即数 → 段寄存器 ❖存储单元 → 存储单元 ❖段寄存器 → 段寄存器 ❖其它 → CS ❖其它 → 立即数
除最后两条,前三条路径都可分两步实现; 此规则同样适用于其它双操作数指令,如 ADD,ADC,SUB,SBB。
微机原理与系统设计
┇ 34H 12H
代 码 段
11FEH 堆
栈 段
微机原理与系统设计
PUSH, POP 说明
❖ 指令的操作数必须是16位的(字); ❖ 操作数可以是寄存器或存储器两单元,但不能是立
即数; ❖ 不能从栈顶弹出一个字给CS; ❖ PUSH和POP指令在程序中一般成对出现; ❖ PUSH指令的操作方向是从高地址向低地址,而POP