zoukankan      html  css  js  c++  java
  • 汇编第二章--基础知识梳理与总结

    第一章,我们介绍了有关汇编语言的基础知识,在第二章我们主要介绍寄存器。

    CPU的主要部件是寄存器,在8086CPU有14个寄存器,它们分别是:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。8086CPU的所有寄存器都是16位的,可以存放两个字节。AX、BX、CX、DX这4个寄存器通常用来存放一般性的数据,称为通用寄存器。由于8086CPU的上一代CPU中的寄存器都是8位的,为了保持兼容,8086CPU的AX、BX、CX、DX这4个寄存器都可分为两个独立使用的8位寄存器:

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

    出于兼容性的问题,8086CPU可以处理两种尺寸的数据:

    字节:记为byte,一个字节由8个bit组成,可以存放在8位寄存器中

    字:记为word,由两个字节组成,这两个字节分别被称为高位字节和低位字节

     

    通过汇编指令控制CPU进行工作:

    在写一条汇编指令或一个寄存器的名称时不区分大小写。

    CPU执行程序段中的每条指令后,对寄存器中的数据的改变:

    程序段中的最后一条指令add ax,bx,在执行前ax和bx中的数据为8226H,相加后的数据为:1044CH,但是ax为16位的寄存器,只能存放4位十六进制的数据,所以最高位的1不能在ax中保存,ax中的数据为:044CH,最高位的1并不是舍去了,而是存在了其他位置,随着我们对汇编语言的慢慢深入,就会体会到程序设计师的聪明与机智。

    注意:ax分出的两个独立的寄存器ah与al,它们是毫无关联的,不要误认为al的数据相加后超出的位数存放在ah中!

    每一个内存单元都有唯一的地址,称为物理地址。

    16位结构的8086CPU:

    1.运算器一次最多可以处理16位的数据。

    2.寄存器的最大宽度为16位。

    3.寄存器和运算器之间的通路为16位。

    8086CPU有20位地址总线,可以达到1MB的寻址能力,那它怎么用16位地址来达成20位物理地址的呢?

    8086CPU采用在内部用两个16位地址合成的方法来形容一个20位的物理地址。

    逻辑结构如图所示:

    地址加法器采用:物理地址=段地址*16+偏移地址的方法进行合成

    “物理地址=段地址*16+偏移地址”本质含义:CPU在访问内存时,用一个基础地址(段地址*16)和一个相对于基础地址的偏移地址相加,给出内存单元的物理地址。

    段的概念:每一个段有一个段地址,但是内存并不是被划分成一段一段的,而是由于CPU进行划分。

    由于16位地址的寻址能力是64KB,所以一个段的最大长度为64KB,并且段的起始地址一定是16的倍数,变化范围为0~ffffH。

    8086CPU有4个段寄存器:CS,DS,SS,ES。

    CS和IP是8086CPU中两个最关键的寄存器,CS为代码段寄存器,IP为指令指针寄存器。

    8086CPU读取、执行的工作原理:

    CS和IP的值是可以修改的:IP每次是根据指令的空间大小进行更新。

    简单的修改CS、IP的指令:jmp指令。

    ①同时修改CS、IP的内容:jmp段地址:偏移地址

    ②只修改IP的内容:jmp 某一合法寄存器

  • 相关阅读:
    限制容器对CPU的使用
    限制容器对内存的使用
    一张图搞懂容器所有操作
    TQ2440学习笔记——Linux上I2C驱动的两种实现方法(1)
    pr_debug、dev_dbg等动态调试三
    pr_debug、dev_dbg等动态调试二
    TQ2440平台上LCD驱动的移植
    Android如何通过shareduserid获取系统权限
    基于Android的串口聊天室 (基于tiny4412) 一
    Java中的泛型方法
  • 原文地址:https://www.cnblogs.com/Vincent12/p/9744025.html
Copyright © 2011-2022 走看看