我完全搞不懂。我以为下面的说明是完全一样的:
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]
知道为什么会这样吗
ltqd579y1#
它们在语法上不同,但在语义上等同。长话短说:这是移位位。这两条指令的第12位不同(手册中称为S),它决定了索引寄存器是否要移位。这对于所有strb、strh和str指令都是一样的。索引总是移位以匹配存储的操作数的大小,所以在str xN的情况下它是3,在str wN中它是2,在strh中它是1,在strb中它最终是0。因此,您可以在手册中看到这一行,在strb上:
S
strb
strh
str
str xN
str wN
<amount> Is the index shift amount, it must be #0, encoded in "S" as 0 if omitted, or as 1 if present.
所以你的一个指令不移动索引,另一个指令将它移动零。很成功。
1条答案
按热度按时间ltqd579y1#
它们在语法上不同,但在语义上等同。
长话短说:这是移位位。
这两条指令的第12位不同(手册中称为
S
),它决定了索引寄存器是否要移位。这对于所有strb
、strh
和str
指令都是一样的。索引总是移位以匹配存储的操作数的大小,所以在str xN
的情况下它是3,在str wN
中它是2,在strh
中它是1,在strb
中它最终是0。因此,您可以在手册中看到这一行,在
strb
上:所以你的一个指令不移动索引,另一个指令将它移动零。很成功。