Download presentation
Presentation is loading. Please wait.
Published bySuharto Setiabudi Modified 5年之前
1
4.3 汇编语言程序设计 顺序程序设计 顺序程序设计是最基本的程序设计。它是按照指令排列的先后顺序依次执行,每条指令都必须执行,且只执行一遍。顺序程序设计一般比较单一、简单,常常作为复杂程序的一部分。
2
[例4.8] 设有两个16位的双字节数,低8位分别存放在片内20H、30H单元中,高8位分别存放在片内21H、31H单元中,求这两个数的和,结果存放在22H、21H、20H单元中。
3
[例4.9] 设R2寄存器中保存两个压缩的BCD码,试将它们拆开,并转换成ASCII码分别放在片内RAM 11H(高位)和10H(低位)单元中。
根据ASCII码表可知,0~9的BCD数与ASCII码表只相差30H。因此,本题只需将R2中的两个BCD数拆开,分别加上30H即可。
4
分支程序设计 在程序设计过程中,有时要根据不同情况执行不同功能的程序段,这种根据程序要求而改变程序执行顺序的设计,称为分支程序设计。分支程序设计分为无条件分支程序设计和条件分支程序设计两类。无条件分支程序中含有LJMP、AJMP等无条件转移指令,执行这类指令,程序将无条件转移,条件分支程序中含有判零、比较、位控制等条件转移指令。
5
图4-2 判断两个数相等的程序流程图
6
[例4.10] 片外RAM 2000H、2001H单元分别存放两个数,判断这两个数是否相等,如果相等,则位地址7FH置1,否则清零。
若判断两个数相等使用比较转移指令就很容易实现该题中的要求,程序流程如图4-2所示。在下面的程序清单中,请读者考虑一下无条件转移指令AJMP的作用。
7
程序如下: ORG H MOV DPTR,#2000H ;地址指针指向片外2000H单元 MOVX ;(2000H)→A MOV R0,A ;A→R0 MOV DPTR,#2001H ;地址指针指向2001H单元 MOVX ;(2001H)→A MOV 30H,R0 CJNE A,30H,NE ;若两个数不相等,则转NE
8
SETB 7FH ;若两个数相等,则7FH单元置1
AJMP OVER ;转OVER NE: CLR 7FH ;7FH单元清零 OVER: RET
9
图4-3 按条件求函数Y的流程图
10
[例4.11] 设VAR 单元内有一自变量X,请按如下条件编程求函数值Y并存入FUNC单元中。
11
程序如下: ORG H VAR EQU 30H FUNC EQU 31H MOV A,VAR ;X→A JZ DONE ;若X=0,则转DONE JNB ACC.7,POSI ;若X>0,则转POSI MOV A,#0FFH ;若X<0,则-1→A,FFH为-1的补码 SJMP DONE ;转DONE
12
POSI: MOV A,#01H ;1→A DONE: MOV FUNC ,A ;存Y值 RET
Similar presentations