汇编语言学习笔记之通用寄存器

合集下载

汇编语言寄存器和指令操作的整理

汇编语言寄存器和指令操作的整理
l DI 目的变址寄存器
与DS联用, 指示数据段中某操作数的偏移量, 或与某一位移量共同构成操作数的偏移量. 串处理操作时, DI指示附加段中目的地址, 并有自动增量或减量的功能
段寄存器l CS 代码段
存放当前程序的指令代码
l DS 数据段
存放程序所涉及的源数据或结果
l SS 堆栈段
当运算结果的最高位为1时, SF为1, 否则为0. 最高位表示符号数的正和负
6. TF 跟踪标志位
用于调试程序时进入单步方式工作. TF=1时, 每条指令执行完后产生一个内部中断, 让用户检查指令运行后寄存器, 存储器和各标志位的内容. TF=0时, CPU工作正常, 不产生内部中断
7. IF 中断允许标志位
l POP DST ;出栈指令: 弹出栈顶元素, 后将栈顶指针向栈底方向移动一个字
l XCHG OPR1, OPR2 ;交换指令: 将这两个操作数交换
地址传送指令:
l LEA DST, SRC ;装载有效地址指令: 该指令将源操作数的偏移量OA装载到目的操作数中
算术运算指令加法指令:
l ADD DST, SRC ;DST+SRC的和存放到DST中去
l ADC DST, SRC ;带进位加法指令, DST+SRC+CF
l INC DST ;增1指令
减法指令:
l LOOPZ/LOOPE, LOOPNZ/LOOPNE ;前者用于找到第一个不为0的事件, 后者用于找到第一个为0的事件
子程序调用指令:
l imme: 立即数
l DST: 目的操作数
l SRC: 源操作数
l mem: 存储器操作数

《汇编语言》寄存器物理地址(第二章第二节)

《汇编语言》寄存器物理地址(第二章第二节)

DS ES SS CS 地 址 加 法 IP 器 地 址 总 线 AB
本课件由汇编网()制作提供
物理地址PA = 段地址 + 偏移地址 = ( 段寄存器 ) × 10H + 偏移地址 或段寄存器的内容左移4位,加上偏移地址
例:某内存单元的段地址由DS、偏移地址由BX给出。
2.5 16位结构的CPU

概括的讲,16位结构描述了一个CPU具有 以下几个方面特征:

1、运算器一次最多可以处理16位的数据。 2、寄存器的最大宽度为16位。 3、寄存器和运算器之间的通路是16位的。


2.6 8086CPU给出物理地址的方法


8086有20位地址总线,可传送20 位地址,寻址能力为1M。 8086内部为16位结构,它只能传送 16位的地址,表现出的寻址能力却 只有64K。
2.7 “段地址×16+偏移地址=物理地址” 的本质含义

两个比喻说明:

说明“基础地址+偏移地址 = 物理地址” 的思想:第一个比喻 说明“段地址×16+偏移地址=物理地址” 的思想:第二个比喻 8086CPU就是这样一个只能提供两张3位 数据纸条的CPU。

2.8 段的概念

错误认识:

内存被划分成了一个一个的段,每一个 段有一个段地址。
通用寄存器
数据寄存器(AX,BX,CX,DX) 地址指针寄存器(SP,BP) 变址寄存器(SI,DI)
5
2.1 通用寄存器



8086CPU所有的寄存器都是16位的, 可以存放两个字节。 AX、BX、CX、DX 通常用来存放一般 性数据被称为通用寄存器。 下面以AX为例,我们看一下寄存器的 逻辑结构。

汇编语言寄存器详解

汇编语言寄存器详解

汇编语言寄存器详解汇编语言是一种底层程序设计语言,与高级语言相比,汇编语言更接近于计算机硬件层面。

在汇编语言中,寄存器是一种非常重要的概念,它们用于存储数据和指令,以及进行计算和操作。

在本文中,我们将详细介绍汇编语言中常用的寄存器及其作用。

1. 通用寄存器通用寄存器是汇编语言中最基本的寄存器,它们可以用于存储数据、指针和地址等信息。

在x86架构中,通用寄存器有8个,分别为:AX,BX,CX,DX,SI,DI,BP和SP。

其中,AX,BX,CX和DX是16位寄存器,也就是说它们可以存储16位的数据。

SI和DI是用于存储指针和地址的寄存器,BP和SP 则是用于存储栈指针的寄存器。

2. 段寄存器在汇编语言中,除了通用寄存器以外,还有一种特殊的寄存器,叫做段寄存器。

段寄存器用于存储内存中某个段的起始地址,它们可以帮助程序员在内存中定位某个数据或指令。

在x86架构中,有4个段寄存器,分别为:CS,DS,SS和ES。

其中,CS用于存储代码段的地址,DS用于存储数据段的地址,SS用于存储堆栈段的地址,ES则可以用作附加段寄存器。

3. 标志寄存器标志寄存器是一种特殊的寄存器,它们用于存储程序运行中的各种状态信息。

在x86架构中,有一个标志寄存器,叫做FLAGS寄存器,它包含了各种标志位,用于表示程序运行中的各种状态信息。

其中,比较常用的标志位有:ZF(零标志位),CF(进位标志位),OF(溢出标志位)等。

这些标志位可以帮助程序员判断程序运行中的各种状态,从而进行相应的处理。

总的来说,寄存器是汇编语言中非常重要的概念,程序员需要熟练掌握各种寄存器的作用和用法,才能够编写出高效、正确的汇编程序。

汇编语言考试复习资料

汇编语言考试复习资料

