2012-04-06 67 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

相關問題