zoukankan      html  css  js  c++  java
  • 汇编学习笔记5

    在笔记4里,有两个概念混淆不清,即存储器和寄存器.

    8086,8088系统共有14个16位寄存器和8个8位寄存器,其中,BX,SI,DI,SP都可用于寄存器指针,默认情况下与DS匹配使用。BP也可用于寄存器指针,默认情况下与SS匹配使用。

    8086,8088CPU共有20根总线,可寻址范围为2^20个地址空间,可表示1M地址空间。存储器以字节为单元存储数据,即可寻址范围为1M字节,可用5位16进制数表示:FFFFFH。而寄存器为16位二进制数,为使寄存器能够访问任一存储单元,采用存储器分段的方法。寄存器段的大小为64K,即2^16。寄存器段的起始地址必然为任一小段的起始地址。存储器中小段的划分为从0开始每16个字节为一小段。

    寄存器中的数据如果以字为单元存储,则遵守高高低低的原则。

    8086,8088CPU共有七种寻址方式,第四讲共讲了其中五种方式:

    1.立即寻  

        操作数是立即数,如 MOV AX, 1002H  就是把 1001H放入AX。

    2.寄存器直接寻

        操作数是寄存器,如 MOV AX,BX 就是把BX的内容放入AX,如果执行前AX = 1002H,BX = 2014H,则执行后AX = 2014H, BX = 2014H。

    3.直接寻

        操作数可直接定位段中的地址,默认是在DS段中,通常是变量。如 MOV AX, [1002H] 把DS 偏移1002H 位置的内容放入AX,如DS段的起始位置为 25470H,则[1002H]为 25470H + 1002H = 26472H,此操作把存储器26472位置的值放入AX。可以是变量  MOV AX, VALUE  或 MOV AX, [VALUE] 二者等效。也可做段限定,不使用默认段: MOV AX, ES: [2027H]  ,此操作不从DS段起始地址开始偏移,而是从ES段起始地址开始。

    4.寄存器间接寻

       操作数是寄存器中的内容作为地址。如MOV AX, [BX] ,取出BX中的内容后, 默认从DS开始偏移,偏移位数为BX中的数。如BX 中的数为0047H, DS 段值为 157EH, 第二个操作数物理地址为 157E0H + 0047H = 15837H,将存储器中位置在15837H中的内容放入AX。也可使用段限定,如 MOV AX, ES: [BP]。在不使用限定的情况下,当操作数中的寄存器为BX,DI,SI时,默认使用段为DS,当 操作数中的寄存器为 BP时,默认使用段为SS。此规则适用于任何寄存器间接寻。

    5.寄存器相对寻

       操作数是寄存器中的内容加一偏移。如 MOV AX, [BX+3],取出 BX中的内容,加3后在适当段中取出物理地址,取出实际内容放入AX中。也可写为 MOV AX, 3+[BX] 。

  • 相关阅读:
    在阿里云上遇见更好的Oracle(三)
    从传统IT快速走向公共云计算
    在阿里云上遇见更好的Oracle(二)
    Oracle 11g 审计跟踪管理
    在阿里云上遇见更好的Oracle(一)
    Elasticsearch中的DocValues
    初识Django —Python API接口编程入门
    为什么mysqld启动报错
    云计算产品的四件套
    说说云计算中的地域和可用区概念
  • 原文地址:https://www.cnblogs.com/hailong/p/1892415.html
Copyright © 2011-2022 走看看