开发者社区 问答 正文

在ARM Assembly中推入char数组的正确方法

我将char数组char s[20]从C传递给汇编中的子例程,该子例程的地址存储在register中x27。

在汇编中,我将数组推入s如下所示:


str     w0, [x27, w13, SXTW 2]          // s[i] = c

这是一个循环,因此char数组(x27)的地址用作基地址,我的偏移量是i,表示为w13。w0是我要推送的输入字符s。

我的问题是字符未按正确的索引推送。

例如,如果我输入25,我的char数组看起来像这样

s[0] = 2 (50)
s[1] =  (0)
s[2] =  (0)
s[3] =  (0)
s[4] = 5 (53)
s[5] =  (0)
s[6] =  (0)
s[7] =  (0)
s[8] =  (0)
...

何时应按以下顺序进行:

s[0] = 2 (50)
s[1] = 5 (53)
s[2] =  (0)
s[3] =  (0)
s[4] =  (0)
s[5] =  (0)
s[6] =  (0)
s[7] =  (0)
s[8] =  (0)
...

我认为这是因为SXTW 2将我要加的位置移位了x274。这将适用于整数,因为它们是4字节,但是由于我使用的是字符,所以我不确定如何进行1字节的移位。SXTW 1和SXTW 3两个给我的错误。

是否有另一种方法可以正确地推入装配中的该阵列?

展开
收起
kun坤 2019-11-29 10:55:57 712 分享 版权
1 条回答
写回答
取消 提交回答
  • 使用strb(而不是str)仅存储一个字节。您也不希望缩放,str因为缩放是用于存储到整数数组中,而不是存储在字符数组中,区别在于元素的大小(4个字节对1个字节) 您必须在堆栈上分配一些空间,然后将字符串复制到该空间。

    stackoverflow

    2019-11-29 10:56:17
    赞同 展开评论
问答分类:
问答地址: