第二章 寄存器(cpu工作原理)

第二章 寄存器(cpu工作原理)

概述

一个典型的cpu由运算器 控制器 寄存器等器件组成,这些器件靠内部总线相连

8086 cpu14个存储器,他们的名称为: AX BX CX DX SI DI SP BP IP CS SS DS ES PSW

8个通用寄存器

2.1 通用寄存器

8086cpu所有的寄存器都是16位的,可以存放两个字节.

AX BX CX DX通常用来存放一般信息称为通用寄存器

一个16位寄存器所能存放的最大值位216-1

为保证兼容性,这四个寄存器都是可以分为两个独立的8位寄存器使用

AX可以分为AH 和 AL (高位和低位)

2.2 字在寄存器中的存储

一个字可以存在一个16位寄存器中,这个字的高位字节和低位字节分别存储在高8位寄存器和低8位寄存器中.

2.3几条汇编指令

第二章 寄存器(cpu工作原理)_第1张图片

汇编指令不区分大小写

 

EX :

Cpu执行下表中的从程序段的每条指令后,对寄存器中的数据进行改变.

第二章 寄存器(cpu工作原理)_第2张图片

8226H + 8226H = 1044C 超出最大值 ?的值为044C

 

EX2 :

 第二章 寄存器(cpu工作原理)_第3张图片

 

C5 + 93 = 158  ?的值为0058H 

这里的丢失指的是进制不能在8位寄存器中保存,但是cpu并不是真的丢弃这个进位值

 

2.4物理地址

Cpu访问内存单元时要给出内存单元的地址.所有的内存单元构成的存储空间时唯一一个线性空间.我们将这个唯一的地址成为物理地址

 

2.5 16位结构的cpu

概括地讲,16位结构描述了一个cpu具有以下几个方面的特征:

1.运算器一次最多可以处理16位的数据

2.寄存器的最大宽度为16

3.寄存器和与运算器之间的通路是16位的

 

2.6 8086cpu给出物理地址的方法

808620位地址总线,可传20位地址,寻址能力位1M

8086内部为16位结构,他只能传送16位的地址,边线处的寻址能力却只有64k

8086cpu采用一种在内部用两个16位地址合成的方法来形成一个20位的物理地址

 第二章 寄存器(cpu工作原理)_第4张图片

地址加法器合成物理地址的方法:

物理地址 段地址 * 16 + 偏移地址

 

2.8段的概念

在编程时可以根据需要,奖若干地址连续的内存单元看作一个段,用段地址*16定位段的起始地址(基础地址),用偏移地址定位段中的内存单元

PS:偏移地址为16,16位地址的寻址能力为64k,所以一个段的长度最大为64k

 

小结

1.cpu访问内存单元时,必须向内存提供内存单元的物理地址

2.8086cpu在内部用段地址和偏移地址位相加的方法形成最终的物理地址

3.物理地址可以由多种段地址和偏移地址的组合

4.偏移地址为16,变化范围位0 ~ FFFFH,仅用偏移地址来寻址最多可寻16k个内存单元

5.“数据在21F60H内存单元中”对于8086pc机的两种描述:

a) 数据存在内存2000:1F60单元中

b) 数据存在内存的2000段中的1F60H单元中

 

2.9段寄存器

概述段寄存器是提供地址的

  80864个段寄存器

  CS DS SS ES

8086cpu要访问内存时,由这4个段寄存器提供内存单元的地址

 

CSIP8086cpu中最关键的段寄存器,他们指示了cpu当前要读取命令的地址

CS为代码段寄存器

IP为指令指针寄存器

 

CSIP进入地址加法器 -> 地址总线输出 -> 找到对应地址 -> 返回地址中的数据 -> 指令缓冲器 -> IP增加所读取命令的长度,从而指向下一条指令

 

8086cpu工作过程的简要描述

1.在8086cpu加电启动或复位时,CSIP被设置为CS = FFFFH, IP = 0000H

2.FFFF0H单元中的指令是8086pc机开机后执行的第一条指令

 

2.11 修改CS, IP的指令

cpu,程序员能够指令读写的部件只有寄存器,程序员可以通过改变寄存器中的内容实现对cpu的控制

Cpu从何处执行命令是由CS, IP中的内容决定的,程序员可以通过改变CS, IP中的内容来控制cpu执行目标命令

a) 同时修改CS IP的内容:(段地址*16+偏移地址)

jmp 段地址 偏移地址

jmp 2AE3:3

jmp 3:0B16 实际是00030 + 0B16

功能 使用指令中给出的段地址修改CS 偏移地址修改IP

b) 仅修改 IP 的内容:

jmp 某一合法寄存器

jmp ax 

jmp bx

功能 用寄存器中的值修改 IP 
EX: 要将IP 修改为200, 先 mov  ax, 200 然后再 jmp ax

 

2.12 代码段

概念 对于8086pc,在编程时,可以根据需要,将一组内存单元定义为一个段.可以将长度为N(N <= 64KB)的一组代码,存在一组地址连续,起始地址为16的倍数的内存单元中,这段内存是用来存放代码的,从而定义了一个代码段.

如何使得代码段中的指令被执行?

将一段内存当做代码段,仅仅是我们在编程时的一种安排,cpu并不会由于这种安排,就自动地将我们定义的代码段中的指令当做指令来执行.

cpu只认被CS : IP指向的内存单元中的内容为指令,所以要将CS : IP只想所定义的代码段中的第一条指令的首地址

 

2.9 ~ 2.12节小结

1.段地址在8086cpu的寄存器中存放.8086cpu要访问内存是,有段寄存器提供内存单元的段地址.8086cpu4个段寄存器,其中CS用来存放指令的段地址.

2.CS存放指令的段地址,IP存放指令的偏移地址.

3.8086机中,任意时刻,cpuCS : IP指向的内容当做指令执行

4.8086cpu的工作过程

a) 从cs : ip指向的内存中读取指令,读取的指令进入指令缓冲器

b) ip指向下一条指令

c) 执行命令(转到步骤a, 重复这个过程)

5.8086cpu提供转移指令修改cs ip的内容

 

实验一 查看cpu和内存,使用机器指令和汇编指令编程

1.debug命令

a) R命令,查看改变cpu寄存器的内容

b) D命令,查看内存中的内容

c) E命令改写内存中的内容

d) U命令,将内存中的机器指令翻译成汇编指令

e) T命令,执行一条机器指令

f) A命令,以汇编指令的格式在内存中写入一条机器指令

你可能感兴趣的:(汇编,汇编语言)