我将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两个给我的错误。
是否有另一种方法可以正确地推入装配中的该阵列?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
使用strb(而不是str)仅存储一个字节。您也不希望缩放,str因为缩放是用于存储到整数数组中,而不是存储在字符数组中,区别在于元素的大小(4个字节对1个字节) 您必须在堆栈上分配一些空间,然后将字符串复制到该空间。
stackoverflow