汇编语⾔考试复习资料汇编语⾔期末复习资料整理第⼆章1、寄存器组(1)通⽤寄存器数据寄存器EAX(32位) AX(16位) AH(8位)(⾼位) AL(8位)(低位)累加器EBX(32位) BX(16位) BH(8位)(⾼位) BL(8位)(低位)基址变址ECX(32位) CX(16位) CH(8位)(⾼位)CL(8位)(低位)计数器EDX(32位) DX(16位) DH(8位)(⾼位) DL(8位)(低位)数据指针或变址寄存器ESP(32位) SP(16位)堆栈指针寄存器EBP(32位) BP(16位)基址指针寄存器EDI(32位) DI(16位)⽬的变址寄存器ESI(32位) SI(16位)源变址寄存器(2)专⽤寄存器EIP(32位) IP(16位)指令指针寄存器EFLAGS(32位) FLAGS(16位)标志寄存器ESP (32位) SP(16位)堆栈指针寄存器2、标志位的符号表⽰、3、段寄存器CS(16位)代码段 DS(16位)数据段SS(16位)堆栈段 ES(16位)附加段4、段寄存器和相应存放偏移地址的寄存器之间的默认组合第三章1、七种寻址⽅式(举例)⽴即寻 MOV AX,3069H寄存器寻 MOV AL,BH在内存中的五种寻址直接寻 MOV AX,[2000H]寄存器间接寻 MOV AX,[BX]寄存器相对寻 MOV AX,COUNT[SI] 或者 MOV AX,[SI+COUNT](不推荐) 基址变址寻址 MOV AX,[BP][DI]相对基址变址寻址 MOV AX,MASK[BX][SI]2、指令系统I.数据传送指令(1)通⽤数据传送指令MOV 传送MOVSX 带符号扩展传送⽤源操作数的符号位来填充⽬的操作数的⾼位数据位。

例:MOVSX EAX,CL把CL寄存器中的8位数,符号扩展为32位数,送到EAX寄存器中。

MOVZX 带零扩展传送恒⽤0来填充⽬的操作数的⾼位数据位例:MOVZX DX,AL把AL寄存器中的8位数,零扩展成16位数,送到DX寄存器中。

通用寄存器

通用寄存器

通用寄存器目录简介主要用途相关信息编辑本段简介通用寄存器通用寄存器可用于传送和暂存数据,也可参与算术逻辑运算,并保存运算结果。

除此之外,它们还各自具有一些特殊功能。

通用寄存器的长度取决于机器字长,汇编语言程序员必须熟悉每个寄存器的一般用途和特殊用途,只有这样,才能在程序中做到正确、合理地使用它们。

16位cpu通用寄存器共有8个:AX,BX,CX,DX,BP,SP,SI,DI.八个寄存器都可以作为普通的数据寄存器使用。

但有的有特殊的用途:AX为累加器,CX为计数器,BX,BP为基址寄存器,SI,DI为变址寄存器,BP还可以是基指针,SP为堆栈指针。

32位cpu通用寄存器共有8个:EAX,EBX,ECX,EDX,EBP,ESP,ESI,EDI功能和上面差不多编辑本段主要用途通用寄存器数据寄存器AX乘、除运算,字的输入输出,中间结果的缓存AL字节的乘、除运算,字节的输入输出,十进制算术运算AH字节的乘、除运算,存放中断的功能号BX存储器指针CX串操作、循环控制的计数器CL移位操作的计数器DX字的乘、除运算,间接的输入输出变址寄存器SI存储器指针、串指令中的源操作数指针DI存储器指针、串指令中的目的操作数指针变址分类示意图寄存器BP存储器指针、存取堆栈的指针SP堆栈的栈顶指针指令指针IP/EIP标志位寄存器Flag/EFlag32位段寄存器16位CPU的段寄存器ES 附加段寄存器CS 代码段寄存器SS 堆栈段寄存器DS 数据段寄存器新增加的段寄存器FS 附加段寄存器GS 附加段寄存器编辑本段相关信息寄存器是CPU内部重要的数据存储资源,用来暂存数据和地址,是汇编程序员能直接使用的硬件资源之一。

由于寄存器的存取速度比内存快,所以,在用汇编语言编写程序时,要尽可能充分利用寄存器的存储功能。

运算器结构寄存器一般用来保存程序的中间结果,为随后的指令快速提供操作数,从而避免把中间结果存入内存,再读取内存的操作。

在高级语言(如:C/C++语言)中,也有定义变量为寄存器类型的,这就是提高寄存器利用率的一种可行的方法。

在8086汇编语言中ax,_bx,_cx,_dx四个寄存器的常见用途

在8086汇编语言中ax,_bx,_cx,_dx四个寄存器的常见用途

在8086汇编语言中ax, bx, cx, dx四个寄存器的常见用途1. 引言1.1 概述在8086汇编语言中,AX、BX、CX和DX是四个常见的寄存器。

这些寄存器具有不同的功能和用途,可以提供对数据的临时存储和处理。

它们在程序设计中扮演着重要的角色,并且对于编写高效且功能完善的汇编代码至关重要。

1.2 文章结构本文将详细讨论AX、BX、CX和DX四个寄存器的常见用途。

首先,我们将探讨AX寄存器及其在累加、函数返回值传递以及数据处理和运算中的作用。

然后,我们将研究BX寄存器,在基址寄存器、指针地址存储以及字符串操作方面的应用。

接下来,我们将介绍CX寄存器在计数与循环控制、位移与移位操作以及I/O 端口控制方面的功能。

最后,我们将讲解DX寄存器在数据传输、中断向量以及I/O端口地址存储方面所起到的重要作用。

1.3 目的通过深入理解AX、BX、CX和DX四个常用寄存器以及它们各自的应用领域,读者将能够更好地理解如何在8086汇编语言中使用这些寄存器,并且能够优化自己的编程技巧。

此外,对于那些希望进一步学习汇编语言的人来说,本文还可作为入门指南,提供了有关寄存器功能和用途的基本知识。

2. AX寄存器的常见用途:2.1 累加器:AX寄存器是8086汇编语言中最常用的累加器。

作为一个通用寄存器,它被广泛用于执行不同类型的运算,例如加法、减法、乘法和除法操作。

在进行加法或减法运算时,我们可以将待操作的数值加载到AX寄存器,并且可以通过执行ADD或SUB指令来实现加法或减法操作。

以乘法为例,其中一个乘数会被放入AX寄存器中,并通过执行MUL(无符号)或IMUL(有符号)指令与另一个操作数进行相乘。

2.2 存储函数返回值:在很多情况下,子程序会将其返回值保存在AX寄存器中。

当调用某个函数或子程序时,该函数或子程序可能会要求将结果返回给调用者。

这时候,函数会将结果保存在AX寄存器中,并通过RETN指令将控制权交还给调用者,从而返回函数的执行结果。

