发布网友 发布时间:2022-10-08 05:10
共1个回答
热心网友 时间:2023-11-04 08:50
很久很久不答题了,今天夜猫子来答一个。
先直接回答问题,MOV指令不能加载任意32位常数,这是由MOV指令的实现机制决定的。
立即数 0x12345678不能通过MOV指令直接加载到寄存器。
原因解释:
MOV指令的格式如下图所示:
Operand2占了12位,其中bit11-bit8是移位数(rotate),bit7-0是一个8位的立即数(imm),MOV Rn, op2,执行之后,Rn=op2 >> (rotate * 2),这里的移位是循环右移.
以上决定了MOV指令不能表示所有的立即数,而只能表示
“一个8bit的立即数通过循环右移可以表示的数”
MOV指令可以操作的数字举例:
0x12
0x120
0x1200
0x12000000
MOV指令不能操作的数字举例:
0x123
0x1230
0x12300000
追问MOV指令的格式(那张图)不是太懂,不过什么数不能操作我是知道了