(3)堆栈操作指令 PUSH OPRD(压入堆栈指令) POP OPRD(弹出堆栈指令) 例如: MOV AX, 1234H MOv DX, 5678H MOV SP, 2000H PUSH AX PUSH DX POP DX POP AX
(3)堆栈操作指令 PUSH OPRD(压入堆栈指令) POP OPRD(弹出堆栈指令) 例如: MOV AX,1234H MOV DX,5678H MOV SP,2000H PUSH AX PUSH DX ┇ POP DX POP AX
当执行完两条压入堆栈的指令时,堆栈中的内容 如图3-15所示 IFFCHL 78 SP→1FL78 IFFDH 堆栈段 1 FFDH 34 堆栈段 IFFEH IFFEH I FFFH I FFFH SP→2000日 200OH ①SP-1→SP SP=IFFFH (SP)←AH ②SP-1→SP SP=IFFEH ,(SP)←AL ③SP-1→SP SP=IFFDH SP)←DH ④SP-1→SP SP=IFFCH ,(SP)←DL
当执行完两条压入堆栈的指令时,堆栈中的内容 如图3-15所示。 2000H 1FFFH 1FFEH 1FFDH 1FFCH SP 12 34 56 78 堆栈段 2000H 1FFFH 1FFEH 1FFDH SP 1FFCH 12 34 56 78 堆栈段 . . . . . . . . . . . . ①SP-l → SP ;SP=1FFFH ,(SP)←AH ②SP-l → SP ;SP=1FFEH ,(SP)←AL ③SP-l → SP ;SP=1FFDH ,(SP)←DH ④SP-l → SP ;SP=1FFCH ,(SP)←DL
SP→1FFCH 1 FFDH 堆栈段 I FFDH 堆栈段 I FFEH IFFEH 1FFFH SP→2000H 200OH 每执行一条压入堆栈指令,堆栈地址指针SP减2,压入堆栈的数据放在栈项 弹出堆栈的过程与此刚好相反,每弹出1个字,栈顶指针SP的值加2 ①DL←(SP) SP+1→SP SP=IFFDH ②DH←(SP) SP+1→SP SP=IFFEH ③AL←(SP) SP+1→SP SP=IFFF H ④AH←(SP);SP+1→SP SP=2000H
2000H 1FFFH 1FFEH 1FFDH 1FFCH SP 12 34 56 78 堆栈段 2000H 1FFFH 1FFEH 1FFDH SP 1FFCH 12 34 56 78 堆栈段 . . . . . . . . . . . . 每执行一条压入堆栈指令,堆栈地址指针SP减2,压入堆栈的数据放在栈项。 弹出堆栈的过程与此刚好相反,每弹出1个字,栈顶指针SP的值加2。 ①DL←(SP) ;SP+l → SP ,SP=1FFDH ②DH←(SP) ;SP+l → SP ,SP=1FFEH ③AL←(SP) ;SP+l → SP ,SP=1FFF H ④AH←(SP) ;SP+l → SP ,SP=2000H
2地址传送指令 8086有3条地址传送指令 1)LEA指令 指令格式: LEA OPRDI,OPRD2 执行功能:该指令把源操作数OPRD2的地址偏移量传送至 目的操作数OPRD中。 源操作数必须是一个内存操作数,目的操作数必须是一个 16位的通用寄存器。这条指令通常用来建立串指令操作所 需的地址指针 LEA BX, DATA 和 MOV BX, OFFSET DATA等价 LEA SI, BUFFER 和 MOV SI, OFFSET BUFFER等价
2.地址传送指令 8086有3条地址传送指令。 (1)LEA指令 指令格式: LEA OPRDl,OPRD2 执行功能:该指令把源操作数OPRD2的地址偏移量传送至 目的操作数OPRDl中。 源操作数必须是一个内存操作数,目的操作数必须是一个 16位的通用寄存器。这条指令通常用来建立串指令操作所 需的地址指针。 LEA BX,DATA 和MOV BX,OFFSET DATA等价 LEA SI,BUFFER 和MOV SI,OFFSET BUFFER等价
(2)LDS指令 该指令完成一个地址指针的传送。地址指针包括段地址和 地址偏移量。指令执行时,将段地址送入DS,地址偏移 量送入一个16位的指针寄存器或变址寄存器。 例如: LDS SI, BXI 是把Bⅹ所指的32位地址指针的段地址送入DS,偏移地址 送入SI。 (3)LES指令 这条指令除将地址指针的段地址送入ES外,其他操作与 LDS的类似。 例如 ES DI, BXI 是把BX所指的32位地址指针的段地址送入ES,偏移地址 送入DI
(2)LDS指令 该指令完成一个地址指针的传送。地址指针包括段地址和 地址偏移量。指令执行时,将段地址送入DS,地址偏移 量送入一个16位的指针寄存器或变址寄存器。 例如: LDS SI,[BX] 是把BX所指的32位地址指针的段地址送入DS,偏移地址 送入SI。 (3)LES指令 这条指令除将地址指针的段地址送入ES外,其他操作与 LDS的类似。 例如: LES DI,[BX] 是把BX所指的32位地址指针的段地址送入ES,偏移地址 送入DI