@sos1mple

Как вывести результат сложения в Nasm (MACOS, 64bit)?

Добрый день!
Подскажите пожалуйста, пытаюсь складывать числа в NASM. Вот код:
global start

section .text

start:
    mov rax, 90     ; move our first number into eax
    add rax, 5
    mov [qword msg], rax
    call write_result ; Выводим результат
    mov rax, 0x02000001 ; Системный вызов для выхода
    xor rdi, rdi ; Код - 0
    syscall ; Выходим

write_result:
    mov      rax, 0x02000004
    mov      rdi, 1
    mov      rsi, msg
    mov      rdx, 13
    syscall
    ret

section .data
    a: dw 5
    b: dw 30
    c: dw 65
    d: dw 67
    t: dw 0
    msg: dw 0, 10


Запускаю, выдает: "_". Как сделать так, чтобы оно выводило число?
5ebbe1aaa4d3c955718013.png
  • Вопрос задан
  • 265 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Как сделать так, чтобы оно выводило число?

Перевести число в строковую форму и эту строковую форму выводить. Системный вызов write выводит байты как есть.
"как"? -- например, в цикле беря остаток от деления на 10 (или какое ты хочешь основание системы счисления), прибавляя к остатку '0' (или 'a' - 10, если он 10 или больше) и записывая результат в буфер, начиная с конца. Типа того:
mov rbx, 10
    mov rsi, str + 20
l1:
    mov rdx, 0
    idiv rbx
    add dl, '0'
    mov byte [rsi], dl
    add rsi, -1
    test rax, rax
    jnz l1
; rsi + 1 указывает на начало строки
; длина строки -- str + 20 - rsi
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы