Как использовать стек в сборке Arm64Linux

Ответить
Гость
 Как использовать стек в сборке Arm64

Сообщение Гость »

Я пытался написать вложенный цикл и напечатать сетку из точек 10x10. И ассемблер выдает ошибку, когда я пытаюсь использовать команды PUSH и POP в подпрограмме _print. Это правильный способ сделать это или я делаю что-то неправильно. Пожалуйста, помогите

Код: Выделить всё

.equ WIDTH, 10
.equ HEIGHT, 10

.data
DOT: .ascii "."
BLOCK: .ascii "$"
NEW_LINE: .ascii "\n"

.text
.global _start
_start:
_renderFrame:
mov x0, HEIGHT
mov x1, WIDTH
bl _height

_height:
cmp x0, 0
beq _exit
sub x0, x0, 1
bl _width
ldr x3, =NEW_LINE
bl _print
bl _height

_width:
cmp x1, 0
beq _height
sub x1, x1, 1
ldr x3, =DOT
bl _print
bl _width

_print:
push {x0, x1, x2}
mov x8, 0x40
mov x0, 1
mov x1, x3
mov x2, 1
svc 0
pop {x0, x1, x2}
ret

_exit:
mov x8, 0x5d
mov x0, 0
svc 0
Ошибка следующая

Код: Выделить всё

main.asm: Assembler messages:
main.asm:35: Error: unknown mnemonic `push' -- `push {x0,x1,x2}'
main.asm:41: Error: unknown mnemonic `pop' -- `pop {x0,x1,x2}'
Примечание: Раньше я пытался запустить сборку в macOS, но, похоже, в Интернете не так много статей поддержки, касающихся macOS. Итак, я запускаю этот код в контейнере Ubuntu Docker со встроенным ассемблером и компоновщиком. И системные вызовы print и exit работают нормально.

Подробнее здесь: https://stackoverflow.com/questions/784 ... 4-assembly
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»