Что не так с моей программой NASM? - PullRequest
0 голосов
/ 03 июня 2018

Я недавно начал программировать на ассемблере и мог что-то ошибиться.Этот код должен записывать «21947392»:

section .data
    nl db 10

section .bss
    number resb 19
    .end resb 1

section .text
    GLOBAL start

start:
    mov rdi, 21947392
    call _printNumber

    mov rax, 0x2000001
    xor rdi, rdi
    syscall

_printNumber:
    mov rcx, 10
    mov rsi, number.end
    mov rax, rdi
_loop:
    xor rdx, rdx
    div rcx
    add rdx, 48
    mov [rsi], rdx
    dec rsi
    cmp rax, 0
    jne _loop

    mov rdi, rsi
    inc rdi
    mov rsi, number.end
    sub rsi, rdi
    call _print

    mov rdi, nl
    mov rsi, 1
    call _print

    ret

_print:
    mov rax, 0x2000004
    mov rdx, rsi
    mov rsi, rdi
    mov rdi, 1
    syscall
    ret

Он написан для macOS x64 на NASM и печатает только «2» (и, кажется, даже отличается от одной сборки к другой ) ... Вот команды, которые я использую в терминале:

nasm -f macho64 -o printNumber.o printNumber.asm
ld printNumber.o -o printNumber
./printNumber

Пожалуйста, помогите найти, что не так.

...