在看ARM体系结构与编程时遇到一个问题,请老师指教
在看到数据处理指令的操作数的寻址方式时,书上说通常数据处理指令的格式如下:<opcode> {<cond>} {s} <Rd> , <Rn> ,<shifter_operand>
其中 <shifter_operand> 有3种格式, 当是立即数方式的时候,并不是每个32位的常数都是合法的立即数,必须是由一个8位的常数循环右移偶数位得到的数才行, 我不理解为什么是这样
还有下面说数据处理指令操作数的具体寻址方式有11种,第一种 是 #<immediate> , 立即数的生成方式也是上面那样, <immediate>=immed_8循环右移(2*rotate_imm) .
示例: MOV R0 , #0xFC0
为什么不是每个立即数都是合法值呢?为什么必须要由一个8位的常数循环右移偶数位得到的数才行? ARM一条汇编指令(32bit长度),包含了操作码<opcode> {<cond>} {s} 等等这些东西,还要包含源地址和目标地址,这个时候如果加上一个 32bit的立即数
你觉得够地方放码??
一般8bit的立即数可以包含。
不过看这些都太麻烦了。装载理解数用 LDR 指令,不要用mov指令了,编译器会自动翻译的。
LDRR0,=0xffff0000 学习了。
楼上说的有道理
页:
[1]