panda1985 发表于 2012-11-17 11:20:08

在看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位的常数循环右移偶数位得到的数才行?

Etual 发表于 2012-11-17 11:32:15

ARM一条汇编指令(32bit长度),包含了操作码<opcode> {<cond>} {s} 等等这些东西,还要包含源地址和目标地址,这个时候如果加上一个 32bit的立即数
你觉得够地方放码??
一般8bit的立即数可以包含。
不过看这些都太麻烦了。装载理解数用 LDR 指令,不要用mov指令了,编译器会自动翻译的。
LDRR0,=0xffff0000

lantaobs 发表于 2012-11-18 18:19:01

学习了。
楼上说的有道理
页: [1]
查看完整版本: 在看ARM体系结构与编程时遇到一个问题,请老师指教