在ARM汇编程序中,解决未对齐内存访问问题的方法是使用LDRD和STRD指令而不是LDR和STR指令,因为LDRD和STRD指令允许访问未对齐的内存地址。例如:
MOV R1, #0x12345678 ; 假设该地址未对齐
LDRD R2, R3, [R1] ; 使用LDRD指令加载数据
此处R1是未对齐的地址,使用LDRD指令可以将两个32位的半字(即64位字)同时加载到R2和R3寄存器中。
类似地,可以使用STRD指令进行未对齐内存写操作。例如:
MOV R1, #0x12345678 ; 假设该地址未对齐
MOV R2, #0xabcdef01 ; 假设要写入内存的数据
STRD R2, R3, [R1] ; 使用STRD指令将数据写入内存
此处R1是未对齐的地址,使用STRD指令可以将R2和R3寄存器中的数据组成一个64位字写入R1所指向的内存地址中。
上一篇:ARM汇编程序的异常行为