汇编教程控制寄存器和系统地址寄存器
汇编语言寄存器和指令操作的整理
关于汇编语言寄存器和指令操作的整理 最近汇编学到后面的内容, 越来越觉得前面的基础没有掌握好, 弄得最后编写汇编程序的时候, 寄存器瞎用, 没有一点的规矩, 中断操作也不知道是对哪个寄存器里的数进行操作, 每次做一个小程序, 都得翻书后面的INT中断查询表, 感觉很不爽, 今天花了大半天把几本关于汇编的书前面的内容又翻了一遍, 结合自己做的笔记, 做了一个简单的整理, 关于寄存器和指令的, 以作复习汇编之用. 关于存哪个数据用哪个寄存器, 我觉得首先要弄清楚各个寄存器的用途, 以及指令是如何操作数据, 操作的哪个寄存器里的数据, 又是将操作完后的结果数据存放到那个寄存器中去的.计算机内部寄存器阵列l 数据寄存器l 指针及变址寄存器l 段寄存器l 控制寄存器数据寄存器包括4个16位的寄存器(AX, BX, CX, DX)或者8个8位寄存器( AH, AL, BH, BL, CH, CL, DH, DL)这些寄存器都可以用来暂时存放操作数, 运算结果以及其他信息, 但同时又具有某些专用用途l AX 数据累加器算术运算中的主要寄存器, 在乘除运算中用来指定被除数和被除数, 也是乘, 除,运算后积和商的默认存储单元. 另外I/O指令均使用该寄存器与I/O设备传送信息l BX 基址寄存器指令寻址时常用做基址寄存器. 存入偏移量或偏移量的构成成分l CX 计算寄存器在循环指令操作或串处理指令中隐含计数l DX 数据寄存器在双字节长运算是, 与AX构成32位操作数, DX为高16位. 在某些I/O指令中, DX被用来存放端口地址指针及变址寄存器这些寄存器都是16位的寄存器, 用来存放16位的操作数或中间结果, 但更经常的用途是存放偏移量, 或位移量l SP 堆栈指针寄存器始终只是栈顶的位置, 与SS寄存器一起组成栈顶数据的物理地址l BP 基址指针寄存器系统默认其指向堆栈中某一单元, 即提供栈中该单元的偏移量. 加段前缀后, BP可作非堆栈段的地址指针l SI 源变址寄存器与DS联用, 指示数据段中某操作的偏移量. 在做串处理时, SI指示源操作数地址, 并有自动增量或自动减量的功能. 变址寻址时, SI与某一位移量共同构成操作数的偏移量l DI 目的变址寄存器与DS联用, 指示数据段中某操作数的偏移量, 或与某一位移量共同构成操作数的偏移量. 串处理操作时, DI指示附加段中目的地址, 并有自动增量或减量的功能段寄存器l CS 代码段存放当前程序的指令代码l DS 数据段存放程序所涉及的源数据或结果l SS 堆栈段以”先入后出”为原则的数据区l ES 附加段辅助数据区, 存放串或其他数据控制寄存器l IP 指令指针寄存器它始终指向当前将要执行指令在代码段中存放的
汇编语言入门汇编指令及寄存器详解教程
汇编语⾔⼊门汇编指令及寄存器详解教程
⽬录
前⾔
什么是汇编语⾔
汇编语⾔产⽣的原因
汇编与⼆进制的关系
寄存器
寄存器作⽤
存取速度⽐较
寄存器分类
常⽤寄存器⽤途
寄存器EAX、AX、AH、AL的关系
汇编语⾔指令
数据传送指令
算术运算指令
逻辑运算指令
循环控制指令
转移指令
linux 和 windows 下汇编的区别
总结
前⾔
我们⼤都是被⾼级语⾔惯坏了的⼀代,源源不断的新特性正在逐步添加到各类⾼级语⾔之中,汇编作为最接近机器指令的低级语⾔,已经很少被直接拿来写程序了,不过我还真的遇到了⼀个,那是之前的⼀个同事,因为在写代码时遇到了成员函数权限及可见性的问题,导致他⽆法正确调⽤想执⾏的函数,结果他就开始在C++代码⾥嵌⼊汇编了,绕过了种种限制终于如愿以偿,但是读代码的我们傻眼了…
因为项⽬是跨平台的,代码推送的 Linux 上编译的时候他才发现,汇编代码的语法在 Linux 和 Windows 上居然是不⼀样的,结果他⼜⽤⼀个判断平台的宏定义“完美”的解决了,最终这些代码肯定是重写了啊,因为可读性太差了,最近在学习左值、右值、左引⽤和右引⽤的时候,总是有⼈⽤程序编译⽣成的中间汇编代码来解释问题,看得我迷迷糊糊,所以决定熟悉⼀下简单的汇编指令,边学习边记录,⽅便今后忘记了可以直接拿来复习。
什么是汇编语⾔
汇编语⾔是最接近机器语⾔的编程语⾔,引⽤百科中的⼀段话解释为:
汇编语⾔(assembly language)是⼀种⽤于电⼦计算机、微处理器、微控制器或其他可编程器件的低级语⾔,亦称为符号语⾔。在汇编语⾔中,⽤助记符代替机器指令的操作码,⽤地址符号或标号代替指令或操作数的地址。汇编语⾔⼜被称为第⼆代计算机语⾔。
汇编语言之寄存器(CPU工作原理)
汇编语言之寄存器(CPU工作原理)
1、介绍
一个典型的CPU,由运算器、控制器、寄存器等器件组成,对于游戏修改者来说,重点学习寄存器,其它不必管。
不同的CPU,寄存器的个数、结构是不相同的,8086CPU有14个寄存器,每个寄存器有一个名称,我们对它进行分类:
1.通用寄存器:AX、BX、CX、DX
2.段寄存器:CS、SS、DS、ES
3.指针寄存器:SP、BP
4.变址寄存器:SI、DI
5.指令指针寄存器:IP
6.标志寄存器:FR
2、通用寄存器
AX、BX、CX、DX这4个寄存器通常用来存放一般性的数据,被称为通用寄存器。
以AX为例,寄存器的逻辑结构图如下:
字在寄存器中的存储字在寄存器中的存储
3 字在寄存器中的存储
4、物理地址
存储单元又叫内存单元,以后我们多数用内存单元这一名称。
所有的内存单元构成的存储空间是一个一维的线性空间,每一个内存单元在这个空间中都有唯一的地址,我们将这个唯一的地址称为物理地址。
CPU通过地址总线送入内存的,必须是一个内存单元的物理地址,在CPU向地址总线上发出物理地址之前,必须要在内部先
形成这个物理地址,不同的CPU可以有不同的形成物理地址的方式,我们现在讨论8086CPU是如何在内部形成内存单元的物理地址的。
5、 8086CPU给出物理地址的方法
8086CPU有20位地址总线,可以传送20位地址,而8086CPU 内部结构是16位的,一次性只能传送16位的地址,怎么
解决20位地址与16位地址不一致的问题呢?8086CPU采用一种在内部用2个16位地址合成的方法来形成一个20位的物理地址。
寄存器、汇编命令详解
寄存器、汇编命令详解
汇编命令详解
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的端口地址。
汇编指令-MRS(读)和MSR(写)指令操作CPSR寄存器和SPSR寄存器使用(1)
汇编指令-MRS(读)和MSR(写)指令操作CPSR寄存器和
SPSR寄存器使⽤(1)
1.MSR和MRS指令介绍
MRS 指令: 对状态寄存器CPSR和SPSR进⾏读操作。通过读CPSR可以获得当前处理器的⼯作状态。读SPSR寄存器可以获得进⼊异常前的处理器状态(因为只有异常模式下有SPSR寄存器)。
MSR指令: 对状态寄存器CPSR和SPSR进⾏写操作。与MRS配合使⽤,可以实现对CPSR或SPSR寄存器的读-修改-写操作,可以切换处理器模式、或者允许/禁⽌IRQ/FIQ中断等。
2.CPSR 程序状态寄存器(current program status register)
如图所⽰,ARM每种⼯作模式除R0~R15共16个寄存器外,还有第17个寄存器CPSR,叫做当前程序状态寄存器
CPSR寄存器格式:
在CPSR寄存器中主要⽤到了控制位,每个标志位如下图所⽰:
3.使⽤MSR指令写⼊数据
例:
msr cpsr_c, #0xd2 @0xd2=11000010//禁⽌中断使能,进⼊中断模式
msr cpsr_c, #0x53 @0x53=01010011//开IRQ中断,禁⽌FIQ中断,进⼊ARM状态,设为管理(svc32)模式
其中cpsr_c是因为CPSR有4个8位区域:
C 控制域屏蔽字节([7:0])
X 扩展域屏蔽字节([15:8])
S 状态域屏蔽字节([23:16])
F 标志域屏蔽字节([31:24])
所以cpsr_c表⽰的是CPSR控制位、
4.使⽤MRS和MSR来设置2440位管理模式,实例:
微机原理与接口技术复习资料(概念背诵)
1、微处理器(CPU)由运算器、控制器、寄存器组三部分
组成。
2、运算器由算术逻辑单元ALU、通用或专用寄存器组及内
部总线三部分组成。
3、控制器的功能有指令控制、时序控制、操作控制,控制
器内部由程序计数器PC、指令寄存器IR、指令译码器ID、时序控制部件以及微操作控制部件(核心)组成。
4、8088与存储器和I/O接口进行数据传输的外部数据总线
宽度为8位,而8086的数据总线空度为16位。除此之外,两者几乎没有任何差别。
5、在程序执行过程中,CPU总是有规律的执行以下步骤:a
从存储器中取出下一条指令b指令译码c如果指令需要,从存储器中读取操作数d执行指令e如果需要,将结果写入存储器。
6、8088/8086将上述步骤分配给了两个独立的部件:执行单
元EU、总线接口单元BIU。EU作用:负责分析指令(指令译码)和执行指令、暂存中间运算结果并保留结果的特征,它由算数逻辑单元(运算器)ALU、通用寄存器、标志寄存器、EU控制电路组成。BIU作用:负责取指令、取操作、写结果,它由段寄存器、指令指针寄存器、指令队列、地址加法器、总线控制逻辑组成。
7、8088/8086CPU的内部结构都是16位的,即内部寄存器
只能存放16位二进制码,内部总线也只能传送16位二进制码。
8、为了尽可能地提高系统管理(寻址)内存的能力,
8088/8086采用了分段管理的方法,将内存地址空间分为了多个逻辑段,每个逻辑段最大为64K个单元,段内每个单元的地址长度为16位。9、8088/8086系统中,内存每个单元的地址都有两部分组成,
汇编语言考试复习资料
汇编语⾔考试复习资料
汇编语⾔期末复习资料整理
第⼆章
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]
汇编语言的指令和寄存器
复习一下汇编的基础知识,主要是Intel 8086的CPU。16机器1.通用寄存器(1)数据寄存器数据寄存器共有4个寄存器AX、BX、CX、DX,用来保存操作数或运算结果等信息。 AX寄存器称为累加器。使用频度最高,用于算术、逻辑运算以及与外设传送信息等。BX寄存器称为基址寄存器。常用于存放存储器地址。CX寄存器称为计数器。一般作为循环或串操作等指令中的隐含计数器。DX寄存器称为数据寄存器。常用来存放双字数据的高16位,或存放外设端口地址。(2)变址和指针寄存器变址和指针寄存器包括SI、DI、SP、BP 4个16位寄存器,主要用于存放某个存储单元的偏移地址。SI是源变址寄存器。DI是目的变址寄存器,在字符串操作中,SI和DI都具有自动增量或减量的功能。SP为堆栈指针寄存器,用于存放当前堆栈段中栈顶的偏移地址。BP为基址指针寄存器,用于存放堆栈段中某一存储单元的偏移地址。 2.段寄存器8086 CPU的4个16位的段寄存器分别称为代码段寄存器CS,数据段寄存器DS,堆栈段寄存器SS,附加数据段寄存器ES。段寄存器用来确定该段在内存中的起始地址。代码段用来存放程序的指令序列。CS存放代码段的段首址,指令指针寄存器IP指示代码段中指令的偏移地址。3.指令指针8086 CPU中的指令指针IP,它总是保存下一次将要从主存中取出指令的偏移地址,偏移地址的值为该指令到所在段段首址的字节距离。在目标程序运行时,IP的内容由微处理器硬件自动设置,程序不能直接访问IP,但一些指令却可改变IP的值,如转移指令、子程序调用指令等。3.1 标志寄存器8086 CPU中有一个很重要的16位标志寄存器,它包含9个标志位,主要用于保存一条指令执行后,CPU所处状态信息及运算结果的特征。 1>.条件标志 (1)进位标志CF(2)零标志ZF(3)符号标志SF(4)溢出标志 OF (5)奇偶标志 PF (6)辅助进位标志AF2>.状态控制标志 (1)方向标志DF(2)中断允许标志IF(3)追踪标志TF3》1.lea是送偏移量;到寄存器2.LDS是把一个32位的数,分别送到DS和BX中,LDS BX,list3.SAHF是把AH送到FLAGS的低八位中,HF是把FLAGS的低八位送到AH中5.XLAT是(查表转换指令)把BX+AL为偏移的字节指向的值传送到AL。DS位段偏移量。6.MOVSX(符号传送指令)8到16,把高8位全弄成符号位。7.MOVZX(领扩展指令)8到16,把高8位全弄成0;8.BSWAP(字节交换指令)特指32位的数。针对本个数。4》结果的特征将放在FLAGS中:1.CF:进位标志。2.PF:奇偶标志。3.AF:辅助进位标志。4.ZF:零
汇编语言学习笔记段寄存器
汇编语言学习笔记段寄存器
一、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,并将结果存储到内存中的蓝色内存空间,那么处理流程大致如下:
数据操作流程.png
1.CPU 首先会将红色内存空间中的值放到 AX 寄存器中(通用寄存器)中,即: mov
ax , 红色内存空间 (将右边边红色内存空间的值存到左边AX 中 )
《汇编语言程序设计》复习资料
《汇编语言程序设计》复习资料
一、基本概念
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个字节,又称为字;每个存储单元可以存放一个字节;一个字则占用两个存储单元,存放时要将低字节放在地址较小的存储单元中。
汇编语言存储及寄存器原理解析
汇编语⾔存储及寄存器原理解析
这篇⽂章主要介绍了汇编语⾔存储及寄存器原理解析,⽂中通过⽰例代码介绍的⾮常详细,对⼤家的学习或者⼯作具有⼀定的参考学习价值,需要的朋友可以参考下
⼀个16位寄存器可以存放⼀个字(16位)或者⼀个字节(8位),当存放⼀个字节的时候只需要⼀个内存单元(内存单元是以字节为单位的,8位),⽽存放⼀个字需要两个内存单元,这样存放⼀个字就需要两个连续的内存单元,这个16位的字,⾼位存放在⾼地址,低位存放在低地址。
内存地址内存数据
20H 1
4EH 2
12H 300H
对于字来说0就是低地址单元,1是⾼地址单元,则字型数据4E20H 的低地址位20存放在0号单元,⾼地址位4E 存放在⾼地址单元,因为它的起始地址为0,⼜可以称作0地址字单元。
通过前⾯学过的知识我们可以知道当CPU 想要对⼀个内存单元进⾏操作时,必须知道它的地址,要知道内存单元的地址就要知道它的段地址和偏移地址,在8086 CPU 中,DS 寄存器就是⽤来存放段地址的,执⾏指令的时候,CPU 会⾃动读取DS 中的数据为内存单元的段地址,使⽤[偏移地址]来表⽰偏移地址,假设DS 寄存器中此时存放的是1000H ,那么mov al,[0]就表⽰将10000H (物理地址=段地址x16+偏移地址)地址上存放的数据存到al 中。
如果想要修改DS 寄存器中的值,那么直接使⽤mov 指令将数字存到DS 寄存器中是不⾏的,只能先将值存到⼀个寄存器中,再使⽤mov 指令将这个寄存器中的值存到DS 中,例:
12
mov bx,1000H mov ds,bx
汇编入门 精髓(转)寄存器和寻址方式
一汇编入门精髓(转)寄存器和寻址方式
2010-03-20 13:01
寄存器和寻址方式
寄存器,在8086/8088里,有三组共13个16位寄存器.
寄存器,从名字上看,可以知道,它就象书店的行包寄存处,寄存器的名字就象寄存处发给用户取回自已物件的标志牌子,表示物件的存放地址.
寄存器的内部给构都相同,只不过是一个二字节或一字节的存储空间,别看他们小,作用可大了,所有电脑的运算,都要从他们过关,因为他们的处理速度快嘛.为了区分和准确运用,就要给他们进行科学的分组和起名.
第一组,数据寄存器,AX,BX,CX,DX.
其中,X表示一个未知数,那么这些寄存器都可以用来存放数据,ABCD,虽说都可以理解为一个顺序号,但是,A还是加法ADD的简称,所以AX叫累加器,B是基地址的简称,所以BX可以叫基地址寄存器,C是计数器的简称,所以CX可以叫做计数器.D是数据DATA的简称,所以DX可以叫数据寄存器.这四个寄存都可以按高八位和低八位分成两个寄存器:AH,AL,BH,BL,CH,CL,DH,DL.
第二组,地址指示和变址寄存器,SI,DI,BP,SP.
它们用来表示一个地址偏移,或用来表示一个地址的变化状况.
SI,DI都可以表示变址,在串操作中,SI和DI表示源和目的操作数的指示器,快速记忆方法:SI联想饮水思源的思(谐音SI),DI联想目的(谐音DI).
BP,SP的P表示堆栈专用,BP表示基地址专用,SP则是堆栈顶指示器.
其中,BP,SI,DI还可以兼作数据寄存器.SP则只能和堆栈绑定.
第三组,段寄存器,CS,SS,DS,ES.
汇编语言程序设计教程(第二版)习题参考答案
汇编语言程序设计教程(第二版)
习题参考答案
第1章计算机基础知识
1.计算机的应用分哪几个方面,请举例说明书中未提到的领域的计算机应用。
科学计算、数据处理、计算机控制、计算机辅助设计、人工智能、企业管理、家用电器、网络应用。
书中未提及的如:远程教育、住宅小区控制、飞行系统控制与管理等。
2.简述计算机的发展过程,请查阅相关资料,列出微机的发展过程。
电子管、晶体管、集成电路、大规模集成电路
以IBM为例,微机的发展:4004、8008、8080、8086/8088、80286、80386、80486、Pentium 系列
3.计算机的字长是怎么定义的,试举例说明。
计算机能同时处理二进制信息的位宽定义为计算机的字长。如8086能同时进行16位二进制数据的运算、存储和传输等操作,该机器的字长为16位。
4.汇编语言中的基本数据类型有哪些?
数值型数据和非数值型数据。非数值数据如字符、字符串、逻辑值等。
(1)7BCH=011110111100B=1980D
(2)562Q=101110010B=370D
(3)90D=01011010B=5AH
(4)1110100.111B=164.7Q=74.EH
30H~39H 41H~5AH 61H~7AH
9.在汇编语言中,如何表示二进制、八进制、十进制和十六进制的数值?
用相应进制的数值加上进制标记即可。
二进制用B,如10101010B
八进制用Q,如437Q。
十进制用D或不用,如54D,或54。
十六进制用H,如27A8H
10.完成下列二进制数的加减运算。
(1)10101010 + 11110000 (2)11001100 + 01010100
汇编语言之寄存器详解
汇编语⾔之寄存器详解
上图是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
作⽤:存放⼀般性的数据
传送指令:move
mov 转移指令,⼤部分的寄存器都可以⽤这个指令来改变其值。常⽤的有:不仅限于下⾯⼏种
1.move 某⼀个合法寄存器某⼀个合法寄存器
将⼀个寄存器的内容传送到另⼀个寄存器
⽐如:move 段寄存器(ds,cs),通⽤寄存器——段寄存器的值不能直接通过数据来设定
2.move 某⼀个合法寄存器数据
将数据直接传⼊寄存器
3.move 某⼀个合法寄存器 [内存单元的偏移地址]
将⼀个内存单元中的内容存⼊⼀个寄存器中,后⾯将DS寄存器的时候再讲。
汇编寄存器功能详解
汇编寄存器功能详解
汇编语言是一种底层语言,与计算机硬件直接交互。在汇编语言中,
寄存器是一组特殊的存储单元,用于暂时存储数据或指令。它们在处理器
中的位置较为接近,可以快速访问。在汇编语言中,寄存器被分为通用寄
存器、数据段寄存器、指令指针寄存器、标志寄存器等几个类别,每个寄
存器都有特定的功能。
一、通用寄存器
通用寄存器是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寄存器
汇编语言程序设计(第四版)第1~5章【课后答案】
第1章汇编语言基础知识
〔习题1.1〕简述计算机系统的硬件组成及各部分作用。
〔解答〕
CPU:包括运算器、控制器和寄存器组。运算器执行所有的算术和逻辑运算;控制器负责把指指令逐条从存储器中取出,经译码分析后向机器发出各种控制命令,并正确完成程序所要求的功能;寄存器组为处理单元提供所需要的数据。存储器:是计算机的记忆部件,它用来存放程序以及程序中所涉及的数据。
外部设备:实现人机交换和机间的通信。
〔习题1.2〕明确下列概念或符号:主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB。
〔解答〕
主存又称内存是主存储器的简称,主存储器存放当前正在执行的程序和使用的数据,CPU可以直接存取,它由半导体存储器芯片构成其成本高、容量小、但速度快。辅存是辅助存储器的简称,辅存可用来长期保存大量程序和数据,CPU 需要通过I/O接口访问,它由磁盘或光盘构成,其成本低、容量大,但速度慢。RAM是随机存取存储器的英语简写,由于CPU可以从RAM读信息,也可以向RAM写入信息,所以RAM也被称为读写存储器,RAM型半导体存储器可以按地址随机读写,但这类存储器在断电后不能保存信息;而ROM中的信息只能被读出,不能被修改,ROM型半导体通常只能被读出,但这类存储器断电后能保存信息。
存储器由大量存储单元组成。为了区别每个单元,我们将它们编号,于是,每个存储单元就有了一个存储地址,I/O接口是由一组寄存器组成,为了区别它们,各个寄存器进行了编号,形成I/O地址,通常称做I/O端口。
KB是千字节、MB是兆字节、GB是吉字节和TB是太字节,它们都是表示存储器存储单元的单位。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
80386控制寄存器和系统地址寄存器如下表所示。它们用于控制工作方式,控制分段管理机制及分页管理机制的实施。
控制寄存器CRx BIT31 BIT30—BIT12 BIT11—BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 CR0 PG 0000000000000000 ET TS EM MP PE CR1 保留
CR2 页故障线性地址
CR3 页目录表物理页码000000000000
BIT47—BIT16 BIT15—BIT
全局描述符表寄存器GDTR 基地址界限中断描述符表寄存器IDTR 基地址界限
BIT15—BIT0
局部描述符表寄存器LDTR 选择子任务状态段寄存器TR 选择子BIT31—BIT0 BIT31—BIT0 BIT11—BIT0 基地址界限属性
基地址界限属性
<一>控制寄存器
从上表可见,80386有四个32位的控制寄存器,分别命名位CR0、CR1、CR2和CR3。但CR1被保留,供今后开发的处理器使用,在80386中不能使用CR1,否则会引起无效指令操作异常。CR0包括指示处理器工作方式的控制位,包含启用和禁止分页管理机制的控制位,包含控制浮点协处理器操作的控制位。CR2及CR3由分页管理机制使用。CR0中的位5—位3 0及CR3中的位0至位11是保留位,这些位不能是随意值,必须为0。
控制寄存器CR0的低16位等同于80286的机器状态字MSW。
1.保护控制位
控制寄存器CR0中的位0用PE标记,位31用PG标记,这两个位控制分段和分页管理机制的操作,所以把它们称为保护控制位。PE控制分段管理机制。PE=0,处理器运行于实模式;PE=1,处理器运行于保护方式。PG控制分页管理机制。PG=0,禁用分页管理机制,此时分段管理机制产生的线性地址直接作为物理地址使用;PG=1,启用分页管理机制,此时线性地址经分页管理机制转换位物理地址。关于分页管理机制的具体介绍在后面的文章中进行。
下表列出了通过使用PE和PG位选择的处理器工作方式。由于只有在保护方式下才可启用分页机制,所以尽管两个位分别为0和1共可以有四种组合,但只有三种组合方式有效。
PE=0且PG=1是无效组合,因此,用PG 为1且PE 为0的值装入CR0寄存器将引起通用保护异常。
需要注意的是,PG 位的改变将使系统启用或禁用分页机制,因而只有当所执行的程序的代码和至少有一部分数据在线性地址空间和物理地址空间具有相同的地址的情况下,才能改变PG 位。
PG 和PE 位与处 理器工 作模式
PG P E 处理器工作方式
0 0 实模式 0 1 保护模式,禁用分页机制 1 0 非法组合 1 1 保护方式,启用分页机制
2.协处理器控制位
控制寄存器CR0中的位1—位4分别标记为MP(算术存在位)、EM(模拟位)、TS(任务切换位) 和ET(扩展类型位),它们控制浮点协处理器的操作。
当处理器复位时,ET 位被初始化,以指示系统中数字协处理器的类型。如果系统中存在 80387协处理器,那么ET 位置1;如果系统中存在80287协处理器或者不存在协处理器,那么ET 位清0。
EM 位控制浮点指令的执行是用软件模拟,还是由硬件执行。EM=0时,硬件控制浮点指令传送到协处理器;EM=1时,浮点指令由软件模拟。
TS 位用于加快任务的切换,通过在必要时才进行协处理器切换的方法实现这一目的。每当进行任务切换时,处理器把TS 置1。TS=1时,浮点指令将产生设备不可用(DNA)异常。 MP 位控制WAIT 指令在TS=1时,是否产生DNA 异常。MP=1和TS=1时,WAIT 产生异常;MP =0时,WAIT 指令忽略TS 条件,不产生异常。
3.CR2和CR3
控制寄存器CR2和CR3由分页管理机制使用。
CR2用于发生页异常时报告出错信息。当发生页异常时,处理器把引起页异常的线性地址保存在CR2中。操作系统中的页异常处理程序可以检查CR2的内容,从而查出线性地址空间中的哪一页引起本次异常。
CR3用于保存页目录表的其始物理地址。由于目录是页对齐的,所以仅高20位有效,低12 位保留未用。向CR3中装入一个新值时,低12位必须为0;但从CR3中取值时,低12位被忽略。每当用MOV 指令重置CR3的值时,会导致分页机制高速缓冲区的内容无效,用此方法,可以在启用分页机制之前,即把PG 位置1之前,预先刷新分页机制的高速缓存。C R3寄存器即使在CR0寄存器的PG 位或PE 位为0时也可装入,如在实模式下也可设置CR3,以便进行分页机制的初始化。在任务切换时,CR3要被改变,但是如果新任务中CR3的值与
原任务中CR3的值相同,那么处理器不刷新分页高速缓存,以便当任务共享也表时有较快的执行速度。
<二>系统地址寄存器
全局描述符表GDT、局部描述符表LDT和中断描述符表IDT等都是保护方式下非常重要的特殊段,它们包含有为段机制所用的重要表格。为了方便快速地定位这些段,处理器采用一些特殊的寄存器保存这些段的基地址和段界限。我们把这些特殊的寄存器称为系统地址寄存器。
1.全局描述符表寄存器GDTR
如本文开始处的表格所示,GDTR长48位,其中高32位为基地址,低16位为界限。由于GDT 不能有GDT本身之内的描述符进行描述定义,所以处理器采用GDTR为GDT这一特殊的系统段提供一个伪描述符。GDTR给定了GDT,如下图所示。
GDTR中的段界限以字节为单位。由于段选择子中只有13位作为描述符索引,而每个描述符长8个字节,所以用16位的界限足够。通常,对于含有N个描述符的描述符表的段界限设为8*N-1。
利用结构类型可定义伪描述符如下:
PDESC STRUC LIMIT DW 0 BASE DD 0 PDESC ENDS 2.局部描述符表寄存器LDTR
局部描述符表寄存器LDTR规定当前任务使用的局部描述符表LDT。如本文开始处的表格所示,LDTR类似于段寄存器,由程序员可见的16位的寄存器和程序员不可见的高速缓冲寄存器组成。实际上,每个任务的局部描述符表LDT作为系统的一个特殊段,由一个描述符描述。而用于描述符LDT的描述符存放在GDT中。在初始化或任务切换过程中,把描述符对应任务LDT的描述符的选择子装入LDTR,处理器根据装入LDTR可见部分的选择子,从GDT 中取出对应的描述符,并把LDT的基地址、界限和属性等信息保存到LDTR的不可见的高速缓冲寄存器中。随后对LDT的访问,就可根据保存在高速缓冲寄存器中的有关信息进行合法性检查。