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名称被保留下来,并被用来表示大寄存器中的低位部分

  • Register的内部分区及segement

  • 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

链接