我在我的计算机体系结构课上有一个作业,它基本上是用 ASM(32 位)编写代码,从给定的字符串中删除特定字符,并给我新的长度(不包括 '/0')
我可以从字符串中删除任何字符,但是,作为测试程序是否可以在任何情况下工作,我有一个条件来检查要删除的字符是否为 /0,并且每次这样做都无法通过比较因为它将“/0”转换为“0”。我在网上读到,当你写 '/' 时,它等于 write (char) ,它返回 char 形式。
有什么方法可以比较字符“/0”而不进行转换?我也不能更改数据部分,因为它是家庭作业规则的一部分,只有在 '' 和 "" 之间的内容。
下面我展示我的代码
我的变量被称为 remove ,它是这样声明的:
然后我做:
mov remove, %cl
cmp $0, %cl
jz goToEnd
如果零标志设置为 0,那么我将结束我的函数,但情况并非如此,因为 %cl 接收的值是十进制 48,对应于“0”。
你有/0
几个地方。正斜杠并不特殊;'/0'
是 asm 中的 2 字节常量。
'\0'
如果你的意思是一个带有整数值的字节,请确保你写的是0
隐式长度 C 字符串的终止符。
(所以不,您不能从字符串的末尾删除它;它是字符串的末尾。除非您有显式长度的字符串,在这种情况下,您可以通过将长度减 1 来删除最后一个字节)
反斜杠是 C 中的转义序列,也在 GAS 字符串中,因此您可以编写'\n'
而不是 integer 10
。https://en.wikipedia.org/wiki/Escape_sequences_in_C
但是,通常在 GAS 语法中,您可以使用.asciz
or.string
指令获得字符串的零终止符。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句