📄 shell.lis
字号:
01D4 1181 ldd R17,z+1
01D6 00D0 rcall _serial_send
01D8 .dbline 107
01D8 ; serial_send(":\t");
01D8 00E0 ldi R16,<L61
01DA 10E0 ldi R17,>L61
01DC 00D0 rcall _serial_send
01DE .dbline 108
01DE ; serial_send(InnerCmd[i].help);
01DE 06E0 ldi R16,6
01E0 142F mov R17,R20
01E2 0102 muls R16,R17
01E4 F001 movw R30,R0
01E6 80E0 ldi R24,<_InnerCmd+2
01E8 90E0 ldi R25,>_InnerCmd+2
01EA E80F add R30,R24
01EC F91F adc R31,R25
01EE 0081 ldd R16,z+0
01F0 1181 ldd R17,z+1
01F2 00D0 rcall _serial_send
01F4 .dbline 109
01F4 ; i++;
01F4 4395 inc R20
01F6 .dbline 110
01F6 ; }
01F6 L59:
01F6 .dbline 105
01F6 06E0 ldi R16,6
01F8 142F mov R17,R20
01FA 0102 muls R16,R17
01FC F001 movw R30,R0
01FE 80E0 ldi R24,<_InnerCmd
0200 90E0 ldi R25,>_InnerCmd
0202 E80F add R30,R24
0204 F91F adc R31,R25
0206 2080 ldd R2,z+0
0208 3180 ldd R3,z+1
020A 2220 tst R2
020C D1F6 brne L58
020E 3320 tst R3
0210 C1F6 brne L58
0212 X14:
0212 .dbline 111
0212 ; }else{
0212 16C0 rjmp L57
0214 L56:
0214 .dbline 111
0214 .dbline 112
0214 ; i=GetCmdMatch(argv[1]);
0214 FB01 movw R30,R22
0216 0281 ldd R16,z+2
0218 1381 ldd R17,z+3
021A 56D0 rcall _GetCmdMatch
021C 402F mov R20,R16
021E .dbline 113
021E ; if (i<0)
021E 0030 cpi R16,0
0220 24F4 brge L63
0222 X15:
0222 .dbline 114
0222 ; serial_send("Haven't this command.\n");
0222 00E0 ldi R16,<L65
0224 10E0 ldi R17,>L65
0226 00D0 rcall _serial_send
0228 0BC0 rjmp L64
022A L63:
022A .dbline 116
022A ; else
022A ; serial_send(InnerCmd[i].help);
022A 06E0 ldi R16,6
022C 142F mov R17,R20
022E 0102 muls R16,R17
0230 F001 movw R30,R0
0232 80E0 ldi R24,<_InnerCmd+2
0234 90E0 ldi R25,>_InnerCmd+2
0236 E80F add R30,R24
0238 F91F adc R31,R25
023A 0081 ldd R16,z+0
023C 1181 ldd R17,z+1
023E 00D0 rcall _serial_send
0240 L64:
0240 .dbline 117
0240 ; }
0240 L57:
0240 .dbline 118
0240 ; return 0;
0240 0027 clr R16
0242 1127 clr R17
0244 .dbline -2
0244 L55:
0244 .dbline 0 ; func end
0244 00C0 rjmp pop_xgsetF00C
0246 .dbsym r i 20 C
0246 .dbsym r argv 22 ppc
0246 .dbsym r argc 10 c
0246 .dbend
0246 .dbfunc e ParseArgs _ParseArgs fV
0246 ; i -> R10
0246 ; state -> R22
0246 ; c -> R20,R21
0246 ; argv -> y+8
0246 ; argc -> R12,R13
0246 ; cmdline -> R10,R11
.even
0246 _ParseArgs::
0246 00D0 rcall push_xgsetF03C
0248 6901 movw R12,R18
024A 5801 movw R10,R16
024C .dbline -1
024C .dbline 121
024C ; }
024C ; void ParseArgs(char *cmdline,signed char *argc,char** argv)
024C ; {
024C .dbline 126
024C ; #define STATE_WHITESPACE 0
024C ; #define STATE_WORD 1
024C ;
024C ; char *c;
024C ; char state = STATE_WHITESPACE;
024C 6627 clr R22
024E .dbline 129
024E ; char i;
024E ;
024E ; *argc = 0;
024E 2224 clr R2
0250 F601 movw R30,R12
0252 2082 std z+0,R2
0254 .dbline 131
0254 ;
0254 ; if(strlen(cmdline) == 0)
0254 8501 movw R16,R10
0256 00D0 rcall _strlen
0258 0030 cpi R16,0
025A 0107 cpc R16,R17
025C 09F4 brne L68
025E X16:
025E .dbline 132
025E ; return;
025E 33C0 rjmp L67
0260 L68:
0260 .dbline 135
0260 ;
0260 ; /* convert all tabs into single spaces */
0260 ; c = cmdline;
0260 A501 movw R20,R10
0262 08C0 rjmp L71
0264 L70:
0264 .dbline 137
0264 ; while(*c != '\0')
0264 ; {
0264 .dbline 138
0264 ; if(*c == '\t')
0264 FA01 movw R30,R20
0266 8081 ldd R24,z+0
0268 8930 cpi R24,9
026A 11F4 brne L73
026C X17:
026C .dbline 139
026C ; *c = ' ';
026C 80E2 ldi R24,32
026E 8083 std z+0,R24
0270 L73:
0270 .dbline 140
0270 ; c++;
0270 4F5F subi R20,255 ; offset = 1
0272 5F4F sbci R21,255
0274 .dbline 141
0274 ; }
0274 L71:
0274 .dbline 136
0274 FA01 movw R30,R20
0276 2080 ldd R2,z+0
0278 2220 tst R2
027A A1F7 brne L70
027C X18:
027C .dbline 143
027C ;
027C ; c = cmdline;
027C A501 movw R20,R10
027E .dbline 144
027E ; i = 0;
027E AA24 clr R10
0280 1CC0 rjmp L76
0282 L75:
0282 .dbline 148
0282 ;
0282 ; /* now find all words on the command line */
0282 ; while(*c != '\0')
0282 ; {
0282 .dbline 149
0282 ; if(state == STATE_WHITESPACE)
0282 6623 tst R22
0284 89F4 brne L78
0286 X19:
0286 .dbline 150
0286 ; {
0286 .dbline 151
0286 ; if(*c != ' ')
0286 FA01 movw R30,R20
0288 8081 ldd R24,z+0
028A 8032 cpi R24,32
028C A1F0 breq L79
028E X20:
028E .dbline 152
028E ; {
028E .dbline 153
028E ; argv[i] = c; //将argv[i]指向c
028E EA2D mov R30,R10
0290 FF27 clr R31
0292 EE0F lsl R30
0294 FF1F rol R31
0296 0884 ldd R0,y+8
0298 1984 ldd R1,y+9
029A E00D add R30,R0
029C F11D adc R31,R1
029E 5183 std z+1,R21
02A0 4083 std z+0,R20
02A2 .dbline 154
02A2 ; i++;
02A2 A394 inc R10
02A4 .dbline 155
02A4 ; state = STATE_WORD;
02A4 61E0 ldi R22,1
02A6 .dbline 156
02A6 ; }
02A6 .dbline 157
02A6 ; }
02A6 07C0 rjmp L79
02A8 L78:
02A8 .dbline 159
02A8 ; else
02A8 ; { /* state == STATE_WORD */
02A8 .dbline 160
02A8 ; if(*c == ' ')
02A8 FA01 movw R30,R20
02AA 8081 ldd R24,z+0
02AC 8032 cpi R24,32
02AE 19F4 brne L82
02B0 X21:
02B0 .dbline 161
02B0 ; {
02B0 .dbline 162
02B0 ; *c = '\0';
02B0 2224 clr R2
02B2 2082 std z+0,R2
02B4 .dbline 163
02B4 ; state = STATE_WHITESPACE;
02B4 6627 clr R22
02B6 .dbline 164
02B6 ; }
02B6 L82:
02B6 .dbline 165
02B6 ; }
02B6 L79:
02B6 .dbline 166
02B6 ; c++;
02B6 4F5F subi R20,255 ; offset = 1
02B8 5F4F sbci R21,255
02BA .dbline 167
02BA ; }
02BA L76:
02BA .dbline 147
02BA FA01 movw R30,R20
02BC 2080 ldd R2,z+0
02BE 2220 tst R2
02C0 01F7 brne L75
02C2 X22:
02C2 .dbline 169
02C2 ;
02C2 ; *argc = i;
02C2 F601 movw R30,R12
02C4 A082 std z+0,R10
02C6 .dbline -2
02C6 L67:
02C6 .dbline 0 ; func end
02C6 00C0 rjmp pop_xgsetF03C
02C8 .dbsym r i 10 c
02C8 .dbsym r state 22 c
02C8 .dbsym r c 20 pc
02C8 .dbsym l argv 8 ppc
02C8 .dbsym r argc 12 pC
02C8 .dbsym r cmdline 10 pc
02C8 .dbend
02C8 .dbfunc e GetCmdMatch _GetCmdMatch fC
02C8 ; i -> R10
02C8 ; cmd -> R12,R13
.even
02C8 _GetCmdMatch::
02C8 00D0 rcall push_xgset003C
02CA 6801 movw R12,R16
02CC .dbline -1
02CC .dbline 174
02CC ; #undef STATE_WHITESPACE
02CC ; #undef STATE_WORD
02CC ; }
02CC ; signed char GetCmdMatch(char * cmd)
02CC ; {
02CC .dbline 175
02CC ; char i=0;
02CC AA24 clr R10
02CE 11C0 rjmp L86
02D0 L85:
02D0 .dbline 176
02D0 ; while(InnerCmd[i].cmd){
02D0 .dbline 177
02D0 ; if (strcmp(InnerCmd[i].cmd,cmd)==0) return i;
02D0 9601 movw R18,R12
02D2 86E0 ldi R24,6
02D4 8A9D mul R24,R10
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -