nilininimini

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

预备知识:

一个典型的CPU 由运算器、控制器、寄存器构成

内部总线:实现CPU 内部部件的联系

外部总线:实现CPU 和主板其他部件之间的联系

教材基于8086CPU 进行介绍

 

通用寄存器:

 8086有14 个 16 位的寄存器

常用寄存器:

AX 累加寄存器  可分为AH 和AL

BX  基地址寄存器 可分为BH和BL

CX  计数器寄存器 可分为CH和CL

DX  数据寄存器  可分为DX和DL

各自可分为两个独立的8位的寄存器(寄存器之间相互独立工作) 即 各部分进行运算与另一部分无关当L(右边的)寄存器超过两个字节且有进位的情况时,不会进位到前一位。

注意:

寄存器能够写的最大的值 一个字节是255  FFH

移动数据时考虑这个数据的长度是否能放在你要存放的寄存器中

例如:

将 2375h + BD93h 的值存放在AX寄存器中时 

应分为两部分:

AH=23H+BDH=E0H

AL=75H+93H=0BH 而不是10BH

不同的CPU 生产厂商在生产CPU时如果遵循相同的ISA ,则认为这些CPU 在ISA 级别上是相同的相同系列的CPU 所支持的指令集不一定相同

 

段寄存器:

概念:CPU 必须通过地址线得到内存地址  例如指令段地址和数据段地址

CS 代码寄存器 用于存储质心指令的段地址

DS 数据段地址起始位

SS stack segment:存放堆段地址

标志寄存器:

IP 指令指针寄存器用于指向指令的偏移量

SP stack pointer:堆位移偏移量

字数据在寄存器中存储形式

字节 内存划分基本单位 B

字 =两个字节 字高8位存在寄存器高8位寄存器中 字的低8位存放于寄存器的低8位

8086寄存器进行数据交换的解决方式

CS&IP:

计算机工作过程:

取指令————分析指令————执行指令

内存中指令和数据都以二进制形式存放,在使用时基于上下文加以区别。8086CPU CS=FFFFH,IP=0000H

无法与早期CPU操作兼容怎么办?

8086CPU 为了解决内存在16位寄存器的表示问题 用两个8位寄存器进行加减运算就可以表示20位的内存地址

 

计算机如何知道下一条指令在何处读取

以CP 为代码段地址 加上偏移地址的位数表示指令存放的内存单元

1、CPU 将 CS和IP 组合的地址翻译成指令

2、 IP = IP + 所读指令字节数

3、 执行指令缓冲器中的内容,回到步骤1 再重复过程控制读取指令

跳转指令 :jmp或 call

注意:

修改 CS&IP 指令 不能借助mov 指令实现借助,如:

jmp 2AE3:3;    CS<------2AE3H

IP<-----3H

jmp AX ;   IP <----AX

 

例题

mov ax,bx   IP《------1

sub ax,ax;IP<------1

jmp ax   读入指令IP<------1 跳转至 ax

                             IP<-----1

IP 的值总共会被修改4次

 

 

汇编指令 mov 和add jmp的基本用法及注意事项:

mov 和add 指令要求 两个操作数一致

 

 两个16位可以合成一个20位的内存地址:

物理地址 = 逻辑地址 * 16 + 偏移地址 

逻辑地址即为一个逻辑概念 ,是16 倍数的数作为段起始使用

可表示范围不超过64K  2(16次方)-2(10次方)

例如 物理地址 123C8h 

段地址:偏移地址 1230:00C8 或123C:0008

1200:03C8 或 1000:23C8 

posted on 2018-10-16 18:29  nilininimini  阅读(320)  评论(0)    收藏  举报