zoukankan      html  css  js  c++  java
  • 汇编小记16/3/22

    最后一次更新:2016-03-23 12:40:34


     学了cpu和内存的关系(存储器),接下来了解cpu的内部构建

    cpu内部是由运算器、控制器、存储器cpu工作原理)等器件构成

    通过内部总线想和连接(和外部的三大总线对比)

    运算器:cpu内部数据处理的场所

    控制器:控制cpu内部各器件的运作

    寄存器:信息存储

    内部总线:连接各个器件,进行数据传送


    cpu的主要部件是寄存器,寄存器是程序员进行可以用以读写操作的场所,也就是说程序员可以通过对寄存器的内容的改变来实现对cpu的控制

    cpu可以细分成14种:

    通用寄存器、指令指针寄存器、代码段寄存器、数据段寄存器、附加段寄存器、堆栈段寄存器0-待续

    这节介绍通用寄存器:以AX为例

    通用寄存器用以存储一般数据

    8086为例,AX可以存放16位数据

    8086以上的寄存器是8器是8位的,为了实现向下兼容,每一个16位寄存器又可以分为2个8位寄存器

    • AX分为AH和AL
    • BX分为BH和BL
    • CX分为CH和CL
    • DX分为DH和DL

    可以看出8位寄存器可以存放1B数据,即一个字节

    16位寄存器可以存放1W数据,即两个字节

    字(2B)数据在AX存储时满足高高低低原则

    比如,2000 = 4E20H

    AH 存储 4EH 逻辑数为78

    AL 存储 20H 逻辑数为32


    通用寄存器相关汇编指令:

    move ax,62627 先要62627(D)转化为16进制,覆盖掉ax中原有的数

    mov ah,31H

    add ax,ax

    add al,bh

    add al,6


    内存地址逻辑上是一维的线性地址,讨论cpu如何给发出地址信息:

    16位结构的cpu

    • 运算器一次最大的数据为16位
    • 寄存器的最大宽度为16位
    • 寄存器与运算器之间的通路(内部总线)为16为

    8086cpu的地址总线宽度为20,有1MB的寻址能力,但是cpu一次最多能处理、存储、运算16位数据

    如何解决这个矛盾,能让cpu只处理一次,就能找到宽度为20的内存物理地址

    8086cpu通过两个16地址合成的方法形成一个20位物理地址

    cpu需要处理读写内存是:发出内存发出地址信息

    1. cpu内部器件形成两个16地址信息,一个称段地址,另一个称为偏移地址
    2. 段地址和偏移地址通过cpu的内部总线,送到地址加法器部件
    3. 地址加法器16位地址合成一个20位地址
    4. 地址加法器通过内部总线将合成的20位地址送到输入输出控制电路
    5. 输入输出控制电路将20位物理地址送上地址总线
    6. 地址总线将20位物理地址送到内存(存储器 )

    地址加法器采用的处理方法是:

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

    例子:

    1230H(段地址)

        +            =         12300H        =        123C8H(物理地址)

     (地址加法器)       00C8H

    00C8H(偏移地址) 

     本质意义:cpu内部无法一次存储20位信息的数据,只能通过某种数学方法处理 

     物理地址 = 基础地址(段首地址) + 偏移地址

    cpu将内存分成n个段,n个段中有m个最小存储单元

    可以推出:

    段首地址一定是16的倍数; 

    而cpu一次最大能处理16bit数据,也就是偏移地址最大位2^16-1,也就是说每个段的最大为64KB(2^16B FFFF)            

    可以根据需要,将地址连续、起始地址为16的倍数的一组内存单元定义为一个段


    段寄存器:提供给地址加法器段地址的器件(存储段地址)

    8086一共有4个段地址寄存器:CS、DS、SS、ES

    CS和IP(固定搭配)

    CS是代码段地址(段地址) IP是指令指针寄存器(偏移地址)

    cpu通过CS+IP向内存发出地址信息,代码段中的指令通过数据总线,进入到cpu内部的指令缓存区,此时IP自动增加,IP指向下一条指令,指令缓冲区的指令执行

    任意时刻,cpu将CS:IP指向的内容当作指令执行

    代码段(<=64KB)


    代码段寄存器相关汇编指令:

    可以通过jmp改变CS、IP中的内容

    jmp 2AE3:3 执行后:CS=2AE3H,IP=0003H,cpu将从2AE33H中读取指令

    若只想修改IP中的内容

    jmp ax 执行后,ax中的内容将会覆盖IP中的内容 ,含义上类似:mov IP ax


    在一个谎言的国度,沉默就是英雄
  • 相关阅读:
    单例模式
    设计模式
    C#判断Textbox是否为数字
    C#判断输入的是否是汉字
    C#如何测试代码运行时间
    网上 server2008数据库恢复方法
    C# 控件的缩写
    SQLite主键自增代码
    Sqlite数据库联合查询及表复制等详述
    C#中超链接方法
  • 原文地址:https://www.cnblogs.com/EdsonLin/p/5309346.html
Copyright © 2011-2022 走看看