I'm trying to do a bubble sort function in assembly 8086 but for some reason it gives the wrong answer and I can't find out why.
I cant use any .code, .data and any of those because we haven't learn it yet and I don't know how to use it.
The swap function I used works as far as I know of.
org 100h
jmp main
string db 'm', 'a', 'g', 's', 'h', 'i', 'm', 'i', 'm', 'v', 'e', 'n', 'e', 'h', 'e', 'n', 'i', 'm' ,0Dh,0Ah,'$'
main:
lea di,string
push di
call bubbleSort
mov ax, 0
mov ah, 0
int 16h
ret
swap proc
push bp
mov bp, sp
mov bx, [bp + 4]
mov al, [bx]
mov di, [bp + 6]
mov cl, [di]
mov [di], al
mov [bx], cl
mov sp, bp
pop bp
retn 4
swap endp
bubbleSort proc
push bp
mov bp, sp
mov si, [bp + 4]
mov cx, 18
outer_loop:
mov si, [bp + 4]
lea di, [si + 2]
mov bx, cx
mov cx, 18
inner_loop:
cmp si, di
ja finish:
;swap
pusha
push si
push di
call swap
popa
finish:
inc si
inc di
loop inner_loop
mov cx, bx
loop outer_loop
mov sp, bp
pop bp
retn 2
bubbleSort endp
(edited) ok, what do you think about this code i understude some of my mistake, the code works right now but I think I move (touch) the '$' sign
bubbleSort proc
push bp
mov bp, sp
mov si, [bp + 4]
mov cx, 18
outer_loop:
mov si, [bp + 4]
mov bx, cx
mov cx, 18
inner_loop:
mov al, [si]
mov ah, 0h
mov dl, [si + 1]
mov dh, 0h
cmp dl, al
ja finish:
;swap
mov [si + 1], al
mov [si], dl
finish:
inc si
loop inner_loop
mov cx, bx
loop outer_loop
mov sp, bp
pop bp
retn 2
bubbleSort endp