当前位置:文档之家› 汇编语言 顺序结构程序

汇编语言 顺序结构程序


保存和恢复寄存器 实现段更换
交换指令XCHG(eXCHanGe )
指令汇编格式: XCHG dest,src 操作: dest的内容与src的内容互换。 (dest)←→(src) 受影响的状态标志位: 没有 说明: dest和src不能同时为存储器操作数。 段寄存器、立即数不能作为操作数。
交换指令XCHG(exchange)
第五章
顺序结构程序
教学重点
从本章开始,从程序结构角度展开学 习8086常用指令的功能及应用。本章重点 掌握: 80x86 传送、 算术运算、逻辑操作、 移 位操作等指令 程序设计的步骤 程序的基本控制结构
主要内容
5.1 程序设计的步骤 5.2 流程图的应用 5.3 程序的基本控制结构 5.4 数据传送指令 5.5 算术运算指令 5.6 逻辑操作指令 5.7 移位操作指令 5.8 状态标志位操作指令 5.9 简单的I/O功能调用 5.10 顺序结构程序举例
CX=5678H
DX=1234H
POP 指令(举例)
思考:假定 SI=1234H, DI=5678H, 则右侧指令执行后, DS,ES的内容是?
2000:00FBH 2000:00FCH 2000:00FDH 2000:00FEH 2000:00FFH 2000:0100H (1) 两条 PUSH 指令执行后 78H 56H 34H 12H ←SP
DS=5678H
ES=1234
堆栈的特点
堆栈操作的单位是字,进栈和出栈只对字量
字量数据从栈顶压入和弹出时,都是低地址
字节送低字节,高地址字节送高字节 堆栈操作遵循先进后出原则,但可用存储器 寻址方式随机存取堆栈中的数据 堆栈常用来

临时存放数据 传递参数 保存和恢复寄存器 实现段更换
5.1 程序设计的步骤
1. 2. 3. 4. 5.
分析问题 建立数学模型 设计算法 编制程序 上机调试
5.2 流程图的应用
(1) (2) (3) (4) (5)
流程线 端点框 判断框 处理框 连接框
开始 结束
条件 Y
N
要描述的内容
顺序结构
开始
初始化部分
工作部分
修改部分
结束
开始 设置数据段地址
堆栈的操作
堆栈只有两种基本操作:ቤተ መጻሕፍቲ ባይዱ栈和
出栈,对应两条指令PUSH和POP
PUSH ;进栈指令先使 堆栈指针SP减2, 然后把一个字操 作数存入堆栈顶 部 POP ;出栈指令把栈顶 的一个字传送至指 定的目的操作数, 然后堆栈指针SP加2
说明: SS内容为段基址,偏移量由堆栈指针SP指出。 PUSH 指令的目标地址一定在当前堆栈中,操作数一定是16 位的寄存器或存储器操作数。POP指令目标操作数也 只能是16位的存储器或寄存器操作数(CS除外)。
2 0 0 0 :0 0 F B H 2 0 0 0 :0 0 F C H 2 0 0 0 :0 0 F D H 2 0 0 0 :0 0 F E H 2 0 0 0 :0 0 F F H 2 0 0 0 :0 1 0 0 H (4 ) S P -2 后 34H 12H ← SP
2 0 0 0 :0 0 F B H 2 0 0 0 :0 0 F C H 2 0 0 0 :0 0 F D H 2 0 0 0 :0 0 F E H 2 0 0 0 :0 0 F F H 2 0 0 0 :0 1 0 0 H (5 )B X 进 堆 之 后 78H 56H 34H 12H ← SP
出栈指令POP
POP
POP r16/m16/seg ;r16/m16/seg←SS:[SP] ;SP←SP+2
pop ax pop [2000h]
POP 指令(举例)
思考:假定在执行指令: POP CX POP DX 之前,堆栈的状态如图所示。指令执行 后CX,DX的内容及堆栈的状态?
2000:00FBH 2000:00FCH 2000:00FDH 2000:00FEH 2000:00FFH 2000:0100H (1 )原始状态 78H 56H 34H 12H ←SP
重点掌握
MOV XCHG XLAT PUSH POP LEA
MOV(move)传送 指令汇编格式: MOV dest,src 操作: 将一个源操作数(字节或字) 传送到目 标操作数中。 dest←(src) 受影响的状态标志位: 没有 说明: 指令中dest和src不能同时为存储器操 作数; CS不能做为目标操作数使用,段 寄存器之间不能互相传送,立即数不能 送入段寄存器。
1 Y
AL>(指针)?
设置数据指针 AL
AL 第一个数据
N
(指针)
指针增量
(指针)=0FFH?
Y 保存结果
N 1
分支与循环结构
结束
5.3 程序的基本控制结构
S1 S2 S3
条件=真 N S2
Y
S1
(1) 顺序结构
(2) 分支(选择)结构
S1 条件=真 N Y
条件=真 Y S1
N S2
(3) 循环(迭代)结构
汇编语言指令格式(复习)
由4部分组成:
[标号[:]]指令助记符 目的操作数,源操作数[;注释]
标号表示该指令在主存中的逻辑地址 每个指令助记符就代表一种指令 目的和源操作数表示参与操作的对象 注释是对该指令或程序段功能的说明
指令操作数的表达(补充)
r8——任意一个8位通用寄存器。 AH AL BH BL CH CL DH DL r16——任意一个16位通用寄存器。 AX BX CX DX SI DI BP SP reg——代表r8或r16。
2000:00FBH 2000:00FCH 2000:00FDH 2000:00FEH 2000:00FFH 2000:0100H (2 )执行 POP DS 后 78H 56H 34H 12H ←SP
PUSH PUSH POP POP
SI DI DS ES
78H 56H 34H 12H ←SP
2000:00FBH 2000:00FCH 2000:00FDH 2000:00FEH 2000:00FFH 2000:0100H (3) 执行 POP ES 后
通用寄存器 AX BX CX DX BP SP SI DI
段寄存器 CS DS ES SS
堆栈操作指令
堆栈是一个“后进先出
FILO”(或说“先进后 出FILO”)的主存区域, 位于堆栈段中;SS段寄 存器记录其段地址 堆栈只有一个出口,即 当前栈顶;用堆栈指针 寄存器SP指定 栈顶是地址较小的一端 (低端),栈底不变
MOV(move)传送指令(思考)
立即数
判断下列各条语句的对错: 存 储 器 ① DATA DB 10H × ② MOV [SI],DATA √ ② MOV AX,CS × ③ MOV DS,1000H √ ④ MOV BX,[BX] × ⑤ MOV AX,DL ⑥ MOV DS,CS × ⑦ MOV [SI],10H ×
传送指令MOV(move)
MOV
把一个字节或字的操作数从源地址传
送至目的地址
MOV reg/mem,imm
例题5.1
例题5.2 ;立即数送寄存器或主存 MOV reg/mem/seg,reg
例题5.3 MOV;寄存器送(段)寄存器或主存 reg/seg,mem
例题5.5 ;主存送(段)寄存器 MOV reg/mem,seg
5.4 数据传送指令
数据传送是计算机中最基本、最重要的一种操作 传送指令也是最常使用的一类指令 传送指令把数据从一个位置传送到另一个位置 除标志寄存器传送指令外,均不影响标志位 数据传送指令共有12条:

