基本的程序执行寄存器
通用寄存器: 这八个寄存器能用于存放操作数和指针
段寄存器:这些段寄存器最多能保持4个段选择子
FLAGS寄存器:FLAGS寄存器报告正在执行的程序的状态,并允许有限的控制处理器
IP(指令指针)寄存器:IP寄存器包含下一条执行的指令的16位指针
1:通用寄存器
8个通用寄存器AX,BX,CX,DX,SI,DI,BP,SP用于处理以下内容
逻辑和算术操作的操作数
用于地址计算的操作数
内存指针
虽然所有这些寄存器都用于存放操作数,结果和指针,但在引用SP寄存器时要特别小心。
SP寄存器保持堆栈指针,通常步用于其他目的
许多指令寄存器赋予特定的寄存器已存放操作数,例如,串操作指令用CX,SI和DI寄存器的内容
作为操作数
以下是特殊使用要求
AX操作数和结果数据的累计器
BX在DS段中数据的指针
CX串和循环操作的计算器
DX I/O指针
SI指向DS寄存器段中的数据指针,串操作的源指针
DI指向ES寄存器段中的数据的指针,串操作的目标指针
SP堆栈指针(在SS段中)
BP堆栈上数据指针
这些通用寄存器中的前四个,即AX,BX,CX,DX通常称为数据寄存器,用以存放操作数;后四个,即SI,DI,BP,SP,通常称为指针寄存器,虽然他们也可以存放操作数,但主要用于地址指针
DS,ES寄存器指向两个数据段。两个数据段的可用性,允许有效而又安全的访问结构不同的数据类型
SS寄存器包含堆栈段的段选择子,所有的堆栈段操作都以SS以找到堆栈段
指令指针:
指令指针(IP)寄存器包含下一条要执行的指令在当前段中的偏移。通常,它是顺序增加的,从一条指令边界至下一条指令,但在执行JMP,Jcc,CALL,RET,和IRETD等指令,它可以向前或向后移动若干条指令
存储器组织
处理器在它的总线上寻址的存储器称为物理存储器,物理存储器按字节序列组织。每一个字节赋予一个唯一的地址,称为物理地址。物理地址空间的范围从0~2的20次方-1的最大值。整个1MB存储器如SP,IP,以及BP或DI等可由CPU处理器的16位偏移量来形成的实际的20位物理地址。这个基地址就是8088中的段寄存器,即代码段寄存器CS,堆栈段寄存器SS,数据段寄存器DS以及附加段寄存器ES中的一个来形成的。在形成的20位物理地址时,段寄存器中的16位数会自动左移4位,然后与16位偏移量相加
每次在需要产生一个20位地址的时候,一个段寄存器会自动被选择,且能自动左移4位再与一个16位地址偏移量相加,一产生所需要的20位物理地址
每当取指令的时候,则自动选择代码段寄存器CS,在加上由IP所决定的16位偏移量,计算得到要取的指令的物理地址
每当涉及到一个堆栈操作时,则自动选择堆栈段寄存器SS,再加上由SP所决定的16位偏移量,计算得到堆栈操作所需要的20位物理地址
每当涉及到一个操作数,则自动选择数据段寄存器DS或附加段寄存器ES,再加上16位偏移量,计算得到操作数的20位物理地址
在不改变段寄存器值的情况下,寻址的最大范围64KB。所以,若有一个任务,他的程序长度,堆栈长度以及数据区域长度都不超过64KB
指针数据类型
指针是内存单元的地址。80*86系列结构定义两种类型的指针:近指针(near)(在8086中是16位,在80386以上处理器中为32位)。Near指针是段内的16位偏移量(也称为有效地址)
Near指针在平面存储器模式中用于所有存储器引用,或在分段存储模式中用于同一段内的存储器引用。Far指针是一个48位的逻辑地址,包含16位段选择子和32位的偏移。Far指针用于在分段存储模式中的跨段存储引用
8086指令的操作数寻址方式
8086机器指令有零个或多个操作数
一个操作数能定位在以下地方之一
1:指令中(立即数)
2:寄存器
3:存储单元
4:I/O端口
立即数:某些指令用包含在指令中的数据作为源操作数。这些源操作数称为立即操作数
寄存器操作数:源和目的操作数在寄存器中
存储器操作数: 段超越通常用:处理
交换指令:XCHG
XCHG DOPD,SOPD
这时一条交换指令,它有两个操作数:DOPD,和SOPD,该指令的功能是使两个两个操作数交换,这条指令的操作数可以是一个字节或是一个字
CMP比较指令
比较指令完成两个操作数相减,使结果反映在标志位上,但量操作数不变
比较指令主要用于比较两个数之间的关系,即若两者是否相等,或两个中那一个大,在比较指令完后,根据ZF标志即可判断两者是否相等,若两者相等,相减以后结果为零,则ZF为1;否则为0;
SF=0,AX>BX