Как использовать стек в сборке 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

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