zoukankan      html  css  js  c++  java
  • CSAPP笔记(第三章 程序的机器级表示)-02

    第三章的内容为p145~p252, 分3次. 本篇为第2次, p171~p211.

    摘要

    本篇主要讲了条件寄存器和函数调用子函数.

    条件寄存器

    CMP指令, cmp S1,S2 => IF(S2 - S1), cmpb, cmpw, cmpl, cmpq.
    Test指令, test S1,S2 => IF(S1 & S2), testb, testw, testl, testq.

    条件码的使用

    3种方式

    1. set指令. 根据条件码将一个字节设置为0或者1.

    2. jmp指令. 根据条件码跳转.

    3. cmov指令. 根据条件码赋值, 又叫条件传送.

    C语言提供了多种循环结构, do-while, while, for. 汇编中没有这些指令, 可以用条件测试和跳转组合实现循环的效果.

    switch语句可以通过使用跳转表(jump table)来实现的更加高效.

    函数调用子函数

    函数P调用子函数Q, 可能有以下操作

    1. 保存后面可能会用到的"调用者保存寄存器"到内存
    2. 为Q生成一个新的栈帧, 将栈帧P的地址保存到栈帧Q的底部
    3. 调用Q
    4. 函数Q保存可能会用到的"被调用者保存寄存器"到内存
    5. 获取传递过来的参数进行运算, 参数可能通过寄存器传递(最多6个), 也可能通过栈中内存地址进行传递
    6. 从内存恢复"被调用者保存寄存器"到指定寄存器
    7. 返回, 销毁函数Q的栈帧, 当前栈帧指向P
    8. 从内存恢复"调用者保存寄存器"到指定寄存器
    9. 继续后续的动作
  • 相关阅读:
    Spring基础学习
    云服务器配置java环境
    Struts2学习笔记(一)--入门常见配置
    Hibernate学习笔记(二)
    Hibernate学习笔记(一)
    java---Listener & Filter知识点学习
    java----DBUtils知识点补充
    java----连接池C3p0使用的补充
    IOS之表视图单元格删除、移动及插入
    IOS之表视图添加索引
  • 原文地址:https://www.cnblogs.com/winwink/p/CSAPP_Note_Chapter3_Machine_part2.html
Copyright © 2011-2022 走看看