《汇编语言程序设计》复习资料

《汇编语言程序设计》复习资料

《汇编语言程序设计》复习资料一、基本概念1、8088/8086CPU内部寄存器有__14____个,其中的AX、BX、CX、DX是通用寄存器,SP、BP、DI、SI 是基址和变址寄存器,CS、DS、ES、SS、是段寄存器,此外还有指令指针寄存器 IP 和标志位寄存器 FLAGS 两个控制寄存器,所有寄存器都是 16 _位寄存器,每个寄存器可以存放 16 位二进制数。

2、8088/8086CPU的标志位寄存器中有9个标志位,其中的DF、IF、TF是控制标志,OF、SF、ZF、CF、AF、PF 是状态标志。

3、8088/8086CPU有三组总线,它们是数据总线、控制总线和地址总线;地址总线是 20 条,因此它可以寻址的范围是 1M 字节。

通常将 1024 字节称为1K,将 1024K 字节称为1M。

4、8088/8086CPU的存储器采用分段方式管理,每个段最多可以有 64K 字节,全部存储空间可以分成 16 个大小为64K且互相不重叠的段。

5、采用分段方式管理的存储单元的地址分成物理地址和逻辑地址两种,逻辑地址由段地址和偏移地址两部分构成,段地址是每个存储器段的起始地址;偏移地址则是相对于每个段第一个存储单元的偏移值。

段地址存放在段寄存器中,由于8088/8086CPU的段寄存器是16位寄存器,因此在段寄存器中存放的是段地址的 16 位;而CPU对数据的存取是按物理地址进行的,物理地址和逻辑地址间的关系是__ 物理地址=段地址 16D(或10H)+ 偏移地址___。

6、存储器中,数据是以字节为单位存放的,它是一个 8位二进制数,16位二进制数是 2个字节,又称为字;每个存储单元可以存放一个字节;一个字则占用两个存储单元,存放时要将低字节放在地址较小的存储单元中。

7、计算机的指令由操作码字段和操作数字段构成,它们分别给出计算机所要执行的操作和执行操作所要的操作数。

8、指令操作数通常可以存放在指令中,也可以存放在CPU的寄存器中,大多数存放在存储器中,它们分别称为立即数、寄存器操作数和存储器操作数。

汇编语言中寄存器介绍

汇编语言中寄存器介绍

汇编语言中寄存器介绍寄存器是汇编语言中非常重要的概念,它们用于存储和操作数据。

在本文中,将介绍汇编语言中常用的寄存器,并详细解释它们的功能和用途。

1. 通用寄存器通用寄存器是最常用的寄存器,在汇编语言中使用频率较高。

通常有四个通用寄存器,分别是AX、BX、CX和DX。

这些寄存器既可用于存储数据,也可用于进行算术运算。

例如,将数据从内存加载到通用寄存器中,进行加法或减法运算,然后将结果存回内存。

2. 累加器寄存器累加器寄存器是AX寄存器的别名。

AX寄存器在处理循环和计数时非常有用。

它还可以用于存储需要频繁访问的数据,例如需要进行累加或累减的数值。

3. 基址寄存器基址寄存器是BX寄存器的别名。

它与偏移量配合使用,用于计算内存地址。

通常在存储大量数据的数组或缓冲区中使用。

4. 计数器寄存器计数器寄存器是CX寄存器的别名。

CX寄存器在处理循环时非常有用。

它可以作为循环计数器,用于控制循环的次数。

5. 数据寄存器数据寄存器是DX寄存器的别名。

它可以存储需要进行输入/输出操作的数据,例如从键盘读取的字符或向屏幕输出的字符。

数据寄存器还可以用于存放在算术运算中需要使用的常数。

6. 标志寄存器标志寄存器用于存储处理器运行过程中的状态信息,例如进位标志、零标志、符号标志等。

它们对于程序的条件分支非常重要,可以根据不同的标志位执行相应的操作。

7. 段寄存器段寄存器用于指示在内存中的位置。

在实模式下,由于地址总线的限制,内存地址仅能表示64KB。

因此,通过使用段寄存器,可以将内存地址拓展到1MB甚至更大。

常用的段寄存器有CS(代码段寄存器)、DS(数据段寄存器)、SS(堆栈段寄存器)和ES(附加段寄存器)。

8. 指令寄存器指令寄存器(IP)用于存储当前执行的指令在内存中的地址。

它是程序执行的关键寄存器之一,能够实现指令的顺序执行。

在汇编语言中,寄存器是程序设计中不可或缺的组成部分。

通过合理地使用和操作寄存器,能够提高程序的执行效率和性能。

汇编语言学习笔记段寄存器

汇编语言学习笔记段寄存器

