1、代码如下
2、汇编如下
3、分析
r0:栈地址
r15:返回时的跳转地址
r2:第一个传入参数的地址
8000cf6e: 8005 ld r0, (r5, 0) 设置栈地址
8000cf70: 24f0 subi r0, r0, 16 栈空间
8000cf72: 9f20 st r15, (r0, 8) 将r15保存到 r0+8 这个地址上,r15就可以用了
8000cf74: 9830 st r8, (r0, 12) 将r8保存到r0+12这个地址上,r8就可以用了
8000cf76: 1208 mov r8, r0 将r0保存到r8中,
8000cf78: 9208 st r2, (r8, 0) 将r2保存到r8+0中,
174 while(*ptr !='\0')
8000cf7a: f009 br 0x8000cf8e 跳转到0x8000cf8e这个地址
8000cf8e: 8708 ld r7, (r8, 0) 将r8+0保存到r7中,
8000cf92: 0147 zextb r7, r7
8000cf94: 2a07 cmpnei r7, 0
8000cf96: e7f2 bt 0x8000cf7c
176 Uart_SendData(UART1,*ptr);
8000cf7c: 8708 ld r7, (r8, 0) 将r8+0保存到r7中,
8000cf7e: a707 ldb r7, (r7, 0) 将r7+0保存到r7中,
8000cf80: 0147 zextb r7, r7
8000cf82: 6012 movi r2, 1 r2表示数字1
8000cf84: 1273 mov r3, r7 r3表示字符‘X’
8000cf86: 7f21 jsri 0x8002176C // 0x8002176c <Uart_SendData>
177 ptr++;
8000cf88: 8708 ld r7, (r8, 0) 将r8+0保存到r7中,
8000cf8a: 2007 addi r7, r7, 1 r7下移1
8000cf8c: 9708 st r7, (r8, 0) 将r7保存到r8+0中,
174 while(*ptr !='\0')
8000cf8e: 8708 ld r7, (r8, 0)
8000cf90: a707 ldb r7, (r7, 0)
8000cf92: 0147 zextb r7, r7
8000cf94: 2a07 cmpnei r7, 0
8000cf96: e7f2 bt 0x8000cf7c
179 }
4、错误, 可以发现是8000cf8e: 8708 ld r7, (r8, 0) 中的r7错误!!!
5、后续步骤。。。
暂无。。。