立即数最大有多少位?

假设cpu执行一个指令: add #xx yy

常数xx最大有多大?如果超过32bit, 那么add xx yy这个指令不就超过32bit了吗? 这样是不对的吧? 当初自己设计cpu时,没有想到这个问题

看上面这个指令,imm立即数是有限制的!
什么操作编译器会将代码编译为立即数操作,什么代码编译为ram寻址,什么代码编译为reg寻址?
不同的指令需要不同的寻址方式,使用到某个指令了就决定了必须采用这种寻址方式!很简单,但是刚想明白!
2017.6.22



立即数不是C语言中的常量!!
2017.6.22

机器代码或汇编代码中,C中的数组和结构都是一组连续的内存字节来表示,他不区分符号或无符号数,不区分各种类型的指针,甚至不区分指针和整数!
2017.6.22

所谓的32位,64位指令集指的是操作数据宽度,即内存操作的数据宽度,不是指指令只有32位,64位,例如movasq指令可以直接操作64位立即数
2017.7.5
ARM是risc,因此所有指令是等长的; 而intel是cisc, 指令是不等长的;
2017.7.5

ARM中如何将使用ldr指令去某个内存地址的数据? 内存地址为32bit

LDR 是ARM中的指令,也是伪指令。当用 LDR r, =imd  // r 为寄存器, imd为立即数

LDR 是一条伪指令。编译器会根据 立即数的大小,决定用 ldr 指令或者是mov或mvn指令。

当imd能用mov或者mvn操作时,就将它翻译成一条mov或mvn指令。当imd大于mov或mvn能够操作的数时,编译器会将imd存在一个内存单元中,然后再用一条ldr指令加载这个内存单元的的值到寄存器中。

32位的数可以分两次载入:
比如可以这样载入0x0c002000:

 1 .text

2     mov    sp, #0x0c000000
3     add    sp, sp, #0x00002000
2017.7.5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值