📄 converse.lis
字号:
.module converse.c
.area text(rom, con, rel)
0000 .dbfile H:\m128_test\converse.c
0000 .dbfunc e hextochar _hextochar fi
0000 ; temp -> R10
0000 ; target -> R20,R21
0000 ; first -> R22,R23
0000 ; hex -> R16
.even
0000 _hextochar::
0000 0E940000 xcall push_gset3
0004 .dbline -1
0004 .dbline 2
0004 ;
0004 ; unsigned int hextochar(unsigned char hex){
0004 .dbline 3
0004 ; unsigned int first = 0 ;
0004 6627 clr R22
0006 7727 clr R23
0008 .dbline 4
0008 ; unsigned int target = 0;
0008 4427 clr R20
000A 5527 clr R21
000C .dbline 5
000C ; unsigned char temp = hex & 0x0f;
000C 802F mov R24,R16
000E 8F70 andi R24,15
0010 A82E mov R10,R24
0012 .dbline 6
0012 ; if( temp >= 0x0A )
0012 8A30 cpi R24,10
0014 28F0 brlo L2
0016 .dbline 7
0016 ; first = temp + 0x37;
0016 682F mov R22,R24
0018 7727 clr R23
001A 695C subi R22,201 ; offset = 55
001C 7F4F sbci R23,255
001E 04C0 xjmp L3
0020 L2:
0020 .dbline 9
0020 ; else
0020 ; first = temp + 0x30;
0020 6A2D mov R22,R10
0022 7727 clr R23
0024 605D subi R22,208 ; offset = 48
0026 7F4F sbci R23,255
0028 L3:
0028 .dbline 10
0028 ; target = first;
0028 AB01 movw R20,R22
002A .dbline 11
002A ; hex = hex >> 4;
002A 802F mov R24,R16
002C 8295 swap R24
002E 8F70 andi R24,#0x0F
0030 082F mov R16,R24
0032 .dbline 12
0032 ; if( hex >= 0x0A )
0032 8A30 cpi R24,10
0034 28F0 brlo L4
0036 .dbline 13
0036 ; first = hex + 0x37;
0036 682F mov R22,R24
0038 7727 clr R23
003A 695C subi R22,201 ; offset = 55
003C 7F4F sbci R23,255
003E 04C0 xjmp L5
0040 L4:
0040 .dbline 15
0040 ; else
0040 ; first = hex + 0x30;
0040 602F mov R22,R16
0042 7727 clr R23
0044 605D subi R22,208 ; offset = 48
0046 7F4F sbci R23,255
0048 L5:
0048 .dbline 16
0048 ; first = first << 8 ;
0048 762F mov R23,R22
004A 6627 clr R22
004C .dbline 17
004C ; target |= first;
004C 462B or R20,R22
004E 572B or R21,R23
0050 .dbline 18
0050 ; return target;
0050 042F mov R16,R20
0052 152F mov R17,R21
0054 .dbline -2
0054 L1:
0054 0E940000 xcall pop_gset3
0058 .dbline 0 ; func end
0058 0895 ret
005A .dbsym r temp 10 c
005A .dbsym r target 20 i
005A .dbsym r first 22 i
005A .dbsym r hex 16 c
005A .dbend
005A .dbfunc e bcd_char _bcd_char fc
005A ; kk -> R14,R15
005A ; temp -> R12
005A ; i -> R20
005A ; s -> R10,R11
005A ; hex -> R22,R23
.even
005A _bcd_char::
005A 0E940000 xcall push_gset5
005E 5901 movw R10,R18
0060 B801 movw R22,R16
0062 .dbline -1
0062 .dbline 23
0062 ; }
0062 ;
0062 ;
0062 ;
0062 ; unsigned char bcd_char( int hex ,char *s ){
0062 .dbline 24
0062 ; unsigned char i = 0 ,temp = 0;
0062 4427 clr R20
0064 .dbline 24
0064 CC24 clr R12
0066 .dbline 25
0066 ; int kk = 0 ;
0066 EE24 clr R14
0068 FF24 clr R15
006A .dbline 27
006A ;
006A ; if( hex < 0){
006A 6030 cpi R22,0
006C E0E0 ldi R30,0
006E 7E07 cpc R23,R30
0070 5CF4 brge L7
0072 .dbline 27
0072 .dbline 28
0072 ; s[i] = '-';
0072 E42F mov R30,R20
0074 FF27 clr R31
0076 EA0D add R30,R10
0078 FB1D adc R31,R11
007A 8DE2 ldi R24,45
007C 8083 std z+0,R24
007E .dbline 29
007E ; i++;
007E 4395 inc R20
0080 .dbline 30
0080 ; hex = -hex;
0080 6095 com R22
0082 7095 com R23
0084 6F5F subi R22,0xFF
0086 7F4F sbci R23,0xFF
0088 .dbline 31
0088 ; }
0088 L7:
0088 .dbline 33
0088 ;
0088 ; kk = hex;
0088 7B01 movw R14,R22
008A .dbline 34
008A ; temp = hex /10000;
008A 20E1 ldi R18,10000
008C 37E2 ldi R19,39
008E 8B01 movw R16,R22
0090 0E940000 xcall div16s
0094 C02E mov R12,R16
0096 .dbline 35
0096 ; if( kk >= 10000 ){
0096 C701 movw R24,R14
0098 8031 cpi R24,16
009A E7E2 ldi R30,39
009C 9E07 cpc R25,R30
009E 44F0 brlt L9
00A0 .dbline 35
00A0 .dbline 36
00A0 ; s[i] = temp + 0x30;
00A0 E42F mov R30,R20
00A2 FF27 clr R31
00A4 EA0D add R30,R10
00A6 FB1D adc R31,R11
00A8 8C2D mov R24,R12
00AA 805D subi R24,208 ; addi 48
00AC 8083 std z+0,R24
00AE .dbline 37
00AE ; i++;
00AE 4395 inc R20
00B0 .dbline 38
00B0 ; }
00B0 L9:
00B0 .dbline 40
00B0 ;
00B0 ; hex = hex % 10000;
00B0 20E1 ldi R18,10000
00B2 37E2 ldi R19,39
00B4 8B01 movw R16,R22
00B6 0E940000 xcall mod16s
00BA B801 movw R22,R16
00BC .dbline 41
00BC ; temp = hex /1000;
00BC 28EE ldi R18,1000
00BE 33E0 ldi R19,3
00C0 0E940000 xcall div16s
00C4 C02E mov R12,R16
00C6 .dbline 42
00C6 ; if( kk >= 1000 ){
00C6 C701 movw R24,R14
00C8 883E cpi R24,232
00CA E3E0 ldi R30,3
00CC 9E07 cpc R25,R30
00CE 44F0 brlt L11
00D0 .dbline 42
00D0 .dbline 43
00D0 ; s[i] = temp + 0x30;
00D0 E42F mov R30,R20
00D2 FF27 clr R31
00D4 EA0D add R30,R10
00D6 FB1D adc R31,R11
00D8 8C2D mov R24,R12
00DA 805D subi R24,208 ; addi 48
00DC 8083 std z+0,R24
00DE .dbline 44
00DE ; i++;
00DE 4395 inc R20
00E0 .dbline 45
00E0 ; }
00E0 L11:
00E0 .dbline 47
00E0 ;
00E0 ; hex = hex % 1000;
00E0 28EE ldi R18,1000
00E2 33E0 ldi R19,3
00E4 8B01 movw R16,R22
00E6 0E940000 xcall mod16s
00EA B801 movw R22,R16
00EC .dbline 48
00EC ; temp = hex /100;
00EC 24E6 ldi R18,100
00EE 30E0 ldi R19,0
00F0 0E940000 xcall div16s
00F4 C02E mov R12,R16
00F6 .dbline 49
00F6 ; if( kk >= 100 ){
00F6 C701 movw R24,R14
00F8 8436 cpi R24,100
00FA E0E0 ldi R30,0
00FC 9E07 cpc R25,R30
00FE 44F0 brlt L13
0100 .dbline 49
0100 .dbline 50
0100 ; s[i] = temp + 0x30;
0100 E42F mov R30,R20
0102 FF27 clr R31
0104 EA0D add R30,R10
0106 FB1D adc R31,R11
0108 8C2D mov R24,R12
010A 805D subi R24,208 ; addi 48
010C 8083 std z+0,R24
010E .dbline 51
010E ; i++;
010E 4395 inc R20
0110 .dbline 52
0110 ; }
0110 L13:
0110 .dbline 54
0110 ;
0110 ; hex = hex % 100;
0110 24E6 ldi R18,100
0112 30E0 ldi R19,0
0114 8B01 movw R16,R22
0116 0E940000 xcall mod16s
011A B801 movw R22,R16
011C .dbline 55
011C ; temp = hex /10;
011C 2AE0 ldi R18,10
011E 30E0 ldi R19,0
0120 0E940000 xcall div16s
0124 C02E mov R12,R16
0126 .dbline 56
0126 ; if( kk >= 10 ){
0126 C701 movw R24,R14
0128 8A30 cpi R24,10
012A E0E0 ldi R30,0
012C 9E07 cpc R25,R30
012E 44F0 brlt L15
0130 .dbline 56
0130 .dbline 57
0130 ; s[i] = temp + 0x30;
0130 E42F mov R30,R20
0132 FF27 clr R31
0134 EA0D add R30,R10
0136 FB1D adc R31,R11
0138 8C2D mov R24,R12
013A 805D subi R24,208 ; addi 48
013C 8083 std z+0,R24
013E .dbline 58
013E ; i++;
013E 4395 inc R20
0140 .dbline 59
0140 ; }
0140 L15:
0140 .dbline 61
0140 ;
0140 ; hex = hex % 10;
0140 2AE0 ldi R18,10
0142 30E0 ldi R19,0
0144 8B01 movw R16,R22
0146 0E940000 xcall mod16s
014A B801 movw R22,R16
014C .dbline 62
014C ; s[i] = hex+ 0x30;
014C E42F mov R30,R20
014E FF27 clr R31
0150 EA0D add R30,R10
0152 FB1D adc R31,R11
0154 CB01 movw R24,R22
0156 C096 adiw R24,48
0158 8083 std z+0,R24
015A .dbline 63
015A ; i++;
015A 4395 inc R20
015C .dbline 64
015C ; return i;
015C 042F mov R16,R20
015E .dbline -2
015E L6:
015E 0E940000 xcall pop_gset5
0162 .dbline 0 ; func end
0162 0895 ret
0164 .dbsym r kk 14 I
0164 .dbsym r temp 12 c
0164 .dbsym r i 20 c
0164 .dbsym r s 10 pc
0164 .dbsym r hex 22 I
0164 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -