当前位置:
文档之家› 如何发挥主机内存各类寄存器位处理器的功能--汇编语言程序设计
如何发挥主机内存各类寄存器位处理器的功能--汇编语言程序设计
10.1 概述
10.1.1 汇编语言程序设计的一般步 骤
10.1.2 流程图
编辑ppt
返回本章首页
1
10.1.1 汇编语言程序设计的一般 步骤
汇编语言程序设计一般有以下几 个步骤: 1.分析问题,确定算法 2.绘制流程图 3.根据流程图编制程序 10.调试程序
编辑ppt
返回本节 2
10.1.2 流程图
编辑ppt
10
STACK SEGMENT STACK
DB
200 DUP(0)
STACK ENDS
DATA SEGMENT
TABDB 80,85,86,71,79,96
810
DB 83,56,32,66,78。
NO
DB 10
ENGLIST DB ?
DATA ENDS
CODE SEGMENT
编辑ppt
11
ASSUME DS:DATA,SS:STACK,CS:CODE
BEGIN: MOV AX,DATA
MOV DS ,AX
LEA BX,TAB
MOV AL,NO
DEC AL
XLAT TAB
MOV ENGLISH,AL
MOV AH,10CH
INT 21H
CODE
ENDS
END
返回本章首页
13
10.3 分支程序设计 (标志寄存器与条件转移指令)
10.3.1 用条件转移指令实现程序分 支
10.3.2 用跳转表实现多路分支
编辑ppt
返回本章首页
14
10.3.1 用条件转移指令实现程序 分支
【例10.3】编写计算下面函数值的程序:
1 X>0
Y= 0 X=0
编辑ppt
12
10.3 分支程序设计 (标志寄存器与条件转移指令)
测试某一次运算的结 ZF=1 JZ/JE
果
SF=1 JS
OF=1 JO PF=1 JP
CF=1 JC(JB,JNAE)
比较两个无符号数 (ASCII码)
JB=JNAE=JC(借位 JL=JNGE 位)
测试CX的值,等于0 JCXZ 则转移
编辑ppt
4
10.2 顺序程序设计
下面举例说明顺序程序的设计。
【例10.1】试编写一程序计算以下表达式的 值。
w=(v-(x*y+z-5100))/x
式中x、y、z、v均为有符号字数据。
设x、y、z、v的值存放在字变量X、Y、 Z、V中,结果存放在双字变量W之中,程序 的流程图如图10.1所示。
1.流程图的概念
流程图是由特定的几何图形、指向线、 文字说明来表示数据处理的步骤,形象描 述逻辑控制结构以及数据流程的示意图。 流程图具有简洁、明了、直观的特点。
2.流程图符号表示
(1)起止框:表示程序 •开始
的开始和结束。
•结束
编辑ppt
3
Y
N
(2)判断
•条件
框
(3)处理框
(10)指 向线
START: MOV AX,DATA
编辑ppt
20
MOV DS,AX
CMP X,0
JLE A1
MOV Y,1
JMP EXIT
A1: JL A2
MOV Y,0
JMP EXIT
A2: MOV Y,-1
EXIT: MOV AH,10CH
INT 21H
CODE ENDS
END START
STACK
ENDS
CODE
SEGMENT
ASSUME DS : DATA , CS : CODE , SS :
STACK
编辑ppt
7
START: MOV AX,DATA
MOV DS,AX
;DATA→AX
MOV AX,X
IMUL Y
;(X)*(Y)→DX:AX
MOV CX,AX
MOV BX,DX
START
编辑ppt
18
X<=0
>
•图10.2 分支运算程序流程图
编辑ppt
19
DATA SEGMENT
X
DB -10
Y
DB ?
DATA ENDS
STACK SEGMENT STACK
DB 200 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME DS:DATA,SS:STACK, CS: CODE
CX)→(DX:AX) IDIV X ;(DX:AX)/X MOV W,AX ;商→W MOV W+2,DX ;余数DX→W+2 MOV AH,10CH
INT 21H CODE ENDS ;退出DOS 状态
END START
编辑ppt
9
【例10.2 BX、AL与查表指令】
【例10.2】已知某班学生的英语成绩按学号 (从1开始)从小到大的顺序排列在TAB表中, 要查的学生的学号放在变量NO中,查表结果 放在变量ENGLISH中。编写程序如下:
编辑ppt
5
DX
编辑ppt
流图 程 10 图
1 顺 序 运 算 程 序
6
•.
源程序如下:
DATA
SEGMENT
X DW 200
Y DW 100
Z DW 3000
V DW 10000
W DW 2 DUP(?)
DATA
ENDS
STACK
SEGMENT STACK
DB 200 DUP(0)
CODE SEGMENT
ASSUME DS:DATA,SS:STACK, CS: CODE
START: MOV AX,DATA
编辑ppt
17
MOV
CMP
JGE
MOV
JMP
A1: JG A2
MOV
JMP
A2: MOV
EXIT: MOV
INT 21H
CODE ENDS
END
DS,AX X,0 ;与0进行比较 A1 ;X≥0转A1 Y,-1 ;X <0时,-1→Y EXIT ;X>0转A2 Y,0 ;X=0时,0→Y EXIT Y,1 ;X>0,1→Y AH,10CH
;(DX:AX)→(BX:CX)
MOV AX,Z
CWD ;(Z)符号扩展
ADD CX,AX
ADC BX,DX
(BX:CX)
;(BX:CX)+(DX:AX)→
SUB CX,5100
SBB BX,0 ;(BX:CX)-5100→(BX:CX)
MOV AX,V
编辑ppt
8
CWD ;(V)符号扩展 SUB AX,CX SBB DX,BX ;(DX:AX)-(BX:
-1 X
设输入数据为X、输出数据Y,且皆为字节变量。程 序流程图如图10.2所示。
程序如下:
编辑ppt
15
•图10.2 分支运算程序流程图
编辑ppt
16
DATA SEGMENT
X
DB -10
Y
DB ?
DATA ENDS
STACK SEGMENT STACK
DB 200 DUP(0)
STACK ENDS