【新书推荐】6.1节 通用寄存器

2024-02-04 21:04

本文主要是介绍【新书推荐】6.1节 通用寄存器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第六章 8086 CPU寄存器

         CPU是我们学习的第一个计算机硬件。16位汇编语言中,涉及CPU的控制和操作是通过CPU内部的寄存器实现的。我们可以把寄存器看作是在CPU内部有独立命名的存储空间,寄存器的名称即该存储空间的地址。这章我们将讲述8086 CPU内各个寄存器的功能和使用方法。

6.1节 通用寄存器

         我们在第一章计算机的硬件组成中简单描述了CPU内部的AX寄存器是用来存储数据的。这一节我们将详细讲解CPU内的通用寄存器。

         本节内容:通用寄存器。

         ■CPU的内部组成:8086 CPU内部由控制单元、算术逻辑运算单元、地址加法器和14个16位寄存器组成。8086 CPU寄存器组按功能划分为4个16位数据寄存器,两个16位指针寄存器,两个16位变址寄存器,一个16位指令指针,四个16位段寄存器,一个16位标志寄存器。

         ■数据寄存器:4个16位数据寄存器AX、BX、CX、DX,用于存储数据。每个16位数据寄存器分为两个8位数据寄存器。

         ■数据寄存器的特殊用途:8个16位通用寄存器及其对应的2个8位数据寄存器除了正常的存储数据的用途之外,还有一些特定的用途,参见表6-4。

         ■变址寄存器和指针寄存器:变址寄存器SI、DI常用数据段内的寻址,也是字符串操作中的默认指针,DS:[SI]指向源地址,ES:[DI]指向目的地址。指针寄存器SP、BP常用于堆栈内的寻址,SP永远指向栈顶,BP作为栈内基址寄存器使用。此外,数据寄存器BX也可以作为数据段内的基址寄存器使用。8086 CPU中只有SI、DI、BP和BX四个寄存器用来寻址。

6.1.1 CPU的内部组成

    8086 CPU的内部组成如图6-1所示:

    ■运算器进行算术逻辑运算;

■寄存器存储信息;

■控制器控制计算机各种器件进行工作;

■内部总线连接各种器件,在它们之间进行数据传送。

寄存器是程序员可以用指令读写的部件。程序员通过改变各种寄存器中的内容实

现对CPU的控制。地址寄存器存储地址信息,数据寄存器存储数据信息。

图6-1 CPU的内部组成

6.1.2 8086 CPU寄存器组

8086 CPU内包括四个16位数据寄存器,两个16位指针寄存器,两个16位变址寄存器,一个16位指令指针,四个16位段寄存器,一个16位标志寄存器,一共14个16位寄存器。

如图6-2所示,通用寄存器包括四个16位数据寄存器、两个16位指针寄存器和两个16位变址寄存器。接下来我们分别讲解这三组寄存器。

图6-2 8086CPU寄存器组

6.1.3 数据寄存器

四个16位数据寄存器:AX、BX、CX、DX;主要用来保存操作数或运算结果等信息。由于CPU访问内部寄存器的速度远快于访问内存,所以它们的存在节省了为存取操作数所需占用总线和访问存储器的时间。每个16位数据寄存器分为两个8位数据寄存器。如图6-3所示:

图6-3  16位数据寄存器AX的逻辑结构

AX=AH(高8位,高字节)+AL(低8位,低字节),AX和AL寄存器称为累加器,通常用于保存算术运算的结果。

BX=BH+BL。BX寄存器除了作为数据寄存器之外,也可以作为基地址寄存器。它是4个数据寄存器中唯一可以作为存储器指针使用。

谨慎

         在8086计算机中,只有BP、SI、DI、BX四个通用寄存器可以用来寻址,其他寄存器不可以。到了80386及以上CPU,所有通用寄存器都可以用来寻址。

CX=CH+CL,CX寄存器称为计数寄存器。在字符串操作和循环操作时,用来控制重复循环次数。移位操作时,CL寄存器用来保存移位的位数。

