【发布时间】:2012-04-06 02:55:13
【问题描述】:
我正在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' 下面的行只是我在搞乱,看看字符串是否可以很好地转移到数组中。然而,当打印在屏幕上时,只显示了四个字符!整个字符串线都没有被打印出来,这让我发疯了。有人可以告诉我我做错了什么吗?
感谢任何花时间阅读本文的人。
【问题讨论】:
-
这是作业吗?你能添加你看到的输出吗?
-
在屏幕上,输出非常多:分别是“Delt”、“Abs”和“Bice”。总是4个字符...不知道为什么,一定是使用错误的指令将字符串存储到数组中。