|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2014-2-26 13:10:23
|
显示全部楼层
本帖最后由 shuidiyu 于 2014-2-26 13:14 编辑
最新情况更新,关于下面这段代码
- SendByte(UART_Out[0]);
-
- for(i=0;i<*(send+2);i++)
- {
- *(send+3+2*i) = UART_Out[address];
- address++;
- *(send+4+2*i) = UART_Out[address];
- address++;
- }
- SendByte(UART_Out[0]);
复制代码
汇编程序如下- 187: SendByte(UART_Out[0]);
- 188:
- C:0x025F 90000D MOV DPTR,#UART_Out(0x000D)
- C:0x0262 E0 MOVX A,@DPTR
- C:0x0263 FF MOV R7,A
- C:0x0264 120003 LCALL SendByte(C:0003)
- 189: for(i=0;i<*(send+2);i++)
- C:0x0267 E4 CLR A
- C:0x0268 FF MOV R7,A
- C:0x0269 12035A LCALL L?0017(C:035A)
- C:0x026C FD MOV R5,A
- C:0x026D EF MOV A,R7
- C:0x026E C3 CLR C
- C:0x026F 9D SUBB A,R5
- C:0x0270 5017 JNC C:0289
- 190: {
- 191: *(send+3+2*i) = UART_Out[address];
- C:0x0272 1203AA LCALL L?0023(C:03AA)
- C:0x0275 E9 MOV A,R1
- C:0x0276 2403 ADD A,#0x03
- 192: address++;
- C:0x0278 120378 LCALL L?0020(C:0378)
- 193: *(send+4+2*i) = UART_Out[address];
- C:0x027B 1203AA LCALL L?0023(C:03AA)
- C:0x027E 12036D LCALL L?0019(C:036D)
- C:0x0281 2404 ADD A,#0x04
- 194: address++;
- C:0x0283 120378 LCALL L?0020(C:0378)
- 195: }
- 196:
- C:0x0286 0F INC R7
- C:0x0287 80E0 SJMP C:0269
- 197: SendByte(UART_Out[0]);
- 198:
- 199:
- C:0x0289 90000D MOV DPTR,#UART_Out(0x000D)
- C:0x028C E0 MOVX A,@DPTR
- C:0x028D FF MOV R7,A
- C:0x028E 120003 LCALL SendByte(C:0003)
复制代码
当*(send+2)为2和4时,数据正确,当值为6时, UART_Out[]数组前两个数就会发生改变!
下面为for循环中调用的汇编
- C:0x035A 90001C MOV DPTR,#0x001C
- C:0x035D E0 MOVX A,@DPTR
- C:0x035E FB MOV R3,A
- C:0x035F A3 INC DPTR
- C:0x0360 E0 MOVX A,@DPTR
- C:0x0361 FA MOV R2,A
- C:0x0362 A3 INC DPTR
- C:0x0363 E0 MOVX A,@DPTR
- C:0x0364 F9 MOV R1,A
- C:0x0365 900002 MOV DPTR,#0x0002
- C:0x0368 0202E1 LJMP C?CLDOPTR(C:02E1)
- C:0x036B E0 MOVX A,@DPTR
- C:0x036C FF MOV R7,A
- C:0x036D 90001C MOV DPTR,#0x001C
- C:0x0370 E0 MOVX A,@DPTR
- C:0x0371 FB MOV R3,A
- C:0x0372 A3 INC DPTR
- C:0x0373 E0 MOVX A,@DPTR
- C:0x0374 FA MOV R2,A
- C:0x0375 A3 INC DPTR
- C:0x0376 E0 MOVX A,@DPTR
- C:0x0377 22 RET
复制代码 |
|