ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

计算机中的数据存储

2021-08-25 02:32:12  阅读:439  来源: 互联网

标签:标志 存储 计算机 16 指令 寄存器 AX 数据 运算


计算机中的数据存储

汇编语言在处理数据时,必须准确指出数据存储的地方。计算机中可用于存储数据的装置有:CPU内部的寄存器;计算机的存储器;I/O端口(即I/O设备接口中的一些寄 存器)。

下面介绍8086系统的数据存储。

寄存器

图(8086的寄存器)所示为8086CPU中用于汇编语言程序设计的全部寄存器。根据用途不同,这些寄存器被分为三组:通用寄存器、专用寄存器和段寄存器。每个寄存器都有一个符号标志,作为寄存器的助记符。编程时,若所用数据存在某个寄存器中,就用其助记符来指出。

image

通用寄存器

通用寄存器用途多样,使用灵活,是编程时主要使用的寄存器。

AX寄存器

AX为16位寄存器,可以存放一个16位定点数,是使用最多的寄存器。AX在系统中有特殊的地位,称为16位累加寄存器,一些指令指定用AX存储数据。合理使用AX,还可以有效提高一些指令的时、空效率。

AX还可以分解为两个8位寄存器AH和AL。AH和AL可以作为独立的8位寄存器使用,也可以组合成16位的AX使用(AH为高8位,AL为低8位)。例如,若(AX)= 458EH,则(AH)= 45H,(AL) = 8EH。

在处理8位数据时,AL具有与AX类似的地位,称为8位累加寄存器。

BX、CX、DX寄存器

这三个寄存器也都是16位寄存器,也都能分解为两个8位寄存器使用(如图8086的寄存器所示)。

image

它们与AX有着相同的基本用途,但也有各自的独特用法,如BX中的内容可被用来生成一个存储器地址,以便据此访问存储器;CX在一些指令中被指定作为计数器使用;DX则在某些指令中被指定与AX配合,存储一个32位数。

BP寄存器

BP是不能分解的16位寄存器,可以存放一个16位数据,其所存内容也可用来生成一个存储器地址,并据此访问存储器。

SI和DI寄存器

这两个寄存器也都是不能分解的16位寄存器,其基本用途与BP相似,且在某些指令中被指定使用。

专用寄存器

这几个专用寄存器都有专一的用途,不可挪作他用。

SP寄存器

SP也叫堆栈指针,是一个16位寄存器,存放的是堆栈栈顶的地址,其内容将随着进栈和出栈操作而动态改变。

IP寄存器

IP也叫指令指针,是一个16位计数寄存器,用来提供下一条要执行的指令的地址。CPU就是根据IP提供的指令地址,到存储器中取出要执行的指令,并执行该指令的。一 条指令被取出后,CPU会修改IP中的地址,使其指向下一条指令......如此进行下去,CPU就能把整个程序全部执行完。

在汇编语言中,不能显式使用IP,只有控制程序执行流程的一类指令(程序控制类指令)能够隐式修改IP中的内容。

FLAGS寄存器

FLAGS为16位寄存器,是CPU中的状态标志寄存器。8086系统使用该寄存器中的9位,记录了9种状态标志,如图(8086的FLAGS)所示。

image

这些状态标志可分为两大类:条件标志和控制标志。

条件标志

条件标志记录运算所产生的一些状态,程序中可以根据这些状态决定后续的操作。也就是说,条件标志是用来决定程序后续操作的条件。FLAGS中的条件标志有6个。

  1. CF标志(进位/借位标志):主要用于记录加、减运算时,最高位上产生的进位或借位状态。CF=0,无进位或借位;CF=1,有进位或借位。
  2. AF标志(辅助进位/借位标志):用于记录加、减运算时,第3位上产生的进位或借位状态。AF=0,无进位或借位;AF=1,有进位或借位。
  3. ZF标志(零标志):用于记录运算结果是否为0。ZF=0,运算结果不为0;ZF=1, 运算结果为0。
  4. SF标志(符号标志):用于记录运算结果的符号位(或最高位)状态。SF=0,符号位为0(表示正号);SF=1,符号位为1(表示负号)。该标志主要用于带符号数(补码)运算。
  5. OF标志(溢出标志):主要用于记录带符号数(补码)加、减运算时的溢出状态。OF=0,无溢出;OF=1,有溢出。
  6. PF标志(奇偶标志):用于记录运算结果的低8位中,“1”的个数是奇数个还是偶数个。PF=0,奇数个1;PF=1,偶数个1。该标志用于对数据进行奇偶校验。
分析以下加法运算后,各条件标志的状态
    0 1 0 1 0 1 1 0
+	1 0 1 1 Q 1 1 1
--------------------
[1] 0 0 0 0 1 1 0 1

分析:由运算结果可知,最高位上产生了进位[1],因此CF=1 (在计算机中,该进位不被纳入运算结果,而是记录在CF标志位上,如后续运算需要此进位,可从CF取得);由 式中可知,第3位(式中带下画线的位)未产生进位,故AF=0;运算结果(排除最高位的进位,下同)不为0,所以ZF=0;运算结果中的最高位(对带符号数而言,为符号位)为0,故SF=0;如将式中两数视为带符号数的补码,则为异号数相加,其和不会溢出,所以OF=0;运算结果的8位二进制数中,共有3个1,3为奇数,故PF=0。

控制标志

控制标志用于对CPU的某些工作方式进行控制,可通过专门的指令对其进行设置。FLAGS中的控制标志有3个。

  1. DF标志(方向标志):用于在字符串操作时,控制串指针的修改方向。DF=O,增量修改;DF=1,减量修改。
  2. IF标志(中断标志):用于决定是否允许CPU响应外部的可屏蔽中断请求。IF=O,禁止响应;IF=1,允许响应。
  3. TF标志(陷阱标志):用于决定CPU是否以单步(也称单步陷阱)方式工作。TF=0,禁止单步方式;TF=1,允许单步方式。单步方式用于程序调试。在此方式下,CPU每执行完一条指令就会产生单步陷阱,暂停后续指令的执行。调试人员可以在此检查程序的执行状况是否正常,以便发现和排除程序中的错误。

段寄存器

8086系统由于硬件条件的限制,对存储器的使用釆取分段模式。此模式下,存储器地址分成段地址和段内偏移地址两部分表示。段寄存器就是专门用来存放段地址的寄存器。

8086系统中,一个汇编语言程序最多可以同时操作4个活跃的段,所以共设有4个段寄存器,均为16位寄存器。

CS寄存器

CS是代码段寄存器,存放代码段的段地址。代码段是存储程序中指令代码的段。

DS寄存器

DS是数据段寄存器,存放数据段的段地址。数据段是存储程序中定义的各种变量的段。

ES寄存器

ES是附加段寄存器,存放附加数据段的段地址。当一个数据段的存储空间不够用时,可以定义附加数据段。

SS寄存器

SS是堆栈段寄存器,存放堆栈段的段地址。堆栈段是在程序中作为堆栈使用的存储段。

标签:标志,存储,计算机,16,指令,寄存器,AX,数据,运算
来源: https://www.cnblogs.com/Huang-zihan/p/15183227.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有