📄 sim340.s
字号:
; {
; nLen_temp -= 25;
; nOffset += 25;
; copy(chrTemp,0,in,nOffset,nLen_temp);
; }
; else return -1;
; }
; //取得电话号码
; int nPhone_Len = 0;
; if(nLen_temp >= 18)
; {
; copy(Phone,0,chrTemp,0,18);
; phone_len = (int)(Phone[1] - 48);
; copy(chrPhone,0,Phone,4,14);
; }
; else return -1;
; //获得电话号码的正确顺序
; copy(Phone,0,chrPhone,0,14);
; n = 0;
; for(i = 0;i < 7;i++)
; {
; chrPhone[n++] = Phone[2 * i + 1];
; chrPhone[n++] = Phone[2 * i];
; }
;
; if(nLen_temp >= 20)
; {
; nLen_temp -= 20;
; nOffset += 20;
; copy(chrTemp,0,in,nOffset,nLen_temp);
; }
; else return -1;
; if(nLen_temp >= 16)
; {
; nLen_temp -= 16;
; nOffset += 16;
; copy(chrTemp,0,in,nOffset,nLen_temp);
; }
; else return -1;
; // 取出内容的长度
; nContent_Len = 0;
; if(nLen_temp >= 2)
; {
; if((strTemp[1] >= 48) && (strTemp[1] <= 57))
; nContent_Len = (strTemp[0] - 48) * 16 + (strTemp[1] - 48);
; else if(strTemp[1] >= 65 && strTemp[1] <= 70)
; nContent_Len = (strTemp[0] - 48) * 16 + (strTemp[1] - 55);
; else if(strTemp[1] >= 97 && strTemp[1] <= 102)
; nContent_Len = (strTemp[0] - 48) * 16 + (strTemp[1] - 87);
; }
; else return -1;
; if(strTemp.length() >= 2)
; {
; nLen_temp -= 2;
; nOffset += 2;
; copy(chrTemp,0,in,nOffset,nLen_temp);
; }
; else return -1;
;
; CharToByte(strTemp,content,nLen_temp);
; nLen_temp /= 2;
; n = Decode(content,chrMessage,nLen_temp);
; }
; return n;
;
; }*/
; int FindERROR(char in[],int nLen)
; {
.dbline 461
; int nOffset,i;
; nOffset = -1;if(nLen < 5) return nOffset;
ldi R20,-1
ldi R21,-1
.dbline 461
cpi R18,5
ldi R30,0
cpc R19,R30
brge L72
.dbline 461
movw R16,R20
xjmp L71
L72:
.dbline 462
; for(i = 0;i < nLen;i++)
clr R22
clr R23
xjmp L77
L74:
.dbline 463
; {
.dbline 464
; if((in[i] == 'R') && (in[i - 1] == 'O') && (in[i - 2] == 'R')
movw R30,R22
add R30,R16
adc R31,R17
ldd R24,z+0
cpi R24,82
brne L78
movw R30,R22
sbiw R30,1
add R30,R16
adc R31,R17
ldd R24,z+0
cpi R24,79
brne L78
movw R30,R22
sbiw R30,2
add R30,R16
adc R31,R17
ldd R24,z+0
cpi R24,82
brne L78
movw R30,R22
sbiw R30,3
add R30,R16
adc R31,R17
ldd R24,z+0
cpi R24,82
brne L78
movw R30,R22
sbiw R30,4
add R30,R16
adc R31,R17
ldd R24,z+0
cpi R24,69
brne L78
.dbline 466
; && (in[i - 3] == 'R') && (in[i - 4] == 'E'))
; {
.dbline 467
; nOffset = i - 4;
movw R20,R22
subi R20,4
sbci R21,0
.dbline 468
; break;
xjmp L76
L78:
.dbline 470
L75:
.dbline 462
subi R22,255 ; offset = 1
sbci R23,255
L77:
.dbline 462
cp R22,R18
cpc R23,R19
brge X5
xjmp L74
X5:
L76:
.dbline 471
; }
; }
; return nOffset;
movw R16,R20
.dbline -2
L71:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r nOffset 20 I
.dbsym r i 22 I
.dbsym r nLen 18 I
.dbsym r in 16 pc
.dbend
.dbfunc e FindCMGR _FindCMGR fI
; nOffset -> R20,R21
; i -> R22,R23
; nLen -> R18,R19
; in -> R16,R17
.even
_FindCMGR::
xcall push_gset2
.dbline -1
.dbline 474
; }
; int FindCMGR(char in[],int nLen)
; {
.dbline 476
; int nOffset,i;
; nOffset = -1;
ldi R20,-1
ldi R21,-1
.dbline 477
; if(nLen < 5) return nOffset;
cpi R18,5
ldi R30,0
cpc R19,R30
brge L81
.dbline 477
movw R16,R20
xjmp L80
L81:
.dbline 478
; for(i = 0;i < nLen;i++)
clr R22
clr R23
xjmp L86
L83:
.dbline 479
; {
.dbline 480
; if((in[i] == 'R') && (in[i - 1] == 'G') && (in[i - 2] == 'M')
movw R30,R22
add R30,R16
adc R31,R17
ldd R24,z+0
cpi R24,82
brne L87
movw R30,R22
sbiw R30,1
add R30,R16
adc R31,R17
ldd R24,z+0
cpi R24,71
brne L87
movw R30,R22
sbiw R30,2
add R30,R16
adc R31,R17
ldd R24,z+0
cpi R24,77
brne L87
movw R30,R22
sbiw R30,3
add R30,R16
adc R31,R17
ldd R24,z+0
cpi R24,67
brne L87
movw R30,R22
sbiw R30,4
add R30,R16
adc R31,R17
ldd R24,z+0
cpi R24,43
brne L87
.dbline 482
; && (in[i - 3] == 'C') && (in[i - 4] == '+'))
; {
.dbline 483
; nOffset = i - 4;
movw R20,R22
subi R20,4
sbci R21,0
.dbline 484
; break;
xjmp L85
L87:
.dbline 486
L84:
.dbline 478
subi R22,255 ; offset = 1
sbci R23,255
L86:
.dbline 478
cp R22,R18
cpc R23,R19
brge X6
xjmp L83
X6:
L85:
.dbline 487
; }
; }
; return nOffset;
movw R16,R20
.dbline -2
L80:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r nOffset 20 I
.dbsym r i 22 I
.dbsym r nLen 18 I
.dbsym r in 16 pc
.dbend
.dbfunc e FindOK _FindOK fI
; nOffset -> R20,R21
; i -> R22,R23
; nLen -> R18,R19
; in -> R16,R17
.even
_FindOK::
xcall push_gset2
.dbline -1
.dbline 490
; }
; int FindOK(char in[],int nLen)
; {
.dbline 492
; int nOffset,i;
; nOffset = -1;
ldi R20,-1
ldi R21,-1
.dbline 493
; if(nLen < 2) return nOffset;
cpi R18,2
ldi R30,0
cpc R19,R30
brge L90
.dbline 493
movw R16,R20
xjmp L89
L90:
.dbline 494
; for(i = 0;i < nLen;i++)
clr R22
clr R23
xjmp L95
L92:
.dbline 495
; {
.dbline 496
; if((in[i] == 'K') && (in[i - 1] == 'K'))
movw R30,R22
add R30,R16
adc R31,R17
ldd R24,z+0
cpi R24,75
brne L96
movw R30,R22
sbiw R30,1
add R30,R16
adc R31,R17
ldd R24,z+0
cpi R24,75
brne L96
.dbline 497
; {
.dbline 498
; nOffset = i - 1;
movw R20,R22
subi R20,1
sbci R21,0
.dbline 499
; break;
xjmp L94
L96:
.dbline 501
L93:
.dbline 494
subi R22,255 ; offset = 1
sbci R23,255
L95:
.dbline 494
cp R22,R18
cpc R23,R19
brlt L92
L94:
.dbline 502
; }
; }
; return nOffset;
movw R16,R20
.dbline -2
L89:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r nOffset 20 I
.dbsym r i 22 I
.dbsym r nLen 18 I
.dbsym r in 16 pc
.dbend
.dbfunc e CharToByte _CharToByte fV
; i -> R20,R21
; chrLow -> R22
; chrHi -> R10
; nLen -> R12,R13
; out -> R14,R15
; in -> R6,R7
.even
_CharToByte::
xcall push_gset5
movw R14,R18
movw R6,R16
ldd R12,y+10
ldd R13,y+11
.dbline -1
.dbline 505
; }
; void CharToByte(char in[],char out[],int nLen)
; {
.dbline 508
; char chrHi,chrLow;
; int i;
; for(i = 0;i < nLen / 2;i++)
clr R20
clr R21
xjmp L102
L99:
.dbline 509
; {
.dbline 510
; chrHi = in[2 * i];
ldi R16,2
ldi R17,0
movw R18,R20
xcall empy16s
movw R30,R16
add R30,R6
adc R31,R7
ldd R10,z+0
.dbline 511
; if(chrHi >= 48 && chrHi <= 57)
mov R24,R10
cpi R24,48
brlo L103
ldi R24,57
cp R24,R10
brlo L103
.dbline 512
; chrHi = (char)(chrHi - 48);
mov R24,R10
clr R25
sbiw R24,48
mov R10,R24
xjmp L104
L103:
.dbline 513
; else if(chrHi >= 65 && chrHi <= 70)
mov R24,R10
cpi R24,65
brlo L105
ldi R24,70
cp R24,R10
brlo L105
.dbline 514
; chrHi = (char)(chrHi - 55);
mov R24,R10
clr R25
sbiw R24,55
mov R10,R24
xjmp L106
L105:
.dbline 515
; else if(chrHi >= 97 && chrHi <= 102)
mov R24,R10
cpi R24,97
brlo L107
ldi R24,102
cp R24,R10
brlo L107
.dbline 516
; chrHi = (char)(chrHi - 87);
mov R24,R10
clr R25
subi R24,87
sbci R25,0
mov R10,R24
L107:
L106:
L104:
.dbline 518
;
; chrLow = in[2 * i + 1];
ldi R16,2
ldi R17,0
movw R18,R20
xcall empy16s
movw R30,R16
add R30,R6
adc R31,R7
ldd R22,z+1
.dbline 519
; if(chrLow >= 48 && chrLow <= 57)
cpi R22,48
brlo L109
ldi R24,57
cp R24,R22
brlo L109
.dbline 520
; chrLow = (char)(chrLow - 48);
clr R23
subi R22,48
sbci R23,0
xjmp L110
L109:
.dbline 521
; else if(chrLow >= 65 && chrLow <= 70)
cpi R22,65
brlo L111
ldi R24,70
cp R24,R22
brlo L111
.dbline 522
; chrLow = (char)(chrLow - 55);
clr R23
subi R22,55
sbci R23,0
xjmp L112
L111:
.dbline 523
; else if(chrLow >= 97 && chrLow <= 102)
cpi R22,97
brlo L113
ldi R24,102
cp R24,R22
brlo L113
.dbline 524
; chrLow = (char)(chrLow - 87);
clr R23
subi R22,87
sbci R23,0
L113:
L112:
L110:
.dbline 526
ldi R24,16
mul R24,R10
movw R2,R0
mov R4,R22
clr R5
add R2,R4
adc R3,R5
movw R30,R20
add R30,R14
adc R31,R15
std z+0,R2
.dbline 527
L100:
.dbline 508
subi R20,255 ; offset = 1
sbci R21,255
L102:
.dbline 508
ldi R18,2
ldi R19,0
movw R16,R12
xcall div16s
cp R20,R16
cpc R21,R17
brge X7
xjmp L99
X7:
.dbline 529
;
; out[i] = (char)(chrHi * 16 + chrLow);
; }
;
; return;
.dbline -2
L98:
xcall pop_gset5
.dbline 0 ; func end
ret
.dbsym r i 20 I
.dbsym r chrLow 22 c
.dbsym r chrHi 10 c
.dbsym r nLen 12 I
.dbsym r out 14 pc
.dbsym r in 6 pc
.dbend
.dbfunc e Decode _Decode fI
; nDst -> R20,R21
; nSrc -> R22,R23
; nLeft -> R10
; nByte -> R12,R13
; nLen -> R14,R15
; out -> R4,R5
; in -> R6,R7
.even
_Decode::
xcall push_gset5
movw R4,R18
movw R6,R16
ldd R14,y+10
ldd R15,y+11
.dbline -1
.dbline 532
; }
; int Decode(char in[],char out[],int nLen)
; {
.dbline 539
; int nSrc; // 源字符串的计数值
; int nDst; // 目标解码串的计数值
; int nByte; // 当前正在处理的组内字节的序号,范围是0-6
; char nLeft; // 上一字节残余的数据
;
; // 计数值初始化
; nSrc = 0;
clr R22
clr R23
.dbline 540
; nDst = 0;
clr R20
clr R21
.dbline 543
;
; // 组内字节序号和残余数据初始化
; nByte = 0;
clr R12
clr R13
.dbline 544
; nLeft = 0;
clr R10
xjmp L117
L116:
.dbline 550
;
; // 将源数据每7个字节分为一组,解压缩成8个字节
; // 循环该处理过程,直至源数据被处理完
; // 如果分组不到7字节,也能正确处理
; while(nSrc<nLen)
; {
.dbline 552
; // 将源字节右边部分与残余数据相加,去掉最高位,得到一个目标解码字节
; *in = ((*in << nByte) | nLeft) & 0x7f;
movw R30,R6
ldd R16,z+0
clr R17
movw R18,R12
xcall lsl16
movw R24,R16
mov R2,R10
clr R3
or R24,R2
or R25,R3
andi R24,127
andi R25,0
movw R30,R6
std z+0,R24
.dbline 554
; // 将该字节剩下的左边部分,作为残余数据保存起来
; nLeft = *in >> (7-nByte);
ldi R18,7
ldi R19,0
sub R18,R12
sbc R19,R13
ldd R16,z+0
clr R17
xcall asr16
mov R10,R16
.dbline 557
;
; // 修改目标串的指针和计数值
; out++;
movw R24,R4
adiw R24,1
movw R4,R24
.dbline 558
; nDst++;
subi R20,255 ; offset = 1
sbci R21,255
.dbline 561
;
; // 修改字节计数值
; nByte++;
movw R24,R12
adiw R24,1
movw R12,R24
.dbline 564
;
; // 到了一组的最后一个字节
; if(nByte == 7)
cpi R24,7
ldi R30,0
cpc R25,R30
brne L119
.dbline 565
; {
.dbline 567
; // 额外得到一个目标解码字节
; *out = nLeft;
movw R30,R4
std z+0,R10
.dbline 570
;
; // 修改目标串的指针和计数值
; out++;
movw R24,R30
adiw R24,1
movw R4,R24
.dbline 571
; nDst++;
subi R20,255 ; offset = 1
sbci R21,255
.dbline 574
;
; // 组内字节序号和残余数据初始化
; nByte = 0;
clr R12
clr R13
.dbline 575
; nLeft = 0;
clr R10
.dbline 576
; }
L119:
.dbline 579
movw R24,R6
adiw R24,1
movw R6,R24
.dbline 580
subi R22,255 ; offset = 1
sbci R23,255
.dbline 581
L117:
.dbline 549
cp R22,R14
cpc R23,R15
brge X8
xjmp L116
X8:
.dbline 583
;
; // 修改源串的指针和计数值
; in++;
; nSrc++;
; }
;
; *out = 0;
clr R2
movw R30,R4
std z+0,R2
.dbline 586
;
; // 返回目标串长度
; return nDst;
movw R16,R20
.dbline -2
L115:
xcall pop_gset5
.dbline 0 ; func end
ret
.dbsym r nDst 20 I
.dbsym r nSrc 22 I
.dbsym r nLeft 10 c
.dbsym r nByte 12 I
.dbsym r nLen 14 I
.dbsym r out 4 pc
.dbsym r in 6 pc
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -