zoukankan      html  css  js  c++  java
  • 寄存器


    CPU由运算器,控制器,寄存器等构成
    这些器件靠CPU的内部总线相连,内部总线实现了CPU各个器件之间的连接。
    CPU构成:
     + 运算器进行信息处理
     + 寄存器进行信息存储
     + 控制器控制各种器件进行工作
     + 内部总线连接CPU各个器件
    注意:
     + 对于汇编编程来说,寄存器是CPU中可以用指令读写的器件,我们通过改变各种寄存器中的内容来实现对CPU的控制。
     + 不同的CPU,寄存器的个数,结构是不相同的。
     
    通用寄存器:

    8086的寄存器都是16位的。但是为了兼容,其寄存器可以分为高8位和低8位分开使用(当分开使用时,CPU就会把其当做8位的寄存器和其他寄存器没关系,不会产生AL溢出影响到AH的情况)。
    AX = AH + AL (H代表高位,L代表低位)
    BX = BH + BL
    CX = CH + CL
    DX = DH + DL
    如:AX范围是0~15, AL就是0~7, AH是8~15
     
    字(Word)寄存器

    字节(Byte):即8位,AL, AH等都是字节寄存器
    字(Word):在X86架构中两个字节,AX, BX, CX等都是字寄存器。在MIPS中是4字节。
     
    使用汇编时要注意数据传送或者运算时,指令的两个操作对象位数要一致。
     
    8086寻址

    8086是16位的CPU
     + 运算器一次最多处理16位数据
     + 寄存器最大宽度为16位
     + 寄存器和运算器直接的通路宽度为16位
     
    但是8086有20位的地址总线,寻址能力为1MB。但其是16位结构,寻址能力为64KB,其一次性处理、传输、暂存的地址为16位。
    8086采用一种在内部用两个16位地址合成的方法形成一个10位的物理地址。
    8086要读写内存时:
    1. CPU中相关部件提供两个16位地址,一个称为段地址,一个称为偏移地址。
    2. 段地址和偏移地址通过内部总线送入地址加法器中。
    3. 地址加法器将两个16位地址合成一个20位的物理地址。
    4. 地址加法器通过内部总线将20位物理地址送入输入输出控制电路。
    5. 输入输出控制电路将20位物理地址送上地址总线。
    6. 20位物理地址通过地址总线送入存储器。
     
    地址加法器

    地址加法器采用 物理地址=基础地址(段地址*16)+偏移地址 的方法把段地址和偏移地址合成物理地址
    TIPS: 段地址*16其实就是段地址左移4位
     
    引申:
    十六进制数左移一位,就是乘以16
    十进制数左移一位,就是乘以10
    X进制的数左移一位,就是乘以X
     

    +其实内存并没有分段,段的划分是因为CPU,8086CPU采用合成物理地址的方式,使得可以用分段管理内存。
    +编程时可以根据需要,将若干地址连续的内存单元看作一个段,用段地址*16做基础地址,用偏移地址定位段中的内存单元。
     
    注意:
    1.一个段的起始地址必然是16的倍数(段地址*16)
    2.一个段的长度最大为64KB(偏移地址为16位)
     
     
    段寄存器

    8086CPU有4个段寄存器:CS、DS、SS、ES
    CS:代码段寄存器
    DS:数据段寄存器
    SS:堆栈段寄存器
    ES:附加数据段寄存器
     
    CS和IP
    CS为代码段寄存器,IP为指令指针寄存器。
    CPU将要执行的下一条指令地址=CS*16+IP
    也可以这样表示CS:IP
     
    读取一条指令后,IP中的值自动增加,指向下一条指令,增加的数目和指令长度有关。
    在8086CPU加电启动后或者复位后,CS和IP就被设置为CS=FFFFH, IP=0000H,即CPU将从物理地址FFFF0H处读取第一条指令
     
    + 在CPU中,程序员能够用指令读写的部件只有寄存器,可以通过改变寄存器中得内容实现对CPU的控制。
    + CPU从何处执行指令是由CS、IP的内容决定的。可以通过改变CS、IP中的内容控制CPU执行的指令。
     
    mov指令可以修改大多数8086的寄存器,但是不能用于设置CS、IP的值。
     
    jmp指令

    jmp指令就是用来修改CS、IP的值的
    语法格式:
    jmp 段地址:偏移地址
    如:
    jmp 2AE3:3 就是给CS=2AE3H,IP=3H
    jmp ax; 就是将AX寄存器中的值,放入IP中,仅修改IP的值
     
    参考文献《汇编语言》王爽版
     
  • 相关阅读:
    springboot配置tomcat大全
    python 列表推导式
    python中yield的用法详解——最简单,最清晰的解释
    正则表达式
    python 装饰器
    python 接口类、抽象类、多态
    python split和os.path.split()
    pyhton 多继承的执行顺序
    python unittest 加载测试用例的方法
    python unittest中的四个概念
  • 原文地址:https://www.cnblogs.com/luweimy/p/4960465.html
Copyright © 2011-2022 走看看