秃头的汇编
说明
本篇博客记录的是博主在学习基于Intel 8086指令系统的汇编一些知识点。
什么是汇编语言
- 汇编语言(assembly language)是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。
- 在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植。
一些基础知识
字节、字、bit、byte的关系
1 | 字 word |
80×86寄存器
- 8086 CPU中寄存器总共为14个,且均为16位。
- 即AX,BX,CX,DX,SP,BP,SI,DI,IP,FLAG,CS,DS,SS,ES共14个。
- 而这14个寄存器按照一定方式又分为了通用寄存器(8个),控制寄存器(2个)和段寄存器(4个)。
通用寄存器
AX,BX,CX,DX 称作为数据寄存器:
- AX (Accumulator):累加寄存器,也称之为累加器
- BX (Base):基地址寄存器
- CX (Count):计数器寄存器
- DX (Data):数据寄存器
由于在 8086 之前的 CPU 为 8 位 CPU,所以为了兼容以前的 8 位程序,在 8086 CPU 中,每一个数据寄存器都可以当做两个单独的寄存器来使用。
- AX 寄存器可以分为两个独立的 8 位的 AH 和 AL 寄存器;
- BX 寄存器可以分为两个独立的 8 位的 BH 和 BL 寄存器;
- CX 寄存器可以分为两个独立的 8 位的 CH 和 CL 寄存器;
- DX 寄存器可以分为两个独立的 8 位的 DH 和 DL 寄存器;
SP 和 BP 又称作为指针寄存器:
- SP (Stack Pointer):堆栈指针寄存器
- BP (Base Pointer):基指针寄存器
SI 和 DI 又称作为变址寄存器:
- SI (Source Index):源变址寄存器
- DI (Destination Index):目的变址寄存器
控制寄存器
- IP (Instruction Pointer):指令指针寄存器
- FLAG:标志寄存器
段寄存器
- CS (Code Segment):代码段寄存器
- DS (Data Segment):数据段寄存器
- SS (Stack Segment):堆栈段寄存器
- ES (Extra Segment):附加段寄存器
注意: 此图片还包含了80286的寄存器。
物理地址的产生
- 逻辑地址:CPU所生成的地址。逻辑地址是内部和编程使用的、并不唯一。
- 物理地址:加载到内存地址寄存器中的地址,内存单元的真正地址。
- 物理地址=段基址×16+偏移量
寻址方式
- 寻址:寻找操作数地址的过程
- 寻址方式与操作数位置有关
操作数位置 | 操作数名称 | 寻址方式名称 |
---|---|---|
在指令中 | 立即数 | 立即寻址 |
在寄存器中 | 寄存器操作数 | 寄存器寻址 |
在储存器中 | 存储器操作数 | 存储器寻址 |
在I/O端口中 | I/O操作数 | I/O端口寻址 |
与数据有关的7种寻址方式
立即寻址
- 操作数在指令中,紧跟在操作码之后,这样的操作数成为立即数。
直接寻址
- 操作数的地址中的偏移量直接跟在操作码之后,默认情况下基址存放在DS中,这个时候不需要加前缀,如果是加了别的前缀,如ES,表示基址在ES中。
寄存器寻址
- 操作数在CPU的寄存器中,指令指定寄存器号,这种寻址速度快,它不需要访问存储器中的操作数,因为所有的操作数都在寄存器中
寄存器间接寻址
- 操作数在存储器中,操作数有效地址在SI,DI,BX,BP这四个寄存器之一中,在一般情况下,如果有效地址在SI,DI和BX中,则以DS段寄存器之内容为段值。如果有效地址在BP中,则以SS段寄存器之内容为段值。
寄存器相对寻址方式
- 基址相对寻址
1
2
3
4对于BX寄存器来说,使用DS作为基址寄存器
例如:
MOV AX,COUNT[BX] 或 MOV AX, [COUNT+BX]
------DS基址------1
2
3
4对于BP寄存器来说,使用SS作为基址寄存器
例如:
MOV AX,COUNT[BP] 或 MOV AX, [COUNT+BP]
------SS基址------- 变址相对寻址
1
2
3使用2个变址寄存器SI,DI.例如:
MOV AX,COUNT[SI] 或 MOV AX,[COUNT+SI]
MOV AX,COUNT[DI] 或 MOV AX,[COUNT+DI]
1 | 物理地址=16×(DS)+(BX)+8或16位位移量 |
- 基址变址寻址
1 | (BP) (SI) |
- 相对基址变址寻址
1 | (BP) (SI) 8位位移量 |