CDS 未对齐访问异常

来源:互联网 发布:地名地址数据规范 编辑:程序博客网 时间:2024/05/21 14:51

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这个地址


174                    while(*ptr !='\0')

8000cf8e: 8708    ld      r7, (r8, 0)           将r8+0保存到r7中,

8000cf90: a707    ldb     r7, (r7, 0)         将r7+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、后续步骤。。。

暂无。。。

1 0