MOV POP XLAT LDS LAHF PUSHF PUSH XCHG LEA LES SAHF POPF
seg——段寄存器。
CS DS ES SS
指令操作数的表达(补充)
m8—— 一个 8 位存储器操作数单
元(所有主存寻址方式)。 m16—— 一个 16 位存储器操作数 单元(所有主存寻址方式)。 mem——代表m8或m16。
指令操作数的表达(补充)
i8——一个8位立即数 i16——一个16位立即数 imm——代表i8或i16 dest——目的操作数 src——源操作数
2 0 0 0 :0 0 F B H 2 0 0 0 :0 0 F C H 2 0 0 0 :0 0 F D H 2 0 0 0 :0 0 F E H 2 0 0 0 :0 0 F F H 2 0 0 0 :0 1 0 0 H (1 ) 起 始 状 态 ← SP
2 0 0 0 :0 0 F B H 2 0 0 0 :0 0 F C H 2 0 0 0 :0 0 F D H 2 0 0 0 :0 0 F E H 2 0 0 0 :0 0 F F H 2 0 0 0 :0 1 0 0 H (2 )S P -2 后 ← SP
2 0 0 0 :0 0 F B H 2 0 0 0 :0 0 F C H 2 0 0 0 :0 0 F D H 2 0 0 0 :0 0 F E H 2 0 0 0 :0 0 F F H 2 0 0 0 :0 1 0 0 H (3 ) A X 进 堆 后 34H 12H ← SP
PUSH 指令(举例) 假定AX=1234H,BX=5678H,SS=2000H, SP=0100H,则执行下列指令后堆栈的状态是 PUSH AX PUSH BX
进栈指令PUSH
PUSH
PUSH r16/m16/seg ;SP←SP-2 ;SS:[SP]←r16/m16/seg
push ax push [2000h]
PUSH 指令(举例)
假定AX=1234H,BX=5678H,SS=2000H, SP=0100H,则执行下列指令后堆栈的状态是:
相关主题