第5章 32位指令及其编程
第 5 章
教学重点 在16位8086指令系统基础 上,我们扩展到32位80x86 指令系统。重点掌握: √32位编程环境 32位指令及其编程 √32位寻址方式 √32位指令编程方法
教学重点 在16位8086指令系统基础 上,我们扩展到32位80x86 指令系统。重点掌握: ✓32位编程环境 ✓32位寻址方式 ✓32位指令编程方法
第5 IA-32结构的指令系统 >整数指令集 16位整数指令集 在 ■32位整数指令集 32 16 >浮点指令集 整 >MMX指令集 基 数 础 指 >SSE指令集 主要指令集 >SSE2指令集 集 上形成 的
第5章 IA-32结构的指令系统 ➢整数指令集 ◼ 16位整数指令集 ◼ 32位整数指令集 ➢浮点指令集 ➢MMX指令集 ➢SSE指令集 ➢SSE2指令集 主 要 指 令 集 在 16 指 令 基 础 上 形 成 的 32 位 整 数 指 令 集
第5 5.132位指令的运行环境 实地址方式 保护方式 虚拟8086方式 16位逻辑段:段地址和偏移地址都是16位 段地址左移4位加偏移地址形成20位物理地址 32位逻辑段ε段地址和偏移地址都是32位 段地址加偏移地址形成32位线性地址
第5章 5.1 32位指令的运行环境 实地址方式 保护方式 虚拟8086方式 16位逻辑段:段地址和偏移地址都是16位 ——段地址左移4位加偏移地址形成20位物理地址 32位逻辑段:段地址和偏移地址都是32位 ——段地址加偏移地址形成32位线性地址
第5 5.1.132位寄存器组 >8个32位通用寄存器: EAX EBX ECX EDX ESI EDI EBP ESP >6个16位段寄存器: 基础上 在原有 CS SS DS ES FS GS扩 >32位指令指针寄存器:E|P展16 >32位标志寄存器: EFLAGS为寄 >其他的32位系统用寄存器2 位
第5章 5.1.1 32位寄存器组 ➢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 位
第5 5.1.232位存储器寻址方式 32位有效地址 基址寄存器+(变址寄存器×比例)+位移量 >基址寄存器—任何8个32位通用寄存 器之 变址寄存器—除ESP之外的任何32 位通用寄存器之 比例—可以是1/2/4/8 位移量—可以是8/32位值
5.1.2 32位存储器寻址方式 32位有效地址= 基址寄存器+(变址寄存器×比例)+位移量 ➢基址寄存器——任何8个32位通用寄存 器之一 ➢变址寄存器——除ESP之外的任何32 位通用寄存器之一 ➢比例——可以是1 / 2 / 4 / 8 ➢位移量——可以是8 / 32位值 第5章
第5 32位存储器寻址方式 (1) mov eax,44332211h (2) mov eax, ebx (3)mov eax, [1234h] ( 4)mov eax, [ebx] (5)mov eax, lebX+80h] (6)mov eax, [ebx+esi] (7 mov eax, [ebx+esi+80h1 (8)mov eax, [esi*2] (9) mov eax, [ebx+esi*4 (0) mov eax, Tebx+esi*8+80h
第5章 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]
第5 5.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位的自然增强
第5章 5.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位的自然增强
第5 将立即数压入堆栈 PUSH i8/116/i32 把16位或32位立即数i16/32压入堆栈。若是8 位立即数i褐,经符号扩展成16位后再压入堆栈 push 1234h 压入16位立即数 push87654321h;压入16位立即数 call helloabc add sp, 6 ;平衡堆栈
将立即数压入堆栈 PUSH i8/i16/i32 ;把16位或32位立即数i16/i32压入堆栈。若是8 位立即数i8,经符号扩展成16位后再压入堆栈 push 1234h ;压入16位立即数 push 87654321h ;压入16位立即数 call helloabc add sp,6 ;平衡堆栈 第5章
第5 通用寄存器全部进出栈 PUSHA ;顺序将 AX/CXDX/ BX/SP/BP/SIDI压入堆栈 POPA ;顺序从堆栈弹出 DISIBPISPIBXDX/CX/AX (与 PUSHA相反) ;其中应进入SP的值被舍弃,并不进入SP,SP 通过增加16来恢复
通用寄存器全部进出栈 PUSHA ;顺序将AX/CX/DX/BX/SP/BP/SI/DI压入堆栈 POPA ;顺序从堆栈弹出DI/SI/BP/SP/BX/DX/CX/AX (与PUSHA相反) ;其中应进入SP的值被舍弃,并不进入SP,SP 通过增加16来恢复 第5章