在keil中看内存地址


从上图可以看出当执行mov r3 #0x0010时,因为指令需要先加载进内存中,内存中发生如下变化

1.当板子上电之后,第一步加载进内存的是中断向量表,但不是说0x000000000这块内存空间不可以使用了

2.指令在内存中也是以十六进制的方式存在的

对于mov r0 #0x0010这样一条指令来说,如果是小于255的立即数,那么这个立即数只占一个字节,这里也可以验证了

内存中是以字节为单位存放数据的,从第一行的00到第二行的17,一共是17(十六进制)个字节

换算为十进制是23个字节,其中一条指令占的是4个字节,也就是 10 30 A0 E3其中10是立即数,后面的就是指令的机器码

如果换成其他的立即数比如0xf000

一条指令的后12位(bit11~0),是指令中立即数占用的位数,,其中这个12位又分为2部分,前7~0位是数值部分,后11~8位是前7~0位要进行移位操作的移位数,也就是说如果一个立即数小于0xFF(255)那么直接用前7~0位表示即可,此时不用移位,11~8位的rotate_Imm等于0,如果前八位immed_8的数值大小了255,那么就看这个数是否能有immed_8中的某个数移位rotate_imm位形成的

所以此时内存中第一个字节发生变化,后面的第二个字节8-11位也会相应发生变化


所以,第一位变成0f,第二位变成3A









猜你喜欢

转载自blog.csdn.net/chengchaonan/article/details/80714481