assembly “strb w0,[x2,w3,uxtw]”与“strb w0,[x2,w3,uxtw #0]”相同吗?

jv2fixgn  于 2023-04-30  发布在  其他
关注(0)|答案(1)|浏览(184)

我完全搞不懂。
我以为下面的说明是完全一样的:

strb    w0,[x2,w3,uxtw 0] 
strb    w0,[x2,w3,uxtw]

但是当我把它们组合起来的时候,我得到了不同的编码:

40 48 23 38     strb w0, [x2, w3, uxtw]
40 58 23 38     strb w0, [x2, w3, uxtw #0]

知道为什么会这样吗

ltqd579y

ltqd579y1#

它们在语法上不同,但在语义上等同。
长话短说:这是移位位。
这两条指令的第12位不同(手册中称为S),它决定了索引寄存器是否要移位。这对于所有strbstrhstr指令都是一样的。索引总是移位以匹配存储的操作数的大小,所以在str xN的情况下它是3,在str wN中它是2,在strh中它是1,在strb中它最终是0。
因此,您可以在手册中看到这一行,在strb上:

<amount>    Is the index shift amount, it must be #0, encoded in "S"
            as 0 if omitted, or as 1 if present.

所以你的一个指令不移动索引,另一个指令将它移动零。很成功。

相关问题