DX=DH+DL,DX寄存器称为数据寄存器。除此之外,进行32位乘除法操作时,用来存放被除数的高16位或余数。乘法操作时用来保存高16位乘积。它也用于存放I/O端口地址。

举例

如图6-4,AX寄存器存储的值为20,二进制数:0001 0100B;十六进制数:14H

图6-4 AX寄存器存储的值

如图6-5所示,AH寄存器存储的值为4EH,AL寄存器存储的值为20H,则AX寄存器存储的值为4E20H。

图6-5 AH、AL寄存器存储的值

6.1.4 数据寄存器的特殊用途

8个16位通用寄存器及其对应的2个8位数据寄存器除了正常的存储数据的用途之外,还有一些特定的用途。如表6-4所示。

■AX、DX、AH、AL寄存器在乘除法中,默认为目的操作数,用来保存乘积或商;我们将在第八章8086指令系统的算术运算指令中详细讲解。

■BP、SI、DI和BX四个寄存器可以在地址表达式中使用,作为寻址寄存器。其中BP寄存器通常在堆栈内寻址,因此也称BP寄存器为栈内基址寄存器。BX是4个16位数据寄存器中唯一可以用来寻址的寄存器。SI和DI在字符串指令中作为默认指针寄存器,DS:[SI]指向源地址,ES:[DI]指向目的地址。我们将在第十七章字符串处理详细讲解。

■CX寄存器作为LOOP循环指令的循环计数器。在字符串指令重复前缀REP中CX作为循环计数器。具体使用方法将在第十章和第十七章中详细讲解。

■CL寄存器作为移位计数器。在8086CPU指令中,移位位数只能为1或CL。

■SP寄存器称为栈顶指针寄存器,SP寄存器永远指向堆栈栈顶。每次出栈、入栈操作,SP的值都会发生变化,因而在16位汇编中不能使用SP寄存器作为堆栈内的指针寄存器。

6-4 通用寄存器的专门用途

提示

         此时,作为初学者,可能会因为这些概念性的理论知识而头疼。其实不必担心,目前并不要求能够完全理解这些理论知识。计算机编程是一门强调动手动脑的实践课程,在后续的章节中,我们会通过大量的示例和练习来验证这些理论。是否还记得卖油翁的一句话?“无它,唯熟耳!”

动手实验7:在debug调试器中演示数据寄存器的工作过程

在Debug调试器中输入并执行如下代码片段:

汇编指令

控制CPU完成的操作

用高级语言的语法描述

mov ax,28H

将28h送人寄存器AX

AX=28H

mov ah,98H

将98h送人寄存器AH

AH=98H

add ax,18h

将寄存器AX中的数值加上18h

AX=AX+18h

mov ax,bx

将BX寄存器中的值送人寄存器AX

AX=BX

add ax,bx

将AX和BX中的值相加,结果存在AX中

AX=AX+BX

                                        表6-5 数据寄存器实验一

在Debug调试器中的操作步骤如图6-6所示:

  

图6-6 数据寄存器实验一

动手实验8:在Debug调试器中输入下面的代码片段,计算AX寄存器的值

汇编指令

指令执行后AX中的值

指令执行后BX中的值

mov ax,4E02H

4E02H

0000H

add ax,1408H

620AH

0000H

add bx,1000h

620AH

1000H

add ax,bx

720AH

1000H

mov bx,ax

720AH

 

 

 

720AH

 

 

add ax,bx

?

720AH

                                        表6-6 数据寄存器实验二

动手实验9:在Debug调试器中输入下面的代码片段,计算AX寄存器的值

汇编指令

指令执行后AX中的值

指令执行后BX中的值

mov ax,001AH

001AH

0000H

mov bx,0036H

001AH

0036H

add al,bl

0050H

0036H

add ah,bl

3650H

0036H

mov bh,al

3650H

 

 

 

5036H

 

 

mov ah,0

