第6章 32位指令及其编程
第 6 章
教学重点 在16位8086指令系统基础 上,我们扩展到32位80x86 指令系统。重点掌握: √32位编程环境 32位指令及其编程 √32位寻址方式 √32位指令编程方法 √ Windows应用程序编程
教学重点 在16位8086指令系统基础 上,我们扩展到32位80x86 指令系统。重点掌握: ✓32位编程环境 ✓32位寻址方式 ✓32位指令编程方法 ✓Windows应用程序编程
第6章 IA-32结构的指令系统 >整数指令集 16位整数指令集 ■32位整数指令集 在 >浮点指令集 32 16 >MMX指令集 整 基 >SSE指令集 数 础出 指 主要指令集 >SSE2指令集 集 上形成 SSE3指令集 的
第 6 章 IA-32结构的指令系统 ➢整数指令集 ◼ 16位整数指令集 ◼ 32位整数指令集 ➢浮点指令集 ➢MMX指令集 ➢SSE指令集 ➢SSE2指令集 ➢SSE3指令集 主 要 指 令 集 在 16 指 令 基 础 上 形 成 的 32 位 整 数 指 令 集
第6章 6.132位指令的运行环境 实地址方式 保护方式 虚拟8086方式 16位逻辑段:段地址和偏移地址都是16位 段地址左移4位加偏移地址形成20位物理地址 32位逻辑段:段地址和偏移地址都是32位 段地址加偏移地址形成32位线性地址
第 6 章 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 位 存器
第 6 章 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位值
第 6 章 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,[1234h1 (4)mov eax, Tebx (5)mov eax, Tebx+80h] (6)mov eax, Tebx+esi] (mov eax, [ebx+esi+80hI (8)mov eax, [esi*2] (9) mov eax, [ebx+esi*4] (0) mov eax, Tebx+esi*8+80h
第 6 章 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.1.3机器代码格式 字0字节12字节0字02字节012字 6位指令 指令前缀19超越|操码|m0tm位移量立叫 前缀 寻址方式 字节0字节0字节0字12字0字0字024字4字带节 031位指 指令前级|段超越 地址操伥数 长蔑是1燥码m7m位移量立明
第 6 章 6.1.3 机器代码格式
第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位的自然增强
第 6 章 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章 将立即数压入堆栈 PUSH i8/116/i32 把16位或32位立即数i16/32压入堆栈。若是8 位立即数i,经符号扩展成16位后再压入堆栈 push 1234h ;压入16位立即数 push87654321h;压入16位立即数 call helloabc add esp, 6 ;平衡堆栈
第 6 章 将立即数压入堆栈 PUSH i8/i16/i32 ;把16位或32位立即数i16/i32压入堆栈。若是8 位立即数i8,经符号扩展成16位后再压入堆栈 push 1234h ;压入16位立即数 push 87654321h ;压入16位立即数 call helloabc add esp,6 ;平衡堆栈