Witam, czy ktoś mógłby mi sprawdzić poprawność poniższego kodu?
Miałem napisać program sortujący bąbelkowo tablice według poniższego algorytmu:
- Start.
- index = 0; zamiany = 0;
- Odczytaj dwa sasiadujace elementy z tablicy o pozycjach index oraz
index + 1; jezeli pierwszy z odczytanych elementow jest wiekszy od
swojego nastepnika, to zamien elementy miejscami oraz zwieksz zamiany. - Zwieksz index o jeden.
- Jezeli index < dlugosc_tablicy - 2 to skacz do 3.
- Skacz do 2 jezeli zamiany rozne od zera.
- Stop.
Program się kompiluje i nie wyskakują żadne błędy, jednak prosiłbym o ocenę kogoś doświadczonego.
.MODEL SMALL
;------------ segment danych -------------
Dane SEGMENT
DL_TABLICY EQU 0Ch
Tablica DB 01h, 02h, 00h, 10h, 12h, 33h, 15h, 09h, 11h, 08h, 0Ah, 00h
Dane ENDS
;------------ segment kodu --------------
Kod SEGMENT
ASSUME CS:Kod, DS:Dane, SS:Stosik
; zaladowanie rejestru segmentowego danych
start: mov ax, SEG Dane
mov ds, ax
xor ax, ax ; czyścimy rejestr ax
mov cx, DL_TABLICY ; przesyłamy do rejetru cx długość tablicy
petla0: mov bx, OFFSET Tablica ; przesyłamy do rejestru bx adres początku tablicy (index=0)
xor dx,dx ; czyścimy rejestr dx (zamiany=0)
petla1: mov ax, [bx] ; do rejestru ax wczytujemy WARTOŚĆ danego elementu tablicy
cmp ax, [bx+1] ; porównujemy z elementym następnym czyli [bx+1]
jbe nastepny ; jeśli [bx] jest mniejsze niż [bx+1] do skacz do następny
xchg ax, [bx+1] ;jeśli nie to zamieniamy te elementy
mov [bx], ax
inc dx ;zwiększamy zamiany o 1
nastepny: inc bx ;zwiększamy index o 1
push cx
sub cx,2
cmp bx,cx ;porównujemy index i dlugosc_tablicy - 2
jb petla1 ;gdy mniejsze skacz do petla1
pop cx
cmp dx, 0 ;porównaj dx(zamiany) i zero
ja petla0 ;jeśli dx(zamiany) większe od zera to skacz do petla0
loop petla0
;------------ zakończenie programu --------
mov ax, 4C00h
int 21h
Kod ENDS
;------------ segment stosu ---------------
Stosik SEGMENT STACK
DB 100h DUP (?)
Stosik ENDS
END Start