文档详情

存储器寻址方式.doc

发布:2017-03-25约1.65千字共3页下载文档
文本预览下载声明
存储器寻址方式 存储器寻址方式的操作数存放在主存储器中,用其所在主存的位置表示操作数。在这种寻址方式下,指令中给出的是有关操作数的主存地址信息。8088的存储器空间是分段管理的。程序设计时采用逻辑地址;由于段地址在默认的或用段超越前缀指定的段寄存器,所以采用偏移地址,称之为有效地址(Effective Address, EA) 直接寻址 在这种寻址方式下,指令中直接包含了操作数的有效地址,跟在指令操作码之后。其默认的段地址在DS段寄存器中,可以采用段超越前缀。 例 将数据段中偏移地址2000H处的内存数据送至AX寄存器。 MOV AX, [2000H] 该指令中给定了有效地址2000H, 默认与数据段寄存器DS一起构成操作数所在存储单元的物理地址。 如果DS=1429H,则操作数所在的物理地址为1429H*16+2000H=16920H. 该指令的执行结果是将16920H单元的内容传送至AX寄存器,其中,高字节内容送AH寄存器,低字节内容送AL寄存器。 MOV AX, [2000H];指令代码:A1 00 20 例: 将附加段中偏移地址2000H处的内存数据送至AX寄存器。 MOV AX, ES:[2000H]; 指令代码:26 A1 00 20 变量指示内存的一个数据,直接引用变量就是采用直接寻址方式。变量应该在数据段进行定义,常用的变量定义伪指令DB和DW分别表示字节变量和字变量,例如 WVAR DW 1234H; 定义字变量WVAR,它的初值是1234H 这样,标示符WVAR表示具有初值1234H的字变量,并由汇编程序为它内存分配了两个连续的字节单元。假设它在数据段偏移地址是0010H。 例:将数据段的变量WVAR(即该变量名指示的内存单元数据)送至AX寄存器。 MOV AX, WVAR; 指令功能: 上述指令实质就是如下指令: MOV AX, [0010H]; 指令代码: 代码:26 A1 00 20 AX=1234H 堆栈操作指令 堆栈是一个“先进后出”的主存区域,使用SS段寄存器记录段地址;堆栈只有一个出口,即当前站顶,用堆栈指针寄存器SP指定堆栈站顶的偏移地址。 堆栈操作的对象只能是字操作。进站时,SP向低地址移动两个字节单元以指向新的栈顶,然后数据的低字节于存放低地址,高字节存放于高地址。出栈时,字从栈顶弹出,低地址字节送低字节,高地址字节送高地址,SP相应向高地址移动两个字节单元。 MOV ax, 7812H PUSH ax; 将AX内容推入堆栈(如图1) POP AX;将当前堆栈内容弹给AX(如图2) PUSH [2000H] POP WVAR 堆栈段是程序不可或缺的一个内存区。堆栈可用来临时存放数据,以便随时恢复它们。堆栈常用于寄存器的保护以及子程序间的参数传递。 ---- ------ 00H A1H 20H 数据低字节 数据高字节 ------ AH AL 高地址 低地址 -------- 存储器 操作码 偏移地址低字节 偏移地址高字节 2000H 14920H + 16920H DS: 1492H 物理地址 ① ② ③ ④ AX WVAR AX DS:[0010H] 7812H SP(新栈顶) 低地址 SP+2 SP(新栈顶) SS: AX --------- SP-2 SP(栈顶) 存储器 低地址 高地址 堆栈体 Push ax --------- 7812H AX 78H高地 12H低地 ---- ------ 78H高地 存储器 12H低地 ---- ------ 堆栈体 SS: SP(原栈顶) Pop ax 高地址 进栈 出栈
显示全部
相似文档