计算机系统2常见易漏知识点汇聚

第二章

1.程序多字节变量是从低地址存储到高地址 向上存储
   数组是从低地址往高地址存储 大端小端针对的是单地址
2.负数补码等于其正数取反加一
3.负数的二进制变正数只需要全部取反加一
4.有符号负数转无符号数 加2的n次方即可 或者全部写成位模式再按无符号数写成16进制 再转成十进制机即可(实际上负数也相当于其正数取反加一的位模式 此时也是无符号数的位模式,但注意如果有类型转换,先符号扩展再进行转化)
5.无符号数转有符号数 如果超过2的n-1次方 减去2的n次方即可
6.无符号数优先级大于有符号数
7.补码的非等于取反加一
8.向偶数舍入 等于 相当于四舍五入
9.浮点数可以确认平方一定大于等于0,但带符号整数不一定(位数限制溢出)

第三章

1.立即数寻址:直接获取立即数的值 不加括号的寄存器是获取寄存器的值,加了括号类似于指针,取值对应地址中的内容(当然leaq是不管加不加括号都是取直接地址里面的内容)
2.立即数较大时转化为二进制再转为16进制即可
260=256+4=2^8+2^2  1 0000 0100 = 0x104
3.有符号数转无符号数:先符号扩展再拷贝
无符号转有符号数:不用太注意,因为符号扩展都是0,可以利用低4字节赋值,高位清零
4.移位如果不是立即数,则要在%cl中取移位数,即需要先把数放到%rcx里面再取%cl进行移位
2^m=被移位数的位数,m为%cl的低m位10进制值
5.sub src des = des - src结果在des
6.imulq 有符号乘法如果单操作数,默认与%rax相乘,结果低八字节在%rax,高八字节在%rdx
idivq有符号除法如果单操作数,先把被除数放在%rax里面再cqto符号扩展,再idivq 除数,结果商存放在%rax,余数在%rdx中,此时%rdx注意调用者保存,放在%r8即可
divq无符号数除法则不用cqto,而是除之前先把%rdx清零
7.Test a a指令改变SF(负数)、ZF(0),CMP类型与SUB类似,后减前
test指令下面一般接jle 如果小于等于0就跳转等等
cmovne a b也可以,如果测试结果不为0,则将a复制到b(多条件分支时少用jmp,可用此代替)
8.别忘了无条件跳转 jmp .L1 jmp指令;如果是PC+偏移的话,汇编语言编码的第二个是偏移值,此时跳转的地址为下一个指令地址+偏移值
汇编语言的编码两位16进制一个字节,可以通过这个确定指令地址
指令汇编编码是先指令再偏移,所以偏移是高位,指令低位(小端法先指令后偏移)(如果有说大小端则需要区分,否则就是第一个是指令第二个是偏移)
如果偏移大于2^7-1,则应该变为负的补码(取反加一),如f4变成-d
9.栈传递参数时要向8倍数对齐
10.leaq可以获取数组元素的地址(打括号)
11.找数组元素时别忘了*元素长度
12.union数据对齐与其最大数据长度保持一致,且只占此大小的空间

(对齐针对的不是某个元素,而是对于整体而言,要是最长字段的整数倍)


13.模板库的结尾时.a

以上均为个人总结,有问题可评论区或者私信交流

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值