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

原文地址:https://www.cnblogs.com/stone94/p/11605824.html