zoukankan      html  css  js  c++  java
  • 汇编语言第二章总结

     

    CPU与逻辑存储器的联系是通过数据总线、地址总线、控制总线实现的,而这些总线均是从CPU连出来,再连接到相应的位置的,所以这些总线被称为外部总线。CPU通过外部总线进行数据和指令的获取,而CPU对指令的处理和对数据的运算是在CPU内部完成的,自然,CPU内部也需要存放数据的器件,而这些器件则通过内部总线来实现联系。

    CPU的内部器件介绍:

    1. 1.         运算器:进行信息处理;
    2. 2.         寄存器:存储信息;
    3. 3.         控制器:控制各器件的工作;

    这些器件都通过内部总线联系起来,有内部总线来实现它们之间的数据传送。

    寄存器

    8086CPU中的所有寄存器均为16,均可以存放两个字节。

    (1)、通用寄存器(ax、bx、cx、dx):

    之所以这四个寄存器被称为通用寄存器,是因为它们通常用来存放一般性的数据。

    以ax为例:

    ax是十六位寄存器,它可以存放16个位的数据(即一个字),ax同样也可以当做两个8位的寄存器(高八位寄存器ah和低八位寄存器al)

    以此类推,bx、cx、dx也同样具有这样的特点。并且此后为了方便书写和表达一个十六位的字数据可以用4个16进制的数据来表示(如0000000000000001可已被表示为0001H)

    (2)、常用的几条汇编指令:

    1)         mov:在需要改变寄存器中的数据的时候可以使用这条指令来实现。

    具体格式为(mov ax或bx,数据或寄存器)。

    2)         add:与mov的语法格式相同,所不同的是add ax,bx操作是将ax中的数据加上bx中的数据加得的结果再存入ax中。

    (3)、CPU对地址的访问:由于8086CPU中的寄存器、运算器都只能一次性最多处理16位的数据,而CPU与存储器之间相连的地址总线宽度为20(即反映出存储器中存储单元的地址都是20位二进制数,即4位16进制数)所以仅仅依靠16位的数据是无法对存储单元进行访问的。

    给出8086CPU访问存储单元的方法:使用某一种算法将两个16位的地址合成一个真正的物理地址。采用段地址(16位)*16+偏移地址(16位)=物理地址(20位)的方法。

    段地址*16得到的是逻辑存储器中的一段存储空间的首地址,再通过首地址加上偏移地址的方法来得到存储单元的物理地址。

    既然需要通过两个地址(段地址和偏移地址)来获得物理地址,那么这两个地址(16位数据)自然需要两个寄存器来存放它们,而这个操作是由CPU内的段寄存器来实现的。

    (4)、代码段寄存器cs和指令指针寄存器ipcs里存放的是段地址,ip里存放的是偏移地址,CPU对存储器的访问是由cs:ip(=cs*16+ip)来指示的,任意时刻,CPU都是从cs:ip所指向的存储单元来读取指令的。

    0

    1

    2

    3

    4

    (5)、指令执行的顺序(如右图):                                               

             012这三个存储单元里存储的是mov ax,3H(占三个字节)

             34这两个存储单元里存放的是mov bx,ax(占两个字节)

    假如初始状态cs=0H,ip=0H,那么CPU就会在0地址里面读取

    指令。

    CPU从0号存储单元中把数据取过来以后,数据会进入指令缓冲器,经过将ip的值加上这条指令所占的字节数,然后再执行指令的操作。第一条指令执行完了的状态下cs=0H,ip=3H正好指向3号存储单元。以备执行下一条指令。

    (6)、对cs,ip中值的修改:使用指令jmp,格式为(jmp 改之后cs中的数据:改之后ip中的数据和jmp 寄存器ax或bx(此条只改变ip中的值))。

    (7)、代码段:根据需要将一组内存单元定义为一个代码段(这一组内存单元需要满足首地址是16的倍数,大小小于等于64KB(因为偏移地址只有16))。

                      

            

            

             

  • 相关阅读:
    个性实用的SQL语句
    SiteMesh简介
    oracle基本操作
    java项目中获得不同状态下的磁盘根目录和相对目录。
    linux下安装weblogic 10.3.2.0 及mysql数据源的配置
    SQL Serve 查询所有可用的数据库语句
    [传智播客学习日记]简单工厂模式计算器案例
    [传智播客学习日记]SqlHelper与DataSet
    [传智播客学习日记]序列化、XML序列化与深拷贝操作
    [传智播客学习日记]10月18日第一天正式上课
  • 原文地址:https://www.cnblogs.com/tomori/p/9822660.html
Copyright © 2011-2022 走看看