汇编语言--寄存器(cpu工作原理)

本文地址:http://www.cnblogs.com/archimedes/p/assembly-register.html,转载请注明源地址。

本文主要将介绍的是8086 CPU中的寄存器,

寄存器就是个存储信息的单元或者说是器件又或者说是容器而已,就比如内存也是一个存储介质或者说是存储单元而已,其实寄存器从理解上来说和内存差不多,

只不过寄存器(这里讨论的寄存器都是 CPU 中的寄存器,不包括外设上的寄存器)位于CPU内部,寄存器是 CPU 中的稀有资源,而对于一个汇编程序员来说,CPU 中主要可以使用的也就是寄存器而已,汇编程序员可以使用指令来读写 CPU 中的寄存器,从而可以实现对于 CPU 的控制,当然,不同的 CPU ,寄存器的个数和结构都是不一样的,比如 8086 CPU 中,寄存器的个数也就 14 个而已,并且 8086 CPU 中所有的寄存器的结构为 16 位,即一个寄存器中可以存放下2B即2个字节,而到了 80386 CPU 中,寄存器的个数也比 8086 增多了。

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):附加段寄存器;

通用寄存器

从上面可以知道,在 8086 CPU 中,通用寄存器有 8 个,分别是 AX,BX,CX,DX,SP,BP,SI,DI ,

至于为什么给它们取名做通用寄存器,那是因为,这些个寄存器每一个都有自己专门的用途,

比如 CX 作为计数寄存器,则是在使用 LOOP 指令循环时用来指定循环次数的寄存器,

如果它们每一个都只有一个专用的作用,那就它们只能称之为专用寄存器了,

正是因为这些个寄存器还可以用来传送数据和暂存数据,所以才称它们为通用寄存器 。

下面就按顺序来一一介绍这几个通用寄存器了:

数据寄存器(AX,BX,CX,DX):

数据寄存器有 AX,BX,CX,DX 四个组成,由于在 8086 之前的 CPU 为 8 位 CPU,所以为了兼容以前的 8 位程序,在 8086 CPU 中,每一个数据寄存器都可以当做两个单独的寄存器来使用,由此,每一个 16 位寄存器就可以当做 2 个独立的 8 位寄存器来使用了 。

AX 寄存器可以分为两个独立的 8 位的 AH 和 AL 寄存器;

BX 寄存器可以分为两个独立的 8 位的 BH 和 BL 寄存器;

CX 寄存器可以分为两个独立的 8 位的 CH 和 CL 寄存器;

DX 寄存器可以分为两个独立的 8 位的 DH 和 DL 寄存器;

除了上面 4 个数据寄存器以外,其他寄存器均不可以分为两个独立的 8 位寄存器 ;

注意在上面标志中的“独立”二字,这两个字表明 AH 和 AL 作为 8 位寄存器使用时,

可以看做它们是互不相关的,也就是看做两个完全没有联系的寄存器 X 和 Y 即可,

AX 寄存器:

AX 的另外一个名字叫做累加寄存器或者简称为累加器,其可以分为 2 个独立的 8 位寄存器 AH 和 AL;在写汇编程序时,AX 寄存器可以说是使用率最高的寄存器,

既然 AX 是数据寄存器的话,那么理所当然,其可以用来存放普通的数据。

BX 寄存器:

首先可以明确的是,BX 作为数据寄存器,表明其是可以暂存一般的数据,除了暂存一般性数据的功能外,BX 作为通用寄存器的一种,BX 主要还是用于其专属功能 – 寻址(寻址物理内存地址)上,BX 寄存器中存放的数据一般是用来作为偏移地址使用的。

CX 寄存器:

CX 寄存器作为数据寄存器的一种,其同样具有和 AX,BX 一样的特点,即可以暂存一般性的数据,CX 也是有其专门的用途的,CX 中的 C 被翻译为 Counting 也就是计数器的功能,当在汇编指令中使用循环 LOOP 指令时,可以通过 CX 来指定需要循环的次数,而 CPU 在每一次执行 LOOP 指令的时候,都会做两件事:

一件就是令 CX = CX – 1,即令 CX 计数器自动减去 1;还有一件就是判断 CX 中的值,如果 CX 中的值为 0 则会跳出循环,而继续执行循环下面的指令,

当然如果 CX 中的值不为 0 ,则会继续执行循环中所指定的指令 。