0050H

5036H

add al,85H

00D5H

 

 

 

5036H

 

 

add al,91H

?

5036H

                                        表6-7 数据寄存器实验三

         实验8和实验9留给读者独立完成。

提示

1.在汇编语言语句中,不区分字母大小写。

2.在Debug调试器中,操作数默认为十六进制数,不需要添加后缀‘H’。

6.1.5 变址寄存器和指针寄存器

变址寄存器和指针寄存器

变址寄存器(SI/DI)和指针寄存器(BP/SP)主要用于存放某个存储单元地址的偏移,或某组存储器单元开始地址的偏移,作为存储器指针使用。

作为寄存器,可以保存16位算术逻辑运算中的操作数和运算结果,有时运算结果就是需要的存储单元地址的偏移。在8086计算机中,变址寄存器和指针寄存器不可以分解成8位寄存器使用。

变址寄存器和指针寄存器主要作用是实现多种存储器操作数的寻址,从而方便的实现对多种类型数据的操作。

SI和DI寄存器

SI和DI寄存器称为变址寄存器。在字符串操作中,规定由SI给出源指针,由DI给出目的指针,所以SI也称为源变址寄存器,DI也称为目的变址寄存器。SI和DI也可以作为一般存储器指针使用。

举例

mov si,0            ;si=0  

mov di,0            ;di=0  

mov si,offset mess  ;将数据段变量mess的偏移送入si

mov ax,[si]        ;将si偏移处对应的存储单元的16位值送入ax

mov ax,[di]         ;将di偏移处对应的存储单元的16位值送入ax

mov di,offset mess  ;将数据段变量mess的偏移送入di

BP和SP寄存器

BP和SP寄存器称为指针寄存器。BP主要用于给出堆栈中数据区基址的偏移,从而方便地实现直接存取堆栈中的数据,所以BP也称为栈内基指针寄存器。在16位汇编中,正常情况下,SP也只作为堆栈指针使用,SP永远指向栈顶,即保存堆栈顶地址的偏移。在8086计算机中,入栈操作时,SP寄存器自动减2,出栈操作时,SP寄存器自动加2。关于堆栈的内容将在“6.2节段寄存器”中详细讲解。

举例

;定义16个字节的堆栈段

stack segment

    db 16       ; 分配堆栈段16个字节的存储空间

stack ends

;

mov ax,stack    ;将堆栈段地址标号stack送入ax寄存器      

mov ss,ax       ;将ax的值存入ss堆栈段寄存器  

mov sp,16       ;sp堆栈指针指向堆栈段的栈顶偏移地址10H处

push bp         ;将bp寄存器的值压入堆栈,此时sp=14(sp-2)

mov bp,sp       ;bp=sp

pop ax          ;将当前堆栈段栈顶存储的值pop到ax寄存器,此时sp=16(sp+2)

■数据寄存器BX通常可以作为基址寄存器,表示数据段中,某一段数据的起始地址。

举例

;定义数据段

data segment

table db 0,1,2,3,4,5,6,7,8,9            ; table处以字节为单位存储0~9十个数

var   db 10,11,12,13,14,15,16,17,18,19  ; var处以字节为单位存储10~19十个数

data ends

;

mov bx,offset table     ;将数据段变量table的偏移送入基址寄存器bx=0

mov si,offset var       ;将数据段变量var的偏移送入变址寄存器si=10

mov al,[bx+si+2]        ;将bx+si+2偏移对应的存储单元内的值12存入al寄存器

练习

1、请写出每条汇编指令执行后,相关寄存器中的值。

mov ax,62354                AX=?

mov ah,31H               AX=?

mov al,12H                AX=?

add ax,ax                AX=?

mov bx,4523H                  BX=?

mov cx,ax                CX=?

mov ax,bx                AX=?

add ax,bx                 AX=?

mov al,bh                AX=?

mov ah,bl                AX=?

add ah,ah                AX=?

add al,6                 AX=?

add al,al                AX=?

