关于寄存器的总结

本章学习围绕寄存器展开,学习了CPU概述、通用寄存器、字在寄存器中的存放、汇编指令: mov, add、8086给出物理地址的方法、段寄存器CS和指令指针寄存器IP这几个知识点。以下我便逐个写出我认为该知识点中的值得注意的地方。

1、CPU中有字长与位宽两个概念,字长表示CPU在单位时间内能一次处理的二进制位数。该指标反映出CPU内部运算处理的速度。位宽表示CPU通过外部数据总线与内存之间一次能够传送的数据位。我们常说的x位寄存器其实指的便是CPU的字长。

2、8086CPU的14个寄存器中只有AX、BX、CX、DX这四个通用寄存器可拆分为高八位和低八位两个寄存器.。

3、在mov和add指令中,两个操作对象的位数应一致。也就是说执行指令之前数据位数不可高于寄存器位数,而执行指令之后可以(高于部分将被舍去)。如add 案例,100H便是一条错误的语句。

4、每一个内存单元在这个空间中都有唯一的地址,这个唯一的地址称为物理地址。而8086结构表现物理地址时会出现障碍,因为8086内部的寄存器都是16位的,而外部地址总线宽度为20位。也就是说8086存只能存16位(64KB),传却能传20位(1MB)。为了解决这一问题8086CPU采用了用两个16位地址合成一个20位的物理地址的方法,方法公式如下:

基础地址(段地址*16)+偏移地址=物理地址

值得注意的是,段只是一个逻辑上的概念,同一个物理地址可以拆分为多个不同的段地址和偏移地址的组合,可以根据需要,将地址连续、起始物理地址为16倍数的一组内存单元(不超过64KB)当作一个段使用。

5、段地址*16还有一个更常用的说法是左移四位,此处的位数指的是二进制位数。一个数值的二进制形式左移N位,相当于该数据乘以2的N次方。一个X进制的数据左移1位,相当于乘以X。故而二进制左移4位其实就是十六进制左移一位。举例:20H的数据乘以16后便会变成200H。

6、CS是代码段段寄存器,用于存放代码段的段地址。IP是指令指针寄存器,用于存放CPU将要读取的指令在代码段中的偏移地址。CS:IP对应的物理地址存放的是CPU将要读取的指令。CS和IP在总是成对出现,(CS) × 16 + (IP)  = 指令的物理地址

7、计算机的工作过程有如下三个步骤:

第1步: CPU基于CS:IP,计算出物理地址,然后到相应的内存单元读取指令,送到指令缓冲区。

第2步: CPU自动修改IP的值,IP = IP + 所读取指令的长度,从而为下一条指令读取做准备;

第3步: 执行指令。 转第1步,重复此过程。

8、在CPU刚开始工作时,CS和IP被设置为CS=FFFFH,IP=0000H。若需指定CS和IP的值,则用指令cmp修改其二者内容。

(1) 同时修改CS、IP的内容:jmp   段地址: 偏移地址

(2) 只修改IP的内容:jmp   某一合法寄存器(注意此处需要用一寄存器来对IP赋值,不可直接将数据传给IP)

关于课前做的quit我有一个小提议,希望能多给我们一些时间。每次做题总感觉很仓促,来不及思考便要开始下一题,导致很多会做的题目做错。

原文地址:https://www.cnblogs.com/wlxnw/p/9785663.html

时间: 2024-11-09 06:16:02

关于寄存器的总结的相关文章

ARM寄存器

ARM寄存器 一.ARM工作状态下的寄存器组织 ARM微处理器共有37个32位寄存器,其中31个为通用寄存器,6个位状态寄存器.但是这些寄存器不能被同时访问,具体哪些寄存器是可以访问的,取决ARM处理器的工作状态及具体的运行模式.但在任何时候,通用寄存器R14~R0.程序计数器PC(即R15).一个状态寄存器都是可访问的. 通用寄存器通用寄存器包括R0~R15,可以分为3类:(1)未分组寄存器R0~R7(2)分组寄存器R8~R14(3)程序计数器PC(R15) 1.未分组寄存器R0~R7在所有运

kobox : dma_s3c.ko -v1 操作寄存器方式操作S3C2440的DMA

平台:TQ2440 linux版本:Linux EmbedSky 3.16.1-svn57 #56 Sat Oct 18 21:46:22 PDT 2014 armv4tl GNU/Linux 目标:v2中改成s3c2410_dma_xxx方式来操作DMA,看这里的寄存器映射是怎么使用系统接口来操作的! #include "dma.h" #define MEM_CPY_NO_DMA 0 #define MEM_CPY_DMA 1 //#define BUF_SIZE (512*1024

