***80x86 CPU的3种工作模式***
1.实模式
与8086兼容的工作模式,只有低20位地址线起作用,仅能寻址第一个1MB的内存空间。MS DOS运行在实模式下。
2.保护模式
32位80x86 CPU的主要工作模式,提供对程序和数据进行安全检查的保护机制。Windows 9x/NT/2000运行在保护模式下。
3.虚拟8086模式
在Windows 9x下,若打开一个MS DOS窗口,运行一个DOS应用程序,那么该程序就运行在虚拟8086模式下。
1.实模式
与8086兼容的工作模式,只有低20位地址线起作用,仅能寻址第一个1MB的内存空间。MS DOS运行在实模式下。
2.保护模式
32位80x86 CPU的主要工作模式,提供对程序和数据进行安全检查的保护机制。Windows 9x/NT/2000运行在保护模式下。
3.虚拟8086模式
在Windows 9x下,若打开一个MS DOS窗口,运行一个DOS应用程序,那么该程序就运行在虚拟8086模式下。
实模式
1. 内存分段
80x86采用分段内存管理机制,主要包括下列几种类型的段:
代码段:用来存放程序的指令序列。
数据段:用来存放程序的数据。
堆栈段:作为堆栈使用的内存区域,用来存放过程返回地址、过程参数等。
一个程序可以拥有多个代码段、多个数据段甚至多个堆栈段。
2. 物理地址与逻辑地址
物理地址:内存单元的实际地址,也就是出现在地址总线上的地址。
逻辑地址:或称分段地址,记作
段地址: 段内偏移地址
段地址表示段在内存中的起始位置,通常被保存在某个段寄存器中。段内偏移地址表示内存单元相对于段起始位置的位移,简称偏移地址,也叫有效地址EA。
段地址与偏移地址都是16位。
系统采用下列方法将逻辑地址自动转换为20位的物理地址:
物理地址 = 段地址 × 16 + 偏移地址
每个内存单元具有唯一的物理地址,但可由不同的逻辑地址描述。
3. 实模式的编程要点
采用16位段,段地址与偏移地址均为16位,即使32位80x86 CPU(80386及更高)也只能寻址1MB的内存空间。
CPU总是从地址CS:IP处取指令,EIP的高16位为0。
SS:SP指向堆栈段的栈顶地址,ESP的高16位为0。
在32位80x86 CPU下,程序可以使用32位寄存器和32位操作数,但采用32位寄存器表示偏移地址时,只使用低16位,高16位为0。
标志位
状态标志 状态标志通常由CPU根据指令执行结果自动设置,以反映指令执行结果的特征。
80x86 CPU将状态标志作为条件判断的依据,以控制程序的执行流程。
最常用的状态标志是CF、OF、SF和ZF,应熟练掌握。
1. 状态标志取值的一般规则
ZF(Zero Flag):零标志。若运算结果为0,则ZF = 1,否则ZF = 0。
SF(Sign Flag):符号标志。若运算结果为负数,则SF = 1,否则SF = 0。
CF(Carry Flag):进位标志。若加法时结果最高位向前有进位或减法时最高位向前有借位,则CF = 1,否则CF = 0。
OF(Overflow Flag):溢出标志。若带符号数的运算结果超出了补码表示的范围,则OF = 1,否则OF = 0。
AF(Auxiliary Carry Flag):辅助进位标志。若加法时结果低4位向前有进位或减法时结果低4位向前有借位,则AF = 1,否则AF = 0。
PF(Parity Flag):奇偶标志。若结果最低字节中1的个数为偶数,则PF = 1,否则PF = 0。
2. 深入认识CF和OF
CF和OF本质上均表示溢出。
CF表示无符号溢出,即运算结果超出了无符号数的表示范围。对于n位二进制数来说,无符号数表示范围为0~2n -1,例如,n = 8和16时分别为0~255和0~65535。
OF表示带符号溢出,即运算结果超出了带符号数的表示范围。对于n位二进制数来说,带符号数表示范围为-2n-1~2n-1-1,例如,n = 8和16时,分别为-128~127和-32768~32767。
控制标志 控制标志是由程序根据需要用指令来设置的,以控制某些指令的执行方式。
控制标志包括:
DF(Direction Flag):方向标志
IF(Interrupt Flag):中断标志
TF(Trace Flag):跟踪标志
状态标志 状态标志通常由CPU根据指令执行结果自动设置,以反映指令执行结果的特征。
80x86 CPU将状态标志作为条件判断的依据,以控制程序的执行流程。
最常用的状态标志是CF、OF、SF和ZF,应熟练掌握。
1. 状态标志取值的一般规则
ZF(Zero Flag):零标志。若运算结果为0,则ZF = 1,否则ZF = 0。
SF(Sign Flag):符号标志。若运算结果为负数,则SF = 1,否则SF = 0。
CF(Carry Flag):进位标志。若加法时结果最高位向前有进位或减法时最高位向前有借位,则CF = 1,否则CF = 0。
OF(Overflow Flag):溢出标志。若带符号数的运算结果超出了补码表示的范围,则OF = 1,否则OF = 0。
AF(Auxiliary Carry Flag):辅助进位标志。若加法时结果低4位向前有进位或减法时结果低4位向前有借位,则AF = 1,否则AF = 0。
PF(Parity Flag):奇偶标志。若结果最低字节中1的个数为偶数,则PF = 1,否则PF = 0。
2. 深入认识CF和OF
CF和OF本质上均表示溢出。
CF表示无符号溢出,即运算结果超出了无符号数的表示范围。对于n位二进制数来说,无符号数表示范围为0~2n -1,例如,n = 8和16时分别为0~255和0~65535。
OF表示带符号溢出,即运算结果超出了带符号数的表示范围。对于n位二进制数来说,带符号数表示范围为-2n-1~2n-1-1,例如,n = 8和16时,分别为-128~127和-32768~32767。
控制标志 控制标志是由程序根据需要用指令来设置的,以控制某些指令的执行方式。
控制标志包括:
DF(Direction Flag):方向标志
IF(Interrupt Flag):中断标志
TF(Trace Flag):跟踪标志
转载于:https://blog.51cto.com/zhangbikai/161569