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