第11章80x86汇编语言程序设计内容摘要:

25H 524FEH 31H 524FFH SP 52500H SP 52500H 3125H 3125H 低地址 低地址 进栈方向 现代微机原理与接口技术 05:47 36 POP 出栈指令 格式: POP DST 操作: 16位指令: DST((SP)+1,(SP)) SP(SP)+2 32位指令: DST((ESP)+3,(ESP)+2,(ESP)+1,(ESP)) (ESP)(ESP)+4 举例: POP AX POP DAT[BX][SI] POP DS POP ECX 现代微机原理与接口技术 05:47 37 出栈指令示例 POP BX 执行前 执行后 BX BX 75C1H 低地址 低地址 SP 6Bh 51000H 6Bh 51000H 48h 1H 48h 1H 9Ah 2H SP 9Ah 2H 28h 3H 28h 3H 48h 6Bh 出栈方向 现代微机原理与接口技术 05:47 38 PUSHA/PUSHAD 所有寄存器进栈 格式: PUSHA PUSHAD PUSHAD: ( 386及其后继机型) 32位通用寄存器依次进栈,次序为: EAX, ECX, EDX, EBX,指令执行前的 ESP, EBP, ESI, EDI 指令执行后 ESP(ESP)32 仍指向栈顶 PUSHA: ( 286及其后继机型) 16位通用寄存器依次进栈,次序为: AX, CX , DX, BX,指令执行前的 SP, BP, SI, DI 指令执行后 SP(SP)16 仍指向栈顶 操作: 现代微机原理与接口技术 05:47 39 PUSHAD指令示例 (SDI) 32 (ESI) 28 (EBP) 24 (ESP)原 20 (EBX) 16 (EDX) 12 (ECX) 8 (EAX) 4 0 (ESP)原 (ESP) 执行前 执行后 现代微机原理与接口技术 05:47 40 POPA/POPAD 所有寄存器出栈 格式: POPA POPAD POPAD: ( 386及其后继机型) 32位通用寄存器依次出栈,次序为: EDI, ESI, EBP, ESP, EBX, EDX, ECX , EAX 指令执行后 ESP(ESP) +32 仍指向栈顶 POPA: ( 286及其后继机型) 16位通用寄存器依次出栈,次序为: DI, SI, BP, SP, BX, DX, CX , AX 指令执行后 SP(SP) +16 仍指向栈顶 操作: 现代微机原理与接口技术 05:47 41 XCHG 交换指令 格式: XCHG OPR1, OPR2 操作: (OPR1) (OPR2) 说明: 1)操作数不允许为段寄存器 2)两个操作数长度必须相同 3)本指令不影响状态标志位 如: XCHG EAX, EBX ;寄存器之间交换 XCHG BX, [BP+DI] ;寄存器与存储器之间交换 XCHG [SI], DX 现代微机原理与接口技术 05:47 42 交换指令示例 XCHG DX, DATA[BP] 设 (SS)=5000H, (BP)=0400H, DATA=1800H 物理地址 =5000H*16+0400H+1800H=51C00H 执行前 执行后 DX DX 37CDH 51C00H 42H 51C00H 1 6DH 1 CDH 37H 6D42H 现代微机原理与接口技术 05:47 43 XLAT查表指令(换码指令) 格式: XLAT TABLE 或 XLAT 操作: AL((BX)+(AL)) 或 AL((EBX)+(AL)) 将 AL中的当前内容转换为表中某一种代码。 执行前一定要将表的首址 (TABLE)赋给 BX(或 EBX)寄存器,将代码在表中距首址的偏移放在 AL寄存器中。 XLAT指令示例 TABLE 30H LEA BX, TABLE +1 31H ;表首址给 BX +2 32H MOV AL, 4 +3 33H ;待转换内容到 AL +4 34H XLAT +5 35H +6 36H +7 37H 34H AL 现代微机原理与接口技术 05:47 44 LDS (load DS with pointer) 指针送寄存器和 DS LES (load ES with pointer) 指针送寄存器和 ES LFS (load FS with pointer) 指针送寄存器和 FS LGS (load GS with pointer) 指针送寄存器和 GS LSS (load SS with pointer) 指针送寄存器和 SS 地址传送指令 LEA (load effective address) 有效地址送寄存器 现代微机原理与接口技术 05:47 45 LEA指令示例 LEA SI, [BX] LEA DI, BUFFER 设 (DS)=2020H, (BX)=1234H。 将变量 BUFFER的 执行后。 地址送到 DI,而 SI。 不是将 BUFFER变 21234H 78H。 量的值送 DI 5 56H 1234H1234H BX LEA 装载有效地址指令 格式: LEA DST, SRC 操作: DSTSRC的有效地址 EA 说明: SRC必须是存储器操作数,而 DST则必须是一个 16位或 32位 的通用寄存器 (AX..DI..) 现代微机原理与接口技术 05:47 46 LDS 装载数据段指针指令 格式: LDS DST, SRC 操作: DST(SRC) DS(SRC+2) 或 DS(SRC+4) LES 、 LFS、 LGS、 LSS 格式:同 LDS 说明: 1) 源操作数必须是存储器操作数 2) 目的操作数必须是寄存器 3) 完成一个逻辑地址的传送,该逻辑地址须用伪指令预先定义在当前数据段中 现代微机原理与接口技术 05:47 47 7659H 2020H 21000H 45H 21001H D6H 21002H 00H 21003H 50H D645H 5000H DS DI DI DS LDS指令示例 LDS DI, [BX] 设 (DS)=2020H, (BX)=1000H 执行前 执行后 再比如: LDS BX, BUFF[SI] LDS DI, BUFF 现代微机原理与接口技术 05:47 48 LEA与 LDS的区别 LEA SI, BUFF LDS DI, BUFF BUFF(21000H) 45H +1 D6H +2 00H +3 50H 设 (DS)=2020H EABUFF=1000H 执行后: SI=1000H DI=D645H DS=5000H 思考 : LDS DI, BX是合法指令吗。 现代微机原理与接口技术 05:47 49 LAHF(load AH with flags) 标志送 AH SAHF(store AH into flags) AH送标志寄存器 标志寄存器传送指令 PUSHF/PUSHFD(push the flags or eflags) 标志进栈 POPF/POPFD(pop the flags or eflags) 标志出栈 现代微机原理与接口技术 05:47 50 LAHF 标志寄存器送 AH指令 格式: LAHF 操作: AHFLAGS 70 即将标志寄存器的最低 8位送 AH中 SAHF 送标志寄存器指令 格式: SAHF 操作: FLAGS 70(AH) 即将 AH寄存器内容送 FLAGS低 8位 说明。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。