汇编语言 顺序结构程序
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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 后
传送指令MOV(move)
MOV
Biblioteka Baidu
把一个字节或字的操作数从源地址传
送至目的地址
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
重点掌握
MOV XCHG XLAT PUSH POP LEA
MOV(move)传送 指令汇编格式: MOV dest,src 操作: 将一个源操作数(字节或字) 传送到目 标操作数中。 dest←(src) 受影响的状态标志位: 没有 说明: 指令中dest和src不能同时为存储器操 作数; CS不能做为目标操作数使用,段 寄存器之间不能互相传送,立即数不能 送入段寄存器。
堆栈的操作
堆栈只有两种基本操作:进栈和
出栈,对应两条指令PUSH和POP
PUSH ;进栈指令先使 堆栈指针SP减2, 然后把一个字操 作数存入堆栈顶 部 POP ;出栈指令把栈顶 的一个字传送至指 定的目的操作数, 然后堆栈指针SP加2
说明: SS内容为段基址,偏移量由堆栈指针SP指出。 PUSH 指令的目标地址一定在当前堆栈中,操作数一定是16 位的寄存器或存储器操作数。POP指令目标操作数也 只能是16位的存储器或寄存器操作数(CS除外)。
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
seg——段寄存器。
CS DS ES SS
指令操作数的表达(补充)
m8—— 一个 8 位存储器操作数单
元(所有主存寻址方式)。 m16—— 一个 16 位存储器操作数 单元(所有主存寻址方式)。 mem——代表m8或m16。
指令操作数的表达(补充)
i8——一个8位立即数 i16——一个16位立即数 imm——代表i8或i16 dest——目的操作数 src——源操作数
汇编语言指令格式(复习)
由4部分组成:
[标号[:]]指令助记符 目的操作数,源操作数[;注释]
标号表示该指令在主存中的逻辑地址 每个指令助记符就代表一种指令 目的和源操作数表示参与操作的对象 注释是对该指令或程序段功能的说明
指令操作数的表达(补充)
r8——任意一个8位通用寄存器。 AH AL BH BL CH CL DH DL r16——任意一个16位通用寄存器。 AX BX CX DX SI DI BP SP reg——代表r8或r16。
XCHG
把两个地方的数据进行互换
XCHG reg,reg/mem ;reg reg/mem
寄存器与寄存器之间对换数据
例题5.6 例题5.7
寄存器与存储器之间对换数据
不能在存储器与存储器之间对换数据
XCHG指令(举例与思考)
判断下列各条语句的对错:
XCHG XCHG XCHG XCHG XCHG XCHG XCHG XCHG
AL,BL AL,10 CL,[BX] BL,[BX+SI+10] AL,SI [SI],[BX+10] AX,AX DX,DS
第五章
顺序结构程序
教学重点
从本章开始,从程序结构角度展开学 习8086常用指令的功能及应用。本章重点 掌握: 80x86 传送、 算术运算、逻辑操作、 移 位操作等指令 程序设计的步骤 程序的基本控制结构
主要内容
5.1 程序设计的步骤 5.2 流程图的应用 5.3 程序的基本控制结构 5.4 数据传送指令 5.5 算术运算指令 5.6 逻辑操作指令 5.7 移位操作指令 5.8 状态标志位操作指令 5.9 简单的I/O功能调用 5.10 顺序结构程序举例
;段寄存器送寄存器或主存
MOV指令传送功能限制
立即数 存 储 器 通用寄存器 AX BX CX DX BP SP SI DI 段寄存器 CS DS ES SS
MOV也并非任意传送
非法传送种种
示例 两个操作数的类型不一致 例如源操作数是字节,而目的操作 数是字;或相反 两个操作数不能都是存储器 示例 传送指令很灵活,但主存之间的直 接传送却不允许 段寄存器的操作有一些限制 示例 段寄存器属专用寄存器,对他们的 操作能力有限
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) 循环(迭代)结构
5.1 程序设计的步骤
1. 2. 3. 4. 5.
分析问题 建立数学模型 设计算法 编制程序 上机调试
5.2 流程图的应用
(1) (2) (3) (4) (5)
流程线 端点框 判断框 处理框 连接框
开始 结束
条件 Y
N
要描述的内容
顺序结构
开始
初始化部分
工作部分
修改部分
结束
开始 设置数据段地址
通用寄存器 AX BX CX DX BP SP SI DI
段寄存器 CS DS ES SS
堆栈操作指令
堆栈是一个“后进先出
FILO”(或说“先进后 出FILO”)的主存区域, 位于堆栈段中;SS段寄 存器记录其段地址 堆栈只有一个出口,即 当前栈顶;用堆栈指针 寄存器SP指定 栈顶是地址较小的一端 (低端),栈底不变
5.3.1 顺序程序设计
sseg stack 顺 segment 序程序 完 全 ;定义堆栈段
按指令书写的 前后顺序执行 每一条指令, 是最基本、最 常见的程序结 start: 构。
sseg dseg string dseg code
code
dw 512 dup(?) ;堆栈段有512字(1024字节)空间 ends ;堆栈段结束 segment ;定义数据段 db 'Hello, Everybody !',0dh,0ah,'$' ends segment ;'code' ;定义代码段 assume cs:code,ds:dseg,ss:sseg mov ax,dseg ;建立DS段地址 mov ds,ax mov dx,offset string mov ah,9 int 21h mov ax,4c00h int 21h ;利用功能调用返回DOS ends ;代码段结束 end start ;汇编结束,同时指明程序起始点
保存和恢复寄存器 实现段更换
交换指令XCHG(eXCHanGe )
指令汇编格式: XCHG dest,src 操作: dest的内容与src的内容互换。 (dest)←→(src) 受影响的状态标志位: 没有 说明: dest和src不能同时为存储器操作数。 段寄存器、立即数不能作为操作数。
交换指令XCHG(exchange)
出栈指令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
2000:00FBH 2000:00FCH 2000:00FDH 2000:00FEH 2000:00FFH 2000:0100H (2 ) POP CX 执行后 78H 56H 34H 12H ←SP
2000:00FBH 2000:00FCH 2000:00FDH 2000:00FEH 2000:00FFH 2000:0100H (3 )POP DX 执行后 78H 56H 34H 12H ←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 ×
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
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
DS=5678H
ES=1234
堆栈的特点
堆栈操作的单位是字,进栈和出栈只对字量
字量数据从栈顶压入和弹出时,都是低地址
字节送低字节,高地址字节送高字节 堆栈操作遵循先进后出原则,但可用存储器 寻址方式随机存取堆栈中的数据 堆栈常用来
临时存放数据 传递参数 保存和恢复寄存器 实现段更换
进栈指令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,则执行下列指令后堆栈的状态是:
PUSH AX PUSH BX
5.4 数据传送指令
数据传送是计算机中最基本、最重要的一种操作 传送指令也是最常使用的一类指令 传送指令把数据从一个位置传送到另一个位置 除标志寄存器传送指令外,均不影响标志位 数据传送指令共有12条:
MOV POP XLAT LDS LAHF PUSHF PUSH XCHG LEA LES SAHF POPF
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 后
传送指令MOV(move)
MOV
Biblioteka Baidu
把一个字节或字的操作数从源地址传
送至目的地址
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
重点掌握
MOV XCHG XLAT PUSH POP LEA
MOV(move)传送 指令汇编格式: MOV dest,src 操作: 将一个源操作数(字节或字) 传送到目 标操作数中。 dest←(src) 受影响的状态标志位: 没有 说明: 指令中dest和src不能同时为存储器操 作数; CS不能做为目标操作数使用,段 寄存器之间不能互相传送,立即数不能 送入段寄存器。
堆栈的操作
堆栈只有两种基本操作:进栈和
出栈,对应两条指令PUSH和POP
PUSH ;进栈指令先使 堆栈指针SP减2, 然后把一个字操 作数存入堆栈顶 部 POP ;出栈指令把栈顶 的一个字传送至指 定的目的操作数, 然后堆栈指针SP加2
说明: SS内容为段基址,偏移量由堆栈指针SP指出。 PUSH 指令的目标地址一定在当前堆栈中,操作数一定是16 位的寄存器或存储器操作数。POP指令目标操作数也 只能是16位的存储器或寄存器操作数(CS除外)。
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
seg——段寄存器。
CS DS ES SS
指令操作数的表达(补充)
m8—— 一个 8 位存储器操作数单
元(所有主存寻址方式)。 m16—— 一个 16 位存储器操作数 单元(所有主存寻址方式)。 mem——代表m8或m16。
指令操作数的表达(补充)
i8——一个8位立即数 i16——一个16位立即数 imm——代表i8或i16 dest——目的操作数 src——源操作数
汇编语言指令格式(复习)
由4部分组成:
[标号[:]]指令助记符 目的操作数,源操作数[;注释]
标号表示该指令在主存中的逻辑地址 每个指令助记符就代表一种指令 目的和源操作数表示参与操作的对象 注释是对该指令或程序段功能的说明
指令操作数的表达(补充)
r8——任意一个8位通用寄存器。 AH AL BH BL CH CL DH DL r16——任意一个16位通用寄存器。 AX BX CX DX SI DI BP SP reg——代表r8或r16。
XCHG
把两个地方的数据进行互换
XCHG reg,reg/mem ;reg reg/mem
寄存器与寄存器之间对换数据
例题5.6 例题5.7
寄存器与存储器之间对换数据
不能在存储器与存储器之间对换数据
XCHG指令(举例与思考)
判断下列各条语句的对错:
XCHG XCHG XCHG XCHG XCHG XCHG XCHG XCHG
AL,BL AL,10 CL,[BX] BL,[BX+SI+10] AL,SI [SI],[BX+10] AX,AX DX,DS
第五章
顺序结构程序
教学重点
从本章开始,从程序结构角度展开学 习8086常用指令的功能及应用。本章重点 掌握: 80x86 传送、 算术运算、逻辑操作、 移 位操作等指令 程序设计的步骤 程序的基本控制结构
主要内容
5.1 程序设计的步骤 5.2 流程图的应用 5.3 程序的基本控制结构 5.4 数据传送指令 5.5 算术运算指令 5.6 逻辑操作指令 5.7 移位操作指令 5.8 状态标志位操作指令 5.9 简单的I/O功能调用 5.10 顺序结构程序举例
;段寄存器送寄存器或主存
MOV指令传送功能限制
立即数 存 储 器 通用寄存器 AX BX CX DX BP SP SI DI 段寄存器 CS DS ES SS
MOV也并非任意传送
非法传送种种
示例 两个操作数的类型不一致 例如源操作数是字节,而目的操作 数是字;或相反 两个操作数不能都是存储器 示例 传送指令很灵活,但主存之间的直 接传送却不允许 段寄存器的操作有一些限制 示例 段寄存器属专用寄存器,对他们的 操作能力有限
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) 循环(迭代)结构
5.1 程序设计的步骤
1. 2. 3. 4. 5.
分析问题 建立数学模型 设计算法 编制程序 上机调试
5.2 流程图的应用
(1) (2) (3) (4) (5)
流程线 端点框 判断框 处理框 连接框
开始 结束
条件 Y
N
要描述的内容
顺序结构
开始
初始化部分
工作部分
修改部分
结束
开始 设置数据段地址
通用寄存器 AX BX CX DX BP SP SI DI
段寄存器 CS DS ES SS
堆栈操作指令
堆栈是一个“后进先出
FILO”(或说“先进后 出FILO”)的主存区域, 位于堆栈段中;SS段寄 存器记录其段地址 堆栈只有一个出口,即 当前栈顶;用堆栈指针 寄存器SP指定 栈顶是地址较小的一端 (低端),栈底不变
5.3.1 顺序程序设计
sseg stack 顺 segment 序程序 完 全 ;定义堆栈段
按指令书写的 前后顺序执行 每一条指令, 是最基本、最 常见的程序结 start: 构。
sseg dseg string dseg code
code
dw 512 dup(?) ;堆栈段有512字(1024字节)空间 ends ;堆栈段结束 segment ;定义数据段 db 'Hello, Everybody !',0dh,0ah,'$' ends segment ;'code' ;定义代码段 assume cs:code,ds:dseg,ss:sseg mov ax,dseg ;建立DS段地址 mov ds,ax mov dx,offset string mov ah,9 int 21h mov ax,4c00h int 21h ;利用功能调用返回DOS ends ;代码段结束 end start ;汇编结束,同时指明程序起始点
保存和恢复寄存器 实现段更换
交换指令XCHG(eXCHanGe )
指令汇编格式: XCHG dest,src 操作: dest的内容与src的内容互换。 (dest)←→(src) 受影响的状态标志位: 没有 说明: dest和src不能同时为存储器操作数。 段寄存器、立即数不能作为操作数。
交换指令XCHG(exchange)
出栈指令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
2000:00FBH 2000:00FCH 2000:00FDH 2000:00FEH 2000:00FFH 2000:0100H (2 ) POP CX 执行后 78H 56H 34H 12H ←SP
2000:00FBH 2000:00FCH 2000:00FDH 2000:00FEH 2000:00FFH 2000:0100H (3 )POP DX 执行后 78H 56H 34H 12H ←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 ×
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
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
DS=5678H
ES=1234
堆栈的特点
堆栈操作的单位是字,进栈和出栈只对字量
字量数据从栈顶压入和弹出时,都是低地址
字节送低字节,高地址字节送高字节 堆栈操作遵循先进后出原则,但可用存储器 寻址方式随机存取堆栈中的数据 堆栈常用来
临时存放数据 传递参数 保存和恢复寄存器 实现段更换
进栈指令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,则执行下列指令后堆栈的状态是:
PUSH AX PUSH BX
5.4 数据传送指令
数据传送是计算机中最基本、最重要的一种操作 传送指令也是最常使用的一类指令 传送指令把数据从一个位置传送到另一个位置 除标志寄存器传送指令外,均不影响标志位 数据传送指令共有12条:
MOV POP XLAT LDS LAHF PUSHF PUSH XCHG LEA LES SAHF POPF