DX 寄存器:

DX 寄存器作为数据寄存器的一种,同样具有和 AX,BX,CX 一样的特点,即可以暂存一般性的数据

8086 CPU访问物理地址的方法

8086相关部件的逻辑结构:

地址加法器采用:物理地址=段地址 * 16 + 偏移地址 的方法计算物理地址

8086cpu的工作过程可以简单描述如下:

(1)从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器

(2)IP=IP+所读的指令的长度,从而指向下一条指令

(3)执行指令,转到步骤(1),重复这个过程

实验

查看cpu和内存,用机器指令和汇编指令编程

1、预备知识-Debug的使用

Debug是一个DOS实用程序,是供程序员使用的程序调试工具,可以用它检查内存中任何地方的字节以及修改任何地方的字节。它可以用于逐指令执行某个程序以验证程序运行的正确性,也可以追踪执行过程、比较一个指令执行前后的值以及比较与移动内存中数据的范围,读写文件与磁盘扇区。

debug的命令较多,有20多个,这里将使用到的一些Debug命令的解释如下:

-R:查看、改变CPU寄存器的内容

-D:查看内存中的内容

-E:改写内存中的内容

-U:将内存中的机器指令翻译成汇编指令

-T:执行一条机器指令

-A:以汇编指令的格式在内存中写入一条机器指令

在【开始】菜单中的【运行】对话框,输入"cmd"回车,可以使用ALT+ENTER将窗口转变为全屏

输入debug命令

(1)使用R命令查看、改变CPU寄存器的内容

注意CS和IP的值,CS=1388,IP=0100,即内存1388:0100处的指令为CPU当前要读取、执行的指令

(2)使用D命令查看内存中的内容

d 段地址:偏移地址  debug将列出从指定内存单元开始的128个内存单元的内容

还可以用指定D命令的查看范围,此时采用"d段地址:起始偏移地址 结尾偏移地址"的格式

比如要看1000:0--1000:9中的内容

(3)使用E命令改写内存中的内容

用E命令向内存中写入机器码:

用U命令查看内存中机器码的含义:

用T命令执行内存中的机器码:

使用t命令继续执行:

用A命令在内存中写入机器指令:

上面使用E命令写入机器指令,不是很方便,最好能直接以汇编指令的形式写入指令,于是出现了下面的A命令:

用A命令向从1000:0开始的内存单元中写入指令

实验任务

(1)使用debug,将下面的程序段写入内存,逐条执行,观察每条指令执行后,CPU中相关寄存器中内容的变化

参考资料

《汇编语言》--王爽

时间: 2024-07-30 03:22:22

汇编语言--寄存器(cpu工作原理)的相关文章

汇编学习笔记02(寄存器CPU工作原理)

1. 什么是寄存器呢? 就是可以用指令进行读写的部件. 程序员通过改变各种寄存器中的内容实现对CPU的控制. 如果是16位CPU的话, 就是相当于2个存储单元. 2. 字在寄存器中的存储? 8086CPU可以一次性处理两种尺寸的数据 Byte: 字节型数据, 一个字节由8个bit组成, 可以存在8位寄存器中. Word: 字型数据, 一个字型由16个bit组成, 也就是两个字节, 称为这个字的高位字节和低位字节. 3. 常用汇编指令的学习(需要注意的是汇编指令是不区分大小写的) mov ax,

计算机原理学习(1)-- 冯诺依曼体系和CPU工作原理

前言 对于我们80后来说,最早接触计算机应该是在95年左右,那个时候最流行的一个词语是多媒体. 依旧记得当时在同学家看同学输入几个DOS命令就成功的打开了一个游戏,当时实在是佩服的五体投地.因为对我来说,屏幕上的东西简直就是天书.有了计算机我们生活发生了巨大的变化,打游戏,上网,聊天,甚至到现在以此为业.有时无不感叹计算机的强大. 人类总是聪明的而又懒惰的.即便是1+1这种简单的计算都不想自己做,1623年Wilhelm Schickard 制作了一个能进行六位以内数加减法,并能通过铃声输出答案

cpu工作原理

