2012-04-06 98 views
0

我正在编写一个程序,它将对Bubble排序一个字符串数组。零长度字符串终止数组。我通过声明一个DWORD数组来处理这个问题,其中应该存储字节大小的字符串var。我的主要问题不是冒泡排序本身,而是存储在数组中的字符串没有完全输出。打印存储在一个DWORDS数组中的字符串

怀着希望说清楚,这里是我的代码:

.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个字符显示出来!整个字符串行只是没有打印出来,这是目前让我疯狂。有人可以告诉我我做错了什么吗?

感谢有人花时间阅读本文。

+0

这功课吗?你可以添加你看到的输出吗? – wallyk 2012-04-06 03:00:52

+0

在屏幕中,输出非常多:分别是“Delt”,“Abs”和“Bice”。总是4个字符......不知道为什么,必须使用错误的指令将字符串存储到数组中。 – 2012-04-06 03:02:33

回答

0

问题是,您没有正确使用字符串指针。具体而言,这里就是我指的是代码:

mov ebx, [edi] 
mov DWORD PTR [esi], ebx 

如果你翻译成英语这一点,它会是这样的:

Move the 4 byte value pointed to by edi into ebx. 
Move the value in ebx into the memory address pointed to by esi. 

这是完全合法的,而且还可能是什么你想在某些情况下,但我猜这不是其中之一。您输出字符串数组时仅看到前4个字符的原因是因为您已将字符串复制到数组中。一个DWORD是4个字节,所以你可以得到前4个字符。下面是我会写:

mov DWORD PTR [esi], edi 

换算成:

Move the pointer value edi into the memory address pointed to by esi. 

现在你还没有一个字符串数组,但字符串指针数组。如果你要用C写你的代码,反编译它,这很可能是你会看到的。重写你的比较和输出函数来处理指向字符串的指针,而不是字符串中的文字字符,你将解决你的问题。

+0

感谢您的帮助,Sparafusile。虽然现在我面临着一个新的难题:当我输出字符串指针数组内的任何元素时,我所得到的只是空白! ;以下是我正在使用的说明 ;输出它 – 2012-04-08 06:04:55

+0

** Argh,无视我上面的评论...我还是这个网站的新手,以及它的所有扭结... 感谢您的支持帮助,Sparafusile。虽然现在我面临着一个新的难题:当我输出字符串指针数组内的任何元素时,我所得到的只是空白! 下面是我一直在使用它打印出来的指令: LEA ESI,字符串数组 输出labelStrOut,DWORD PTR [ESI] 至于说,我的输出窗口是空白,目前正在想办法来解决它。 – 2012-04-08 06:14:21

+0

您正试图将指针打印到指针。试试这个:“输出labelStrOut,esi”。要移至下一个字符串,请向esi添加4。 – Sparafusile 2012-04-09 12:43:26

相关问题