📄 51.lst
字号:
021D EF 579 MOV A,R7 ;取原被开方数的左规次数
021E 6009 580 JZ SQRE ;未左规,开方结束
0220 C3 581 SQR9: CLR C ;按左规次数右移平方根,得到实际根
0221 EA 582 MOV A,R2
0222 13 583 RRC A
0223 FA 584 MOV R2,A
0224 EB 585 MOV A,R3
0225 13 586 RRC A
A51 MACRO ASSEMBLER 51 06/29/2007 15:34:54 PAGE 10
0226 FB 587 MOV R3,A
0227 DFF7 588 DJNZ R7,SQR9
0229 22 589 SQRE: RET
590
591
592 ;(14)标号:HASC 功能:单字节十六进制数转换成双字节ASCII码
593
594 ;入口条件:待转换的单字节十六进制数在累加器A中。
595 ;出口信息:高四位的ASCII码在A中,低四位的ASCII码在B中。
596 ;影响资源:PSW、A、B 堆栈需求: 4字节
597
022A F5F0 598 HASC: MOV B,A ;暂存待转换的单字节十六进制数
022C 120232 599 LCALL HAS1 ;转换低四位
022F C5F0 600 XCH A,B ;存放低四位的ASCII码
0231 C4 601 SWAP A ;准备转换高四位
0232 540F 602 HAS1: ANL A,#0FH ;将累加器的低四位转换成ASCII码
0234 2490 603 ADD A,#90H
0236 D4 604 DA A
0237 3440 605 ADDC A,#40H
0239 D4 606 DA A
023A 22 607 RET
608
609
610 ;(15)标号:ASCH 功能:ASCII码转换成十六进制数
611
612 ;入口条件:待转换的ASCII码(30H~39H或41H~46H)在A中。
613 ;出口信息:转换后的十六进制数(00H~0FH)仍在累加器A中。
614 ;影响资源:PSW、A 堆栈需求: 2字节
615
023B C3 616 ASCH: CLR C
023C 9430 617 SUBB A,#30H
023E 30E402 618 JNB ACC.4,ASH1
0241 9407 619 SUBB A,#7
0243 22 620 ASH1: RET
621
622 ;(16)标号: HBCD 功能:单字节十六进制整数转换成单字节BCD码整数
623
624 ;入口条件:待转换的单字节十六进制整数在累加器A中。
625 ;出口信息:转换后的BCD码整数(十位和个位)仍在累加器A中,百位在R3中。
626 ;影响资源:PSW、A、B、R3 堆栈需求: 2字节
627
0244 75F064 628 HBCD: MOV B,#100 ;分离出百位,存放在R3中
0247 84 629 DIV AB
0248 FB 630 MOV R3,A
0249 740A 631 MOV A,#10 ;余数继续分离十位和个位
024B C5F0 632 XCH A,B
024D 84 633 DIV AB
024E C4 634 SWAP A ;;将ACC.7-3与ACC.4-0交换
024F 45F0 635 ORL A,B ;将十位和个位拼装成BCD码
0251 22 636 RET
637
638 ;(17)标号:HB2 功能:双字节十六进制整数转换成双字节BCD码整数
639
640 ;入口条件:待转换的双字节十六进制整数在R6、R7中。
641 ;出口信息:转换后的三字节BCD码整数在R3、R4、R5中。
642 ;影响资源:PSW、A、R2~R7 堆栈需求: 2字节
643
0252 E4 644 HB2: CLR A ;BCD码初始化
0253 FB 645 MOV R3,A
0254 FC 646 MOV R4,A
0255 FD 647 MOV R5,A
0256 7A10 648 MOV R2,#10H ;转换双字节十六进制整数
0258 EF 649 HB3: MOV A,R7 ;从高端移出待转换数的一位到CY中
0259 33 650 RLC A
025A FF 651 MOV R7,A
025B EE 652 MOV A,R6
A51 MACRO ASSEMBLER 51 06/29/2007 15:34:54 PAGE 11
025C 33 653 RLC A
025D FE 654 MOV R6,A
025E ED 655 MOV A,R5 ;BCD码带进位自身相加,相当于乘2
025F 3D 656 ADDC A,R5
0260 D4 657 DA A ;十进制调整
0261 FD 658 MOV R5,A
0262 EC 659 MOV A,R4
0263 3C 660 ADDC A,R4
0264 D4 661 DA A
0265 FC 662 MOV R4,A
0266 EB 663 MOV A,R3
0267 3B 664 ADDC A,R3
0268 FB 665 MOV R3,A ;双字节十六进制数的万位数不超过6,不用调整
0269 DAED 666 DJNZ R2,HB3 ;处理完16bit
667
026B 22 668 RET
669
670 ;(18)标号:HBD 功能:单字节十六进制小数转换成单字节BCD码小数
671
672 ;入口条件:待转换的单字节十六进制小数在累加器A中。
673 ;出口信息:CY=0时转换后的BCD码小数仍在A中。CY=1时原小数接近整数1。
674 ;影响资源:PSW、A、B 堆栈需求: 2字节
675
026C 75F064 676 HBD: MOV B,#100 ;原小数扩大一百倍
026F A4 677 MUL AB
0270 33 678 RLC A ;余数部分四舍五入
0271 E4 679 CLR A
0272 35F0 680 ADDC A,B
0274 75F00A 681 MOV B,#10 ;分离出十分位和百分位
0277 84 682 DIV AB
0278 C4 683 SWAP A
0279 25F0 684 ADD A,B ;拼装成单字节BCD码小数
027B D4 685 DA A ;调整后若有进位,原小数接近整数1
027C 22 686 RET
687
688 ;(19)标号:HBD2 功能:双字节十六进制小数转换成双字节BCD码小数
689
690 ;入口条件:待转换的双字节十六进制小数在R2、R3中。
691 ;出口信息:转换后的双字节BCD码小数仍在R2、R3中。
692 ;影响资源:PSW、A、B、R2、R3、R4、R5 堆栈需求: 6字节
693
027D 7C04 694 HBD2: MOV R4,#4 ;四位十进制码
027F EB 695 HBD3: MOV A,R3 ;原小数扩大十倍
0280 75F00A 696 MOV B,#10
0283 A4 697 MUL AB
0284 FB 698 MOV R3,A
0285 ADF0 699 MOV R5,B
0287 EA 700 MOV A,R2
0288 75F00A 701 MOV B,#10
028B A4 702 MUL AB
028C 2D 703 ADD A,R5
028D FA 704 MOV R2,A
028E E4 705 CLR A
028F 35F0 706 ADDC A,B
0291 C0E0 707 PUSH ACC ;保存溢出的一位十进制码
708
0293 DCEA 709 DJNZ R4,HBD3 ;计算完四位十进制码
0295 D0E0 710 POP ACC ;取出万分位
0297 FB 711 MOV R3,A
0298 D0E0 712 POP ACC ;取出千分位
029A C4 713 SWAP A
029B 4B 714 ORL A,R3 ;拼装成低字节BCD码小数
029C FB 715 MOV R3,A
029D D0E0 716 POP ACC ;取出百分位
029F FA 717 MOV R2,A
02A0 D0E0 718 POP ACC ;取出十分位
A51 MACRO ASSEMBLER 51 06/29/2007 15:34:54 PAGE 12
02A2 C4 719 SWAP A
02A3 4A 720 ORL A,R2 ;拼装成高字节BCD码小数
02A4 FA 721 MOV R2,A
02A5 22 722 RET
723
724 ;(20)标号:BCDH 功能:单字节BCD码整数转换成单字节十六进制整数
725
726 ;入口条件:待转换的单字节BCD码整数在累加器A中。
727 ;出口信息:转换后的单字节十六进制整数仍在累加器A中。
728
729 ;影响资源:PSW、A、B、R4 堆栈需求: 2字节
730
02A6 75F010 731 BCDH: MOV B,#10H ;分离十位和个位
02A9 84 732 DIV AB
02AA ACF0 733 MOV R4,B ;暂存个位
02AC 75F00A 734 MOV B,#10 ;将十位转换成十六进制
02AF A4 735 MUL AB
02B0 2C 736 ADD A,R4 ;按十六进制加上个位
02B1 22 737 RET
738
739 ;(21)标号:BH2 功能:双字节BCD码整数转换成双字节十六进制整数
740
741 ;入口条件:待转换的双字节BCD码整数在R2、R3中。
742 ;出口信息:转换后的双字节十六进制整数仍在R2、R3中。
743 ;影响资源:PSW、A、B、R2、R3、R4 堆栈需求: 4字节
744
02B2 EB 745 BH2: MOV A,R3 ;将低字节转换成十六进制
02B3 1202A6 746 LCALL BCDH
02B6 FB 747 MOV R3,A
02B7 EA 748 MOV A,R2 ;将高字节转换成十六进制
02B8 1202A6 749 LCALL BCDH
02BB 75F064 750 MOV B,#100 ;扩大一百倍
02BE A4 751 MUL AB
02BF 2B 752 ADD A,R3 ;和低字节按十六进制相加
02C0 FB 753 MOV R3,A
02C1 E4 754 CLR A
02C2 35F0 755 ADDC A,B
02C4 FA 756 MOV R2,A
02C5 22 757 RET
758
759 ;(22)标号:BHD 功能:单字节BCD码小数转换成单字节十六进制小数
760
761 ;入口条件:待转换的单字节BCD码数在累加器A中。
762 ;出口信息:转换后的单字节十六进制小数仍在累加器A中。
763 ;影响资源:PSW、A、R2、R3 堆栈需求: 2字节
764
02C6 7A08 765 BHD: MOV R2,#8 ;准备计算一个字节小数
766
02C8 25E0 767 BHD0: ADD A,ACC ;按十进制倍增
02CA D4 768 DA A
02CB CB 769 XCH A,R3
02CC 33 770 RLC A ;将进位标志移入结果中
02CD CB 771 XCH A,R3
02CE DAF8 772 DJNZ R2,BHD0 ;共计算8bit小数
02D0 24B0 773 ADD A,#0B0H ;剩余部分达到0.50否?
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -