• 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. 继续后续的动作
  • 相关阅读:
    团队冲刺-1
    最优惠购买书籍
    gogoing软件NABCD
    二维数组首尾相连
    首尾相连一维数组的最大子数组和
    二维数组返回最大子矩阵之和
    石家庄铁道大学基础教学楼电梯使用调查
    子数组最大值求和
    返回一个整数数组中最大子数组的和-课堂训练(子数组为连续)
    软件工程概论-四则运算
  • 原文地址:https://www.cnblogs.com/winwink/p/CSAPP_Note_Chapter3_Machine_part2.html
Copyright © 2020-2023  润新知