我正在ARM“beagleboard”上用汇编程序编写CRC32程序,为此我需要在内存中找到char数组的结尾。该程序(从C框架)给出了一个指向数组开头的指针,我们需要迭代数组。事先不知道数组的大小,我不确定我是否可以在C中检查它并将其作为变量赋予函数,或者甚至是如何工作的。通常,如果我在C中编码,我只是寻找'\ 0',但是当从汇编程序中的RAM访问它时,这看起来就像一个充满零的字节。那还有用吗?还有另一种方法来检测数组的结尾吗?
提前致谢!
答案 0 :(得分:1)
“一个满是零的字节”仍然有用!如果数组以空值终止,那么你只需要找到那些设置为零的8位。
棘手的部分是字大小(基本指令中使用的位数)可能是32或64位,而不是8.所以你需要能够隔离(掩盖)每个8位块的检查它是否设置为全零的单词。
答案 1 :(得分:1)
为什么asm必须有所不同?在我选择的任何语言中,我都可以简单地遍历字节,寻找零字节。语言无关紧要。 ASM是一种语言,如C或pascal或java等。如果它是一个零终止的C字符串,那么你只需要查找零的语言。
C,asm等ram是ram,地址是一个地址,所以这里又与它无关,你有一个起始地址,你迭代直到找到零字节。
我误解了这个问题吗?你的“字符串”不是C字符串,不是零终止吗?如果不是,那么根据定义,你的字符串必须具有一些众所周知的(对于双方)终止和/或长度规范。然后,一旦你定义了众所周知的终止,你就可以用你选择的任何语言来实现它。