1.指令的格式
每条指令等长,均为2个字节
第一个字节的高四位是操作码,低四位作为表示寄存器号
第二个字节是存储单元地址
2.计算机启动过程:
(1)计算机启动后,从BIOS芯片中取出指令,进行执行,这段程序就是在实模式在进行的。
(2)设置CPU中PE=1,操作系统进入保护模式,如果任务需要会进入虚拟8086模式(之间任务的切换,中断返回),不管处在哪一个模式一旦系统复位都会从实模式重新开始。
3.小知识
1985年,Intel公司提出了IA-32的x86体系结构,cpu进入了32位时代,可以内存寻址4G大小空间,同时也引入了虚拟内存管理的概念。x86之所以今天可以保持大的市场份额,是因为x86始终保持着向前兼容的特性,并且不降低性能。
2003年,AMD公司提出了x86-64体系结构,cpu进入了64位时代,理论可以寻址2^64byte,但实际达不到。Intel后来也提出了IA-64体系结构,但与之前32位系统不兼容,所以Intel后来放弃了IA-64体系结构。
在x86-64体系结构中向前兼容的运行模式称为传统模式(Legacy mode),而与之对应的为长模式(Long mode)。
8086中IP寄存器只有16位,所以寻址范围在16K以内,而地址总线位20位,故寻址需要借助于段寄存器。
最终地址计算方法: 逻辑地址 = 段基址<<4 + offset(偏移量)
4.寄存器:
在X86-64中的通用寄存器,其中有4个数据寄存器。
FLAGS标志CPU的运行状态
5. Application for Segment Register(8086) :
Let's take an example :
MOV AX , [3000H]
CPU will notice we need a value in the Memory, so it will firstly visit the Data Segment
first step: get the value of Data Segment in DS Register we suspect it is 2000H
second step: Physical address = 2000H * 16 + 3000H = 23000H //3000H is an offset
6.堆栈段
其中SS指定这个区域的起始地址。PUSH和POP指令都是从SP寄存器获得堆栈的段内偏移量,顾名思义其英文表达式也就是:STACK POINTER