vbe*_*nar 5 assembly arm thumb cortex-m raspberry-pi-pico
我有以下说明:mov r1, r7
在我的汇编代码中,但在研究反汇编之后,我发现实际生成的代码是adds r1, r7, #0
我检查了ARMv6-M架构参考手册,发现有一条MOVS <Rd>,<Rm>
指令(A6.7.40)与ADDS
.
虽然这不是一个大问题,但我仍然很困惑为什么汇编程序会替换我用不同操作码编写的代码。根据我正在阅读的书,所有非跳转指令都需要 1 个周期(我更希望汇编器是愚蠢的,而不是试图为我优化某些东西)。
我正在使用 Raspberry Pi Pico SDK,它使用 GNU 汇编器,据我所知。
我的所有代码都是用 helloworld.S 编写的,完整的源代码是:
.thumb_func
.global main
main:
mov r7, #0
bl stdio_init_all
loop:
ldr r0, =helloworld
add r7, #1
mov r1, r7
bl printf
mov r0, #250
bl sleep_ms
b loop
.data
.align 4
helloworld: .asciz "Hello World %d\n"
Run Code Online (Sandbox Code Playgroud)
您正在编写 Thumb 模式汇编代码,并且 RPi Pico 支持 Thumb-2,这意味着实际输出将采用UAL 格式。
如果参考ARMv6-M参考手册,表D4-1指定了UAL之前的Thumb语法到UAL语法的转换,值得注意的是:
UAL 之前的 Thumb 语法 | 等效的 UAL 语法 | 笔记 |
---|---|---|
MOV <Rd>, <Rm> |
ADDS <Rd>, <Rm>, #0 |
如果<Rd> 和<Rm> 都是R0-R7。 |
MOV <Rd>, <Rm> |
否则。 |
正如 Tom 所建议的,.syntax unified
如果您想编写 UAL 代码(然后将按原样实际组装),您可以添加。
归档时间: |
|
查看次数: |
1382 次 |
最近记录: |