Chinaunix首页 | 论坛 | 博客
  • 博客访问: 831212
  • 博文数量: 97
  • 博客积分: 3042
  • 博客等级: 中校
  • 技术积分: 1610
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-21 11:48
文章存档

2015年(1)

2014年(3)

2013年(4)

2012年(43)

2011年(44)

2010年(2)

分类: LINUX

2012-02-21 13:38:34

程序的设计模型
8086到Pentium的设计模型被认为是程序可见的,因为在程序设计期间要用这些寄存器,并且由指令来说明它们。在后面的说明的其它模型,指程序不可见的,因为那些寄存器在程序设计期间不能直接的寻址,但系统运行期间可能间接地用到。只有80286以上的微处理器才包含不可见寄存器,用来控制和操作保护模式的存储器系统。
较早的8086,8088和80286包括16位内部结构,80386,80486和Pentium包括全部32位内部结构。但16位的向上兼容32位的内部结构。
程序设计模型包括8位,16位和32位寄存器。
8位寄存器共8个,包括:AH, AL, BH, BL, CH, CL, DH, DL
16位寄存器共16个, 包括:AX, BX, CX, DX,SP, BP, DI, SI, IP, FLAGS, CS, DS, ES, SS, FS和GS
32位寄存器共10个, 包括:EAX, EBX, ECX, EDX, ESP, EBP, EDI, ESI, EIP和EFLAGS
某些寄存器是通用寄存器,某些则是专用寄存器,通用寄存器共7个包括:EAX, EBX, ECX, EDX, EBP, EDI和ESI.而专用寄存器共9个, 包括:EIP, ESP, EFLAGS和段寄存器CS, DS, ES, SS, FS和GS

通用寄存器:
EAX(累加器):累加器用于像乘法,处罚或者其它一些调整指令,对于这些指令累加器是专用的。但它通常是一个通用寄存器。在80386以上的型号中,EAX也可以保存一个地址,以便访问一个内存单元。
EBX(基索引):EBX可作为EBX,BX,BH或者BL寻址,所有版本的微处理器中, BX寄存器常用作寻址寄存器,在80386以上版本中EBX也可以访问内存数据。
ECX(计数:ECX是个通用寄存器, 对许多指令也用作计数,在80386以上版本中ECX也能访问内存数据,移位和循环用CL计数, 重复串指令用CX计数,LOOP/LOOPD指令用CX或者ECX计数。
EDX(数据):适用于乘法形式的部分结果。或者除法之前的部分被除数,对于80386以上版本也可以用于访问内存。
EBP(基指针):EBP为传送内存数据指向一个存储单元,或者作为BP,EBP寻址这个寄存器。
EDI(目标索引:常用作寻址串指令的目标数据串。
ESI(原索引:为串指令寻址源数据串。像EDI那样ESI也用作通用寄存器,做16位寄存器,由SI寻址,作为32为寄存器,由ESI寻址。

专用寄存器:
EIP(指令指针):EIP寻址存储器内代码的下一条指令,当微处理器工作在实模式时,这个寄存器是16位的IP,当工作在保护模式时它是32位的EIP。注意:8086, 8088, 80286包含EIP,但只有80286以上的版本工作于保护模式,指令指针指向程序的下一条指令,该指令在代码段范围内的一个程序单元中,指令指针也能由跳转指令或者调用指令来修改。
ESP(栈指针:ESP寻址一个叫做堆栈的存储区。
EFLAGS:指示微处理器的状态并控制它的工作。

标志寄存器包括
C(进位:进位标志保留加法后的进位或者剑法后的借位。
P(奇偶性)对于奇校验逻辑为0, 对于偶校验逻辑位1. 奇偶性就是在一个数种1的个数是计数还是偶数。
Z(零):零表示一个算术或者逻辑操作的结果是零。如果Z=1,则结果是0;如果Z=0, 则结果不是0.
S(符号):保持算数或者逻辑指令执行后结果的算数符号。如果S=1,符号位置位,为负数。反之为正数。
O(溢出):在符号数进行加减法时出现。对于不带符号的操作,不理会溢出操作。
D(方向):为串指令期间的DI,SI选择递增方式或者递减方式,如果D=1则寄存器自动递减,反之自动递增
T(陷阱):T允许通过芯片上调试特性来设置陷阱中断。如果T=1,则允许中断。反之陷阱特性被禁止。
I(中断):中断标志控制INTR输入脚的工作。如果I=1,则INTR被允许,反之被禁止。
A(辅助进位):保留加法后结果3位和4位间的进位或者减法后的结果3,4位间的借位。

除此之外还有几个段寄存器
CS(代码段):定义存放代码的存储器段的起始地址。
DS(数据段):含有大量程序所用数据的存储区域。通过偏移地址或者存储在偏移地址寄存器的内容在数据段内寻址数据。
ES(附加段):为某些串指令存放目标数据而外加的一个数据段。
SS(堆栈段):定义堆栈用的存储区。BP寄存器也可寻址堆栈内的数据。
阅读(2874) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~