【发布时间】:2019-03-02 14:06:47
【问题描述】:
我们最近开始学习汇编代码,并且在这个主题上有了家庭作业。我们一直在研究 ARM,必须在 Raspberry Pi 中编写代码。我的一个家庭作业问题是这样的:
编写实现以下 C 函数的汇编函数:
int32_t shiftS32(int32_t x, int32_p) // 返回 x*2^p for p = -31..31
这是我对这个问题的回答:
.global shiftS32
.text
shiftS32:
PUSH {R0}
CMP R0, #0
BMI ENDA
PUSH {R1}
CMP R1, #0
BMI END1
POP {R1}
MOV R0, R0, LSL R1
BX LR
END1:
POP {R1}
SUB R1, #0
NEG R1, R1
MOV R0, R0, LSR R1
BX LR
ENDA:
PUSH {R1}
CMP R1, #0
BMI END
POP {R1}
MOV R0, R0, LSL R1
BX LR
END:
POP {R1}
SUB R1, #0
NEG R1, R1
MOV R0, R0, ASR R1
BX LR
此代码有效,但我认为我做得过火了。 有没有办法用更少的行来做同样的事情?
【问题讨论】: