我在计算机体系结构课程中有一项作业,基本上是用ASM(32位)编写代码,该代码从给定的字符串中删除特定字符,并且还给了我新的长度(不包括'/ 0')< / p>
我可以从字符串中删除任何字符,但是,作为测试程序是否可以在任何情况下运行的测试,我有一个条件要检查要删除的字符是否为/ 0,并且每次执行此操作比较失败,因为它将“ / 0”转换为“ 0”。 我在网上阅读过,当您写'/'时,它等于写(char)并以char形式返回。
有什么方法可以比较字符“ / 0”而不进行转换吗?我也不能更改数据部分,因为它是家庭作业规则的一部分,只能更改“和”之间的内容。
在下面我展示我的代码
我的变量称为remove,它的声明如下:
然后我做
:mov remove, %cl
cmp $0, %cl
jz goToEnd
如果将零标志设置为0,则我结束我的函数,但是从来没有这样,因为%cl接收到十进制48对应于“ 0”的值。
答案 0 :(得分:1)
您在几个地方有/0
。正斜杠并不特殊; '/0'
是asm中的2个字节的常量。
如果您的意思是一个整数值'\0'
(隐式长度C字符串的终止符),请确保写入0
。
(因此,不能将其从字符串的末尾删除;它是在字符串的末尾。除非您有显式长度的字符串,否则请删除最后一个通过将长度减1来减少字节)
反斜杠是C语言以及GAS字符串中的转义序列,因此您可以编写'\n'
而不是整数10
。 https://en.wikipedia.org/wiki/Escape_sequences_in_C
通常,在GAS语法中,通过使用.asciz
或.string
指令,字符串的终止符为零。