众所周知,CPU是电脑的“心脏”,是整个微机系统的核心,因此,它也往往成了各种档次微机的代名词,如昔日的286.386.486,奔腾.PII.K6到今天的PIII.P4.K7等.回顾CPU发展历史,CPU在制造技术上已经获得了极大的提高,主要表现在集成的电子元件越来越多,从开始集成几千个晶体管,到现在的几百万.几千万个晶体管,这么多晶体管,它们是如果处理数据的呢? ◆ CPU的原始工作模式在了解CPU工作原理之前,我们先简单谈谈CPU是如何生产出来的.CPU是在特别纯净的硅材料上制造的.一个CP

不懂CPU工作原理又如何 ---CSDN

近日,一位i而来自BBC的软件工程师Daniel Harper 从浅入深,分享了以代码的方式来实现CPU所有功能的可行性,希望对大家了解计算机的内容原理有所帮助. 以下为译文: 几个月前,我突然意识到自己并补真正理解计算机内部的工作原理.我仍然不明白现代计算机具体是怎么工作的. 然而,我读了J.Clark Scott 撰写的一本叫<<But  How Do It Know?>>  的书,书中描述了一个简单8位计算机,从与非门(NAND gate)  到寄存器.RAM.CPU.ALU

汇编学习-第二章(CPU工作原理)

1.逻辑地址与物理地址 逻辑地址:人为假设计算机分散的内存连接一起,并分好段.上面的地址称逻辑地址. 逻辑地址 = 基地址(段地址 * 16) + 偏移地址 物理地址:存储单元在计算机中的唯一编号.CPU访问存储单元需要的地址. 2.通用寄存器 一个典型的CPU,由控制器.运算器.寄存器等组成,通过内部总线连接. 内部总线实现CPU内部期间的联系. 外部总线实现CPU与主板上其他期间联系. 8086有16个通过寄存器 AX,BX,CX,DX,SI,DI,SP,BP,IP,CS,SS,DS,ES,

汇编语言入门———cpu的工作原理(寄存器)

CPU构成 典型的cpu有 运算器,控制器,寄存器 等器件组成.这些器件靠内部总线相连 寄存器 寄存器是cpu内的组成部分.寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令.数据和地址 8086CPU有14 个寄存器  AX , BX, CX, DX, SI, DI, SP, BP, IP, CS , SS, DS, ES , PSW 通用寄存器(8个 一般不变) 8086CPU所有的寄存器都是16位的,可以存放两个字节(1个字) AX BX CX DX 是通用寄存器,通常用来放一般性数据

CPU的内部架构和工作原理 (转,相当不错)

一直以来,总以为CPU内部真是如当年学习<计算机组成原理>时书上所介绍的那样,是各种逻辑门器件的组合.当看到纳米技术时就想,真的可以把那些器件做的那么小么?直到看了Intel CPU制作流程及AMD芯片的制作流程的介绍不禁感慨,原来科技是如此的发达. 本文我们以Intel为例对CPU的工作原理做简单介绍,仅仅是简单介绍,那么AMD,ARM,MIPS甚至PowerPC你应该会触类旁通才对. 还记得那是1968年7月18日,鲍勃-诺斯和戈登-摩尔的新公司在美国加利福尼亚州,美丽的圣弗朗西斯科湾畔芒

Linux内核设计第一周 ——从汇编语言出发理解计算机工作原理

Linux内核设计第一周 ——从汇编语言出发理解计算机工作原理 作者:宋宸宁(20135315) 一.实验过程 图1 编写songchenning5315.c文件 图2 将c文件汇编成32位机器语言 图3 将.s文件中的链接语句删除,获得最后的汇编代码 二.分析堆栈变化情况 三.总结 阐明对“计算机是如何工作的”的理解. ①计算机是依据冯诺依曼体存储结构,依据其核心思想——存储程序计算机工作模型,按程序编排的顺序,一步一步地取出指令,自动地完成指令规定的操作. ②从硬件的角度看,是通过总线连接C

简单介绍 CPU 的工作原理

1.内部架构 CPU 的根本任务就是执行指令,对计算机来说最终都是一串由 0 和 1 组成的序列.CPU 从逻辑上可以划分成 3 个模块,分别是控制单元.运算单元和存储单元 .其内部架构如下: [1]控制单元 控制单元是整个CPU的指挥控制中心,由指令寄存器IR(Instruction Register).指令译码器ID(Instruction Decoder)和 操作控制器OC(Operation Controller) 等组成,对协调整个电脑有序工作极为重要.它根据用户预先编好的程序,依次从