汇编语言学习笔记段寄存器一、CPU 的典型构成•CPU 中有很多部件,但一般最主要的有:寄存器运算器控制器 ,如下图是CPU 的主要结构:CPU 的典型构成.png(1)寄存器: 存东西的,比如我们做加法计算 20 + 30 ,那么数据20 和30 先存在寄存器中,在运算器中计算后再存储到寄存器中.CPU 中的寄存器,运算器等部件通过CPU中的控制器(总线)与外面的内存等其他部件相连.•对于程序员来说,CPU中最主要的部件是寄存器,可以通过改变寄存器的内容来实现对CPU的控制.(汇编学的好不好和寄存器学的好不好直接相关)•不同的CPU,寄存器的个数 \ 结构是不同的,8086 是16位的结构的CPU,但是地址总线是20位,可以访问1M的存储空间.•8086 有14个寄存器(都是16位的寄存器(可以存放2个字节))8086的14个寄存器.png二、通用寄存器•AX BX CX DX 这4个寄存器通常用来存放一般性的数据(eg: int a = 10 , int b =10 ) 称为通用寄存器(有时也有特殊用途).•通常,CPU会先将内存中的数据存储到通用寄存器中,然后在对通用寄存器中的数据进行运算.•假如,内存中有块红色内存空间的值是3,现在想把他加1,并将结果存储到内存中的蓝色内存空间,那么处理流程大致如下:数据操作流程.png1.CPU 首先会将红色内存空间中的值放到 AX 寄存器中(通用寄存器)中,即: movax , 红色内存空间 (将右边边红色内存空间的值存到左边AX 中 )2.然后让AX 寄存器(通用寄存器)与1相加.即: add ax ,1 (将右边的值1,与左边AX中的值相加并将结果存入左边AX中)3.最后将值(结果)赋值给蓝色内存空间.即: mov 蓝色内存空间, AX (将右侧AX中的值移动到左侧蓝色内存中)•AX BX CX DX 这4个通用寄存器都是16位的,可以存储2个字节,如下如: 8086通用寄存器.png•注意: 上一代8086 的寄存器都是8位的,为了保证兼容, AX BX CX DX 都可以分为2个8位的寄存器来使用.如下图:通用寄存器的拆分.png高8位低8位的拆分.png三、字节与字•在汇编的数据存储中,有两个比较常用的单位:字节和字. (相当于高级语言中的 int,long,float等数据类型).因此我们在汇编中只能定义两种数据类型的数据,字节类型(byte类型),字类型(word 类型))字节: byte ,1个byte 由8个bit组成,可以存储在8位寄存器中.字:word,1个字由两个字节组成,这两个字节分别称为字的高字节和低字节. •比如数据20000 (4E20H,01001110 00100000B),高字节值78,低字节值32. 字表示.png•1个字可以存储在一个16位寄存器中,这个字的高字节\低字节分别存储在这个存储器的高8位和低8位寄存器中.四、段寄存器•8086 在访问内存时要由相关部件提供内存单元的段地址和偏移地址送入地址加法器合成物理地址•是什么部件提供段地址? 答:段地址在8086的段寄存器中存放. (段segment )代码段寄存器: CS (code segment) 存放代码的数据段寄存器: DS (datasegment ) 存放数据的堆栈段寄存器: SS (stack segment ) 对象放堆里面,局部对象放栈里面附加段寄存器: ES (Extra segment)8086段寄存器.png•8086 有4个段寄存器,CS DS SS ES,当要访问内存时由这4个段寄存器提供内存单元段地址.•每个段寄存的具体作用是什么呢?一旦程序运行装载到内存当中,所有的代码\全局变量\局部变量\对象都装载到了内存当中,所以内存当中存在具体的代码和数据,也存在堆栈等等 ,那么CPU想访问内存段代码,那么他会访问法代码段寄存器,如果CPU想想问堆栈中的数据那么他会访问栈寄存器,依次类推就是这样的.。

汇编语言之寄存器(详细介绍)

汇编语言之寄存器(详细介绍)

汇编语言之寄存器(详细介绍)1、寄存器32位寄存器有16个,分别是:4个数据寄存器(EAX、EBX、ECX、EDX)。

2个变址和指针寄存器(ESI和EDI);2个指针寄存器(ESP和EBP)。

6个段寄存器(ES、CS、SS、DS、FS、GS)。

1个指令指针寄存器(EIP);1个标志寄存器(EFlags)。

2、数据寄存器数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。

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)。

每个寄存器都有自己的名称,可独立存取。

程序员可利用数据寄存器的这种“可合可分”的特性,灵活地处理字/字节的信息。

AX和al通常称为累加器,用累加器进行的操作可能需要更少时间,累加器可用于乘、除、输入/输出等操作,它们的使用频率很高。

BX称为基地址寄存器,它可作为存储器指针来使用。

CX称为计数寄存器,在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用cl来指明位移的位数。

DX称为数据寄存器,在进行乘、除运算时,它可以为默认的操作数参与运算,也可用于存放I/O的端口地址。

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

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

汇编语言寄存器英文缩写全称

汇编语言寄存器英文缩写全称

汇编语言寄存器英文缩写全称由于汇编语言是一种底层的计算机程序设计语言,与人类自然语言有很大的差别。

在汇编语言中,寄存器是一种非常重要的数据存储和处理方式。

寄存器用于存放计算过程中的临时数据、地址偏移量和指令操作数等。

对于初学者来说,掌握汇编语言中寄存器的英文缩写全称是非常重要的一步。

以下是一些常用的汇编语言寄存器英文缩写全称:1. 通用寄存器:- 累加器 (Accumulator):ACC- 基址寄存器 (Base Pointer):BP- 数据寄存器 (Data Register):DR- 索引寄存器 (Index Register):IR- 堆栈寄存器 (Stack Pointer):SP2. 数据寄存器:- 通用数据寄存器 (General Data Register):GDR- 扩展数据寄存器 (Extended Data Register):EDR- 输入数据寄存器 (Input Data Register):IDR- 输出数据寄存器 (Output Data Register):ODR3. 地址寄存器:- 通用地址寄存器 (General Address Register):GAR- 扩展地址寄存器 (Extended Address Register):EAR- 输入地址寄存器 (Input Address Register):IAR- 输出地址寄存器 (Output Address Register):OAR4. 控制寄存器:- 程序计数器 (Program Counter):PC- 状态寄存器 (Status Register):SR- 控制寄存器 (Control Register):CR5. 特殊寄存器:- 指令寄存器 (Instruction Register):IR- 标志寄存器 (Flag Register):FR- 索引寄存器 (Index Register):IR- 堆栈指针寄存器 (Stack Pointer Register):SPR以上只是介绍了一部分汇编语言寄存器的英文缩写全称,实际上还有更多的寄存器在不同的架构和指令集中使用。

汇编语言1:基础知识

汇编语言1:基础知识

汇编语⾔1:基础知识 这个假期开始系统学习汇编语⾔,采⽤跟随视频教程的⽅式,所⽤教程是⽹易云课堂中的《汇编语⾔从0开始》,讲者是workWork。

该课程⼀共有167个课时,每个课时从⼏分钟到⼗⼏分钟不等,时间不长,短⼩精悍,反馈及时,让⼈有动⼒⼀直看下去。

这门课程很适合零基础的同学,因为在正式编程前,讲者⽤了⼤量时间讲述基础性的知识,包括⼆进制⼗进制⼗六进制、CPU执⾏指令的过程、寄存器的讲解、栈的使⽤等等。

我个⼈认为,即使你已经不算零基础了,认真地看完这些课程,巩固⼀下基础知识也是必要的。

