Chinaunix首页 | 论坛 | 博客
  • 博客访问: 601887
  • 博文数量: 165
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1554
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-23 22:57
个人简介

我本仁慈,奈何苍天不许

文章分类

全部博文(165)

文章存档

2018年(1)

2016年(33)

2015年(5)

2014年(34)

2013年(92)

分类: LINUX

2013-12-06 18:07:11

1、为什么没有算术左移?

比如-37算术右移:

原码:1 0 1 0  0 1 1 0

反码:1 1 0 1  1 0 0 1

补码:1 1 0 1  1 0 1 0

右移  1 1 1 0  1 1 0 1(这里是算术右移一位,最右边的一位去掉,然后左边位补上符号位)

原码  1 0 0 1  0 0 1 1 (补码取反加1)结果时-19

经验证这种算术右移对于负偶数,相当于除以2;但是对于负奇数相当于除以2再减1

逻辑左移和算术左移是一样的,都是在后面补0

c右移的规则是:无符号数右移时左边高位移入0;有符号数右移时:1.符号位为0,移入02.符号位为1,有的系统移入1(算术右移),有的系统移入0(逻辑右移)

 经验证vcgcc均默认为算术右移,上面的汇编代码也说明了这一点,有unsigned时右移采用的是shr(shift logical right)逻辑右移,无unsigned时采用sarshift arithmetic right)算术右移。

 《c和指针》中也建议不要对有符号数进行>>操作,所以为了确保结果一定,>>时把数值转成unsigned

 又试了一下<<,发现signedunsigned都是采用shl逻辑左移,应该是shlsal效果都一样,所以编译器就统一采用shl

 试验int 0x80000000 << 1结果为0,说明符号位对左移没影响。

2、位置无关码的好处(相对于绝对寻址而言)

位置无关码是在程序连接阶段用的,因为那个时候所有的代码还都存放在Flash中,如果用绝对地址去内存中取值,那个时候由于代码还没有被移植到内存中去,故那个时候内存中对应地址的值不存在,所有还得用位置无关码在Flash中查找相关的值:ldr  pc,[pc,#offset]

3、如果是ARM能执行的文件,第一条指令 一定在最高位上是0XE

ACPCS:

1、函数输入参数,用R0--R3,函数的返回值用R0来表示

4、位置无关的代码

ldr  pc,[pc,#offset]

5、有效立即数

判断方法:

1、用8bit的盒子,去框住所有的有1的有效数字

0xff1

2、框住后的0,能通过偶数次移走

6、 

栈:

top

  满   

  递增    递减

C语言中的栈:

满递减栈

要求是:栈顶指针指向高地址,

top--

LDMFD sp!,{r0,r1,r2}

STMFD sp!,{r0,r1,r2}

7Makefile中的赋值:

A):=  相当于C语言中的普通赋值,如果后面重复赋值,则前面的值会被覆盖;

如:A   =  10

A   : =   20

则此时的值为20,前面的10被覆盖

B) +=  相当于累加的方式赋值;

如:A    += 10

A    += 20

则此时10 201020之间为空格)

C) ?先判断变量在前面定义了吗,没有定义则使用,如果定义了则就不用了

阅读(815) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~