汇编(二)

作者: 请叫我Hank | 来源:发表于2017-07-10 19:22 被阅读2105次

    总线

    CPU
    • 每一个CPU芯片都有许多管脚,这些管脚和总线相连,CPU通过总线跟外部器件进行交互
    • 总线:一根根导线的集合
    • 总线的分类
      • 地址总线
      • 数据总线
      • 控制总线
    image.png

    ** 举个例子**

    来至书上的截图
    • 地址总线
      • 它的宽度决定了CPU的寻址能力
      • 8086的地址总线宽度是20,所以寻址能力是1M( 2^20 )
    • 数据总线
      • 它的宽度决定了CPU的单次数据传送量,也就是数据传送速度
      • 8086的数据总线宽度是16,所以单次最大传递2个字节的数据
    • 控制总线
      • 它的宽度决定了CPU对其他器件的控制能力、能有多少种控制

    数据总线

    • 8088的数据总线宽度是8,8086的数据总线宽度是16,分别向内存中写入89D8H如下图:注意:这里是16进制,后方的H是单词Hexadecimal的意思
    8088 8086

    做个小练习

    • 一个CPU 的寻址能力为8KB,那么它的地址总线的宽度为____
    • 8080,8088,80286,80386 的地址总线宽度分别为16根,20根,24根,32根.那么他们的寻址能力分别为多少____KB, ____MB,____MB,____GB?
    • 8080,8088,8086,80286,80386 的数据总线宽度分别为8根,8根,16根,16根,32根.那么它们一次可以传输的数据为:____B,____B,____B,____B,____B,
    • 从内存中读取1024字节的数据,8086至少要读____次,80386至少要读取____次.

    答案

    练习

    内存

    各类存储区的逻辑连接 各类存储器的逻辑连接-物理地址对应图 各类存储器的物理地址情况
    • 内存地址空间的大小受CPU地址总线宽度的限制。8086的地址总线宽度为20,可以定位2^20个不同的内存单元(内存地址范围0x00000~0xFFFFF),所以8086的内存空间大小为1MB

    • 0x00000~0x9FFFF:主存储器。可读可写

    • 0xA0000~0xBFFFF:向显存中写入数据,这些数据会被显卡输出到显示器。可读可写

    • 0xC0000~0xFFFFF:存储各种硬件\系统信息。只读

    寄存器

    内部部件之间由总线连接

    CPU的典型构成
    • 对程序员来说,CPU中最主要部件是寄存器,可以通过改变寄存器的内容来实现对CPU的控制
    • 不同的CPU,寄存器的个数、结构是不相同的(8086是16位结构的CPU)
    • 8086有14个寄存器
      • 都是16位的寄存器
      • 可以存放2个字节


        8086内部寄存器

    通用寄存器

    • AX、BX、CX、DX这4个寄存器通常用来存放一般性的数据,称为通用寄存器(有时也有特定用途)

    • 通常,CPU会先将内存中的数据存储到通用寄存器中,然后再对通用寄存器中的数据进行运算

    • 假设内存中有块红色内存空间的值是3,现在想把它的值加1,并将结果存储到蓝色内存空间


      001
      • CPU首先会将红色内存空间的值放到AX寄存器中:mov ax,红色内存空间
      • 然后让AX寄存器与1相加:add ax,1
      • 最后将值赋值给内存空间:mov 蓝色内存空间,ax
    • AX、BX、CX、DX这4个通用寄存器都是16位的,如下图所示
    image.png
    • 上一代8086的寄存器都是8位的,为了保证兼容, AX、BX、CX、DX都可分为2个独立的8位寄存器来使用
      • H代表高位寄存器
      • L代表低位寄存器
    image.png image.png

    字和字节

    • 在汇编的数据存储中,有2个比较常用的单位

      • 字节:byte,1个字节由8bit组成,可以存储在8位寄存器中
      • 字:word,1个字由2个字节组成,这2个字节分别称为字的高字节和低字节
    • 比如数据20000(4E20H,0100111000100000B),高字节的值是78,低字节的值是32

    image.png
    • 1个字可以存在1个16位寄存器中,这个字的高字节、低字节分别存储在这个寄存器的高8位寄存器、低8位寄存器中

    相关文章

      网友评论

      • MrQun:老师 你的课程的连接可以发下么?
        请叫我Hank:@_Somker 在网易云和B站有。我找找
      • 谈daxia:哈喽,老师,这两句话怎么理解,感觉有点矛盾:
        8086的地址总线宽度是20,所以寻址能力是1M( 2^20 );
        8086的数据总线宽度是16,所以单次最大传递2个字节的数据;

        这两句有什么区别呢 ?
        请叫我Hank:@Superman168 私聊我.当时可能我没讲清楚.
        Superman168:Hank老师,最近突然发现我好笨,第一天得课程来来回回听了几遍,还是有几个地方一直搞不懂为啥的,就是你说的拿纸算也不一定能算出来,压根不知道怎么算的,这几个:
        1.8086的地址总线宽度是20,所以寻址能力是1M( 2^20 ),一直搞不懂为啥的,怎么算的?
        2.一个CPU 的寻址能力为8KB,那么它的地址总线的宽度为____
        8080,8088,80286,80386 的地址总线宽度分别为16根,20根,24根,32根.那么他们的寻址能力分别为多少____KB, ____MB,____MB,____GB?
        后面两题还挺明白的
        Ray_Wei:地址总线宽度就是你最长的地址是多少位的。
        数据总线宽度就是你一次传输的数据是多少位的。
        比如:
        8086地址总线宽度为20位,那么你最多能用20位寻址,寻址范围是2的20次方。
        8086数据总线宽度为16位,那么你每次传输的数据是2个字节,2Byte(16位,16bit)。
        二进制数系统中,位简记为b,也称为比特,每个二进制数字0或1就是一个位(bit)。
        内存的每个地址单元是1个字节(Byte),一个Byte由8个bit(2进制位)组成。
        CPU寻址能力是指可寻址的单元(Byte)总量。
      • ZinkLin:hello Hank 老师
        练习题第二题我有个疑惑
        以8080为例
        它的地址总线宽度为16根
        = 2 ^ 6 * 2^ 10 = 64 * 1024 位
        位的单位不是bit吗?
        1 Byte == 8 bit
        那最后的结果不应该是 8KB吗 ?

        感觉后面那个单位B是不是该去掉?
        ZinkLin:@学豆 学习了。谢谢
        请叫我Hank:学豆分析是正解..
        小冰山口:我觉得你说的对, 寻址能力就是64K, 这样就好了. 但是内存的实际容量其实也是跟地址总线的宽度相当的, 而内存的最小单位是字节, 所以64K的地址总线宽度对应的内存大小就是64KB, 我想他想表述的应该就是这个意思
      • EricLihuifeng:hank 老师棒棒哒

      本文标题:汇编(二)

      本文链接:https://www.haomeiwen.com/subject/djdhcxtx.html