我之前看过⼀本基于Linux的教材,因为Linux采⽤的是AT&T风格,与DOS/Windows的Intel风格有很⼤差异,所以即使也写过⼏个汇编⼩程序,但始终觉得对于寄存器、指令/数据长度以及栈的概念懵懵懂懂,基础并没有打好。

我建议⼤家如果是初学者,还是先从DOS/Windows平台的汇编开始学习⽐较好,尤其是要使⽤Windows XP中的debug程序反复练习,这样可以在编程之前打好坚实的基础。

下⾯对编程之前的基础知识做⼀个⼩⼩的总结。

⼀、⼗进制、⼆进制和⼗六进制⼆进制之所以重要,是因为整个计算机体系就是建⽴在⼆进制的基础上的,实际上所有的指令和数据在计算机中存储和运算的形式就是⼆进制。

⼗六进制之所以重要,是因为查看内存中的指令和数据时,是以⼗六进制显⽰的。

⼀个⼗六进制数字,实际上相当于四个⼆进制数字的表⽰。

这⽅⾯需要掌握以下⼏个知识点:⼗进制与⼆进制的相互转换/快速转换⼗进制与⼗六进制的的相互转换/快速转换⼗六进制与⼆进制的相互转换/快速转换 基础的相互转换就不说了,即使对于初学者也应该是容易掌握的。

说⼀下快速转换的⽅法。

1. ⼗进制快速转换成⼆进制 ⾸先对于⼆进制来说,位于最末⼀位的1表⽰加1,右数第⼆位表⽰加2,依次类推为4、8、16、32、64。

对于100以内的⼗进制数,只能是由以上⼏个数字相加得成。

汇编语言寄存器和指令操作的整理

汇编语言寄存器和指令操作的整理

汇编语言寄存器和指令操作的整理汇编语言是一种与机器语言紧密相关的低级语言。

它使用寄存器和特定的指令操作来进行数据的加载、存储、运算和控制。

寄存器是位于CPU内部的高速存储器。

它们可以暂时存储数据,供CPU进行运算和操作。

汇编语言使用多个寄存器进行数据的临时存储和处理。

在x86架构的计算机系统中,常见的寄存器包括:1.通用寄存器:程序员可以随意使用的寄存器,用于存储临时数据和地址。

在32位模式下,共有8个32位通用寄存器(EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP),在64位模式下,有16个64位通用寄存器(RAX、RBX、RCX、RDX、RSI、RDI、RBP、RSP、R8~R15)。

2.段寄存器:用于存储段地址,分别包括代码段寄存器(CS)、数据段寄存器(DS)、附加段寄存器(ES)、栈段寄存器(SS)和指令指针寄存器(IP)。

3.标志寄存器:用于存储程序运行状态和执行结果的标志位,包括进位标志(CF)、零标志(ZF)、符号标志(SF)、溢出标志(OF)等。

除了寄存器,汇编语言还使用一些特定的指令操作来完成各种功能。

常见的指令操作包括:1.数据传输指令:用于将数据从一个位置(如寄存器、内存)传送到另一个位置。

常见的数据传输指令有MOV(将数据从源操作数传送到目标操作数)、LEA(加载有效地址)等。

2.算术运算指令:用于对数据进行加、减、乘、除等数学运算。

常见的算术运算指令有ADD(加法)、SUB(减法)、MUL(乘法)、IDIV(整数除法)等。

3.逻辑运算指令:用于对数据进行逻辑上的与、或、非、异或等运算。

常见的逻辑运算指令有AND(与运算)、OR(或运算)、NOT(取反运算)、XOR(异或运算)等。

4.控制指令:用于控制程序的流程和状态。

常见的控制指令有JMP(无条件跳转)、JZ(零标志跳转)、LOOP(循环执行)、CALL(调用子程序)等。

5.输入输出指令:用于与外部设备进行数据的输入和输出。

汇编寄存器功能详解

汇编寄存器功能详解

汇编寄存器功能详解汇编语言是一种底层语言,与计算机硬件直接交互。

在汇编语言中,寄存器是一组特殊的存储单元,用于暂时存储数据或指令。

它们在处理器中的位置较为接近,可以快速访问。

在汇编语言中,寄存器被分为通用寄存器、数据段寄存器、指令指针寄存器、标志寄存器等几个类别,每个寄存器都有特定的功能。

一、通用寄存器通用寄存器是CPU中最常见的寄存器,用于存放临时数据和计算的结果。

通用寄存器是命名的,有固定的用途,分别是AX(累加寄存器)、BX(基址寄存器)、CX(计数寄存器)、DX(数据寄存器)、SI(源变址寄存器)、DI(目的变址寄存器)、SP(堆栈指针寄存器)和BP(基址指针寄存器)。

1. AX寄存器(Accumulator Register):是累加器寄存器,用于存放算术和逻辑运算的结果。

在一些特定指令中,它还可以充当乘法或除法运算的除数或被除数。

2. BX寄存器(Base Register):是基址寄存器,通常用于存放数据内存的基址。

它也可以充当累加器或存放地址偏移量的累加器。

3. CX寄存器(Count Register):是计数寄存器,在一些循环指令中用于记录循环迭代的次数。

此外,它还可以充当数据传输或移位指令的位数计数器。

4. DX寄存器(Data Register):是数据寄存器,通常用于存放数据操作的源数据或目标数据。

它也可以存放除法运算的余数或乘法运算的高位结果。

5. SI寄存器(Source Index Register):是源变址寄存器,用于存放源数据的偏移地址。

在字符串或数组的操作中,它通常与DI寄存器共同使用。

6. DI寄存器(Destination Index Register):是目的变址寄存器,用于存放目标数据的偏移地址。

在字符串或数组的操作中,它通常与SI寄存器共同使用。

7. SP寄存器(Stack Pointer Register):是堆栈指针寄存器,用于指向栈顶位置。

汇编语言之寄存器详解

汇编语言之寄存器详解

汇编语⾔之寄存器详解上图是cpu中三个组成部分:寄存器运算器控制器。

其中寄存器是cpu中程序员⽤指令读取的唯⼀部件(调剂界⾯中的寄存器窗⼝)。

如果是16位cpu,就是处理,传输,暂时存储的数据长度都是16位。

所以16位的cpu,寄存器也是16位。

