汇
编
语
言
程
序
设
计
两个内容
分支程序设计
循环程序设计
你午睡了吗?
开始
结束
认真听课 睡会再听课
YES NO
开始
体重减到90斤了吗?
减肥进行时...
没有,早着呢
结束
成功了
分支程序设计
变量X的符号函数可用下式表示:
y =
1 当x > 0
-1 当x < 0
0 当x = 0
分支程序设计
SIGEF MOV A , X
SUBB A , 0
JZ ZERO
JNC PLUS
MOV Y , 0FFH
JMP CONTI
ZERO: MOV Y , 0
JMP CONTI
PLUS: MOV Y , 1
CONTI:
A=0
则跳转
C=0
则跳转
循环程序设计
循环初态
循环结束条件
循环体
三
个
基
本
概
念
循环程序设计
提出问题
分析问题
解决问题
两个32位的BCD码相加,用循环程序实现
Binary - Coded Decimal
1、指针
2、计数器
3、跳转指令
1、理解BCD码
2、画好程序流程图
3、预测编程可能出现的问题
编写代码,实现具体的问题
开始
取第一个BCD数的
字节存至寄存器
准备第一个BCD数
的循环初始环境
准备第二个BCD数
的循环初始环境
取第二个BCD数的
字节存至累加器并
且从寄存器中取第
一个BCD数相应字
节相加
善后工作
结束
循环四次
循环四次
循环程序设计编码实现
ORG 00H
LJMP MAIN
ORG 30H
COUNT EQU 04H
MAIN: MOV DPTR ,#BCD1
MOV R0 , #BCD11
MOV R2 , #COUNT
LOP1: MOV A , #0
MOVC A , @A+DPTR
MOV @R0 , A
INC DPTR
INC R0
DJNZ R2 , LOP1
定义程序的入口
定义符号COUNT
将BCD1的地址
送至数据指针
将循环次数送至
寄存器R2,R2充
当计数器从程序区取第一个
BCD数的第一个字
节送到累加器A
使数据指针地址+1,
指向下一个地址
跳转指令、寄存器寻
址方式,先是寄存器
-1,不为0,满足条
件跳转
MOV DPTR , #BCD2
MOV R0 , #BCD11
MOV R1 , #SUM
MOV R3 , #COUNT
CLR C
LOP2: MOV A , #0
MOVC A , @A+DPTR
ADDC A , @R0
DA A
MOV @R1 , A
INC DPTR
INC R0
INC R1
DJNZ R3 , LOP2
将第一个BCD数的
地址赋值给数据指
针
将循环次数送至
R3 , 此时R3充当
计数器的功能
与第一个BCD数的
相应字节相加
MOV A , #00H
ADDC A , #00H
MOV @R1 , A
J1: JMP J1
ORG 20H
BCD1 EQU 20H
DB 44H , 55H , 66H , 77H
BCD2: DB 55H , 44H , 55H , 88H
ORG 60H
BCD11 EQU 60H
DS 4
ORG 70H
SUM EQU 70H
DS 5
END
最后一次可能产生
的进位位相加存进位位
给符号定义一个值
用DB伪指令在程
序区中预置数据
在RAM中保留4字
节单元
模拟暂停指令
32位BCD数相加程序小结
4、常翻阅 P62 的指令集小结
1、读取ROM中的数据时
( eg . 变址寻址) 使用MOVC指令
2、EQU语句给符号定义一个值后
不能改变或重新定义该值了
3、相加时,考虑到可能进位的情况
使用ADDC指令
第四章 汇编语言程序设计
标识符、
保留字、
表达式...
常用如EQU、
DB、DS、ORG
1、顺序结构
2、分支结构
3、循环结构
谢谢观赏