Mam do napisania program, który sortuje mi tablice do max 5000tys liczb każda liczba to 192bit.
Mój program wygląda tak:
# Wczytywanie do 5000 liczb 192-bitowych ze standardowego strumienia wejsciowego
#(32*6=192)
SYSEXIT =1
SYSREAD =3
SYSWRITE =4
STDOUT =1
STDIN =0
EXIT_SUCCESS =0
N =5
.align 32
.text
znak: .ascii "asd"
.data
#msg: .msg 5000
#msg_len = .-msg
tablica_liczb: .space 2400
#liczba2:.space 0x26, 0x10
tablica_len = .-tablica_liczb
.global _start
_start:
mov $SYSREAD, %eax # wczytanie znaków
mov $STDIN, %ebx
mov $tablica_liczb, %ecx
mov $tablica_len, %edx
int $0x80
xor %ecx, %ecx
xor %edi, %edi
movl $5, %esi
jmp wczytaj_liczby
nastepna:
cmpl $tablica_len, %edi
je warunek
mov $5, %esi
addl $24, %edi
wczytaj_liczby:
movl tablica_liczb(%edi,%esi,4), %eax
addl $24, %edi
movl tablica_liczb(%edi,%esi,4), %ebx
subl $24, %edi
cmpl %eax, %ebx
jl zamien
decl %esi
cmp $0, %esi
je nastepna
jmp wczytaj_liczby
zamien:
movl $5, %esi
zamien_loop:
movl tablica_liczb(%edi, %esi, 4), %eax
addl $24, %edi
movl tablica_liczb(%edi,%esi,4), %ebx
movl %eax, tablica_liczb(%edi, %esi, 4)
subl $24, %edi
movl %ebx, tablica_liczb(%edi,%esi,4)
incl %esi
cmpl $0, %esi
je nastepna
jmp zamien_loop
warunek:
cmpl $0, %ecx
je koniec
xor %ecx, %ecx
movl $0, %edx
movl $5, %esi
jmp wczytaj_liczby
koniec:
mov $SYSWRITE, %eax # wypisywanie znakow
mov $STDOUT, %ebx
mov $tablica_liczb, %ecx
mov $tablica_len, %edx
int $0x80
mov $SYSEXIT, %eax # zakonczenie programu
mov $EXIT_SUCCESS, %ebx
int $0x80
po skompilowaniu wyskakuje mi narusznie pamięci, raczej nie umiem programować w asm, także proszę o wyrozumiałość.;)