尝试使用ARM汇编程序在RAM中查找数组的结尾

时间:2014-01-22 15:59:59

标签: arrays assembly arm ram crc32

我正在ARM“beagleboard”上用汇编程序编写CRC32程序,为此我需要在内存中找到char数组的结尾。该程序(从C框架)给出了一个指向数组开头的指针,我们需要迭代数组。事先不知道数组的大小,我不确定我是否可以在C中检查它并将其作为变量赋予函数,或者甚至是如何工作的。通常,如果我在C中编码,我只是寻找'\ 0',但是当从汇编程序中的RAM访问它时,这看起来就像一个充满零的字节。那还有用吗?还有另一种方法来检测数组的结尾吗?

提前致谢!

2 个答案:

答案 0 :(得分:1)

“一个满是零的字节”仍然有用!如果数组以空值终止,那么你只需要找到那些设置为零的8位。

棘手的部分是字大小(基本指令中使用的位数)可能是32或64位,而不是8.所以你需要能够隔离(掩盖)每个8位块的检查它是否设置为全零的单词。

答案 1 :(得分:1)

  • 通常情况下,如果我用C编码,我只想找'\ 0'

为什么asm必须有所不同?在我选择的任何语言中,我都可以简单地遍历字节,寻找零字节。语言无关紧要。 ASM是一种语言,如C或pascal或java等。如果它是一个零终止的C字符串,那么你只需要查找零的语言。

C,asm等ram是ram,地址是一个地址,所以这里又与它无关,你有一个起始地址,你迭代直到找到零字节。

我误解了这个问题吗?你的“字符串”不是C字符串,不是零终止吗?如果不是,那么根据定义,你的字符串必须具有一些众所周知的(对于双方)终止和/或长度规范。然后,一旦你定义了众所周知的终止,你就可以用你选择的任何语言来实现它。