私はアセンブリ8086でバブルソート機能を実行しようとしていますが、何らかの理由で間違った答えが出てしまい、その理由がわかりません。アセンブリでバブルソートする方法8086
私はまだそれを学んでいないし、私はそれを使用する方法がわからないので、任意の.code、.dataとそれらのいずれかを使用することはできません。
私が使ったスワップ機能は、私が知っている限り動作します。 (編集済み)
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
OK、あなたは私は私のミスの一部をunderstudeこのコードについてどう思いますか、コードが今動作しますが、私は(タッチ)「$」記号
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
を移動すると思いますそれは間違った答えを与える理由
「うまくいかない」とは、何が間違っているかの説明ではありません。 [mcve]を参照してください。それはクラッシュしますか?それは間違った答えを与えるか?デバッガを使用してレジスタ値が期待どおりかどうかを確認してください。また、 'swap'を別の関数に入れると、コードがもっと複雑になります。 –
私は少なくとも1つの問題を見ることができます:彼らが指しているデータの代わりに 'si'と' di'を比較します。 –
8ビット要素の[8086バブルソート実装](https://stackoverflow.com/questions/26318043/assembly-bubble-sort-for-sorting-string/26324630#26324630)。 –