第二章 寄存器

CPU 由运算器,控制器,寄存器等器件构成,靠内部总线连接。

内部总线实现CPU内部各个器件的数据传递,外部总线实现CPU和主板上其它器件的数据传递。

运算器:信息处理

寄存器:信息存储

控制器:控制各个器件进行工作

对于汇编:CPU中主要部件是寄存器。程序员通过读写寄存器来实现对CPU的控制了。不同CPU寄存器个数,结构不同

8086CPU:

有14个寄存器:AX, BX, CX, DX, SI, DI, SP, BP, IP, CS, SS, DS, ES, PSW

每个寄存器都是16位,可以存放两个字节。

通用寄存器:AX, BX, CX, DX。这四个寄存器都可以分为两个独立使用的8位寄存器   例: AX可以分为AH, AL。 AX的低8位(0-7)构成AL寄存器,高8位(8-15)构成AH寄存器

字节:byte 8个bit,字:word 2个byte。

习题按自己的理解所做,有错误的地方见谅。

检测点2.1:

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

mov ax,62627  AX= 1111 0100 1010 0011

mov ah,34H     AX= 0011 0100 1010 0011

mov al,23H    AX= 0011 0100 0010 0011

add ax,ax    AX= 0110 1000 0100 0110

mov bx,826CH    BX= 1000 0010 0110 1100

mov cx,ax     CX= 0110 1000 0100 0110

mov ax,bx     AX= 1000 0010 0110 1100

add ax,bx      AX= 0000 0100 1101 1000

mov al,bh    AX= 0000 0000 1000 0010

mov ah,bl         AX= 0110 1100 1000 0010

add ah,ah    AX= 1101 1000 1000 0010

add al,6       AX= 1101 1000 1000 1000

add al,al      AX= 1101 1000 0001 0000

mov ax,cx    AX= 0110 1000 0100 0110

(2).只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方

mov ax,2

add ax,ax

add ax,ax

add ax,ax

16位结构CPU

1.运算器一次最多可以处理16位的数据  2.寄存器的最大宽度为16位  3.寄存器和运算器之间的数据交换线路为16位

8086CPU有20位地址总线,可传送20位地址,寻址能力为2^20,1MB。

采用偏移地址的方式进行寻址。-》CPU中有对应硬件提供两个16位的地址,一个段地址,一个偏移地址。段地址和偏移地址通过内部总线送入地址加法器,地址加法器将2个16位地址合成一个20位物理地址,再通过内部总线将20位物理地址送入输入输出控制电路,最后

送上地址总线,在存储器上进行寻址。

物理地址 = 段地址 * 16 + 偏移地址 -》一种人为规定的规则

检测点2.2:

(1).给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为 0001:00000001:FFFF(00010~1000F)

(2).有一数据放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻到此单元。则SA应满足的条件:最小为(20000H - FFFF) = 10001>>1 = 1000此时最大寻址单元为1FFFF,所以+1 = 10001H),最大为(20000H - 0000)>>1 = 20000H

段寄存器:段地址的存放位置。

8086CPU有4个段寄存器-》 CS, DS, ES, SS

CS和IP是8086CPU中最关键的两个寄存器,CS为代码段寄存器,IP为指令指针寄存器,任意时刻,设CS中的内容为M,IP中的内容为N,8086CPU将从M * 16 + N的单元开始,读取一条指令并执行。(怎么知道读取的指令的长度???)

-》在设计cpu芯片时,就要考虑设计什么样的指令,指令长度,执行时间,影响哪些寄存器,然后给每个指令一个二进制码,当执行到某个指令的第一个字节时(或者更多更细分)就识别出是什么指令了,芯片硬件做相应的动作。

https://fishc.com.cn/thread-82099-1-1.html

8086CPU的工作过程:

1.从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器。 2.IP自动增加,指向下一条指令。 3.执行指令。(转到步骤1,重复)

检测点2.3:

下面的3条指令执行后,CPU几次修改IP?都是在什么时候?最后IP中的值是多少?

mov ax,bx

sub ax,ax

jmp ax

4次。 将前一条指令读取进指令缓冲器后IP值增加。

jmp指令执行,会修改一次IP的值

 

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

windows系统使用DOSBOX软件模拟8086方式的实模式程序调试工具。可以查看CPU各种寄存器的内容,内存的情况,跟踪程序的运行。官网:https://sourceforge.net/projects/dosbox/   百度网盘:https://blog.csdn.net/chentaoxie/article/details/81264656

Debug功能:

1.R -》查看,改变CPU寄存器的内容  :r查看所有寄存器的内容。 r ax修改ax寄存器的值

2.D -》查看内存中的内容 :d 1000:0 查看内存10000H处的值

3.E -》改写内存中的内容

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

5. T -》执行一条汇编指令

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

实验任务

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

机器码              汇编指令

b8 20 4e             mov ax,4e20H

05 16 14             add ax,1416H

bb 00 20             mov bx,2000H

01 d8               add ax,bx

89 c3               mov bx,ax

01 d8               add ax,bx

b8 1a 00             mov ax,001aH

bb 26 00             mov bx,0026H

00 d8              add al,bl

00 dc              add ah,bl

00 c7              add bh,al

b4 00              mov ah,0

00 d8              add al,bl

04 9c              add al,9cH

...

原文地址:https://www.cnblogs.com/linxisuo/p/13125337.html