String 从MASM中的字符串中删除字符

String 从MASM中的字符串中删除字符,string,assembly,masm,irvine32,String,Assembly,Masm,Irvine32,我必须写一个程序 从键盘缓冲区中获取字符串并将其放入字符数组中 请求删除一个字符 将角色从角色数组中移除,同时将其他所有内容移到角色数组中 我想用一个堆栈来完成这个任务。这就是我的逻辑 从字符串末尾开始,将该字符与要删除的字符进行比较。如果不是角色,则将其推到堆栈上。如果是,则忽略它并继续遍历字符串。然后从一开始就把一切都安排好 我应该用一个程序来完成这个。当我一步一步地进行时,一切似乎都正常工作,直到我尝试离开程序并返回到main。我相当肯定我的程序中的逻辑就是问题所在。现在,当我尝试使用

我必须写一个程序

  • 从键盘缓冲区中获取字符串并将其放入字符数组中
  • 请求删除一个字符
  • 将角色从角色数组中移除,同时将其他所有内容移到角色数组中
我想用一个堆栈来完成这个任务。这就是我的逻辑

从字符串末尾开始,将该字符与要删除的字符进行比较。如果不是角色,则将其推到堆栈上。如果是,则忽略它并继续遍历字符串。然后从一开始就把一切都安排好

我应该用一个程序来完成这个。当我一步一步地进行时,一切似乎都正常工作,直到我尝试离开程序并返回到main。我相当肯定我的程序中的逻辑就是问题所在。现在,当我尝试使用字符串“the”并删除e时,我得到了“he”

我明白了

答复:

我没有正确处理从控制台获取角色的问题。我也没有处理ecx=0时的情况。这是字符数组的第一个位置。因此,我没有比较正确的字符,也没有在必要时将第一个字符推送到数组中。我已经把它拆了

mov edx, OFFSET char
mov ecx, 1
call    readString
mov edx, OFFSET char
mov ecx, 1
call    readString
并将其替换为

call readChar
mov  char,al
call readChar
mov  char,al
然后将其添加到L1循环之后

movzx   edx , string[ecx]
cmp dl,char
jz  L4
push edx
inc eax
L4:
movzx   edx , string[ecx]
cmp dl,char
jz  L4
push edx
inc eax
L4:
它现在按设计工作。我只是有一些格式问题需要澄清。

回答:

我没有正确处理从控制台获取角色的问题。我也没有处理ecx=0时的情况。这是字符数组的第一个位置。因此,我没有比较正确的字符,也没有在必要时将第一个字符推送到数组中。我已经把它拆了

mov edx, OFFSET char
mov ecx, 1
call    readString
mov edx, OFFSET char
mov ecx, 1
call    readString
并将其替换为

call readChar
mov  char,al
call readChar
mov  char,al
然后将其添加到L1循环之后

movzx   edx , string[ecx]
cmp dl,char
jz  L4
push edx
inc eax
L4:
movzx   edx , string[ecx]
cmp dl,char
jz  L4
push edx
inc eax
L4:

它现在按设计工作。我只是有一些格式问题需要澄清。

将答案作为答案添加,而不是作为问题的编辑。是的,我会这样做,但作为一个新用户,stack overflow不允许我在发布后这么快回答自己的问题。