`
444878909
  • 浏览: 639609 次
文章分类
社区版块
存档分类
最新评论

8086 寄存器

 
阅读更多

链接:http://www.cnblogs.com/BoyXiao/archive/2010/11/20/1882716.html

博主写的很好,看完之后绝对可以明了的。自己也做一个笔记,算是精简版本的。


8086 CPU 中寄存器总共为 14 个,且均为 16 位 。

AX,BX,CX,DX,SP,BP,SI,DI,IP,FLAG,CS,DS,SS,ES共 14 个。

而这 14 个寄存器按照一定方式又分为了通用寄存器,控制寄存器和段寄存器。

通用寄存器:

AX,BX,CX,DX 称作为数据寄存器:

AX (Accumulator):累加寄存器,也称之为累加器;

BX (Base):基地址寄存器;

CX (Count):计数器寄存器;

DX (Data):数据寄存器;

SP 和 BP 又称作为指针寄存器:

SP (Stack Pointer):堆栈指针寄存器;

BP (Base Pointer):基指针寄存器;

SI 和 DI 又称作为变址寄存器:

SI (Source Index):源变址寄存器;

DI (Destination Index):目的变址寄存器;

控制寄存器:

IP (Instruction Pointer):指令指针寄存器;

FLAG:标志寄存器;

段寄存器:

CS (Code Segment):代码段寄存器;

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

SS (Stack Segment):堆栈段寄存器;

ES (Extra Segment):附加段寄存器;




通用寄存器的使用方式比较简单。

所以主要记录段寄存器的组合使用方式:

CS 寄存器 和 IP 寄存器:

经过前面对段的介绍,相信各位朋友对段寄存器应该也有一定的了解了,

下面将要介绍的是一组非常非常重要的寄存器,即 CS:IP 。

CS:IP 两个寄存器指示了 CPU 当前将要读取的指令的地址,其中 CS 为代码段寄存器,而 IP 为指令指针寄存器 。

也就是说,当一个可执行文件加载到内存中以后,CS:IP 两个寄存器便指向了这个可执行文件的起始地址,

然后 CPU 就可以从这个起始地址开始往下读取指令,

当读取完指令后,CS:IP 将会自动的改变,基本上是改变 IP ,从而指向下一条要读取的指令,这样就可以执行这个可执行文件了

最后再对 CS:IP 总结一下:

  1. 你想让 CPU 执行哪行指令,你就让 CS:IP 指向保存有指令的那块内存即可。
  2. 任何时候,CS:IP 指向的地址中的内容都是 CPU 当前执行的指令。
SS 寄存器和 SP 寄存器:

记住,在任何时刻,SS:SP 都是指向栈顶元素 。

其实关于栈的使用还是比较简单的,但是要注意的是 8086 CPU 并不会保证我们对栈的操作会不会越界 。

所以我们在使用栈的时候需要特别注意栈的越界问题 。

当使用PUSH指令向栈中压入 1 个字节单元时,SP = SP - 1;即栈顶元素会发生变化;

而当使用PUSH指令向栈中压入 2 个字节的字单元时,SP = SP – 2 ;即栈顶元素也要发生变化;

当使用POP指令从栈中弹出 1 个字节单元时, SP = SP + 1;即栈顶元素会发生变化;

当使用POP指令从栈中弹出 2 个字节单元的字单元时, SP = SP + 2 ;即栈顶元素会发生变化;

DS 寄存器和 ES 寄存器:

DS(Data Segment):很显然,DS 中存放的是数据段的段地址 。

但是这里不得不再点一下,那就是我们对段的支持是在 CPU 上体现的,而不是在内存中实现了段,

所以事实上我们使用的段其实是一个逻辑概念,即是我们自己定义的,

再说白了,我定义一个段,我说它是数据段那它就是数据段,我说它是代码段那么它就是代码段,

它们其实都是一块连续的内存而已,至于为什么要区分为数据段和代码段,

很明显,是用来给我们编程提供方便的,即我们在自己的思想上或者说是编码习惯上规定,

数据放数据段中,代码放代码段中 。而我们在使用数据段的时候,为了方便或者说是代码的编写方便起见,

我们一般把数据段的段地址放在 DS 寄存器中,当然,如果你硬要觉得 DS 不顺眼,那你可以换个 ES 也是一样的,

至于 ES(Extra Segment) 段寄存器的话,自然,是一个附加段寄存器,如果再说得过分点,

就当它是个扩展吧,当你发现,你几个段寄存器不够用的时候,你可以考虑使用 ES 段寄存器,

一个代码实例:

ASSUME CS:CODES

CODES SEGMENT
   
START:

    MOV AX,1000H
    MOV DS,AX
    MOV AL,1
    MOV BX,0
    
    MOV CX,5			;设计一个循环,让其循环 5 次
    s: MOV [BX],AL		;这里 [BX] 并没有指定段地址哦
       INC AL
       INC BX
       LOOP s            
    
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

没有指定[BX]的段地址,每次执行的时候,CPU会主动从DS中获得一个段地址。

最后还提醒一点,那就是 8086 CPU 不支持直接将一个数据送入段寄存器中,

也就是下面的做法是错误的:

MOV DS,1000H

标志寄存器(FLAG):

FLAG 寄存器中存储的信息通常又被称作程序状态字(PSW)

下面我给出一幅 FLAG 寄存器中各个位的示意图:


CF(Carry FLag) - 进位标志(第 0 位):

CF: 进位标志是用来反映计算时是否产生了由低位向高位的进位,或者产生了从高位到低位的借位 。

PF(Parity FLag) - 奇偶标志(第 2 位):

PF: 奇偶标志是用来记录相关指令执行后,其结果的所有的 Bit 位中 1 的个数是否为偶数 。

AF(Auxiliary Carry FLag) - 辅助进位标志(第 4 位):

AF: 用来辅助进位标志 。

ZF(Zero FLag) – 零标志(第 6 位):

ZF: 记录的是相关的指令执行完毕后,其执行的结果是否为 0 。

SF(Sign FLag) - 符号标志(第 7 位):

SF: 符号标志,其记录相关指令执行完以后,其结果是否为负数 。

TF(Trap FLag) - 追踪标志(第 8 位):

TF: 追踪标志,主要是用于调试时使用 。

IF(Interrupt-Enable FLag) - 中断允许标志(第 9 位):

IF: 中断允许标志,其决定 CPU 是否能够响应外部可屏蔽中断请求(以后会做详细介绍) 。

DF(Direction FLag) - 方向标志(第 10 位):

DF: 方向标志,其用于在串处理指令中,用来控制每次操作后 SI 和 DI 是自增还是自减 。

OF(OverFlow FLag) - 溢出标志(第 11 位):

OF: 溢出标志,其通常记录了有符号数运算的结果是否发生了溢出 。





分享到:
评论

相关推荐

    8086寄存器编码表

    汇编语言的编码表,AX,BX CX,等等

    8086 CPU 寄存器简介

    用简洁生动的语言,讲解了8086寄存器的作用和功能。通俗易懂,很容易入门。

    汇编语言8086寄存器课件

    该文档详细介绍了汇编语言,8086系统的工作原理,有助于同学们理解

    一个基于proteus的8086操作寄存器仿真实验

    一个基于proteus的8086操作寄存器仿真实验,汇编程序用emu8086写的

    8086cpu寄存器详解.doc

    通用寄存器 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位 控制寄存器...

    8086_8088 CPU的内部寄存器.png

    整理8086/8088 CPU的各内部寄存器的关系,方便记忆和理解,形成自己的思维导图

    论 8086CPU 寄存器表示范围.docx

    在8086中一种解决方案解决当两个数相加的范围超出一个寄存器存储表示的范围时,表示出结果,对案例代码进行逐条语句运行分析观察,对8086CPU寄存器的表示范围,和对汇编add指令以及sub指令的运算规则进行阐述

    8086通用寄存器组[借鉴].pdf

    8086通用寄存器组[借鉴].pdf

    8086语言编汇寄存器详解

    (1) 数据传送指令。 (2) 算术运算指令。 (3) 逻辑运算指令。 (4) 串操作指令。 (5) 控制转移指令。 (6) 处理器控制指令。 (7) 保护方式指令。

    8086CPU的寄存器以及用途

    8086CPU的寄存器以及用途,介绍了内部结构以及各个寄存器的用途,对于深入理解计算机有很大的帮助。

    IA32寄存器简介

    intel IA32寄存器简介 IA32 作为 80x86 系列中的一员,必须保证向后兼容,也就是说,既要支持 16 位的处 理器,也要支持 32 位的... 在 8086 中,所有的寄存器都是 16 位的,下面我们来看一 下 IA32 中寄存器有何变化

    编程高手箴言(推荐)

    2.2.2 8086寄存器组成 25 2.2.3 内存的寻址 26 2.2.4 中断处理 27 2.3 32位微处理器 29 2.3.1 寄存器组成 29 2.3.2 保护模式 32 2.3.3 80386的寻址方式 32 2.4 【实例】:在DOS实模式下读取4GB内存代码分析 36 2.4.1...

    编程高手箴言(中文完整版)(13M)

    2.2.2 8086寄存器组成 25 2.2.3 内存的寻址 26 2.2.4 中断处理 27 2.3 32位微处理器 29 2.3.1 寄存器组成 29 2.3.2 保护模式 32 2.3.3 80386的寻址方式 32 2.4 【实例】:在DOS实模式下读取4GB内存代码分析 36 2.4.1...

    微机学习要求答案

    3、掌握8086的寄存器及其使用方法,注意AX、BX、CX、DX可以作为8位寄存器使用; 4、8086的标志寄存器有哪些状态标志位?各个标志位在什么情况下置位?注意数据传送指令不影响标志寄存器(除了向标志寄存器传送指令)...

    计算机系统基础 8086 cpu为例指令系统与寄存器部分思维导图

    思维导图 指令系统与寄存器部分思维导图 免费 需要下载xmind软件作为支持

    微机原理与接口第3章1—8086微处理器内部及寄存器结构

    微机原理与接口第3章1—8086微处理器内部及寄存器结构

    8086处理器的汇编级的指令模拟器的集成环境(含汇编器)emu8086

    8086处理器的汇编级的指令模拟器的集成环境(含汇编器)emu8086 ,可以模拟8086处理器的运行,可以单步调试,显示寄存器,内存,堆栈,变量,标志器的状态,是学习8086处理器的好帮手。

    8086CPU内部结构图.gif

    8086拥有四个16位的通用寄存器,也能够当作八个8位寄存器来存取,以及四个16位索引寄存器(包含了堆栈指标)。资料寄存器通常由指令隐含地使用,针对暂存值需要复杂的寄存器配置。它提供64K 8 位元的输出输入(或32K...

    cr0是系统内的控制寄存器之一

    但没有在文档中说明),cr2在处理器处于保护模式时存储上一个导致页故障的地址,cr3存储页目录的地址,cr4在Pentium系列(包括486的后期版本)处理器中才实现,它处理的事务包括诸如何时启用虚拟8086模式等。

Global site tag (gtag.js) - Google Analytics