文字列の配列をバブルソートするプログラムをアセンブリで書いています。長さがゼロの文字列は配列を終了します。私は、バイトサイズである文字列var。が格納されるDWORD配列を宣言することによってこれにアプローチしました。私の主な問題は、バブルソート自体ではありませんが、配列に格納されている文字列が完全に出力されていなかったことです。
うまくいけば明確にするために、ここに私のコードがあります:
.586
.MODEL FLAT
INCLUDE io.h ; header file for input/output
space equ 0
cr equ 0dh
.STACK 4096
.DATA
myStrings byte "Delts",0
byte "Abs",0
byte "Biceps",0
byte 0
labelStrOut byte "Output is: ", 0
stringOut dword 11 dup (?)
stringNum dword 0
stringArray dword 20 dup (?)
.CODE
_MainProc PROC
mov edi, offset myStrings
mov esi, offset stringArray
popltLp:
cmp BYTE PTR [edi], 0
jz popltDone
mov ebx, [edi]
mov DWORD PTR [esi], ebx
add esi, 4
inc stringNum
xor ecx, ecx
not ecx
xor al, al
repne scasb
jmp popltLp
popltDone:
xor edx, edx
lea esi, stringArray
mov ebx, DWORD PTR [esi]
mov stringOut, ebx
output labelStrOut, stringOut
add esi, 4
mov ebx, DWORD PTR [esi]
mov stringOut, ebx
output labelStrOut, stringOut
add esi, 4
mov ebx, DWORD PTR [esi]
mov stringOut, ebx
output labelStrOut, stringOut
outptDone:
mov eax, 0 ; exit with return code 0
ret
_MainProc ENDP
END ; end of source code
ご覧のとおり、バブルソートはまだ行われていません...
'popltDone'の下の行は、文字列が配列に正常に引き継がれるかどうかを確認するために私がいじり回しているだけです。しかし、画面に印刷したところ、4文字しか表示されていませんでした!文字列の行全体が印刷されていなかったため、現在私は夢中になっています。誰かが私が間違っていることを教えてもらえますか?
これを読んでくれた人に感謝します。