2016-02-21 2 views
1

Я написал программу ARM сборки для пи малины 2, она принимает цифру:ARM программа сборки не сохраняет полный номер в регистре

a = 2 
b = 3 
c = 4 
x = 5 
y = 6 

z = a*x*x+b*x*y+c*y*y 

вот как это выглядит:

.global _start 
_start: 
    MOV R1, #a 
    MOV R2, #b 
    MOV R3, #c 
    MOV R4, #x 
    MOV R5, #y 
    @z = a*x*x+b*x*y+c*y*y 

    @R1 = a*x*x = 2*5*5 = 50 
    MUL R1, R4, R1 
    MUL R1, R4, R1 
    @R2 = b*x*y = 3*5*6 = 90 
    MUL R2, R4, R2 
    MUL R2, R5, R2 
    @R3 = c*y*y = 4*6*6 = 144 
    MUL R3, R5, R3 
    MUL R3, R5, R3 

    @ R2 = R1 + R2 + R3 OR 
    @ z = (a*x*x)+(b*x*y)+(c*y*y) = 50 + 90 + 144 = 284 
    ADD R1, R2, R1 
    ADD R0, R1, R3 
_exit: 
    MOV R7, #1 
    SWI 0 
.data 
.equ a, 2 
.equ b, 3 
.equ c, 4 
.equ x, 5 
.equ y, 6 

Однако когда я компилирую и запускаю программу и набираю 'echo $?' Я получаю 28 как результат вместо полного 284, почему это?

+0

Поскольку [статус выхода ребенка имеет 8-битное значение] (http: //stackoverflow.com/questions/33288356/c-retrieving-a-childs-exit-status-that-is-larger-than-8-bits) –

ответ

3

Использование эха $? Будет возвращен код ошибки mod 256, так что вы возвращаете 284% 256 = 28. U вместо этого следует использовать функцию printf для печати на консоль

+0

Хорошо. Вы потеряли меня, это моя первая ARM-программа , Не является ли функция printf функцией C? – James

+0

Да, но помните, что c и сборка очень тесно связаны, поэтому из сборки вы можете вызвать некоторые нативные c-функции, такие как printf –

Смежные вопросы