您现在的位置是: 首页 > 电脑信息咨询 电脑信息咨询

32位cpu通用寄存器宽度_32位cpu寄存器结构

tamoadmin 2024-08-15 人已围观

简介1.64bit和32bit的处理器有什么区别?2.32位cpu是不是指的cpu的寄存器是32位的?3.关于通用寄存器中各寄存器含义的问题4.cpu寄存器功能介绍5.arm 为什么是 32位微处理器 所以ARM体系结构所支持的最大寻址空间为4GB6.32位机,CPU是如何利用段寄存器寻址的cupbj 32 bit lication是指CPU是32位的。cupbj 32 打印机驱动的安装并不那么容易,

1.64bit和32bit的处理器有什么区别?

2.32位cpu是不是指的cpu的寄存器是32位的?

3.关于通用寄存器中各寄存器含义的问题

4.cpu寄存器功能介绍

5.arm 为什么是 32位微处理器 所以ARM体系结构所支持的最大寻址空间为4GB

6.32位机,CPU是如何利用段寄存器寻址的

32位cpu通用寄存器宽度_32位cpu寄存器结构

cupbj 32 bit lication是指CPU是32位的。

cupbj 32 打印机驱动的安装并不那么容易,如果打印机驱动安装不上,可以参考上文修复。如果发现Print Spooler服务项已是启动状态,建议右键将其重启一下即可。

电脑提示“未安装打印机驱动程序,操作无法完成(错误 0x80004005)”的问题,如果打印机驱动安装不上,那么打印机也是无法正常使用的,接下文中深度技术小编来帮助大家解决这个问题。

cupbj 32 CPU结构:

cupbj 32 CPU的结构可以大致分为运算逻辑部件、寄存器部件和控制部件等。所谓运算逻辑部件,主要能够进行相关的逻辑运算,如:可以执行移位操作以及逻辑操作,除此之外还可以执行定点或浮点算术运算操作以及地址运算和转换等命令,是一种多功能的运算单元。

而寄存器部件则是用来暂存指令、数据和地址的。控制部件则是主要用来对指令进行分析并且能够发出相应的控制信号。

64bit和32bit的处理器有什么区别?

寄存器是CPU内部重要的数据存储,是汇编程序员能直接使用的硬件之一。 由于寄存器的存取速度比内存快,所以,在用汇编语言编写程序时,要尽可能充分利用寄存器的存储功能。 寄存器一般用来保存程序的中间结果,为随后的指令快速提供操作数,从而避免把中间结果存入内存,再读取内存的操作。在高级语言(如:C/C++语言)中,也有定义变量为寄存器类型的,这就是提高寄存器利用率的一种可行的方法。 另外,由于寄存器的个数和容量都有限,不可能把所有中间结果都存储在寄存器中,所以,要对寄存器进行适当的调度。根据指令的要求,如何安排适当的寄存器,避免操作数过多的传送操作是一项细致而又周密的工作。 有关“寄存器的分配策略”在《编译原理》中会有详细的介绍。 1、 16位寄存器组 16位CPU所含有的寄存器有(见图2.1中16位寄存器部分): 4个数据寄存器(AX、BX、CX和DX) 2个变址和指针寄存器(SI和DI) 2个指针寄存器(SP和BP) 4个段寄存器(ES、CS、SS和DS) 1个指令指针寄存器(IP) 1个标志寄存器(Flags) 2、 32位寄存器组 32位CPU除了包含了先前CPU的所有寄存器,并把通用寄存器、指令指针和标志寄存器从16位扩充成32位之外,还增加了2个16位的段寄存器:FS和GS。 32位CPU所含有的寄存器有(见图2.1中的寄存器): 4个数据寄存器(EAX、EBX、ECX和EDX) 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES、CS、SS、DS、FS和GS) 1个指令指针寄存器(EIP) 1个标志寄存器(EFlags)

纳哦

32位cpu是不是指的cpu的寄存器是32位的?

Linux操作系统中x64和x86的区别如下:

一、寄存器分配的不同

64位有16个寄存器,32位只有8个,32位前8个都有不同的命名,分别是e_,而64位前8个使用r代替e,即r_;