《汇编语⾔》这本书中使⽤的是16位寄存器位例⼦来讲的,所以下⾯的内容也都是16位寄存器的。

ps:查看处理器型号以及⼏核cpu,我现在的电脑4核64位寄存器名字16位的寄存器有:AX,BX,CX,DX,SI,DI,SP,BP,IP,CS,SS,DS,ES,PSW。

32位寄存器就是前⾯加个E,64位前⾯加个R。

vs中解决⽅案平台选择x86——32位寄存器,可以存数32位⼆进制数据vs中解决⽅案平台选择x64——64位各种类型的寄存器在下⾯介绍各个寄存器的时候,都⽤16位的寄存器作为介绍。

同种类型的32位和64位寄存器功能⼀样,只是处理的数据宽度更⼤了。

同时介绍⼀些汇编指令(汇编指令不区分⼤⼩写)。

1.通⽤寄存器——AX BX CX DX作⽤:存放⼀般性的数据传送指令:movemov 转移指令,⼤部分的寄存器都可以⽤这个指令来改变其值。

常⽤的有:不仅限于下⾯⼏种1.move 某⼀个合法寄存器某⼀个合法寄存器将⼀个寄存器的内容传送到另⼀个寄存器⽐如:move 段寄存器(ds,cs),通⽤寄存器——段寄存器的值不能直接通过数据来设定2.move 某⼀个合法寄存器数据将数据直接传⼊寄存器3.move 某⼀个合法寄存器 [内存单元的偏移地址]将⼀个内存单元中的内容存⼊⼀个寄存器中,后⾯将DS寄存器的时候再讲。

算术运算指令:add,subadd 寄存器,数据/寄存器/内存单元add 内存单元,寄存器(如何记住⼀个⼆进制数据左移1位相当于乘以2,左移n位,相当于乘以2的N倍:⼀个10进制的数左移1位,相当于乘以10,左移n位,相当于乘以10的N倍。

)2.CS,IP——代码段CS(code)IP(instruction pointer)是最关键的两个寄存器,代码段寄存器和指令指针寄存器,他们的内容提供了cpu要执⾏指令的地址。

ARM汇编之寄存器

ARM汇编之寄存器

ARM汇编之寄存器在ARM处理器内部共有37个⽤户可访问的寄存器,分别为31个通⽤的32位寄存器和6个状态寄存器。

⼀.通⽤寄存器:1.在汇编语⾔中,寄存器R0-R13为保存数据或地址值的通⽤寄存器。

2.其中寄存器R0-R7为未分组的寄存器。

对于任何处理器模式,它们都共享R0~R7的通⽤寄存器。

3.寄存器R8-R12为两个分组的物理寄存器。

a.FIQ拥有⾃⼰独⽴的R8~R12的通⽤寄存器。

b.其他六种处理器模式共享R8~R12的通⽤寄存器注:寄存器R8~R12在ARM体系结构中没有特定的⽤途。

给FIQ单独的R8~R12可实现快速的中断处理(在发⽣FIQ中断后,处理器不⽤为了保护寄存器⽽浪费时间,从⽽提⾼了FIQ的处理速度)4.寄存器R13和R14a.⽤户模式和系统模式公⽤R13和R14的寄存器内容。

b.其它五个模式拥有⾃⼰独⽴的R13和r14寄存器内容。

c.R13作为堆栈指针(SP),⽤于保存待使⽤的寄存器内容。

d.寄存器R14称为链接寄存器(LR),它的作⽤有两个:当使⽤BL指令调⽤⼦程序时,系统会⾃动将 BL指令的下⼀条指令的地址存⼊R14中。

程序A指令过程中调⽤程序B程序跳转⾄标号Lable处,执⾏程序B.系统将BL Lable指令的下⼀条指令所在地址存⼊R14中程序B执⾏最后,执⾏语句MOV PC,LR将R14寄存器的内容放⼊PC处,返回⾄NEXT处继续执⾏。

●当发⽣异常时,系统⾃动将异常的返回地址放⼊R14中(有些异常有⼀个⼩的固定的偏移量)⼆.重要的寄存器1.堆栈指针R13R13作为堆栈指针SP。

在ARM指令集中,由于没有以特殊⽅式使⽤R13的指令。

(在Thumb)指令集中存在使⽤R13的指令)每个异常模式都有其⾃⾝的R13分组版本,它通常指向由异常模式所专⽤的堆栈。

在⼊⼝处,异常处理程序通常将其他要使⽤的寄存器值保存到这个堆栈。

通过返回时将这些值重装到寄存器中。

异常处理程序可确保异常发⽣时的程序状态不会被破坏。

汇编-32位寄存器的功能及其使用

汇编-32位寄存器的功能及其使用

汇编-32位寄存器的功能及其使用2011-06-10 12:16汇编-32位寄存器的功能及其使用总体上来讲32位寄存器可以分为一下几种:4个数据寄存器(EAX、EBX、ECX和EDX)2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP)6个段寄存器(ES、CS、SS、DS、FS和GS)1个指令指针寄存器(EIP) 1个标志寄存器(EFlags)首先介绍一下易失性一些寄存器在函数中常常是变化的,而另外一些却是不变的。

这是编译器所决定的。

因为寄存器是不会自动保存的(虽然有些汇编语言会自动保存,但是x86 是不会的),所以编码时要自己保存。

这句话的意思是:当一个函数被调用,是不保证在函数返回时,易失寄存器上的值不变的;但是函数必须负责保存非易失寄存器中的值。

微软编译器的寄存器使用习惯如下:1) 易失寄存器: ecx, edx2) 非易失寄存器 : ebx, esi, edi, ebp3) 其他特殊寄存器 : eax, esp (discussed later)eaxEax 是一个32 为通用寄存器,一般的用途有两个:保存函数的返回值或者作为计算用的专用寄存器。

在技术上来说,eax 是一个易失寄存器,因为他的值是不能保存的,eax 的值会在函数返回前设置为函数的返回值。

除了ESP 寄存器,EAX 的这个功能(即保存返回值)可能是最重要的值得被记住的。

eax 还会在数据计算时要用,比如乘法和除法。

这种用法我们会在指令使用一文讲解。

