2014-11-17 45 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完全相同。这表明了子程序或宏的潜力,因此您只需编写(并调试!)一次代码并且可以多次使用它。