第二章 寄存器

2012年12月12日 星期三 15时04分36秒   /     2014年1月23日 星期四 01时16分00秒

第二章  寄存器(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通常用来存放一般性数据,称为通用寄存器。

               

    一个16位的寄存器所能存储的数据的最大值为2^-1
       
    8086上一代CPU的寄存器都是8位的,为保证兼容性,这四个通用寄存器可以分为两个独立的8位寄存器使用:
         ◆AX可以分为AH(高八位)和AL(低八位);
         ◆BX可以分为BH和BL;
         ◆CX可以分为CH和CL;
         ◆DX可以分为DH和DL;
             
    以AX为例,8086CPU的16位寄存器分为两个8为寄存器的情况:
                     

2.2 字在寄存器中的存储
        字节: byte ,一个字节包含8bit.
        字  : 记为word  ,一个字包含两个字节。
       
2.3 几条汇编指令
        汇编指令        控制CPU完成的操作                        用高级语言的语法描述
        mov ax,18       将18送入AX                               AX=18
        mov ah,78       将78送入AH                               AH=78
        add ax,8        将寄存器AX的数值加上8                    AX=AX+8
        mov ax,bx       将寄存器BX中的数据送入到AX中             AX=BX
        add ax,bx       将AX,BX中的内容相加,结果存在AX中        AX=AX+BX

2.4 物理地址
        所有的内存单元构成的存储空间是一个一维的线性空间,每一个内存单元在这个空间中都有唯一的地址,我们称之为物理地址。
        不同的CPU可以有不同的形成物理地址的方式。
       
2.5 16位结构的CPU
        16位结构的CPU具有以下结构特性:
                1)运算器一次最多可以处理16为的数据
                2)寄存器最大宽度为16位
                3)寄存器和运算器之间的通路为16位

2.6 8086 CPU给出物理地址的方法
        8086的CPU有20位地址总线,可以达到1MB的寻址能力。但是从8086CPU的内部结构来看,如果将地址从内部简单发出,那么只能送出16位的地址,即寻址能力只有64KB。

        8086CPU采用一种在内部用两个16位地址合成的方法形成一个20位的物理地址。 即16位的段地址+16位的偏移地址通过地址加法器形成20位的物理地址。

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

2.7 ”段地址*16 + 偏移地址 = 物理地址“ 的本质含义
    基础地址  + 偏移地址 = 物理地址

2.8 段的概念
    8086CPU内部使用段地址和偏移地址移位相加的方法形成最终的物理地址
    CPU可以用不同的段地址和偏移地址形成同一个物理地址

    可根据需要,将地址连续,起始地址为16倍数的一组内存但愿定义为一个段。

2.9 段寄存器
       
    段寄存器就是提供段地址的,8086CPU有4个段寄存器:CS,DS,SS,ES
    当8086CPU要访问内存时,由这四个段寄存器提供内存单元的段地址。

2.10 CS(code consiqnment)和IP
     CS和IP是8086CPU中最关健的寄存器,他们指示CPU当前读取指令的地址。
     CS为代码段寄存器,IP为指针寄存器。  
     8086CPU启动时,CS和IP被设置为CS=FFFFH,IP=0000H,FFFF0H单元中的指令是8086CPU机开机后执行的第一条指令。
     CPU将CS:IP指向的内存单元中的内容看做指令。

2.11 修改CS,IP的指令
     在CPU中,程序员可以通过改变CS,IP中的内容来控制CPU执行目标指令。
     传送指令(mov)可以改变8086CPU中大部分寄存器的值。
     通过转移指令(jmp)修改CS,IP的内容。
        jmp 2AE3:3
        jmp 3:0B16
        功能:  用指令中给出的段地址修改CS,偏移地址修改IP。
       
        仅修改IP的内容:
                jmp某一合法寄存器
                        jmp ax
                        jmp bx
                        功能:用寄存器中的值修改IP。


2.12 代码段
       

实验1 查看CPU和内存,用机器指令和汇编指令进行编程
        (1)什么是DEBUG?
                Debug是DOS,Windows都提供的实模式(8086方式)程序的调试工具,使用它可以查看CPU各种寄存器中的内容,内存的情况和在机器码中跟踪程序的运行。

        (2)我们用到的DEBUG功能
                R命令查看,改变CPU寄存器的内容;
                        -r ax
                        AX 0000
                        :1111
                        -r
                        AX=1111  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
                        DS=13EA  ES=13EA  SS=13EA  CS=13EA  IP=0100   NV UP EI PL NZ NA PO NC
                        13EA:0100 0000          ADD     [BX+SI],AL                         DS:0000=CD
                        -
                D命令查看内存中内容;
                E命令改写内存中的内容;
                U命令将内存中的及其指令翻译为汇编指令;
                T命令执行一天机器指令;
                A命令以汇编命令的核实在内存中写入一条机器命令;

       
               

1.0 传送指令
        mov    可以改变一般的寄存器的内容

2.0 转移指令 
        jmp 修改cs:ip的值
         例如:jmp 2AE3:3     将cs的值设置为2AE3 , ip的值设置为3

        仅修改IP的内容:  即用寄存器中的值修改IP
                jmp ax (类似于 mov IP,ax)


       

2 实验任务
    (1)使用Debug,将上面的程序逐条执行,观察每条指令执行后CPU中相关寄存器中内容的变化
       







                                                                                                         2014-01-26 10:25 记 @sanlihedongkou.xichengqu.beijing

你可能感兴趣的:(第二章 寄存器)