Компилятор Linux NASM не компилирует «aaa»

#linux #ubuntu #nasm

#linux #ubuntu #nasm

Вопрос:

Вот моя текущая проблема с NASM. Я продолжаю компилировать этот код прямо здесь, но он просто показывает ошибку:

 carry.asm:10: error: instruction not supported in 64-bit mode
  

Вот мой код для этого:

 section .text
global main
main:
mov rsi, 4
mov rcx, 5
clc
add_loop:
mov al, [num1   rsi]
mov al, [num2   rsi]
aaa
pushf
or al, 30h
popf
mov [sum   rsi], al
dec rsi
loop add_loop
mov rdx, len
mov rcx, msg
mov rbx, 1
mov rax, 4
int 0x80

mov rdx, 5
mov rcx, sum
mov rbx, 1
mov rax, 4
int 0x80

mov rax, 1
int 0x80

section .data
msg db 'The sum is:', 0xa
len equ $- msg
num1 db '12345'
num2 db '23456'
sum db '     '
  

Кажется, я не могу понять, что с этим делать.

Комментарии:

1. Вы пробовали компилировать его как 32-разрядный?

2. aaa недоступен в 64-разрядном режиме felixcloutier.com/x86/AAA.html . При использовании он должен вызвать исключение.

3. @IgnacioVazquez-Abrams У меня есть. Это показывает, что «архитектура i386 входного файла `carry.o’ несовместима с i386: выводом x86-64».

4. @MichaelPetch Что мне делать?

5. Вам пришлось бы закодировать это вручную. Используемый алгоритм находится в разделе » Операции » по ссылке, которую я предоставил в своем первом комментарии.