第二章8086的指令系统 查表示意图 查表步骤(求某数的平方) ①在内存中建立数据表格; ②将表格的首地址送入BX中 25③假定要求“3”的平方,将3送 16 寄存器AL中; 09 ④执行指令XLAT 表格首地址 04 ⑤执行:AL←[BX+3](DS) 01 执行结束:AL=9 ×××HL_00 AL中的内容被“换码” 2.1节目录
第 二 章 8086 的 指 令 系 统 11 查表示意图(end) 16 09 04 01 00 25 查表步骤(求某数的平方) ①在内存中建立数据表格; ②将表格的首地址送入BX中; ③假定要求“3”的平方,将3送 入 寄存器AL中; ④执行指令 XLAT; ⑤执行:AL←[BX+3](DS) 执行结束:AL= 9。 AL中的内容被“换码”! 表格首地址 查表示意图 2.1节 目录 ××××H
第二章8086的指令系统 2.1.2堆栈操作指令 能够实现“后进先出(先进后出)的存储器组织 (或存储器块)称为堆栈。 引入堆栈:以三层子程序嵌套为例,逐级进入子程 序时,A、B、C三点都有断点和现场需要保护,顺序为 A→B→C;当子程序sub3执行结束,逐级返回时, main sub1 sub2 sub3 最后被保护的C点数据应 最先恢复,最先保护的A 点数据应最后恢复。为此, 通常在内存中开辟一段区 A B 域,结合软硬件技术,使 其具有保护数据和后进先 出的功能。此为堆栈
第 二 章 8086 的 指 令 系 统 12 2.1.2堆栈操作指令(1) 2.1.2 堆栈操作指令 能够实现“后进先出(先进后出)的存储器组织 (或存储器块)称为堆栈。 引入堆栈:以三层子程序嵌套为例,逐级进入子程 序时,A、B、C三点都有断点和现场需要保护,顺序为 A→B→C;当子程序sub3执行结束,逐级返回时, A B C main sub1 sub2 sub3 最后被保护的C点数据应 最先恢复,最先保护的A 点数据应最后恢复。为此, 通常在内存中开辟一段区 域,结合软硬件技术,使 其具有保护数据和后进先 出的功能。此为堆栈
第二章8086的指令系统 8086堆栈管理:8086使用段寄存器SS和指针寄 存器SP管理堆栈,S决定了堆栈区的首地址,SP的初始 值决定了堆栈区的末地址,堆 栈区的最大长度随之而定。数 SS: SP 据入栈时,SP做减量调整,SP 示的单元称为“栈顶”,即 数据入栈 栈 堆顶向下延伸;SP永远指向刚刚 栈/入栈的数据。数据出栈时,SP 做增量调整,即栈顶向上延伸 SS:0000H P永远指向覆薮鏊颦出 数据出栈 完,SP恢复初始值
第 二 章 8086 的 指 令 系 统 13 堆栈操作指令(2) 8086堆栈管理:8086使用段寄存器SS和指针寄 存器SP管理堆栈,SS决定了堆栈区的首地址,SP的初始 SS:0000H SS:SP 堆 栈 区 值决定了堆栈区的末地址,堆 栈区的最大长度随之而定。数 据入栈时,SP做减量调整,SP 指示的单元称为“栈顶”,即 栈 顶向下延伸;SP永远指向刚刚 入栈的数据。数据出栈时,SP 做增量调整,即栈顶向上延伸 SP永远指向将要出栈的数据。 数据入栈 数据出栈 入栈的数据全部出 完,SP恢复初始值
第二章8086的指令系统 1. PUSH r16/m16/seg}“r16/m16/seg”作为源操作数, 栈中的存储单元作为目的操作数,指令操作如下: ①SP←SP-1,SS:[SP]←src高8位 ②$P←SP-1,SS:[SP]←src低8位 例1:PUH「BX1(设DS:[B字单元数捉为55AH) SS: LSP XXH H XXH 55H H SS:[SP]→→AH 指令执行前 指令执行后
第 二 章 8086 的 指 令 系 统 14 堆栈操作指令(3) 1.PUSH r16/m16/seg; “r16/m16/seg”作为源操作数, 堆 栈中的存储单元作为目的操作数,指令操作如下: ①SP←SP-1,SS:[SP]←src高8位 ②SP←SP-1,SS:[SP]←src低8位 例1:PUSH [BX];(设DS:[BX]字单元数据为55AAH) xxH xxH xxH AAH 55H SS:[SP] xxH 指令执行前 指令执行后 SS:[SP]
第二章8086的指令系统 2.POPr16/m6/seg“r16/m16/seg”应看作目的操作 堆栈中的单元看作源操作数,指令操作如下 ①dest低8位←S:LSP],SP←SP+1 ②dest高8位←SS:[SP],SP←SP+1 例2: POP BX;设接在例1后执行。 H SS: [SP XXH 55AAH 55H 55H BX SS:[SP]→AAH AAH 指令执行前 指令执行后
第 二 章 8086 的 指 令 系 统 15 堆栈操作指令(4) 2.POP r16/m16/seg; “r16/m16/seg”应看作目的操作 数, 堆栈中的单元看作源操作数,指令操作如下: ① dest低8位←SS:[SP],SP ← SP+1 ② dest高8位←SS:[SP],SP ← SP+1 例2:POP BX;设接在例1后执行。 AAH 55H xxH SS:[SP] 指令执行前 AAH 55H SS:[SP] xxH 指令执行后 55AAH BX