下面是C 语言中函数返回的例子:return 3; // 返回3对应的汇编语言:mov eax, 3 ; 置EAX=3ret ; 返回ebxEbx 是一个非易失通用寄存器。

它没有特定的用途,但是常被置为一个函数中常用的值(如0 ),以此来加快计算速度。

ecxEcx 是一个易失通用寄存器。

常被用作函数的参数或者是循环的计数器。

__fastcall 的函数会将第一和第二个参数放置在ecx 和edx 寄存器中。

汇编学习笔记——DOS及DEBUG介绍

汇编学习笔记——DOS及DEBUG介绍

汇编学习笔记——DOS及DEBUG介绍⼀、课程简介声明:该课程基于《汇编语⾔(第2版)》郑晓薇编著,机械⼯业出版社。

本节实验取⾃教材中第⼆章的《实例⼆进⼊计算机》。

实验环境:1.DOS 环境实验环境中安装有dosemu可以模拟DOS环境,并提供DEBUG、MASM、LINK等汇编语⾔开发程序。

2.进⼊DOS和DEBUG在桌⾯上双击dosemu图标,直接进⼊DOS。

再做如下操作:C:\〉D: ——回车后进⼊D盘D:\〉CD DOS ——进⼊DOS⼦⽬录D:\dos〉DIR ——列出⽬录中的⽂件D:\dos〉DEBUG ——进⼊DEBUG⼆、进⼊计算机微型计算机的字长与微处理器的寄存器位数有关。

以Intel 80X86系列微处理器为例:CPU是8086/8088、80286的字长是16位(⼆进制位bit),那么它们的寄存器的位数⼀定是16位的;32位字长的微机CPU是80386/80486或者Pentium系列,它们的寄存器的位数则是32位的。

在汇编语⾔中,数值后⾯分别⽤字母B、H、D代表⼆进制(Binary)、⼗六进制(Hexadecimal)、⼗进制数(Decimal)(⼗进制数可以省略D)。

在计算机中还规定采⽤字节、字、双字等单位来表⽰数据。

字节(Byte):8位⼆进制数。

如00000101B,或表⽰成05H;10000101B,或表⽰成85H。

字(Word):16位⼆进制数,等于2字节。

如1100010111010110B,或表⽰成C5D6H。

双字(Double Word):32位⼆进制数,⼜称为双精度数,等于4字节。

如23456789H。

2.1 8086寄存器组8086寄存器都是16位的寄存器,根据⽤途可分为4种类型。

分别是数据寄存器、地址寄存器、段寄存器和控制寄存器。

如图所⽰:img数据寄存器中每个寄存器⼜可以分为2个8位的寄存器:AH、AL,BH、BL,CH、CL,DH、DL。

H表⽰⾼字节(⾼8位)寄存器、L表⽰低字节(低8位)寄存器。

通用寄存器的名词解释

通用寄存器的名词解释

通用寄存器的名词解释寄存器是计算机中非常重要的组成部分,用于存储和操作数据。

在计算机体系结构中,通用寄存器被广泛应用。

本文将对通用寄存器进行详细解释,并探讨其在计算机中的作用和用途。

一、什么是通用寄存器?通用寄存器是计算机体系结构中用于存储操作数和中间结果的特殊寄存器。

与专用寄存器(例如程序计数器或指令寄存器)不同,通用寄存器可以进行多种类型的操作。

它们通常以字节、字或双字的形式存在,可以存储整数、浮点数等不同类型的数据。

二、通用寄存器的作用1. 存储数据通用寄存器在计算机程序执行过程中起到临时存储数据的作用。

在进行算术运算或逻辑运算时,通用寄存器被用来存储操作数和中间结果。

例如,在两个整数相加时,通用寄存器可以存储这两个整数和它们的和。

2. 寻址通用寄存器也用于地址计算和寻址。

在程序中,当需要访问内存中的某个数据时,通用寄存器可以存储该数据的地址。

通过对通用寄存器的操作,可以计算出数据在内存中的实际位置,并将其加载到寄存器中供程序使用。

3. 数据传输通用寄存器还用于在不同寄存器之间传输数据。

当需要将一个寄存器的值传递给另一个寄存器时,通用寄存器可以作为中转站点,临时存储这些数据,并将其传输到目标寄存器。

这种数据传输通常发生在变量之间的赋值操作或函数参数传递过程中。

4. 函数调用通用寄存器在函数调用中也发挥着重要的作用。

当一个函数被调用时,函数的参数通常存储在通用寄存器中。

函数执行过程中,它们可以通过访问通用寄存器来获取参数的值。

类似地,函数的返回值可以存储在通用寄存器中,并在返回之前被读取。

三、通用寄存器的分类和命名通用寄存器一般按照其位数分为不同的类型,例如8位、16位、32位或64位寄存器。

这些寄存器通常由英文单词或其缩写作为名称,以方便在汇编语言中使用。

常见的通用寄存器包括:1. AX、BX、CX和DX:这些是16位寄存器,分别表示累加器、基址寄存器、计数器和数据寄存器。

它们在x86架构的计算机中被广泛使用。

dx通用寄存器的地址编排

dx通用寄存器的地址编排

dx通用寄存器的地址编排汇编语言教程–寄存器寄存器是汇编语言中常常用到的–汇编语言需要操作CPU,而寄存器是CPU很重要的一部分,那么今天就来讲一讲常见的寄存器,如AX, AH, AL, FS, IP等为了好记,我把它们分成几类AX, BX, CX, DX16位通用寄存器,存放16位数据或地址AH, BH, CH, DH, AL, BL, CL, DL都是ABCD,8位寄存器,分别指AX, BX, CX, DX和上8位和下8位,H代表high(高位),L代表low(低位),用于存放8位数据注意AX, BX, CX, DX都分别由各自的用途AX:累加器BX:基址寄存器CX:计数寄存器DX:数据寄存器总之就记住AX, BX, CX, DX都是通用寄存器BP, SPBP:基址指针寄存器SP:堆栈指针寄存器,存放栈的偏移地址(和PUSH,POP指令息息相关)CS, DS, ES, FS, GS, SS这几个都是段寄存器,S代表segmentCS:代码段寄存器,C代表codeDS:数据段寄存器,D代表dataES:扩展段寄存器,E代表extra, extension, extendFS:标志段寄存器,F代表featureGS:全局段寄存器,G代表globalSS:堆栈寄存器,存放栈的起始地址,S代表stackSI, DS变址寄存器,为访问先行数据段提供段内数据偏移量SI:源变址寄存器,S代表source,和DS一起使用DI:目标变址寄存器,D代表determination,和ES一起使用IP16位指令指针寄存器,始终指着下一条要执行的指令的地址,不能直接通过数值修改,系统自动调整,在跳转指令时讲新的跳转目标地址送入IPFR程序状态字寄存器FR是16位寄存器,其中有9位有效位用来存放状态标志和控制标志。