32位使用栈帧来作为传递的参数的保存位置,而64位使用寄存器,分别用rdi、rsi、rdx、rcx、r8、r9作为第1-6个参数,rax作为返回值;

64位没有栈帧的指针,32位用ebp作为栈帧指针,64位取消了这个设定,rbp作为通用寄存器使用;

二、函数调用的不同

x_64的参数通过寄存器传递,callq在栈里存放一个8位的返回地址;

许多函数不再有栈帧,只有无法将所有本地变量放在寄存器里的才会在栈上分配空间;

一些寄存器被设计成为被调用者-存储的寄存器,这些必须在需要改变他们值的时候存储他们并且之后恢复他们。

三、参数传递的不同

6个寄存器用来传递参数;

剩下的寄存器按照之前的方式传递(不过是与rsp相关了,ebp不再作为栈帧指针,并且从rsp开始第7个参数,rsp+8开始第8个,以此类推);

调用时,rsp向下移动8位(存入返回地址),寄存器参数无影响,第7个及之后的参数现在则是从rsp+8开始第7个,rsp+16开始第8个,以此类推;

四、栈帧的不同

很多情况下不再需要栈帧,比如在没有调用别的函数,且寄存器足以存储参数,那么就只需要存储返回地址即可,需要栈帧的情况:

a. 本地变量太多,寄存器不够;

b. 一些本地变量是数组或结构体;

c. 函数使用了取地址操作符来计算一个本地变量的地址;

d. 函数必须用栈传送一些参数给另外一个函数;

e. 函数需要保存一些由被调用者存储的寄存器的状态(以便于恢复)

五、运算速度的不同

64位cpu的数据宽度为64位,64位指令集可以运行64位数据指令,也就是说处理器一次可提取64位数据,比32位提高了一倍,理论上性能会相应提升1倍。

关于通用寄存器中各寄存器含义的问题

32位CPU是指数据总线(Data

Bus)有32根,寄存器是暂存数据和中间结果的单元,因此寄存器的位数也即处理数据的长度肯定是和数据总线的根数相同,否则寄存器和CPU内其他单元之间将无法通信,交换数据。

因此32位CPU的32位是包含了寄存器是32位的意思,但其定义是数据总线的宽度或根数。

cpu寄存器功能介绍

32位CPU所含有的寄存器有:

4个数据寄存器(EAX、EBX、ECX和EDX) 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES、CS、SS、DS、FS和GS) 1个指令指针寄存器(EIP) 1个标志寄存器(EFlags)

1、数据寄存器数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。 32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。对低16位数据的存取,不会影响高16位的数据。这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。 4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄存器都有自己的名称,可独立存取。程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字节的信息。

寄存器EAX通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。可用于乘、 除、输入/输出等操作,使用频率很高; 寄存器EBX称为基地址寄存器(Base Register)。它可作为存储器指针来使用; 寄存器ECX称为计数寄存器(Count Register)。在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数; 寄存器EDX称为数据寄存器(Data Register)。在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址。

在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址,在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据保存算术逻辑运算结果,而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。

2、变址寄存器 32位CPU有2个32位通用寄存器ESI和EDI。其低16位对应先前CPU中的SI和DI,对低16位数据的存取,不影响高16位的数据。

寄存器ESI、EDI、SI和DI称为变址寄存器(Index Register),它们主要用于存放存储单元在段内的偏移量,用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。变址寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。它们可作一般的存储器指针使用。在字符串操作指令的执行过程中,对它们有特定的要求,而且还具有特殊的功能。

3、指针寄存器其低16位对应先前CPU中的BP和SP,对低16位数据的存取,不影响高16位的数据。 32位CPU有2个32位通用寄存器EBP和ESP。它们主要用于访问堆栈内的存储单元,并且规定: EBP为基指针(Base Pointer)寄存器,用它可直接存取堆栈中的数据; ESP为堆栈指针(Stack Pointer)寄存器,用它只可访问栈顶。

寄存器EBP、ESP、BP和SP称为指针寄存器(Pointer Register),主要用于存放堆栈内存储单元的偏移量,用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。指针寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。

4、段寄存器

