• 深入理解计算机系统 第三章 程序的机器级表示 Part2 第二遍


    第一遍对应笔记链接 https://www.cnblogs.com/stone94/p/9943779.html

    本章汇编代码中常出现的几个指令及其含义

    1、push

    操作数的个数:1

    将操作数(一般是寄存器)的值压入栈中,由于栈向下生长,所以这时栈顶指针会减小一点

    2、move

    操作数的个数:2

    第一个操作数是源操作数,第二个操作数是目的操作数,该指令将源操作数的值赋给目的操作数

    3、call

    操作数的个数:1

    调用某个方法,栈的变化没有完全弄明白

    4、pop

    操作数的个数:1

    将栈顶元素赋给操作数,同时从栈顶弹出该元素,栈顶指针增加一定的值

    5、ret

    当前方法结束,返回

    这里说到的两种抽象看不大懂

    “计算机系统使用了多种不同形式的抽象,利用更简单的抽象模型来隐藏实现的细节,对于机器级编程来说,其中两种抽象尤为重要,第一种是由指令集体系结构或指令集架构(ISA)来定义机器级程序的格式和行为,它定义了处理器状态、指令的格式,以及每条指令对状态的影响。大多数 ISA ,包括 x86-64,将程序的行为描述成好像每条指令都是按顺序执行的,一条指令结束后,下一条再开始,处理器的硬件远比描述的惊喜复杂,它们并发地执行许多指令,但是可以采取措施保证整体行为与 ISA 指定的顺序执行的行为完全一致。第二种抽象是,机器级程序使用的内存地址是虚拟地址,提供的内存模型看上去是一个非常大的字节数组”

    # 待了解

    1、无论一个方法被运行多少次,它的源码、汇编代码和二进制代码都只有一份吗?都是存在哪里的?操作系统最终是,每次需要的时候,拿二进制代码去协调内存和 CPU 操作数据吗?

    2、计算机有多核,多线程实际并发(真正同时运行)的时候, 寄存器会有对应的多份吗?如果没有,那一份寄存器怎么供多核同时使用?

  • 相关阅读:
    Android开发日志问题
    Android 常用的快捷键(随时更新)
    Android v4 包和v7包问题
    mongoDB 3.0.3 以上GUI 连接认证问题
    python(6)
    python学习(5)
    01_数字滤波器调研
    动态称重数据处理算法及其在禽蛋和类球形水果分选中的应用研究-01
    点云学习
    10-视频图像读取与保存
  • 原文地址:https://www.cnblogs.com/stone94/p/11605824.html
Copyright © 2020-2023  润新知