Код C:
int main() {
int x = 10;
int y = 5;
int z = 20;
int min = y;
if (x < min) {min = x;}
if (z < min) {min = z;}
return min;
}
Не используйте ldr
и str
, поскольку они сохраняют значение регистров в памяти.Например, str rX, [rY]
означает использование значения «rY» в качестве адреса памяти для хранения значения «rX».Нет необходимости использовать память, когда у вас есть много доступных регистров.Например,
mov r0, #5 ; min = y = #5
mov r1, #10 ; x = 10
mov r2, #20 ; z = 20
cmp r1, r0 ; if (x < min)
movlt r0, r1 ; min = x
cmp r2, r0 ; if (z < min)
movlt r0, r2 ; min = z
mov pc, lr ; return min (is r0)
близко, если не завершено.Пожалуйста, просмотрите мой регистр использования, как некоторые могут быть транспонированы.Также вы можете подумать, нужно ли вам подписывать или подписывать.Ваш оригинал использовал bge done
, который не будет работать, если 'x> y> z'.Вы должны использовать «меньше чем» в соответствии с кодом «C».
Я бы предложил не использовать компилятор , чтобы начать с для очень простого кода, подобного этому.Если у вас много переменных, начните с компилятора.После того, как вы попытаетесь что-то сделать, посмотрите, что делает компилятор.В некоторых случаях у вас может быть лучшая структурная идея, чем у компилятора;вероятно, не для численной проблемы, как это.Если вы сразу перейдете к компилятору, вам будет сложнее подумать об альтернативных атаках на кодирование функции.Часто идеи как из вашей первоначальной попытки, так и из компилятора объединяются для чего-то довольно приятного.