machine_code(1)
处理器模型发展
摩尔定律
芯片构造
当时标准桌面型号有四个核心,服务器级别的机器有八个核心(上图)
芯片周围连接外围设备的接口:
- DDR是连接到主存的方式,即所谓的DRAM(Dynamic动态 RAM随机访问机)
- PCI是一种同步的独立于处理器的32位或64位局部总线,主要用于连接显示卡、网卡、声卡
- SATA是与不同类型盘连接
- USB接口与USB设备连接
- ethernet网络连接
集成到芯片上的不止是处理器还有很多逻辑单元
处理器架构
架构 | 特点 | 代表性的厂商 | 运营机构 |
---|---|---|---|
X86 | 性能高,速度快,兼容性好 | 英特尔,AMD | 英特尔 |
ARM | 成本低,低功耗 | 苹果,谷歌,IBM,华为 | 英国ARM公司 |
RISC-V | 模块化,极简,可拓展 | 三星,英伟达,西部数据 | RISC-V基金会 |
MIPS | 简洁,优化方便,高拓展性 | 龙芯 | MIPS科技公司 |
X86在PC上占据大部分份额,ARM在手机处理器上占据绝对份额
c代码运行的过程
1 | gcc -Og -S sum.c |
-s为-stop停在把c转化为汇编的时刻
-Og是我希望编译器做什么样的优化的规范,这样才能读懂
具体过程:https://www.cnblogs.com/carpenterlee/p/5994681.html
1 | objdump -d sum > sum.d |
反汇编,sum.d的内容
1 | a.out: file format elf64-x86-64 |
反汇编程序无法访问源代码,甚至无法访问汇编代码,它只是通过实际目标代码文件中的字节来辨别出来的
或者使用GDB
1 | >> gdb |
此方法前面显示的是16进制地址而非像objdum那样的字节级编码
Assembly Characteristics: Data Types 汇编语言特性
- “Integer” data type of 1,2,4,or 8 bytes,不区分unsigned和signed
- floating point 有4,8,10,bytes
- 没有数组以及一些数据结构,只是内存中连续存储的单元
x86-64 Integer Registers
有16个寄存器
注意到 %r代表62位操作 %e代表了32位的操作,%e版本只是%r实体的低32位。
%rsp寄存器存的是栈指针,它能告诉你程序执行到哪儿了
移动数据
格式
1 | moveq Source Dest |
操作数类型
操作数组合
理解Swap()函数
使用x86-64的时候,函数参数总是出现在某些特定的寄存器中,**%rdi将是第一个参数寄存器,%rsi将是第二个参数寄存器**。最多可以有6个
完整的内存地址模式
下面是内存完整模式的一个例子
地址计算
control
处理器状态 (x86-64, Partial)
图上的CF,ZF,SF,OF就是微机学过的状态位,其中各自代表的意思如下
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 HaomingX的博客!
评论