ARM指令格式详解
ARM 指令里的LDR
和STR
系列用法挺多的,尤其是在半字节和有符号数据时,这几条指令真的是好帮手。像LDRSB
这种,能把一个带符号的字节扩展成 32 位整数,高 24 位会自动用符号位补上。用来串口数据、音频采样那类数据的时候顺手。
LDRH和LDRSH就更常见了,一个是加载无符号半字,一个是带符号的。如果你搞嵌入式或者芯片底层开发,那这俩指令几乎每天都能碰上。指令格式看着有点绕,其实就是LDR{cond}H Rd, [Rn, #offset]
这种形式,注意地址对齐就行,响应也快。
STRH是用来存半字的,直接把Rd
里低 16 位写出去,适合对内存映射 IO 地址做精细操作。你要是写驱动或者搞裸机开发,这种精细控制简直太香了。值得一提的是,ARM 不会区分你存的是有符号还是无符号,存的就是原始 16 位二进制。
如果你还不太清楚符号扩展这回事,可以看看C++的符号扩展,对理解LDRSB
和LDRSH
有。另外,C 语言版本的解释也比较清楚。
你在写汇编或者调试底层程序时,只要碰到字节或半字数据,优先考虑用这几条指令。逻辑清晰、效率也高,就是注意读写地址别越界,ARM 对地址对齐还是蛮挑的。
如果你刚接触 ARM 汇编,可以先从LDRH
和STRH
开始练手,熟悉下内存操作的细节,再去搞带符号扩展的指令,节奏刚刚好。
898.5KB
文件大小:
评论区