Как вернуть число больше 8 бит из main ()? - PullRequest
1 голос
/ 18 октября 2019

Итак, насколько я могу судить, код выхода, возвращаемый из r0, использует только самые младшие 8 бит этого регистра. Как я верну значение, превышающее 8 бит?

Вот код ARMv7:

@ looping.s
@ calculates sum of integers from 1 to 100
.text
.balign 4
.global main
main:
    MOV r1, #0      @ r1 = 0 as sum
    MOV r2, #0      @ r2 = 0 as counter
loop:
    ADD r2, r2, #1  @ counter = counter + 1
    ADD r1, r1, r2  @ sum = sum + counter
    CMP r2, #100    @ counter - 100
    BLT loop        @ if counter < 100 go to start of loop
    MOV r0, r1      @ Store sum in r0
    BX lr           @ Return summation result to OS

Ответы [ 2 ]

6 голосов
/ 18 октября 2019

Состояние выхода процесса - 8 бит. Невозможно вернуть больший статус выхода обычными средствами. Если вы хотите вывести число больше 255, вы можете, например, напечатать его на стандартный вывод (дескриптор файла 1) с помощью системного вызова write.

0 голосов
/ 19 октября 2019

Вы не должны использовать функцию main() для выполнения расчетов. В общем, функции не ограничиваются 8-битными возвращаемыми значениями, поэтому присвойте своей фактической функции другое имя и верните большее число в R0. Вызовите вашу функцию изнутри main() и затем сделайте все, что вам нужно сделать с возвращаемым значением, возможно, напечатайте его на консоли.

...