寄存器调试 (2):应用层通过C代码访问(待完善)

除了前面所述通过shell命令访问寄存器外, 还支持通过C代码访问. 驱动层通过注册miscdevice设备, 实现了对应用层open/write/read等标准api的支持. static DEVICE_ATTR(dump, 0644, misc_dump_show, misc_dump_store); static DEVICE_ATTR(compare, 0644, misc_compare_show, misc_compare_store); static DEVICE_ATTR(wri

x64 寄存器使用

http://blog.csdn.net/cosmoslife/article/details/8771773 http://blog.csdn.net/herx1/article/details/3134889 x64 结构提供了 16 个通用寄存器(以后称为整数寄存器),以及 16 个可供浮点使用的 XMM 寄存器.易失寄存器是由调用方假想的临时寄存器,并要在调用过程中销毁.非易失寄存器需要在整个函数调用过程中保留其值,并且一旦使用,则必须由被调用方保存. 下表说明了每种寄存器在整个函数调用

STM32 寄存器库和固件库

寄存器和固件库开发的差别和联系 固件库就是函数的集合,固件库函数的作用是向下负责与寄存器直接打交道.向上提供用户函数调用的接口(API). 在 51 的开发中我们经常的作法是直接操作寄存器,比方要控制某些 IO 口的状态,我们直 接操作寄存器: P0=0x11; 而在 STM32 的开发中,我们相同能够操作寄存器: GPIOx->BRR = 0x0011; 这样的方法当然能够,可是这样的方法的劣势是你须要去掌握每一个寄存器的使用方法.你才干正确使用 STM32,而对于 STM32 这样的级别的

被遗忘的寄存器

CPU 里有一种名为寄存器的存储电路, 相当于机器语言中的变量. 具有代表性的寄存器有以下 8 个. 各个寄存器本来都是有名字的, 但现在知道这些名字的机会已经不多了, 所以在这里顺便介绍下. AX accumulator, 累加寄存器 CX counter, 计数寄存器 DX data, 数据寄存器 BX base, 基址寄存器 SP stack pointer, 栈指针寄存器 BP base pointer, 基址指针寄存器 SI source index, 源变址寄存器 DI destin

寄存器

寄存器 多个数连加,除了一开始,以后每次都有一个中间结果参与计算,这就需要一个保存中间结果的寄存器.一个触发器可以保存一个比特.一个寄存器通常由好多个边沿D触发器组成.如下图这个寄存器包含了5个上升沿D触发器,所有能用来保存一个5比特长的二进制数. 不管一个二进制数包含多少个比特,要保存它,只需要把每一个比特都保存起来即可.所有的触发器CP端都连在一起,这样就可以接收同一个控制命令.一旦"保存"开关按下,在CP脉冲的上升沿,所有触发器同时开始干活,二进制数的每一位都在同一时间被保存起来

[转载]ARM协处理器CP15寄存器详解

用于系统存储管理的协处理器CP15  原地址:http://blog.csdn.net/gameit/article/details/13169405 MCR{cond}     coproc,opcode1,Rd,CRn,CRm,opcode2 MRC {cond}    coproc,opcode1,Rd,CRn,CRm,opcode2 coproc         指令操作的协处理器名.标准名为pn,n,为0~15 opcode1      协处理器的特定操作码. 对于CP15寄存器来说,

ARM处理器寄存器

参考:ARM Architecture Reference Manual的39页 1.ARM处理器寄存器纵览 ARM微处理器共有37个32位寄存器,其中31个为通用寄存器(R13和R13_svc不是同一个寄存器),6个为状态寄存器.但是这些寄存器不能被同时访问,具体哪些寄存器是可以访问的,取决ARM处理器的工作状态及具体的运行模式.但在任何时候,通用寄存器R14-R0.程序计数器PC.一个状态寄存器都是可访问的. 1.1.通用寄存器     R0-R15     R13_svc.R14_svc

单片机特殊功能寄存器(SFR)

单片机如8051有21个SFR,地址为80H~0FFH的128个字节中,可以直接用寻址方式来操作SFR.(类似于sbit) 为了能直接访问这些SFR,keil提供饿了一种自汉族形式的定义方法.这种方法只适用于8051系列单片机进行C编程. 方法:引入关键字“sfr”,语法为:sfr sfr_name=int address 如:sfr SCON=0x98: sfr TMOD=0x89: 具体值应该参照SFR表. 关于sbit的使用有三种方式: 1.sfr PSW=0xD0://   sbit O