zoukankan      html  css  js  c++  java
  • 寄存器总结

    寄存器总结

    si(esi)/di(edi) 变址寄存器(index register)

    寄存器ESI、EDI、SI和DI称为变址寄存器(Index Register)
    它们主要用于存放存储单元在段内的偏移量,用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。
    变址寄存器不可分割成8位寄存器。
    作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。
    它们可作一般的存储器指针使用。
    在字符串操作指令的执行过程中,对它们有特定的要求,而且还具有特殊的功能。

    SI是源变址寄存器,DI是目的变址寄存器。可以用来存放数据、地址,功能类似、用法类似、一般使用哪个都可以。
    但需要注意的是:在串处理指令中,SI用作隐含的源串地址,段地址默认在DS中;DI用做隐含的目的串地址,段地址默认在ES中;此时不能混用。

    寄存器寻址

    在8086CPU中,只有bx、si、di、bp寄存器可以在“[…]”中来进行内存单元的寻址,比如下面指令时正确的:
    MOV AX, [BX + SI]
    MOV AX, [BX + DI]
    MOV AX, [BP]
    MOV AX, [BP + SI]
    MOV AX, [BP + DI]

    而下面的指令是错误的
    MOV AX, [CX]
    MOV AX, [AX]
    MOV AX, [DX]
    MOV AX, [DS]

    在[…]中,这4个寄存器可以单个出现,或只能以4种组合出现:BX和SI,BX和DI,BP和SI,BP和DI,比如下面的指令时正确的:
    MOV AX, [BX]
    MOV AX, [SI]
    MOV AX, [DI]
    MOV AX, [BP]
    MOV AX, [BX + SI]
    MOV AX, [BX + DI]
    MOV AX, [BP + SI]
    MOV AX, [BP + DI]
    MOV AX, [BX + SI + IDATA]
    MOV AX, [BX + DI + IDATA]
    MOV AX, [BP + SI + IDATA]
    MOV AX, [BP + DI + IDATA]

    下面的指令是错误的:
    MOV AX, [BX + BP]
    MOV AX, [SI + DI]

    只要在[…]中使用寄存器BP,而指令中没有显性地给出段地址,段地址就默认在SS中,比如:
    MOV AX , [B] 含义 AX = (SS) * 16 + BP;

    BP: 是和堆栈指针SP联合使用的,作为SP校准使用的,只有在寻找堆栈里的数据和使用个别的寻址方式时候才能用到.
    比如说,堆栈中压入了很多数据或者地址,你肯定想通过SP来访问这些数据或者地址,但SP是要指向栈顶的,是不能随便乱改的,这时候你就需要使用BP,把SP的值传递给BP,通过BP来寻找堆栈里数据或者地址.

    标志位 Flag

  • 相关阅读:
    英语范文——人的名字的重要性
    英语写作常用句型
    英语范文——构建绿色校园
    OpenGL实例:三角形
    Python+Selenium笔记(二):配置谷歌+IE环境
    Python+Selenium笔记(一):环境配置+简单的例子
    Python笔记(八):web开发
    Python笔记(七):字典、类、属性、对象实例、继承
    Python笔记(六):推导数据
    Python笔记(五):异常处理和数据存储
  • 原文地址:https://www.cnblogs.com/qiangge-blog/p/11301351.html
Copyright © 2011-2022 走看看