段寄存器是根据内存分段的管理模式而设置的。内存单元的物理地址由段寄存器的值和一个偏移量组合而成的,这样可用两个较少位数的值组合成一个可访问较大物理空间的内存地址。 CPU内部的段寄存器:

ECS——代码段寄存器(Code Segment Register),其值为代码段的段值; EDS——数据段寄存器(Data Segment Register),其值为数据段的段值; EES——附加段寄存器(Extra Segment Register),其值为附加数据段的段值; ESS——堆栈段寄存器(Stack Segment Register),其值为堆栈段的段值; EFS——附加段寄存器(Extra Segment Register),其值为附加数据段的段值; EGS——附加段寄存器(Extra Segment Register),其值为附加数据段的段值。

在16位CPU系统中,它只有4个段寄存器,所以,程序在任何时刻至多有4个正在使用的段可直接访问;在32位微机系统中,它有6个段寄存器,所以,在此环境下开发的程序最多可同时访问6个段。

32位CPU有两个不同的工作方式:实方式和保护方式。在每种方式下,段寄存器的作用是不同的。有关规定简单描述如下:

实方式: 前4个段寄存器CS、DS、ES和SS与先前CPU中的所对应的段寄存器的含义完全一致,内存单元的逻辑地址仍为“段值:偏移量”的形式。为访问某内存段内的数据,必须使用该段寄存器和存储单元的偏移量。 保护方式: 在此方式下,情况要复杂得多,装入段寄存器的不再是段值,而是称为“选择子”(Selector)的某个值。。

5、指令指针寄存器 32位CPU把指令指针扩展到32位,并记作EIP,EIP的低16位与先前CPU中的IP作用相同。

指令指针EIP、IP(Instruction Pointer)是存放下次将要执行的指令在代码段的偏移量。在具有预取指令功能的系统中,下次要执行的指令通常已被预取到指令队列中,除非发生转移情况。所以,在理解它们的功能时,不考虑存在指令队列的情况。

6、标志寄存器

一、运算结果标志位 1、进位标志CF(Carry Flag) 进位标志CF主要用来反映运算是否产生进位或借位。如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。使用该标志位的情况有:多字(字节)数的加减运算,无符号数的大小比较运算,移位操作,字(字节)之间移位,专门改变CF值的指令等。

2、奇偶标志PF(Parity Flag) 奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。如果“1”的个数为偶数,则PF的值为1,否则其值为0。利用PF可进行奇偶校验检查,或产生奇偶校验位。在数据传送过程中,为了提供传送的可靠性,如果用奇偶校验的方法,就可使用该标志位。

3、进位标志AF(Auxiliary Carry Flag) 在发生下列情况时,进位标志AF的值被置为1,否则其值为0:

(1)、在字操作时,发生低字节向高字节进位或借位时; (2)、在字节操作时,发生低4位向高4位进位或借位时。对以上6个运算结果标志位,在一般编程情况下,标志位CF、ZF、和OF的使用频率较高,而标志位PF和AF的使用频率较低。

4、零标志ZF(Zero Flag) 零标志ZF用来反映运算结果是否为0。如果运算结果为0,则其值为1,否则其值为0。在判断运算结果是否为0时,可使用此标志位。

5、符号标志(Sign Flag) 符号标志用来反映运算结果的符号位,它与运算结果的最高位相同。在微机系统中,有符号数用码表示法,所以,也就反映运算结果的正负号。运算结果为正数时,的值为0,否则其值为1。

6、溢出标志OF(Overflow Flag) 溢出标志OF用于反映有符号数加减运算所得结果是否溢出。如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否则,OF的值被清为0。

“溢出”和“进位”是两个不同含义的概念,不要混淆。如果不太清楚的话,请查阅《计算机组成原理》课程中的有关章节。

二、状态控制标志位状态控制标志位是用来控制CPU操作的,它们要通过专门的指令才能使之发生改变。

1、追踪标志TF(Trap Flag) 当追踪标志TF被置为1时,CPU进入单步执行方式,即每执行一条指令,产生一个单步中断请求。这种方式主要用于程序的调试。

指令系统中没有专门的指令来改变标志位TF的值,但程序员可用其它办法来改变其值。

