浏览Rust Embedded的发现书,我经常看到ARM汇编代码如下:
08000248 <registers::__cortex_m_rt_main::h199f1359501d5c71>:
8000248: push {r7, lr}
800024a: mov r7, sp
800024c: bl #0x22
8000250: movw r0, #0x1018
8000254: mov.w r1, #0x200
8000258: movt r0, #0x4800
800025c: str r1, [r0]
800025e: mov.w r1, #0x800
8000262: str r1, [r0]
8000264: mov.w r1, #0x2000000
8000268: str r1, [r0]
800026a: mov.w r1, #0x8000000
800026e: str r1, [r0]
8000270: b #-0x4 <registers::__cortex_m_rt_main::h199f1359501d5c71+0x28>
我读了一些ARM汇编,我知道mov
可以取32位操作数,也可以取16位立即数(对于32位系统(。movt
/movw
指令允许我指定32位寄存器的高/低字节,但在mov.w
上找不到任何引用。movw
和mov.w
之间有什么区别?
指令宽度说明符.W
和.N
控制T32指令编码的大小。
就诊指导书宽度说明符