mov ax,cx                 AX=?

注意:数值的不同进制表示方法。

本文摘自编程达人系列教材《X86汇编语言基础教程》。资料下载:www.bcdaren.com

这篇关于【新书推荐】6.1节 通用寄存器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/678791

相关文章

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

防近视护眼台灯什么牌子好?五款防近视效果好的护眼台灯推荐

在家里,灯具是属于离不开的家具,每个大大小小的地方都需要的照亮,所以一盏好灯是必不可少的,每个发挥着作用。而护眼台灯就起了一个保护眼睛,预防近视的作用。可以保护我们在学习,阅读的时候提供一个合适的光线环境,保护我们的眼睛。防近视护眼台灯什么牌子好?那我们怎么选择一个优秀的护眼台灯也是很重要,才能起到最大的护眼效果。下面五款防近视效果好的护眼台灯推荐: 一:六个推荐防近视效果好的护眼台灯的

智能交通(二)——Spinger特刊推荐

特刊征稿 01  期刊名称: Autonomous Intelligent Systems  特刊名称: Understanding the Policy Shift  with the Digital Twins in Smart  Transportation and Mobility 截止时间: 开放提交:2024年1月20日 提交截止日

开放式耳机好用?平价开放式耳机推荐?四款开放式的蓝牙耳机推荐

开放式耳机好用吗?有平价些的开放式耳机推荐吗?那这两个问题的回答当然是肯定的。 首先开放式耳机好不好用取决于对耳机的需求,因为开放式耳机其实是比较适用于需要注意周围环境、需要‌长时间佩戴舒适以及需要频繁与人交流的场景中,在这些场景下使用开放式耳机的话就会比较有优势。就例如跑步骑行健身等运动的时候,能够兼得佩戴舒适度的同时,增加一定的安全性;还有在办公学习的时候,会很适合长时间佩戴,能够方便和

CCF推荐C类会议和期刊总结(计算机网络领域)

CCF推荐C类会议和期刊总结(计算机网络领域) 在计算机网络领域,中国计算机学会(CCF)推荐的C类会议和期刊为研究者提供了广泛的学术交流平台。以下是对所有C类会议和期刊的总结,包括全称、出版社、dblp文献网址以及所属领域。 目录 CCF推荐C类会议和期刊总结(计算机网络领域) C类期刊 1. Ad Hoc Networks 2. CC 3. TNSM 4. IET Com

推荐练习键盘盲打的网站

对于初学者来说,以下是一些推荐的在线打字练习网站: 打字侠:这是一个专业的在线打字练习平台,提供科学合理的课程设置和个性化学习计划,适合各个水平的用户。它还提供实时反馈和数据分析,帮助你提升打字速度和准确度。 dazidazi.com:这个网站提供了基础的打字练习,适合初学者从零开始学习打字。 Type.fun打字星球:提供了丰富的盲打课程和科学的打字课程设计,还有诗词歌赋、经典名著等多样

Java Web应用程序的推荐目录结构

以前没有用过maven管理过项目的依赖,最后使用上了maven,发现通过不能方式建立出来的web应用程序目录结构基本都不一样,既然每次都要到网上搜索如何建立maven管理的Web应用程序,不如自己找百度谷歌一下。 找了半天 ,感觉比较好的maven管理的web应用程序目录结构是这个: ├── pom.xml└── src├── main│ ├── java│ │ └── myg

Cortex-A7:ARM官方推荐的嵌套中断实现机制

0 参考资料 ARM Cortex-A(armV7)编程手册V4.0.pdf ARM体系结构与编程第2版 1 前言 Cortex-M系列内核MCU中断硬件原生支持嵌套中断,开发者不需要为了实现嵌套中断而进行额外的工作。但在Cortex-A7中,硬件原生是不支持嵌套中断的,这从Cortex-A7中断向量表中仅为外部中断设置了一个中断向量可以看出。本文介绍ARM官方推荐使用的嵌套中断实现机