2、中断允许标志IF(Interrupt-enable Flag) 中断允许标志IF是用来决定CPU是否响应CPU外部的可屏蔽中断发出的中断请求。但不管该标志为何值,CPU都必须响应CPU外部的不可屏蔽中断所发出的中断请求,以及CPU内部产生的中断请求。具体规定如下: (1)、当IF=1时,CPU可以响应CPU外部的可屏蔽中断发出的中断请求; (2)、当IF=0时,CPU不响应CPU外部的可屏蔽中断发出的中断请求。 CPU的指令系统中也有专门的指令来改变标志位IF的值。

3、方向标志DF(Direction Flag) 方向标志DF用来决定在串操作指令执行时有关指针寄存器发生调整的方向。具体规定在第5.2.11节——字符串操作指令——中给出。在微机的指令系统中,还提供了专门的指令来改变标志位DF的值。

三、32位标志寄存器增加的标志位 1、I/O特权标志IOPL(I/O Privilege Level) I/O特权标志用两位二进制位来表示,也称为I/O特权级字段。该字段指定了要求执行I/O指令的特权级。如果当前的特权级别在数值上小于等于IOPL的值,那么,该I/O指令可执行,否则将发生一个保护异常。

2、嵌套任务标志NT(Nested Task) 嵌套任务标志NT用来控制中断返回指令IRET的执行。具体规定如下:

(1)、当NT=0,用堆栈中保存的值恢复EFLS、CS和EIP,执行常规的中断返回操作;

(2)、当NT=1,通过任务转换实现中断返回。

3、重启动标志RF(Restart Flag) 重启动标志RF用来控制是否接受调试故障。规定:RF=0时,表示“接受”调试故障,否则拒绝之。在成功执行完一条指令后,处理机把RF置为0,当接受到一个非调试故障时,处理机就把它置为1。

4、虚拟8086方式标志VM(Virtual 8086 Mode) 如果该标志的值为1,则表示处理机处于虚拟的8086方式下的工作状态,否则,处理机处于一般保护方式下的工作状态。

汇编指令集合一、常用指令 1. 通用数据传送指令. MOV 传送字或字节. MOVSX 先符号扩展,再传送. MOVZX 先零扩展,再传送. PUSH 把字压入堆栈. POP 把字弹出堆栈. PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈. POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈. PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈. POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈. BSWAP 交换32位寄存器里字节的顺序 XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数) CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX ) XADD 先交换再累加.( 结果在第一个操作数里 ) XLAT 字节查表转换. BX 指向一张 256 字节的表的起点, AL 为表的索引值 (0-255,即 0-FFH); 返回 AL 为查表结果. ( [BX+AL]->AL )

2. 输入输出端口传送指令. IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} ) OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器 ) 输入输出端口由立即方式指定时, 其范围是 0-255; 由寄存器 DX 指定时,其范围是 0-65535. 3. 目的地址传送指令. LEA 装入有效地址. 例: LEA DX,string ;把偏移地址存到DX. LDS 传送目标指针,把指针内容装入DS. 例: LDS SI,string ;把段地址:偏移地址存到DS:SI. LES 传送目标指针,把指针内容装入ES. 例: LES DI,string ;把段地址:偏移地址存到ESDI. LFS 传送目标指针,把指针内容装入FS. 例: LFS DI,string ;把段地址:偏移地址存到FSD. LGS 传送目标指针,把指针内容装入GS. 例: LGS DI,string ;把段地址:偏移地址存到GSDI. LSS 传送目标指针,把指针内容装入SS. 例: LSS DI,string ;把段地址:偏移地址存到SSDI.

4. 标志传送指令. LAHF 标志寄存器传送,把标志装入AH. SAHF 标志寄存器传送,把AH内容装入标志寄存器. PUSHF 标志入栈. POPF 标志出栈. PUSHD 32位标志入栈. POPD 32位标志出栈.

二、算术运算指令 ADD 加法. ADC 带进位加法. INC 加 1. AAA 加法的ASCII码调整. DAA 加法的十进制调整. SUB 减法. SBB 带借位减法. DEC 减 1. NEC 求反(以 0 减之). CMP 比较.(两操作数作减法,仅修改标志位,不回送结果). AAS 减法的ASCII码调整. DAS 减法的十进制调整. MUL 无符号乘法. IMUL 整数乘法.

