美文网首页
深入理解计算机读书笔记第三章

深入理解计算机读书笔记第三章

作者: 竹草席 | 来源:发表于2020-06-20 20:05 被阅读0次

    深入理解计算机系统

    第三章

    这章内容有多表,规定了各种表示方式,很重要。需要的时候要去查询。

    这章习题很重要,能够加深对于汇编概念的理解,根据参考答案和题目进行思考。

    1.数据表示

    2.寄存器介绍和地址移动

    这章表表示了寄存器的名称和功能,非常重要,后面的汇编寄存器基本都需要查看这章表。

    寻址方式计算表,汇编指令中地址的技术根据此表。

    数据移动指令,mov后面的字母表示移动的大小。指令里第一个数为源数据,第二个为目标地址,表示把源数据移动到目标地址。

    movz表示剩余位补0,movs表示剩余位符号填充(把源数据的最高位进行填充扩展)

    3.栈

    红色部分说明,push先移动栈指针再赋值,pop先把数据弹出再进行栈指针移动。移动方向根据栈的方向而定,push往原理栈底方向移动8个字节,pop往靠近栈底方向移动8个字节。移动8个字节是因为64位机器,8个字节就是64位,能表示全部地址内容。

    4.算数运算指令

    要想好的理解指令含义做对应的练习题,根据答案进行分析理解。

    5.逻辑控制

    逻辑的控制都是根据条件码进行的,运算会指令会设置条件码,进行判断的时候需要读取,然后进行判断。比如大于还是小于,正还是负,要想好的理解还是做练习题跟书中内容细读。这个地方不是很好理解,个人的简单理解就是计算机在进行逻辑判断时就会根据条件码来判断出结果,具体通过哪些条件码的组合,比较复杂。

    cmp  s  r  比较指令等于 r - s ,结果需要查看条件码才能知道是大于,小于,还是等于。本身无法知道结果

    6.跳转

    条件跳转就是根据运算后设置的条件码进行判断是否需要跳转。

    直接跳转不进行计算直接跳转。

    跳转会生成对应的跳转标记,再转换成后标记被变成相对地址或者绝对地址,图中是常用的相对地址。

    红色标记为标记转换后生成的相对地址。地址计算为跳转指令后面的数字,跳转指令为1个字节,所以都是2个16进制后面的数字为需要计算的值。

    比如03,表示跳转相对于下一个指令的地址加3,所以为8(5+3)。f8为补码,表示负数,转换后为负8,所以跳转地址为下一个指令地址减8,为5(d -8)

    练习题3.15,能帮助理解跳转地址的转换

    7.循环

    循环转成汇编后还是以跳转的方式实现,从汇编反编译活动代码里循环是通过gotto语句来实现的,这个跟生成的汇编形式很像。每种循环都是类似的方式实现,具体语句不太一样。

    8.栈上的数据局部存储和递归调用

    参数一般都是通过寄存器直接进行保存,方便直接使用,但是在参数过多超过寄存器数量时,就会保存在栈上。

    每个过程调 用在栈 中都有 它自己 的私有 空间, 因此多 个未完 成调用 的局部 变量不 会相互 影响。此外 ,栈的 原则很 自然地 就提供 了适当 的策略 ,当 过程被调用时 分配局 部存储 ,当 返回时释放 存储。

    9数组分配和结构体

    数组本身是一组连续是数据,所以在内存中也是通过连续的地址进行保存的。嵌套数组依然是一组连续的数据进行保存,比如二维数组就是两个一维数组连续内存地址保存。

    变长数组:

    历史上 , C 语言 只支持 大小在 编译时 就能确 定的多 维数组 (对 第一维 可能有 些例外 h程序 员需要 变长数 组时不 得不用 malloc 或 calbc 这 样的函 数为这 些数组 分配存 储空间 ,而且不得 不显式 地编码 ,用 行优先 索引将 多维数 组映射 到一维 数组, 如公式 (3.1) 所示。 ISOC 时引 人了一 种功能 ,允许 数组的 维度是 表达式 ,在 数组 被分配 的时候 才计算 出来。

    结构体这样的数据结构在内存中也是像数组一样通过连续的内存地址进行保存。

    相关文章

      网友评论

          本文标题:深入理解计算机读书笔记第三章

          本文链接:https://www.haomeiwen.com/subject/cdxhtktx.html