二、汇编之寄存器
我们想用汇编语言控制我们想控制的外设,就必须通过控制器发送控制命令,那这些控制命令存放在哪里,就放在CPU内部组成单元之一,寄存器里面。
1、CPU内部一般由4部分组成
(1)运算器:进行信息的处理
(2)寄存器进行信息的存储
(3)控制器控制各种器件进行工作
(4)内部总线:进行内部器件间的数据交互 2、汇编指令举例
2、物理地址的理解 物理地址顾名思义就是硬件内存单元的地址,CPU通过地址总线访问物理地址。
物理地址(以8086CPU为例)=段地址*16+偏移地址
为了更好理解物理地址我们举个例子
如上图:
(1)从学校走2826米到图书馆,这2826米可以认为是图书馆的物理地址
(2)从学校走2000米到图书馆,从体育馆再走826米到图书馆,第一个距离2000米,就是相对于起点的基础地址,(起点就是我们内存地址的开始地址)第二个距离826米就是对基础地址的偏移地址。
这就相当于 基础地址 = 段地址*16, 物理地址=基础地址+偏移地址
3、什么是寄存器?
段寄存器就是存储段地址的内存,常用的段寄存器有:CS,DS,SS,ES.
我们主要用到 CS:IP这两个寄存器,这两个寄存器分别为 代码段寄存器和指令指针寄存器,下图简单给出8086CPU读取,执行指令的工作原理
如上图我们我们通过 CS:IP找到物理地址-》然后通过地址加法器-》输入输出控制电路-》20为地址总线-》通过汇编取D8,23,01-》数据总线-》指令缓存器-》执行控制器-》AX通用寄存器,就是这样一个执行过程。
4、DS段寄存器的应用
mov bx,1000H
mov ds.bx
mov al,[0]
上面3条指令将1000H(1000:0)中的数据读到al中
5、栈
每个平台的CPU都有自己的栈的设计,8086CPU也不例外,栈的形式是LIFO后进先出,PUSH表示如栈,POP表示出栈。如:push ax 把寄存器 ax的数据送入栈中,pop ax把栈中的数据取出来赋值给ax,8086栈操作是以字为单位的,也就2个字节。
下图为8086CPU对push指令的执行过程
8086CPU对pop指令的执行过程如下图