@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
  • Вопрос задан
  • 28 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
http://dilbert.com/strip/1998-08-24
Как сделать так, чтобы оно выводило число?

Перевести число в строковую форму и эту строковую форму выводить. Системный вызов 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
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Outline Новосибирск
от 150 000 до 200 000 ₽
VMS Software Санкт-Петербург
от 110 000 ₽
Elverils Санкт-Петербург
от 100 000 ₽
06 июн. 2020, в 11:17
500 руб./за проект
06 июн. 2020, в 11:15
33333 руб./за проект
06 июн. 2020, в 10:32
7000 руб./за проект