计算机系统2-第3章学习笔记

总结用,可能以后会修改


寄存器

​​所有寄存器格式
其中%rsp为栈指针,%rip为PC地址


寻址模式

所有地址表达方式


数据传送指令

  • 后缀

    字符对应字长
    q8字节(64位)
    l4字节(32位)
    w2字节(16位)
    b1字节(8位)
  • 不同指令

    指令作用
    mov一般传送
    movs符号扩展传送
    movz0扩展传送
    xchg数据交换
    push/pop出入栈
  • exp:
    (1) movslq指以符号扩展传送方式,将参数从4字节扩展为8 字节

    指令代码
    movq $0x4,%raxtemp = 0x4
    movq $-147,(%rax)*p = -147;
    movq %rbx,%rdxtemp2 = temp1;
    movq %rax,(%rdx)*p = temp;
    movq (%rax),%rdxtemp = *p;

地址传送指令lea

  • 格式:leaq src,dst
  • src为地址计算式,将src的地址直接赋给dst的内容
  • exp:leaq (%rax),%rdx = movq %rax,%rdx
  • 不改变条件码

算术运算指令

  1. 两元
    在这里插入图片描述
  2. 一元
    在这里插入图片描述
  3. 移位的不同区别(移位只接受单字节类寄存器)
    算数移位:salq,sarq
    逻辑移位:shlq,shrq
  4. 特殊运算指令

    指令中只给出一个操作数,另一个操作数(乘法是%rax, 除法是%rdx:%rax),目的操作数也隐含(乘法是%rdx:%rax, 除法商在%rax余数在%rdx)
    注意cltq指令是吧%eax类寄存器扩展为%rax,不要与clto混淆

出入栈

  1. 格式:push/pop %rax
  2. 等价于:

push %rax:
subq $8,%rsp
movq %rax,(%rsp)
pop %rax:
movq (%rsp),%rax
addq $8,%rsp


控制

  1. 条件码:
    在这里插入图片描述

  2. 会设置条件码的指令
    leaq排除
    排除leaq

  3. 只设置条件码而不改变任何其他寄存器
    在这里插入图片描述
    注意cmp指令是右比较左,例如

    cmp $0,%rbx
    jg …

    该指令成立的条件是%rbx>0

  4. 访问条件码

    • Set X指令:
      • 基于条件码的组合将目标的低位字节设置为0或1。(%cl)
      • 不改变剩余的7字节。
        在这里插入图片描述
    • exp
      在这里插入图片描述
      转化为汇编
      在这里插入图片描述
  5. 跳转指令

    • 根据条件码跳转到代码的不同部分
      在这里插入图片描述
  6. 用条件传送来实现条件分支

    • 条件传送指令:
      cmovs S, D //负数时传送
      cmovns S, D //非负数时传送
      在这里插入图片描述
  7. switch语句
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述


过程调用

  1. 帧栈
    在这里插入图片描述
  2. 寄存器保护习惯
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值