📄 test.lst
字号:
\ 000002E6 91E0.... LDS R30,LWRD(UartTxWrPtr)
\ 000002EA E0F0 LDI R31,LOW(0)
\ 000002EC .... SUBI R30,LOW(-(UartTxBuf))
\ 000002EE .... SBCI R31,HIGH(-(UartTxBuf))
\ 000002F0 8380 ST Z,R24
204 UartTxWrPtr++; /* Prepare for next character */
\ 000002F2 9100.... LDS R16,LWRD(UartTxWrPtr)
\ 000002F6 9503 INC R16
\ 000002F8 9300.... STS LWRD(UartTxWrPtr),R16
205 UartTxCount++; /* Increment number of characters to send */
\ 000002FC 9100.... LDS R16,LWRD(UartTxCount)
\ 00000300 9503 INC R16
\ 00000302 9300.... STS LWRD(UartTxCount),R16
206 } else {
\ 00000306 C005 RJMP ?0067
\ ?0066:
207 UDR = c; /* Write first char directly to the UART */
\ 00000308 B98C OUT LOW(12),R24
208 UartTxCount = 1;
\ 0000030A E001 LDI R16,1
\ 0000030C 9300.... STS LWRD(UartTxCount),R16
209 UCR |= 0x40; /* Enable UART transmit complete interrupt */
\ 00000310 9A56 SBI LOW(10),LOW(6)
\ ?0067:
210 }
211 OS_EXIT_CRITICAL();
\ 00000312 930A DW LWRD(37642)
\ 00000314 910F DW LWRD(37135)
\ 00000316 BF0F DW LWRD(48911)
\ 00000318 9109 DW LWRD(37129)
212 }
\ 0000031A 9621 ADIW R28,LOW(1)
\ 0000031C 9189 LD R24,Y+
\ 0000031E 9508 RET
\ ; c R24
\ PutString:
213
214
215 void PutString (const char *s)
216 {
\ 00000320 .... RCALL ?PROLOGUE2_L09
\ 00000322 2F80 MOV R24,R16
\ 00000324 2F91 MOV R25,R17
\ ?0069:
217 while (*s != '\0') {
\ 00000326 2FE8 MOV R30,R24
\ 00000328 2FF9 MOV R31,R25
\ 0000032A 8100 LD R16,Z
\ 0000032C 2300 TST R16
\ 0000032E F029 BREQ ?0068
218 PutChar(*s++);
\ 00000330 9101 LD R16,Z+
\ 00000332 2F8E MOV R24,R30
\ 00000334 2F9F MOV R25,R31
\ 00000336 DFC8 RCALL PutChar
219 }
220 }
\ 00000338 CFF6 RJMP ?0069
\ ?0068:
\ 0000033A E0E2 LDI R30,2
\ 0000033C .... RJMP ?EPILOGUE_B2_L09
\ ; s R24-R25
\ SPrintDec:
221
222
223 void SPrintDec(char *s, INT32U x, INT8U n, char c)
224 {
\ 0000033E .... RCALL ?PROLOGUE8_L09
\ 00000340 2E60 MOV R6,R16
\ 00000342 2E71 MOV R7,R17
\ 00000344 2F84 MOV R24,R20
\ 00000346 2F95 MOV R25,R21
\ 00000348 2FA6 MOV R26,R22
\ 0000034A 2FB7 MOV R27,R23
\ 0000034C 8458 LDD R5,Y+8
225 INT8U i;
226
227
228 s[n] = '\0';
\ 0000034E E000 LDI R16,LOW(0)
\ 00000350 2DE5 MOV R30,R5
\ 00000352 E0F0 LDI R31,LOW(0)
\ 00000354 0DE6 ADD R30,R6
\ 00000356 1FF1 ADC R31,R17
\ 00000358 8300 ST Z,R16
229 for (i = 0; i < n; i++) {
\ 0000035A 2444 CLR R4
\ ?0072:
\ 0000035C 1445 CP R4,R5
\ 0000035E F488 BRCC ?0071
230 s[n - i - 1] = '0' + (x % 10);
\ 00000360 DF40 RCALL ?0101
\ 00000362 5D40 SUBI R20,LOW(208)
\ 00000364 2DE5 MOV R30,R5
\ 00000366 E0F0 LDI R31,LOW(0)
\ 00000368 19E4 SUB R30,R4
\ 0000036A 40F0 SBCI R31,LOW(0)
\ 0000036C 0DE6 ADD R30,R6
\ 0000036E 1DF7 ADC R31,R7
\ 00000370 9731 SBIW R30,LWRD(1)
\ 00000372 8340 ST Z,R20
231 x /= 10;
\ 00000374 DF36 RCALL ?0101
\ 00000376 2F80 MOV R24,R16
\ 00000378 2F91 MOV R25,R17
\ 0000037A 2FA2 MOV R26,R18
\ 0000037C 2FB3 MOV R27,R19
\ 0000037E 9443 INC R4
\ 00000380 CFED RJMP ?0072
\ ?0071:
232 }
233 for (i = 0; i < (n - 1); i++) {
\ 00000382 2444 CLR R4
\ ?0076:
\ 00000384 2D05 MOV R16,R5
\ 00000386 E010 LDI R17,LOW(0)
\ 00000388 5001 SUBI R16,LOW(1)
\ 0000038A 4010 SBCI R17,LOW(0)
\ 0000038C E030 LDI R19,LOW(0)
\ 0000038E 1640 CP R4,R16
\ 00000390 0731 CPC R19,R17
\ 00000392 F44C BRGE ?0075
234 if (s[i] == '0') {
\ 00000394 D00A RCALL ?0110
\ 00000396 8100 LD R16,Z
\ 00000398 3300 CPI R16,LOW(48)
\ 0000039A F429 BRNE ?0075
235 s[i] = c;
\ 0000039C 8509 LDD R16,Y+9
\ 0000039E D005 RCALL ?0110
\ 000003A0 8300 ST Z,R16
236 } else {
237 break;
\ 000003A2 9443 INC R4
238 }
239 }
240 }
\ 000003A4 CFEF RJMP ?0076
\ ?0075:
\ 000003A6 E0EA LDI R30,10
\ 000003A8 .... RJMP ?EPILOGUE_B8_L09
\ ?0110:
\ 000003AA 2DE4 MOV R30,R4
\ 000003AC E0F0 LDI R31,LOW(0)
\ 000003AE 0DE6 ADD R30,R6
\ 000003B0 1DF7 ADC R31,R7
\ 000003B2 9508 RET
\ ; x R24-R27
\ ; i R4
\ ; n R5
\ ; s R6-R7
\ random:
241
242
243 INT8U random (INT8U n)
244 {
\ 000003B4 .... RCALL ?PROLOGUE2_L09
\ 000003B6 2F80 MOV R24,R16
245 RndNext = RndNext * 1103515245 + 12345;
\ 000003B8 .... LDI R30,LOW(RndNext)
\ 000003BA .... LDI R31,(RndNext >> 8)
\ 000003BC 8100 LDD R16,Z+0
\ 000003BE 8111 LDD R17,Z+1
\ 000003C0 8122 LDD R18,Z+2
\ 000003C2 8133 LDD R19,Z+3
\ 000003C4 E64D LDI R20,LOW(109)
\ 000003C6 E45E LDI R21,LOW(78)
\ 000003C8 EC66 LDI R22,LOW(198)
\ 000003CA E471 LDI R23,65
\ 000003CC .... RCALL ?L_MUL_L03
\ 000003CE 5C07 SUBI R16,LOW(199)
\ 000003D0 4C1F SBCI R17,LOW(207)
\ 000003D2 4F2F SBCI R18,LOW(255)
\ 000003D4 4F3F SBCI R19,LOW(255)
\ 000003D6 .... LDI R30,LOW(RndNext)
\ 000003D8 8300 STD Z+0,R16
\ 000003DA 8311 STD Z+1,R17
\ 000003DC 8322 STD Z+2,R18
\ 000003DE 8333 STD Z+3,R19
246 return ((INT8U)(RndNext / 256) % (n + 1));
\ 000003E0 2F01 MOV R16,R17
\ 000003E2 E010 LDI R17,LOW(0)
\ 000003E4 E090 LDI R25,LOW(0)
\ 000003E6 9601 ADIW R24,LWRD(1)
\ 000003E8 2F48 MOV R20,R24
\ 000003EA 2F59 MOV R21,R25
\ 000003EC .... RCALL ?SS_DIVMOD_L02
\ 000003EE 2F04 MOV R16,R20
247 }
\ 000003F0 E0E2 LDI R30,2
\ 000003F2 .... RJMP ?EPILOGUE_B2_L09
\ ; n R24
\ PutDec:
248
249
250 void PutDec (INT8U x2)
251 {
\ 000003F4 .... RCALL ?PROLOGUE3_L09
\ 000003F6 2FA0 MOV R26,R16
252 INT8U x0;
253 INT8U x1;
254
255
256 x0 = (x2 % 10);
\ 000003F8 E04A LDI R20,10
\ 000003FA .... RCALL ?UC_DIVMOD_L01
\ 000003FC 2F94 MOV R25,R20
257 x2 /= 10;
\ 000003FE D014 RCALL ?0100
258 x1 = (x2 % 10);
\ 00000400 E04A LDI R20,10
\ 00000402 .... RCALL ?UC_DIVMOD_L01
\ 00000404 2F84 MOV R24,R20
259 x2 /= 10;
\ 00000406 D010 RCALL ?0100
260 if (x2) {
\ 00000408 2300 TST R16
\ 0000040A F011 BREQ ?0083
261 PutChar(x2 + '0');
\ 0000040C 5D00 SUBI R16,LOW(208)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -