程序集8086在字符串中添加空格

时间:2014-11-17 11:25:21

标签: string assembly space x86-16

我在程序中遇到了问题。基本上我要做的是检查字符串中的点后面是否有空格,如果没有在点后面添加空格。但是由于我的缓冲区大小有限,我不知道如何解决这个问题,因此如果我添加空格,缓冲区的最后一个字母将被删除?或者我做错了吗?谢谢你的帮助提前:)    例如:Hello.Hi = Hello。喜

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:

1 个答案:

答案 0 :(得分:0)

代码存在一些问题。第一个是这一行:

    CMP dl+1, ' '

这是dl中的值加1,并将其与不是您想要的空格字符进行比较。你想要的是比较下一个字符,所以你必须将它加载到MOV dl, [si]或类似的寄存器中。

第二个问题是算法。从psuedo-code开始,然后从中创建汇编语言版本通常最简单。例如:

  1. 加载角色
  2. 还有空间吗?
  3. 如果没有,退出
  4. 如果是,请保存char
  5. 是char == period?
  6. 如果没有,请转到1
  7. 还有空间吗?
  8. 如果没有,退出
  9. 如果是,请保存空格char
  10. 加载角色
  11. 是char == space?
  12. 如果是,请转到1
  13. 如果没有,请转到2
  14. 请注意,“加载字符”表示同时获取字符并递增si,“保存字符”表示同时保存字符并递增di。另请注意,步骤2,3和4与步骤7,8和9相同。这表明子程序或宏的潜力,因此您只需编写(并调试!)一次代码并可多次使用它。