第6章 32位指令及其编程
第 6 章
教学重点 在16位8086指令系统基础 上,我们扩展到32位80x86 指令系统。了解: √32位编程环境 32位指令及其编程 √32位寻址方式 √32位指令编程方法 √ Windows应用程序编程 HTTP://DLS.ZZU.EDUCN郑州大学远程教育学院
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院 教学重点 在16位8086指令系统基础 上,我们扩展到32位80x86 指令系统。了解: ✓32位编程环境 ✓32位寻址方式 ✓32位指令编程方法 ✓Windows应用程序编程
第6章 IA-32结构的指令系统 >整数指令集 16位整数指令集 ■32位整数指令集 在 >浮点指令集 32 16 >MMX指令集 整 基 >SSE指令集 数 础出 指 主要指令集 >SSE2指令集 集 上形成 SSE3指令集 的 HTTP://DLS.ZZU.EDUCN郑州大学远程教育学院
第 6 章 HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院 IA-32结构的指令系统 ➢整数指令集 ◼ 16位整数指令集 ◼ 32位整数指令集 ➢浮点指令集 ➢MMX指令集 ➢SSE指令集 ➢SSE2指令集 ➢SSE3指令集 主 要 指 令 集 在 16 指 令 基 础 上 形 成 的 32 位 整 数 指 令 集
第6章 6132位指令的运行环境 实地址方式 保护方式 虚拟8086方式 16位逻辑段:段地址和偏移地址都是16位 段地址左移4位加偏移地址形成20位物理地址 32位逻辑段:段地址和偏移地址都是32位 段地址加偏移地址形成32位线性地址 HTTP://DLS.ZZU.EDUCN郑州大学远程教育学院
第 6 章 HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院 6.1 32位指令的运行环境 实地址方式 保护方式 虚拟8086方式 16位逻辑段:段地址和偏移地址都是16位 ——段地址左移4位加偏移地址形成20位物理地址 32位逻辑段:段地址和偏移地址都是32位 ——段地址加偏移地址形成32位线性地址
第6章 6.1.1寄存器组 >8个32位通用寄存器: EAX EBX ECX EDX ESI EDI EBP ESP >6个16位段寄存器: CS SS DS ES FS GS 基础上扩展成亠 在原有 >32位指令指针寄存器:EP 16 >32位标志寄存器: EFLAGS 位 其他的32位系统用寄存器 为寄 32 位 存器 HTTP://DLS.ZZU.EDUCN郑州大学远程教育学院
第 6 章 HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院 6.1.1 寄存器组 ➢8个32位通用寄存器: EAX EBX ECX EDX ESI EDI EBP ESP ➢6个16位段寄存器: CS SS DS ES FS GS ➢32位指令指针寄存器:EIP ➢32位标志寄存器:EFLAGS ➢其他的32位系统用寄存器 在 原 有 16 位 寄 存 器 基 础 上 扩 展 成 为 32 位
第6章 6.1.2寻址方式 32位有效地址= 基址寄存器+(变址寄存器×比例)十位移量 >基址寄存器—任何8个32位通用寄存 器之 变址寄存器—除ESP之外的任何32 位通用寄存器之 比例—可以是1/2/4/8 位移量—可以是8/32位值 HTTP://DLS.ZZU.EDUCN郑州大学远程教育学院
第 6 章 HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院 6.1.2 寻址方式 32位有效地址= 基址寄存器+(变址寄存器×比例)+位移量 ➢基址寄存器——任何8个32位通用寄存 器之一 ➢变址寄存器——除ESP之外的任何32 位通用寄存器之一 ➢比例——可以是1 / 2 / 4 / 8 ➢位移量——可以是8 / 32位值
第6章 32位寻址方式 (1) mov eax,44332211h (2 mov eax ebx (3)mov eax, [1234h (4)mov eax, tebx 75)mov eax, TebX+80h] (6)mov eax, TebX+esi (7) mov eax, Tebx+esi+80h] (8)mov eax, Tesi*21 (9)mov eax, Tebx+esi*4] () mov eax, Tebx+esi*8+80h HTTP://DLS.ZZU.EDUCN郑州大学远程教育学院
第 6 章 HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院 32位寻址方式 ⑴ mov eax, 44332211h ⑵ mov eax, ebx ⑶ mov eax, [1234h] ⑷ mov eax, [ebx] ⑸ mov eax, [ebx+80h] ⑹ mov eax, [ebx+esi] ⑺ mov eax, [ebx+esi+80h] ⑻ mov eax, [esi*2] ⑼ mov eax, [ebx+esi*4] ⑽ mov eax, [ebx+esi*8+80h]
第6章 6.232位扩展指令 >16位指令系统从两个方面向32位扩展 (1)支持32位操作数 (2)支持32位寻址方式 mov ax bx ;16位操作数 mov eax ebx;32位操作数 mov ax,ebx];16位操作数,32位寻址方式 mov eax,[ebx];32位操作数,32位寻址方式 有些指令扩大了工作范围,或指令功能实现 了向32位的自然增强 HTTP://DLS.ZZU.EDUCN郑州大学远程教育学院
第 6 章 HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院 6.2 32位扩展指令 ➢16位指令系统从两个方面向32位扩展 ⑴ 支持32位操作数 ⑵ 支持32位寻址方式 mov ax,bx ;16位操作数 mov eax,ebx ;32位操作数 mov ax,[ebx] ;16位操作数,32位寻址方式 mov eax,[ebx] ;32位操作数,32位寻址方式 ➢有些指令扩大了工作范围,或指令功能实现 了向32位的自然增强
第6章 6332位指令的程序设计 >指定汇编程序识别新指令 >处理16位段和32位段 注意有些指令在16位逻辑段和32位逻辑 段的差别 DOS环境(实地址方式和虚拟8086方式), 只能使用16位段 Windows32位保护方式,可以使用32位段 HTTP://DLS.ZZU.EDUCN郑州大学远程教育学院
第 6 章 HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院 6.3 32位指令的程序设计 ➢指定汇编程序识别新指令 ➢处理16位段和32位段 ➢注意有些指令在16位逻辑段和32位逻辑 段的差别 DOS环境(实地址方式和虚拟8086方式), 只能使用16位段 Windows 32位保护方式,可以使用32位段
例6.5-1/2 model small 386 ;采用32位指令 stack da七a avar da1234567887654321h;数据定义 code startup mov eax, dword ptr avar mov edx dword ptr avar[4]
例6.5-1/2 .model small .386 ;采用32位指令 .stack .data qvar dq 1234567887654321h ;数据定义 .code .startup mov eax,dword ptr qvar mov edx,dword ptr qvar[4]