2014-11-17 43 views
1

我在程序中遇到了一個問題。基本上我想要做的檢查是否有一個字符串中的點後面有空格,如果沒有我在點後面加上空格。但是,我不知道如何去做這件事,因爲我的緩衝區是有限的大小,因此如果我添加空間,緩衝區的最後一個字母將被刪除?還是我做錯了?感謝您提前的幫助:) 例如:Hello.Hi =你好。嗨程序集8086在字符串中添加空格

MOV cx, ax 
     MOV si, offset readBuf 
     MOV di, offset writeBuf 
     work: 
     MOV dl, [si] 
     CMP dl, '.' 
     JE dot 
     increase: 
     MOV [di], dl 
     INC si 
     INC di 
     LOOP work 
     dot: 
     CMP dl+1, ' ' 
     JNE noSpace 
     JMP increase 
     noSpace: 

回答

0

代碼有幾個問題。第一個是這條線:

CMP dl+1, ' ' 

這在dl加1的值,並進行比較,爲空格字符這是不是你想要的。你想要比較下一個字符,所以你必須將它加載到MOV dl, [si]或類似的寄存器中。

第二個問題是算法。從psuedo代碼開始,然後從中創建彙編語言版本通常是最容易的。例如:

  1. 負荷字符
  2. 是有餘地?
  3. 如果沒有,退出
  4. 如果是這樣,節省焦炭
  5. 做焦炭==期?
  6. 如果不是,請轉到1
  7. 是否還有剩餘空間?
  8. 如果沒有,退出
  9. 如果是這樣,節省空間焦炭
  10. 負荷字符
  11. 做焦炭==空間?
  12. 如果是這樣,去1
  13. 如果沒有,去2

注意,「加載一個字」既指取的性格和遞增si和「保存字符」是指既節省了字符並遞增di。還要注意步驟2,3和4與步驟7,8和9完全相同。這表明了子程序或宏的潛力,因此您只需編寫(並調試!)一次代碼並且可以多次使用它。