#gnu-assembler #arm64
#gnu-ассемблер #arm64
Вопрос:
Я новичок в кодировании на языке ассемблера, и я не смог найти никаких ответов на этот вопрос в Интернете. Я даже не уверен, задаю ли я правильный вопрос, но я подумал, что это не повредит. Буду признателен за любую помощь.
Ответ №1:
В приведенных ниже примерах предполагается, что в качестве компилятора используется GNU.
Макросы аккуратны, и я часто их использую; однако их отладка может быть затруднительной, поэтому будьте осторожны. Если вы новичок в сборке, я бы посоветовал сначала изучить ARMv7, Поскольку существует гораздо больше книг, руководств и т. Д., Чем ARMv8.
// push2
.macro push2, xreg1, xreg2
.push2@:
stp xreg1, xreg2, [sp, #-16]!
.endm
// pop2
.macro pop2, xreg1, xreg2
.pop2@:
ldp xreg1, xreg2, [sp], #16
.endm
// exit
.macro _exit
.exit@:
mov x8, #93 // exit see /usr/include/asm-generic/unistd.h
svc 0
.endm
.macro gCode num // Grey code... https://en.wikipedia.org/wiki/Gray_code
.gCode@:
mov x0, num
eor x0, x0, x0, lsr 1 // G Code == B XOR (B >> 1 unsigned)
.endm