zoukankan      html  css  js  c++  java
  • 深入理解计算机系统 第三章 程序的机器级表示 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、计算机有多核,多线程实际并发(真正同时运行)的时候, 寄存器会有对应的多份吗?如果没有,那一份寄存器怎么供多核同时使用?

  • 相关阅读:
    dotnet 控制台读写 Sqlite 提示 no such table 找不到文件
    dotnet 控制台读写 Sqlite 提示 no such table 找不到文件
    dotnet 控制台 Hangfire 后台定时任务
    dotnet 控制台 Hangfire 后台定时任务
    dotnet 获取指定进程的输入命令行
    dotnet 获取指定进程的输入命令行
    PHP sqrt() 函数
    PHP sinh() 函数
    PHP sin() 函数
    PHP round() 函数
  • 原文地址:https://www.cnblogs.com/stone94/p/11605824.html
Copyright © 2011-2022 走看看