以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算), AAM 乘法的ASCII码调整. DIV 无符号除法. IDIV 整数除法. 以上两条,结果回送: 商回送AL,余数回送AH, (字节运算); 或 商回送AX,余数回送DX, (字运算).

AAD 除法的ASCII码调整. CBW 字节转换为字. (把AL中字节的符号扩展到AH中去) CWD 字转换为双字. (把AX中的字的符号扩展到DX中去) CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去) CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去)

三、逻辑运算指令 AND 与运算. OR 或运算. XOR 异或运算. NOT 取反. TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果). SHL 逻辑左移. SAL 算术左移.(=SHL) SHR 逻辑右移. SAR 算术右移.(=SHR) ROL 循环左移. ROR 循环右移. RCL 通过进位的循环左移. RCR 通过进位的循环右移. 以上八种移位指令,其移位次数可达255次. 移位一次时, 可直接用操作码. 如 SHL AX,1. 移位>1次时, 则由寄存器CL给出移位次数. 如 MOV CL,04 SHL AX,CL

四、串指令 DS:SI 源串段寄存器 :源串变址. ES I 目标串段寄存器:目标串变址. CX 重复次数计数器. AL/AX 扫描值. D标志 0表示重复操作中SI和DI应自动增量; 1表示应自动减量.

Z标志 用来控制扫描或比较操作的结束. MOVS 串传送. ( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. ) CMPS 串比较. ( CMPSB 比较字符. CMPSW 比较字. ) SCAS 串扫描. 把AL或AX的内容与目标串作比较,比较结果反映在标志位. LODS 装入串. 把源串中的元素(字或字节)逐一装入AL或AX中. ( LODSB 传送字符. LODSW 传送字. LODSD 传送双字. ) STOS 保存串. 是LODS的逆过程. REP 当CX/ECX<>0时重复. REPE/REPZ 当ZF=1或比较结果相等,且CX/ECX<>0时重复. REPNE/REPNZ 当ZF=0或比较结果不相等,且CX/ECX<>0时重复. REPC 当CF=1且CX/ECX<>0时重复. REPNC 当CF=0且CX/ECX<>0时重复.

五、程序转移指令 1.简单的条件转移指令 JZ(或jE) OPR---------------结果为零转移, 测试条件ZF=1 JNZ(或jNE) OPR --------------结果不为零转移,测试条件ZF=0 JS OPR----------------------结果为负转移, 测试条件=1 JNS OPR---------------------结果为正转移, 测试条件=0 JO OPR--------------------- 溢出转移, 测试条件OF= JNO OPR --------------------不溢出转移 , 测试条件=0 JP OPR ---------------------结果为偶转移, 测试条件=1 JNP OPR --------------------结果为奇转移 , 测试条件=0 JC OPR -------------------- 有进位转移 , 测试条件=1 JNC OPR --------------------无进位转移, 测试条件=0

2.无符号比较条件转移指令(以下指令经常是CMP OPD,OPS后面的指令根据比较结果来实现转移) JB(或JNAE) opd --------------小于或者不大于等于则转移 JNB(或JAE) opd---------------不小于或者大于等于则转移 JA(或NJBE) OPD---------------大于或者不小于等于则转移 JNA(或JBE) OPD---------------不大于或者小于等于则转移

3.带符号比较条件转移指令 JL(或JNGE) --------------小于或者不大于等于则转移 JNL(或JGE)--------------不小于或者大于等于则转移 JG(或NJLE)---------------大于或者不小于等于则转移 JNG(或JLE)---------------不大于或者小于等于则转移

六、调用子程序与返回指令 CALL 子程序调用指令 RET 子程序返回指令

六、其它指令 OFFSET -------------------- 返回偏移地址 SEG -------------------- 返回段地址 EQU(=) -------------------- 等值语句 PURGE -------------------- 解除语句 DUP -------------------- 操作数字段用复制操作符 SEGMENT,ENDS -------------------- 段定义指令 ASSUME -------------------- 段地址分配指令 ORG -------------------- 起始偏移地址设置指令 $ --------------------地址计数器的当前值 PROC,ENDP -------------------- 过程定义语句 NAME,TITLE,END -------------------- 程序开始结束语句 MACRO,ENDM --------------------宏定义指令 XLAT (TRANSLATE) -------------------- 换码指令----

