zoukankan      html  css  js  c++  java
  • 8086寻址方式

    CPU寄存器

    8086 CPU 中寄存器总共为 14 个,且均为 16 位 。

    即 AX,BX,CX,DX,SP,BP,SI,DI,IP,FLAG,CS,DS,SS,ES 共 14 个。

    而这 14 个寄存器按照一定方式又分为了通用寄存器,控制寄存器和段寄存器。

    通用寄存器:

    AX,BX,CX,DX 称作为数据寄存器:

    • AX (Accumulator):累加寄存器,也称之为累加器;

    • BX (Base):基地址寄存器;

    • CX (Count):计数器寄存器;

    • DX (Data):数据寄存器;

    可以分为两个独立的 8 位的 AH(BH, CH, DH) 和 AL(BL, CL, DL) 寄存器

    SP 和 BP 又称作为指针寄存器:

    • SP (Stack Pointer):堆栈指针寄存器;

    • BP (Base Pointer):基指针寄存器;

    SI 和 DI 又称作为变址寄存器:

    • SI (Source Index):源变址寄存器;

    • DI (Destination Index):目的变址寄存器;

    控制寄存器:

    • IP (Instruction Pointer):指令指针寄存器;

    • FLAG:标志寄存器;

    段寄存器:

    • CS (Code Segment):代码段寄存器;

    • DS (Data Segment):数据段寄存器;

    • SS (Stack Segment):堆栈段寄存器;

    • ES (Extra Segment):附加段寄存器;

    操作数寻址

    立即寻址

    示例:

    MOV AX, 1234H ; 给AX寄存器赋值为1234H
    

    直接寻址

    示例;

    MOV BX, DS:[2000H]
    

    操作数存放在存储器中, 偏移量直接写在操作数中,.

    地址为数据段寄存器DS的值* 16 (<<4)然后加上直接给出的偏移量2000H.

    寄存器寻址

    示例:

    MOV DX, AX ;将AX中的值赋给DX 
    

    直接使用寄存器中的值作为操作数, 速度较快.

    寄存器间接寻址

    操作数存放在存储器中, 16位偏移地址存放在SI, DI, BP, BX四个寄存器之一中.

    若使用BX, SI, DI之一作为寄存器, 操作数默认放在DS所决定的数据段中.

    即地址为:DS *16 + BX

    示例:

    MOV AX, [SI] ; 将DS*16 + SI中的值放入AX中
    

    若使用BP做间接寻址, 操作数默认放在SS决定的堆栈段中.

    示例:

    MOV AX, [BP]  ;将SS*16 + BP中的值放入AX中
    

    可以直接指定使用的段寄存器:

    MOV  AX, SS:[SI]  ;将SS*16 + SI中的值放入AX中
    

    寄存器相对寻址

    操作数存放在存储器中, 使用段寄存器内容* 16 加SI, DI, BP, BX四个寄存器之一的内容再加直接给出的位移量.

    若使用BX, SI, DI之一作为寄存器, 操作数默认放在DS所决定的数据段中; 若使用BP做间接寻址, 操作数默认放在SS决定的堆栈段中.

    与寄存器间接寻址相比只是增加了直接给出的偏移量:

    示例:

    MOV AX, [SI-2] ; 将 DS*16 + SI - 2中的值放入AX中
    MOV AX, [BP+4]  ;将 SS*16 + BP + 4中的值放入AX中
    MOV  AX, SS:[SI-8]  ;将 SS*16 + SI - 8中的值放入AX中
    

    基址变址寻址

    将段地址寄存器的值*16加上基址寄存器(BX,BP)之一的地址加上变址寄存器(SI, DI)之一的值作为地址.

    若使用BX作基址 操作数默认放在DS所决定的数据段中; 若使用BP做基址, 操作数默认放在SS决定的堆栈段中.

    示例:

    MOV AX, [BX][SI] ; 将 DS*16 +BX + SI中的值放入AX中
    MOV AX, [BP][DI]  ;将 SS*16 + BP + DI 中的值放入AX中
    MOV  AX SS:[Bx][SI]  ;将 SS*16 + BX + SI 中的值放入AX中
    

    基址变址相对寻址

    在基址变址寻址基础上再加一个直接给出的偏移量:

    示例:

    MOV AX, 1234H[BX][DI] ;将DS * 16 + BX + DI + 1234H中的值放入AX中.
    

    还有几种表示方法与上式等价:

    MOV AX, [BX+DI+1234H]
    
    MOV AX, 1234H[BX+DI]
    
    MOV AX, 1234H[BX][DI]
  • 相关阅读:
    ^_^【CSS代码规范】规则顺序
    【html】三
    【代码组织】♣一
    LINUX nautilus 命令
    hadoop 统计一个目录的文件大小
    hadoop基本配置信息
    linux中用到的命令
    简单的hadoop配置(我安装的问题)
    hadoop不能用root用户启动,会报错
    linux 下的ps与jps
  • 原文地址:https://www.cnblogs.com/Finley/p/5573477.html
Copyright © 2011-2022 走看看