如何比较“ / 0”字符而不将其转换为“ 0”

时间:2019-05-05 09:26:45

标签: assembly char type-conversion integer

我在计算机体系结构课程中有一项作业,基本上是用ASM(32位)编写代码,该代码从给定的字符串中删除特定字符,并且还给了我新的长度(不包括'/ 0')< / p>

  • 示例:“ Hello \ n \ 0”
  • 要删除的字符:“ l”
  • 结果:“嘿\ n \ 0”
  • 长度:4

我可以从字符串中删除任何字符,但是,作为测试程序是否可以在任何情况下运行的测试,我有一个条件要检查要删除的字符是否为/ 0,并且每次执行此操作比较失败,因为它将“ / 0”转换为“ 0”。 我在网上阅读过,当您写'/'时,它等于写(char)并以char形式返回。

  • 示例:(char)1 ='1'

有什么方法可以比较字符“ / 0”而不进行转换吗?我也不能更改数据部分,因为它是家庭作业规则的一部分,只能更改“和”之间的内容。

在下面我展示我的代码

我的变量称为remove,它的声明如下:

  • 删除:.byte'/ 0'

然后我做

mov remove, %cl
cmp $0, %cl
jz goToEnd

如果将零标志设置为0,则我结束我的函数,但是从来没有这样,因为%cl接收到十进制48对应于“ 0”的值。

1 个答案:

答案 0 :(得分:1)

您在几个地方有/0。正斜杠并不特殊'/0'是asm中的2个字节的常量。

如果您的意思是一个整数值'\0'(隐式长度C字符串的终止符),请确保写入0

(因此,不能将其从字符串的末尾删除;它在字符串的末尾。除非您有显式长度的字符串,否则请删除最后一个通过将长度减1来减少字节)

反斜杠是C语言以及GAS字符串中的转义序列,因此您可以编写'\n'而不是整数10https://en.wikipedia.org/wiki/Escape_sequences_in_C

通常,在GAS语法中,通过使用.asciz.string指令,字符串的终止符为零。