在笔记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] 。