• 汇编学习笔记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] 。

  • 相关阅读:
    FND_CONCURRENT.SET_COMPLETION_STATUS(服务器端函数)
    Oracle 11i与12R在功能上有什么区别
    查看oracle数据库最近执行了哪些sql语句
    How to Change the First Accounting Open Period
    AR Adjustment
    Oracle 临时表
    (转)不用安装oracle客户端,PL/SQL也能远程访问数据库
    ERP 是否支持同个账户,同一时间,只能有一个连接?
    多组织访问控制(MOAC)
    【精华ASP代码收集】
  • 原文地址:https://www.cnblogs.com/hailong/p/1892415.html
Copyright © 2020-2023  润新知