Начинающий
-
Автор темы
- #1
Сортировка вставками на 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