七、条件标志 ZF 零标志 -- 当结果为负时,=1,否则,=0. AF 进位标志---运算过程中第三位有进位值,置AF=1,否则,AF=0 PF 奇偶标志------当结果操作数中偶数个"1",置PF=1,否则,PF=0 符号标志----当结果为负时,=1;否则,=0.溢出时情形例外 CF 进位标志----- 最高有效位产生进位值,例如,执行加法指令时,MSB有进位,置CF=1;否则,CF=0. OF 溢出标志-----若操作数结果超出了机器能表示的范围,则产生溢出,置OF=1,否则,OF=0

://blog.163/ja-home/blog/static/113844320099247571920/

arm 为什么是 32位微处理器 所以ARM体系结构所支持的最大寻址空间为4GB

通用寄存器 4个 EAX、EBX、ECX和EDX 32位

段寄存器 6个 ES、CS、SS、DS、FS和GS

变址寄存器 2个 ESI和EDI 32位

堆栈寄存器 2个 ESP和EBP 32位

指令指针寄存器 1 EIP 32位

状态标志寄存器 1 EFlags 32位

控制寄存器 CR0-CR4

调试寄存器 DR0-DR7

测试寄存器 TR3-TR5

系统地址寄存器 2个 GDTR,IDTR 48位

通用寄存器

EAX通常称为累加器(Accumulator),用累加器进行的操作速度最快

EBX称为基址寄存器(Base Register),可作为存储器地址指针来使用

ECX称为计数寄存器(Count Register)。在循环和字符串操作时,可用它来控制循环次数

EDX称为数据寄存器(Data Register)。在进行乘、除运算时,作为默认操作数参与运算

变址寄存器

ESI 指针寄存器的一种。是内存移动和比较操作的源地址寄存器;

EDI 指针寄存器的一种。是内存移动和比较操作的目标地址寄存器;

堆栈寄存器

EBP 指针寄存器的一种,堆栈基址指针寄存器确定堆栈帧的起始位置,

ESP 指针寄存器的一种,总是指向当前堆栈顶位置。

段寄存器

段寄存器是根据内存分段的管理模式而设置的。内存单元的物理地址由段寄存器的值和一个偏移量组合而成的,这样可用两

个较少位数的值组合成一个可访问较大物理空间的内存地址,CPU内部的段寄存器:

CS:代码段寄存器(Code Segment Register):和IP(是用来存放下条待执行的指令在该段的偏移量)合在一起可在该内存段内取到下次要执行的指令。

DS:数据段寄存器(Data Segment Register):

SS:堆栈段寄存器(Stack Segment Register):堆栈操作所用的段寄存器和偏移量一定是SS和ESP

ES:附加段寄存器(Extra Segment Register): 串操作的目标操作数所用的段寄存器和偏移量一定是ES和EDI

FS:附加段寄存器(Extra Segment Register):

GS:附加段寄存器(Extra Segment Register):

指令指针寄存器

EIP:EIP的低16位为代码CS段的偏移量,高16位都为0。

状态标志寄存器

运算结果标志位

1、进位标志CF(Carry Flag):

进位标志CF主要用来反映运算是否产生进位或借位。如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。使用该标志位的情况有:多字(字节)数的加减运算,无符号数的大小比较运算,移位操作,字(字节)之间移位,专门改变CF值的指令等。

2、奇偶标志PF(Parity Flag):

奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。如果“1”的个数为偶数,则PF的值为1,否则其值为0。利用PF可进行奇偶校验检查,或产生奇偶校验位。在数据传送过程中,为了提供传送的可靠性,如果用奇偶校验的方法,就可使用该标志位。

3、进位标志AF(Auxiliary Carry Flag):

在发生下列情况时,进位标志AF的值被置为1,否则其值为0:

(1)、在字操作时,发生低字节向高字节进位或借位时;

(2)、在字节操作时,发生低4位向高4位进位或借位时。

