我正在Assembly 中编写一个对字符串数组进行冒泡排序的程序。零长度字符串终止数组。我通过声明一个 DWORD 数组来解决这个问题,其中应存储字符串 var.,即字节大小。我的主要问题不是冒泡排序本身,而是存储在数组中的字符串没有完全输出。
为了清楚起见,这是我的代码:
.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' 下面的行只是我在乱看字符串是否可以很好地转移到数组中。然而,当打印在屏幕上时,只显示了四个字符!整个字符串线都没有被打印出来,这让我发疯。有人可以告诉我我做错了什么吗?
感谢任何花时间阅读本文的人。