我正在为学校开发一个装配程序,而且我遇到了一个问题"。
我的老师给了我一个已编码的宏WAIT
(我不能修改)有这个主体:
.macro WAIT delay
LDR r0, =\delay
@ code
.endm
所以我明白我要传递一个值(即0xCAFE
)。
由于我不喜欢代码冗余,我想在一个函数中调用此宏,该函数将寄存器r1
作为传递给WAIT
宏的延迟。
我有什么方法可以做到:WAIT value(r1)
?
感谢您的帮助!
答案 0 :(得分:1)
假设这是一个类似ARM的处理器,并且代码/文字没有放在只读内存中,可能会变得聪明并使用强制使用文字的WAIT宏实例:
LDR R0, =\delay
例如delay == 0x55555555,在内存中生成一个常量,使指令
LDR R0,[PC + offset]
例如,假设这是文字用于LDR RX,= literal的唯一实例,那么这可能有效:
; ...
LEA R2,delay0
STR R1,[R2]
WAIT =0x55555555 ;force a literal at delay0
; ...
delay0 ;address of literal 0x55555555
LTORG
正如原始问题中所评论的那样,最好创建一个新的宏。宏内联实现也可能使其非常精确。