Мы недавно начали изучать ассемблерный код, и у нас есть домашнее задание по этой теме.Мы изучали ARM и должны писать в Raspberry Pi.Один из моих домашних заданий читается так:
Напишите функции сборки, которые реализуют следующие функции C:
int32_t shiftS32 (int32_t x, int32_p) // return x * 2 ^ pдля 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
Этот код работает, но, думаю, я переусердствовал с этим. Есть ли способ сделать то же самое, но в несколько строк?