深入理解计算机系统 第三章 程序的机器级表示 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、计算机有多核,多线程实际并发(真正同时运行)的时候, 寄存器会有对应的多份吗?如果没有,那一份寄存器怎么供多核同时使用?
最新文章
- Python3实现最小堆建堆算法
- NOIP2012借教室[线段树|离线 差分 二分答案]
- 【PHP面向对象(OOP)编程入门教程】12.重载新的方法(parent::)
- java swing 中的FileDialog
- python下的orm基本操作(1)--Mysql下的CRUD简单操作(含源码DEMO)
- Nodejs的mysql模块学习(一)
- 深入理解javascript闭包(一)
- 中国(北方)大学生程序设计训练赛(第二周) (A B D G)
- Html5学习之旅-html5的留言记事本开发(17)
- C++ 参数传值 与 传引用
- js总结:JavaScript入门
- Debian下配置防火墙iptables
- loj #116. 有源汇有上下界最大流
- Physics for Game Programmers (Grant Palmer 著)
- <;亲测>;CentOS7yum安装PHP7.2
- 一步一步学习IdentityServer4 (2) 开始一个简单的事例
- ConcurrentHashMap之实现细节
- HDU1735 字数统计
- ssh 远程拷贝文件到本地
- 一篇博文将JavaScript尽收眼底