最近在学习《汇编语言(第三版)》,将一些知识点记录在此。
1. 8086架构
- 16位处理器:寄存器均为16位
- 20位地址总线,内存地址1MB
- 16位数据总线
内存地址空间布局如下
1 |
|
- RAM: 640kB空间
- 显存地址空间:128kB空间,写入后会在控制台显示
- ROM地址空间:256kB空间,不可写入
2. 寄存器和指令
- 通用寄存器:ax, bx, cx, dx
- 段寄存器:cs, ss, gs, x
段寄存器的值只能由其它寄存器给出,不能由立即数给出。
2.1. 物理地址计算
\[物理地址 = 段地址 x 16 + 偏移地址\]段地址由cs
给出,64kB大小,偏移地址由ip
给出
jmp 段地址:偏移地址
,例如jmp 2AE3:3
jmp 某一合法寄存器
2.2. 内存访问
读写的内存单元数据段地址由ds
给出
mov 寄存器名, 内存单元地址([...])
2.3. 栈
栈段由ss
给出,栈顶地址由sp
给出
- push
- SP = SP - 2
- 向SS:SP中写入数据
- pop
- 从SS:SP中读取数据
- SP = SP + 2
可以给出下列指令
push/pop 寄存器
push/pop 段寄存器
push/pop 内存单元