计算机系统2

3. 程序的机器级表示

汇编指令 3.1——3.6

.开头:指导汇编器,连接器工作的伪指令
调用者/被调用者保存

操作码:bwlq 1248

操作数

Imm(rb,ri,s)=Imm+R[rb]+R[ri]s
s=1,2,4,8
注意区分 Imm$ 和 (ra)()

立即数

$ + 常数(最多4字节)

寄存器

R[ra]:寄存器的值

常用寄存器(背):%rax %rsp %rdi %rsi %rdx %rcx %r8 %r9

内存引用

M[Addr]:地址的值

MOV类

MOV S D

S:立即数,寄存器,内存引用
D:寄存器,内存引用

许多细节:

  1. SD不能同时是内存引用

  2. SD 数位相同:

movq S D: S为立即数时只能是32位,然后符号扩展
S为64位时用:movabsq $Imm RegisterD 只能是寄存器

movlD为寄存器时,其高四字节被置0——任何位寄存器生成32位值的指令都会把该寄存器的高位部分置为0

  1. S 数位小于 D

MOVZ类:零扩展

movzbw, movzbl, movzwl, movzbq, movzwq

没有movzlq:可以通过 movl 实现

MOVS类:符号位扩展

movsbw, movsbl, movswl, movsbq, movswq, movslq, cltq
cltq 无操作数, 等价于 movslq $eax %rax

高地址 -> 低地址

pushq Register
popq Register

leaq

leaq S D

地址都是64位,所以只有q

加载有效地址,仅做地址搬运,不读取数据!!!

算术逻辑

一元:INC DEC NEG NOT
二元:ADD SUB IMUL XOR OR AND D不能是立即数
移位:SAL SHL SAR SHR + k D, k 为%cl或立即数
关于 %cl:长度为8,bwlq 对应移位量为 %cl 的低 3456 位

条件码寄存器 SET

ALU:执行算术逻辑运算 + 设置条件码寄存器

1bit

CF进位,ZF零,SF符号,OF溢出

cmp test设置条件码寄存器,不更新目的寄存器的值

记住含义:
有符号:setg setge setl setle SF,OF
无符号:seta setae setb setbe CF,ZF

跳转

条件跳转:cmovg cmovge cmovl cmovle

for, while do while

switch 跳转表,高效

3.7 过程(函数调用)

函数调用与返回

  1. 把调用语句的下一条语句地址压入栈
  2. 执行完被调用函数后从栈中弹出该地址返回函数继续执行

参数传递:
1-6个参数用固定寄存器

其余用栈传递:
栈存储:所有数据大小为8的倍数
栈顶返回地址
局部变量也在栈中,但是不需要对齐;传递参数必须对齐 关于对齐规则 add
每个参数实际大小由自身变量类型决定,具体位置根据大端/小端存储法来定。

调用者/被调用者保存寄存器
递归调用:栈溢出

3.8 数组的分配和访问

根据数据类型来定,行优先

3.9 结构体联合体

结构体对齐
地址对齐:任何 k 字节的基本对象的地址必须是 k 的倍数
末端也会对齐(为了下一次的起始地址合理,结构体占的总字节数为4的倍数

指针都是8字节!!!!

联合体 Union 大小:最大字段的大小
用处:访问不同数据类型的位模式(一种类型存储,另一种类型访问)

3.10 缓冲区溢出

越界,限定范围

栈随机化

栈的位置每次运行都变
地址空间布局随机化 ASLR

栈破坏检查

缓冲区与栈之间加入 金丝雀 (随机产生,只读)
金丝雀值修改 -> 遭受了攻击

限制可执行代码区域

消除攻击者向系统中插入可执行代码的能力
分离可读 与 可执行

6. 存储器层次结构

6.1 存储技术

6.2 局部性

6.3 存储器层次结构

6.4 高速缓存存储器

cache是主存的副本
主存打包放进cache
映射规则:主存怎么放到cache里
主存物理地址 = 块号 + 块内地址
标记:一个块的唯一标识

全相联映射:主存物理地址 = 标记 + 块内地址
组相联地址:主存物理地址 = 标记 + 组号 + 块内地址
直接映射:主存物理地址 = 标记 + cache行号 + 块内地址

(理解:相联 = 随便,直接映射 = 一路随便)

cache内部结构
中间位作为组索引:因为要保证每块内存都要被使用到 提高cache的使用率

辅助理解:

判断cache命中:组选择 - 行匹配 - 字抽取

冲突不命中,cache抖动
数据填充消除抖动

行替换:随机替换,LFU,LRU

cache的写操作:命中/不命中

posted @   Sakana~  阅读(55)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示