《汇编语言》第二章总结

守給你的承諾、 提交于 2020-03-24 02:24:50

汇编语言(面向机器的程序设计语言)

 

第二章 信息的大本营——寄存器

 

CPU概述

一个典型的CPU由运算器、控制器、寄存器等器件组成。运算器进行信息处理,寄存器进行信息存储,控制器控制各种器件进行工作。内部总线连接各种器件,在它们之间进行数据的传送,实现CPU内部各个器件之间的联系。外部总线实现CPU和主板上其它器件的联系。这个章节所介绍的寄存器是CPU中程序员可以用指令读写的部件,程序员通过改变各种寄存器中的内容来实现对CPU的控制。

 

 

不同的CPU,寄存器的个数和结构都是不同的。8086CPU有14个寄存器,每个寄存器都有对应的名称分别为:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。

 

 

2.1 通用寄存器

8086CPU的所有寄存器都是16位的,可以存放两个字节。AX、BX、CX、DX这4个寄存器通常用来存放一般性的数据,被称为通用寄存器。以AX为例,16位寄存器的逻辑结构如下图:

 

 

 

16位寄存器的逻辑结构,其存放的无符号数据范围:0  ~  2^16 -1

 

为了与早期CPU操作兼容,这4个寄存器均可拆分成两个8位寄存器单独使用,分别为AX分为AH和AL,BX分为BH和BL,CX分为CH和CL,DX分为DH和DL,下面以AX为例:

 

AH和AL存放的无符号数据范围:0  ~  2^8 -1

 

一个字由两个字节组成,可以存在一个16位寄存器中。字的高8位存放于通用寄存器的高8位寄存器字的低8位存放于通用寄存器的低8位寄存器。如下图所示:

 

 

 

 

 

存储实例演示:

 

 

 

 

 

2.2 汇编指令:mov,add

 

注意事项: 在mov和add指令中,两个操作对象的位数应一致。

 

 

 

2.3 物理地址

 

CPU访问内存单元时要给出内存单元的地址。所有的内存单元构成的存储空间是一个一维的线性空间。每一个内存单元在这个空间中都有唯一的地址,这个唯一的地址称为物理地址。

 

 

 

 

8086结构表示物理地址的障碍:8086内部的寄存器都是16位的,而外部地址总线宽度为20位。能存放的地址数据范围:0 ~ 216-1  (64KB)而对应的地址单元:0 ~ 220-1  (1MB)。

 

解决途径:8086在内部用两个16位地址 通过计算合成得到一个20位的物理地址。计算合成由CPU内部的地址加法器实现。

 

 

 

 

2.4 段的认识

 

段是8086为解决用16位寄存器表示20位的物理地址而引入的一个逻辑上的概念。可以根据需要,将地址连续、起始物理地址为16倍数的一组内存单元(不超过64KB)当作一个段使用。

 

 段的划分是灵活的,一个物理地址可以用不同的「段地址: 偏移地址」表示。只要满足段的起始物理地址是16的倍数。在写法上,地址通常用十六进制表示。表示十六进制的H在「段地址: 偏移地址」中可省略不写。

 

 

 

 2.5 CS和IP

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

 

 

计算机工作过程:第1步: CPU基于CS:IP,计算出物理地址,然后到相应的内存单元读取指令,送到指令缓冲区。第2步: CPU自动修改IP的值,IP = IP + 所读取指令的长度,从而为下一条指令读取做准备;第3步: 执行指令。 转第1步,重复此过程。

 

在 8086CPU 加电启动或复位后( 即 CPU刚开始工作时)CS和IP被设置为CS=FFFFH,IP=0000H。 IP和CS值的修改不能通过mov指令实现,需借助转移指令。如下图:

 

 

 

 

检测点2.1

 

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


第一空:F4A3H ;把十进制数62627变成十六进制就是结果F4A3H
第二空:31A3H ;ah=31h,al不变,所以ax=31A3H
第三空:3123H ;al=23h,ah不变,所以ax=3123h
第四空:6246H ;ax=ax+ax=3123h+3123h=6246h,用计算器算一下结果就出来了
第五空:826CH ;bx=826CH,ax不变
第六空:6246H ;cx=ax=6246H
第七空:826CH ;ax=bx=826CH
第八空:04D8H ;ax=ax+bx=826CH+826CH=04D8H,0前面还有个1,但是ax放不下,所以丢弃,16位寄存器只能放下四位十六进制数
第九空:0482H ;al=bh=82h,ah不变
第十空:6C82H ;ah=bl=6Ch,al不变
第十一空:D882H ;ah=ah+ah=6Ch+6Ch=D8h,al不变
第十二空:D888H ;al=al+6=82H+6=88h,ah不变
第十三空:D810H ;al=al+al=88h+88h=10h,ah不变,结果是110h但al的大小只有8位二进制位,能放下的最大数为FFh,所以高位丢弃,只保留低两位
第十四空:6246H ;ax=cx=6246H

 

 

检测点2.2

(1)给定段地址为0001H,仅通过变化偏移地址,CPU的寻址范围为?

 

在8086CPU中使用“基础地址(段地址*16)+偏移地址=物理地址”的方式给出内存单元的物理地址。 段地址为0001H 基础地址为00010H 偏移地址最小为0000H 偏移地址最大为ffffHCPU的寻址范围为00010H 到 1000fH。

 

(2)有一数据存放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻到此单元。则SA应满足的条件是:最小为? 最大为?

 

已知物理地址为20000H 8086CPU偏移地址的取值范围为0000H 到ffffH 则段地址最大为(20000H-0000H)/16=2000H 段地址最小为(20000H-ffffH)/16=(10001)/16 由于段地址1000的最大寻址范围为1ffff,因此最小的满足SA条件的段地址应比1000大1则SA应满足的条件,最小为1001H最大为2000H

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!