状态标志共6位,CF、PF、AF、ZF、SF和OF,用于寄存程序运行的状态信息,这些标志往往用作后续指令判断的依据。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

汇编语言学习笔记之通用寄存器
从昨天开始,正式拉开了学习汇编语言的序幕,对于汇编语言的一些特点以及数据的表示及类型做了一番了解,由于这些东西每一种语言里都要介绍,而且一时半会也真弄不太明白它们的具体使用,也就粗略的看了一下,留待在今后的学习中结合实例加以体会吧。

而通用寄存器应该说是CPU内部重要的数据存储资源,学习汇编语言必须要掌握清它们的功能。

因此汇编语言学习的第一篇学习笔记就从通用寄存器开始了。

以下内容摘自汇编教程中。

寄存器是CPU内部重要的数据存储资源,是汇编程序员能直接使用的硬件资源之一。

由于寄存器的存取速度比内存快,所以,在用汇编语言编写程序时,要尽可能充分利用寄存器的存储功能。

寄存器一般用来保存程序的中间结果,为随后的指令快速提供操作数,从而避免把中间结果存入内存,再读取内存的操作。

在高级语言(如:C/C++语言)中,也有定义变量为寄存器类型的,这就是提高寄存器利用率的一种可行的方法。

另外,由于寄存器的个数和容量都有限,不可能把所有中间结果都存储在寄存器中,所以,要对寄存器进行适当的调度。

根据指令的要求,如何安排适当的寄存器,避免操作数过多的传送操作是一项细致而又周密的工作。

有关“寄存器的分配策略”在后续课程《编译原理》中会有详细的介绍。

由于16位/32位CPU是微机CPU的两个重要代表,所以,在此只介绍它们内部寄存器的名称及其主要功能。

1、16位寄存器组
16位CPU所含有的寄存器有:
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所含有的寄存器有:
4个数据寄存器(EAX、EBX、ECX和EDX),
2个变址和指针寄存器(ESI和EDI),
2个指针寄存器(ESP和EBP)
6个段寄存器(ES、CS、SS、DS、FS和GS),
1个指令指针寄存器(EIP),
1个标志寄存器(EFlags)
通用寄存器可用于传送和暂存数据,也可参与算术逻辑运算,并保存运算结果。

除此之外,它们还各自具有一些特殊功能。

汇编语言程序员必须熟悉每个寄存器的一般用途和特殊用途,只有这样,才能在程序中做到正确、合理地使用它们。

通用寄存器的主要用途
寄存器AX和AL通常称为累加器(Accumulator),用累加器进行的操
作可能需要更少时间。

累加器可用于乘、除、输入/输出等操作,它们
的使用频率很高;
寄存器BX称为基地址寄存器(Base Register)。

它可作为存储器指针
来使用;
寄存器CX称为计数寄存器(Count Register)。

在循环和字符串操作时,
要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移
位的位数;
寄存器DX称为数据寄存器(Data Register)。

在进行乘、除运算时,
它可作为默认的操作数参与运算,也可用于存放I/O的端口地址。

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

详细内容请见第3.8节——32位地址的寻址方式。

2、变址寄存器
32位CPU有2个32位通用寄存器ESI和EDI。

其低16位对应先前CPU中的SI和DI,对低16位数据的存取,不影响高16位的数据。

寄存器ESI、EDI、SI和DI称为变址寄存器(Index Register),它们主要用于存放存储单元在段内的偏移量,用它们可实现多种存储器操作数的寻址方式(在第3章有详细介绍),为以不同的地址形式访问存储单元提供方便。

变址寄存器不可分割成8位寄存器。

作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。

它们可作一般的存储器指针使用。

在字符串操作指令的执行过程中,对它们有特定的要求,而且还具有特殊的功能。

具体描述请见第5.2.11节。

3、指针寄存器
32位CPU有2个32位通用寄存器EBP和ESP。

其低16位对应先前CPU 中的SBP和SP,对低16位数据的存取,不影响高16位的数据。

寄存器EBP、ESP、BP和SP称为指针寄存器(Pointer Register),主要用于存放堆栈内存储单元的偏移量,用它们可实现多种存储器操作数的寻址方式(在第3章有详细介绍),为以不同的地址形式访问存储单元提供方便。

指针寄存器不可分割成8位寄存器。

作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。

它们主要用于访问堆栈内的存储单元,并且规定:
BP为基指针(Base Pointer)寄存器,用它可直接存取堆栈中的数据;
段寄存器是根据内存分段的管理模式而设置的。

内存单元的物理地址由段寄存器的值和一个偏移量组合而成的,这样可用两个较少位数的值组合成一个可访问较大物理空间的内存地址。

CPU内部的段寄存器:
CS——代码段寄存器(Code Segment Register),其值为代码段的段值;
DS——数据段寄存器(Data Segment Register),其值为数据段的段值;
ES——附加段寄存器(Extra Segment Register),其值为附加数据段的段值;
SS——堆栈段寄存器(Stack Segment Register),其值为堆栈段的段值;
FS——附加段寄存器(Extra Segment Register),其值为附加数据段的段值;
GS——附加段寄存器(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)是存放下次将要执行的指令在代码段的偏移量。

在具有预取指令功能的系统中,下次要执行的指令通常已被预取到指令队列中,除非发生转移情况。

所以,在理解它们的功能时,不考虑存在指令队列的情况。

在实方式下,由于每个段的最大范围为64K,所以,EIP中的高16位肯定都为0,此时,相当于只用其低16位的IP来反映程序中指令的执行次序。

/s/blog_5fc04b6d0100had7.html。

相关文档
最新文档