Instruction And Addressing Modes
Addressing Modes
- 在8086中,16位通用寄存器可以拆成两个8位寄存器,如AX(16 bit) - AH(8 bit) + AL(8 bit)
Register
- AX, BX, CX, DX → General(通用寄存器)
- SP, BP → Pointer(指针寄存器)
- SI, DI → Index(索引寄存器)
- CS, DS, SS, ES → Segment(段寄存器)
- IP → Instruction(指令指针)
- FR → Flag(标志寄存器)
- 随着Intel Architecture架构的发展,Register的宽度从16位扩展到32位,再到今天最主流的64位,而原有的Register名称被保留下来,并被用来表示大寄存器中的低位部分


- EAX/AX:常用于乘法除法以及一些adjustment instruction
- EBX/BX:有时用来保存某个内存位置的offset address
- ECS/CS:常用来保存计数值,如循环次数
- EDX/DX:在乘法中保存结果的一部分,或在出发中保存被除数的一部分
- EBP/BP:作为pointer指向内存中的某个位置
- EDI/DI:常用于string instruction,指向destination data
- ESI/SI:常用于string instruction,指向source data
Registers for special purpose
- EIP/IP:指向下一条要执行的命令在code segment中的位置
- ESP/SP:指向stack顶,用于管理stack
- EFLAGS/FLAGS:记录CPU当前运算状态,并控制部分CPU操作
Segment Register
- Segment Register与其他寄存器组合时生成内存地址
- CS:定义存放程序code的内存区域
- DS:定义存放程序data的内存区域
- ES:主要用于部分字符串指令,存放目标数据
- SS:定义stack所使用的内存区域
- FS/GS:80386之后额外加入的寄存器,提供附加内存段
Instruction Basics
- 某些operation需要相应的operands(操作数),如
ADD
- Addressing mode即是用于说明CPU如何找到operands的具体位置
MOV Instruction
- 8086中最基本的数据传输指令,将source(源操作数)的内容复制到destination(目标操作数),写法为
MOV destination, source
- 无法直接将immediate value放入segment register,
MOV DS, 468FH是illegal
链接