4、零标志ZF(Zero Flag):

零标志ZF用来反映运算结果是否为0。如果运算结果为0,则其值为1,否则其值为0。

5、符号标志(Sign Flag):

符号标志用来反映运算结果的符号位,它与运算结果的最高位相同。运算结果为正数时,的值为0,否则其值为1。

6、溢出标志OF(Overflow Flag):

运算结果超过当前运算位数所能表示的范围,OF的值被置为1,否则,OF的值被清为0

7、状态控制标志位:状态控制标志位是用来控制CPU操作的,它们要通过专门的指令才能使之发生改变。

1、追踪标志TF(Trap Flag):

当追踪标志TF被置为1时,CPU进入单步执行方式。

2、中断允许标志IF(Interrupt-enable Flag):

CPU外部的不可屏蔽中断所发出的中断请求,以及CPU内部产生的中断请求。具体规定如下:

(1)、当IF=1时,CPU可以响应CPU外部的可屏蔽中断发出的中断请求;

(2)、当IF=0时,CPU不响应CPU外部的可屏蔽中断发出的中断请求。

CPU的指令系统中也有专门的指令来改变标志位IF的值。

3、方向标志DF(Direction Flag):

方向标志DF用来决定在串操作指令执行时有关指针寄存器发生调整的方向。在微机的指令系统中,还提供了专门的指令来改变标志位DF的值。

8、32位标志寄存器增加的标志位:

1、I/O特权标志IOPL(I/O Privilege Level):

I/O特权标志用两位二进制位来表示,也称为I/O特权级字段。该字段指定了要求执行I/O指令的特权级。如果当前的特权级别在数值上小于等于IOPL的值,那么,该I/O指令可执行,否则将发生一个保护异常。

2、嵌套任务标志NT(Nested Task):

嵌套任务标志NT用来控制中断返回指令IRET的执行。具体规定如下:

(1)、当NT=0,用堆栈中保存的值恢复EFLS、CS和EIP,执行常规的中断返回操作;

(2)、当NT=1,通过任务转换实现中断返回。

3、重启动标志RF(Restart Flag):

重启动标志RF用来控制是否接受调试故障。规定:RF=0时,表示“接受”调试故障,否则拒绝之。在成功执行完一条指令后,处理机把RF置为0,当接受到一个非调试故障时,处理机就把它置为1。

4、虚拟8086方式标志VM(Virtual 8086 Mode):

如果该标志的值为1,则表示处理机处于虚拟的8086方式下的工作状态,否则,处理机处于一般保护方式下的工作状态。

32位机,CPU是如何利用段寄存器寻址的

所谓32位微处理器,指的是CPU GPRs(General-Purpose Registers,通用寄存器)的数据宽度为32位,32位指令集就是运行32位数据的指令,也就是说处理器一次可以运行32bit数据。

由于32位数据能够包含的地址有2^32=4294967296=4194304K=4096M=4G,所以说最大寻址空间为4GB,但由于指令代码中不可能只包含内存的地址信息,所以一般来说32bit的处理器能够寻得的地址只有不足4GB。

每个数只能定位一个字节,这样才能确保每个字节都节约下来。如果进程数为500,每个进程占用2字节,那么占用的总内存空间则为2*500=1000字节,但如果以4字节作为单位,则占用空间为4(只能以4字节为单位)*500=2000字节,这样就会造成大量数据的冗余,不利于内存的有效使用。

=8bit=1B 2^20B/1B = 2^20 地址范围为0~2^20-1 也就是说至少需要二十根地址线,地址寄存器是用来存放地址的,与存储器容量及编址方式有关,可以简单的认为地址线的个数等于地址寄存器的位数,所以地址寄存器为20位。

2、数据寄存器用来存放CPU在一个存取周期内从存储器中一次性取出为二进制位数,也就是一个机器字长,本题中字长32位,所以数据寄存器为32位。

3、寻址空间。在此需要区分清楚寻址空间与寻址范围两个不同的概念,范围仅仅是一个数字范围,不带有单位,而寻址空间指能够寻址最大容量,单位一般用MB、B来表示;本题中寻址范围为0~2^20-1,寻址空间为1MB。