Вопрос Nasm почему не работает printf?

Начинающий
Статус
Оффлайн
Регистрация
5 Сен 2020
Сообщения
80
Реакции[?]
1
Поинты[?]
0
Сортировка вставками на ASSемблере. Проблема в том, что принт не работает, хотя в регистр rdx попадают нужные мне значения. (написано под виндой) Ошибка: Segmentation fault
Код:
section .data
    formatIn db "%d", 0
    formatOut db "%d ", 0

section .bss
    array: resq 100

section .text
    extern printf, scanf
    global main

main:
    push rbp
    mov rbp, rsp
    sub rsp, 8

    lea rdx, [rbp-8]
    lea rcx, [formatIn]
    call scanf

    mov rbx, [rbp-8]  ; n в rbx
    xor r13, r13
    jmp cycle1Start

cycle1Start:
    cmp r13, rbx
    je cycle1End

    lea rdx, [array + r13*8]
    lea rcx, [formatIn]
    call scanf
    add r13, 1
    jmp cycle1Start

cycle1End:
    mov r13, 1
    jmp cycle2Start

cycle2Start:
    cmp r13, rbx
    je cycle2End

    mov r14, r13

cycle3Start:
    cmp r14, 0
    je cycle3End

    mov rdx, [array + r14 * 8]
    mov r15, [array + r14 * 8 - 8]
    cmp rdx, r15
    jae skipSwap

    ; swapping
    mov [array + r14 * 8 - 8], rdx
    mov [array + r14 * 8], r15

skipSwap:
    dec r14
    jmp cycle3Start

cycle3End:
    add r13, 1
    jmp cycle2Start

cycle2End:
    xor r13, r13
    jmp printLoop

printLoop:
    cmp r13, rbx
    je endProgram

    lea rdx, [array + r13*8]
    lea rcx, [formatOut]
    call printf

    add r13, 1
    jmp printLoop
   
endProgram:
    leave
    ret
 
Начинающий
Статус
Оффлайн
Регистрация
24 Сен 2024
Сообщения
34
Реакции[?]
7
Поинты[?]
7K
В начале: sub rsp, 8 -> sub rsp, 32

где:

lea rdx, [array + r13*8]
lea rcx, [formatIn]

выравнивай с помощью sub rsp, 32 и восставнови с add rsp, 32 после вызова printf.
Типо:
sub rsp, 32
mov rdx, [array + r13*8]
lea rcx, [formatOut]
call printf
add rsp, 32

И перед ret вызови xor rax, rax
 
(\ /) _ ($ __ $ ) _ (\ /)
Пользователь
Статус
Оффлайн
Регистрация
22 Окт 2021
Сообщения
367
Реакции[?]
92
Поинты[?]
24K
Сверху Снизу