第4章MCS-51单片机汇编语言程序设计 °译高是序结构 分支结构 循环结构 算术运算程序设计 √不带符号的多字节加法 √双字节二进制无符号数乘法 无符号整数除法 非数值计算程序 码制转换程序 查表程序 数字滤波程序 子程序和参数传递方法
第4章 MCS-51单片机汇编语言程序设计 • 汇编语言程序结构 ✓ 简单程序结构 ✓ 分支结构 ✓ 循环结构 • 算术运算程序设计 ✓ 不带符号的多字节加法 ✓ 双字节二进制无符号数乘法 ✓ 无符号整数除法 • 非数值计算程序 ✓ 码制转换程序 ✓ 查表程序 • 数字滤波程序 • 子程序和参数传递方法
具体实例分析 例4.1将单字节BCD码转换成二进制数 ORG 100H MOV R2, #28H 要转换的BCD数 00101000(28H),送入R2,称为入口 MOVA, R2 ANLA,#OFOH;屏蔽低4位,取高4位 SWAP A ;高低4位交换 MO∨B,#10 MUL AB 2×10 MOVR3,A;乘积送R3保存
具体实例分析 例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保存
MOVA, R2 ANLA,#OFH;取低4位 ADDA,R3;2×10+8送A MOVR3,A;结果1CH送R3 MOV40H,A;存结果,即转换后的 二进制数1CH送入片内RAM40H单元 END ;程序结束
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求存放在片内RAM20H单元开始的10 个无符号数的最小值。 ORG 100H MOVR0,#20H;置地址指针 MOVR7,#10;计数器初值 MO∨A,@R0;取第一个数 DEC RZ 实际的比较次数 OOP: INC RO ;修改地址指针 MOV40H,@R0;取后一个数 CNE A,40H,NEXT;前后数 比较
例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;前一个数小,不交换 MOVA,40H;前一个数大,把后 个数送A, LOPP1:D]NZR7,LOOP;计数器减1, 不为0转LOOP MO∨41H,A;循环结束,最小值 送41H单元 HERE:SJMP$;$指HERE标号,踏步 END
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:MOVR0,#20H;首地址指针 MOV R1, #0 MOV R2, #0 MOVB, #O LOOP:MO∨A,@R0;取第1个数 JB ACC.7,DONE;是负数,结束循环 INC B
例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
ADDA, RI JNC NEXT INC R2 NEXT: INC RO MOVRLA SJMP LOOP DONE: SJMP S 这里,成绩和的高位在R2低位在R1,人 数在B中
ADD A,R1 JNC NEXT INC R2 NEXT:INC RO MOV R1,A SJMP LOOP DONE:SJMP $ 这里,成绩和的高位在R2,低位在R1,人 数在B中