第 4章 MCS-51单片机汇编语言程序设计
汇编语言程序结构
简单程序结构
分支结构
循环结构
算术运算程序设计
不带符号的多字节加法
双字节二进制无符号数乘法
无符号整数除法
非数值计算程序
码制转换程序
查表程序
数字滤波程序
子程序和参数传递方法具体实例分析例 4.1将单字节 BCD码转换成二进制数
0RG 100H
MOV R2,#28H ;要转换的 BCD数
00101000(28H),送入 R2,称为入口
MOV A,R2
ANL A,# 0F0H ;屏蔽低 4位,取高 4位
SWAP A ;高低 4位交换
MOV B,#10
MUL AB ; 2× 10
MOV R3,A;乘积送 R3保存
MOV A,R2
ANL A,# 0FH ;取低 4位
ADD A,R3 ; 2× 10+ 8送 A
MOV R3,A ;结果 1CH送 R3
MOV 40H,A;存结果,即转换后的二进制数 1CH送入片内 RAM 40H单元
END ;程序结束例 4.2 求存放在片内 RAM 20H单元开始的 10
个无符号数的最小值。
ORG 100H
MOV R0,# 20H ;置地址指针
MOV R7,# 10 ;计数器初值
MOV A,@ R0 ;取第一个数
DEC R7 ;实际的比较次数
LOOP,INC R0 ;修改地址指针
MOV 40H,@ R0 ;取后一个数
CJNE A,40H,NEXT ;前后数比较
NEXT,JC LOPP1;前一个数小,不交换
MOV A,40H;前一个数大,把后一个数送 A,
LOPP1,DJNZ R7,LOOP;计数器减 1,
不为 0转 LOOP
MOV 41H,A;循环结束,最小值送 41H单元
HERE,SJMP $ ; $指 HERE标号,踏步
END
例 4.3求存放于首地址为 20H单元的多个学生考试成绩之和。这个问题可利用成绩是正数的特点,
在成绩数据区后放一个负数作为结束条件。程序为,
ORG 1000H
START,MOV R0,#20H ;首地址指针
MOV R1,#0
MOV R2,#0
MOV B,#0
LOOP,MOV A,@R0 ;取第 1个数
JB ACC.7,DONE;是负数,结束循环
INC B
ADD A,R1
JNC NEXT
INC R2
NEXT,INC RO
MOV R1,A
SJMP LOOP
DONE,SJMP $
这里,成绩和的高位在 R2,低位在 R1,人数在 B中。