DOS Windows汇编语言程序设计教程 7-302-11082-4k 第五章 第五章

上传人:E**** 文档编号:89373246 上传时间:2019-05-24 格式:PPT 页数:52 大小:191.50KB
返回 下载 相关 举报
DOS Windows汇编语言程序设计教程 7-302-11082-4k 第五章 第五章_第1页
第1页 / 共52页
DOS Windows汇编语言程序设计教程 7-302-11082-4k 第五章 第五章_第2页
第2页 / 共52页
DOS Windows汇编语言程序设计教程 7-302-11082-4k 第五章 第五章_第3页
第3页 / 共52页
DOS Windows汇编语言程序设计教程 7-302-11082-4k 第五章 第五章_第4页
第4页 / 共52页
DOS Windows汇编语言程序设计教程 7-302-11082-4k 第五章 第五章_第5页
第5页 / 共52页
点击查看更多>>
资源描述

《DOS Windows汇编语言程序设计教程 7-302-11082-4k 第五章 第五章》由会员分享,可在线阅读,更多相关《DOS Windows汇编语言程序设计教程 7-302-11082-4k 第五章 第五章(52页珍藏版)》请在金锄头文库上搜索。

1、第5章 32位汇编程序设计,80186以后CPU在8086基础上增加的常用指令。 在DOS下和Windows下如何使用32位指令设计程序。 区别于DOS下的Debug,如何用W32Dasm调试Windows程序。,5.1 32位指令系统,Intel公司于1985年正式公布了32位微处理器80386。80386采用32位指令系统的结构,被Intel公司称为英特尔结构,简称IA(1ntel Architecture)结构,并明确宣布作为后续80x86微处理器的标准。在此基础上,Intel公司又相继推出了80486、Pentium、MMX Pentium 、Pentium Pro、Pentium I

2、I、Pentium III、Pentium 等微处理器,它们都继承了80386的32位指令系统,同时又新增了若干条专用指令;另外还在32位整数指令系统的基础上加入了浮点指令、整数多媒体MMX指令和浮点多媒体SSE指令,极大地丰富了Intel 80x86微处理器的指令系统,有效地增强了Intel 80x86微处理器的功能。,32位的寻址方式,Intel 80x86系列的微处理器32位CPU相对于16位CPU寻址方式的主要区别有: (1) 32位寻址方式的操作数可以是8位、16位或32位,包括32位的立即数。 例如: MOV EAX,12345678H ;源操作数为32位立即数 MOV EAX,E

3、BX ;两个寄存器均为32位 MOV EAX,2000H ;因为EAX为32位,从DS:2000H处取4字节,(2) 在使用寄存器间接寻址、寄存器相对寻址或相对的基址变址寻址时,既可以用16位的寄存器,又可以使用32位的寄存器。 例如: MOV AX,BX MOV DX,EBX MOV EAX,EBX+80H MOV EAX,EBX+ESI+0400H,(3) 80386的所有32位通用寄存器都可以作为偏移地址参加寻址,而在8086/8088/80186/80286中的AX、DX、CX寄存器不能用来存放存储器操作数的偏移地址。 例如: MOV AX,ECX ;正确 MOV BX,EAX ;正确

4、 MOV BX,AX ;在16位下错误,(4) 80386的所有32位通用寄存器都可以作为基地址寄存器使用,除了ESP寄存器以外都可以作为变址寄存器使用。,(5) 32位变址寄存器的值可以乘上一个比例常数(如1,2,4,8),乘上比例常数的变址方式对于访问数组等数据结构特别有效。 例如: MOV EAX,ESI*2 MOV EAX,EBX+ESI*8 MOV EAX,EBX+ESI*4+0400H,由此可见,16位存储器操作数的寻址方式的组成公式为: 16位有效地址=基址寄存器(BX/BP)+变址寄存器(SI/DI)+8/16位的偏移量 其中基址寄存器只能是BX或BP,变址寄存器只能是SI或D

5、I。 而32位存储器操作数的寻址方式的组成公式为: 32位有效地址=基址寄存器+(变址寄存器*比例)+8/32位的偏移量 其中基址寄存器为任何8个32位通用寄存器之一,变址寄存器为除ESP之外的任何32位通用寄存器之一,比例可以是1、2、4或8,代表操作数的长度是1、2、4或8字节,位移量可以是8或32位的值。,32位扩展指令,1数据传送指令的扩展 (1) 堆栈操作 a. 进栈指令PUSH和出栈指令POP b.16位通用寄存器进栈指令PUSHA和出栈指令POPA 从80186开始引入了如下指令: PUSHA ;顺序将AX/CX/DX/BX/SP/BP/SI/DI的内容 压入堆栈,SPSP-16

6、 POPA ;功能和PUSHA指令功能相反,SPSP+16,c. 32位通用寄存器进栈指令PUSHAD和出栈指令POPAD. 这两条指令是32位CPU新扩展的指令: PUSHAD ;顺序将 EAX/ECX/EDX/EBX/ESPEBP/ESI/EDI的内容压入堆栈,SPSP-32 POPAD ;功能和PUSHAD指令功能相反,SPSP+32,(2) 标志传送 标志传送指令增加了两条: PUSHFD ;将EFLAGS的内容压入堆栈,堆栈中D16D17两位被清0 POPFD ;将堆栈内容弹出到EFLAGS,堆栈中D20D19两位被清0,D16保持不变,(3) 地址传送 地址传送指令增加了三条: L

7、FS r16/r32, mem ;FS:r16/r32存储单元的32/48位远指针 LGS r16/r32, mem ;GS:r16/r32存储单元的32/48位远指针 LSS r16/r32, mem ;SS:r16/r32存储单元的32/48位远指针,2. 算术运算指令的扩展 (1) 乘除法指令 IMUL r16,r16/m16/i8/i16 ;r16 r16*r16/m16/i8/i16 IMUL r16,r16/m16,i8/i16 ;r16 r16/m16*i8/i16 IMUL r32,r32/m32/i8/i32 ;r32 r32*r32/m32/i8/i16 IMUL r32,

8、r32/m32,i8/i32 ;r16 r32/m32*i8/i16 指令说明:新增的这些指令要求目的操作数和源操作数的长度要相同。对于8位立即数i8要进行符号扩展,扩展后为16/32位。,(2) 符号扩展指令 80386 新扩展的指令有: CWDE ;将AX符号扩展为EAX CDQ ;将EAX符号扩展为EDX.EAX MOVSX r16,r8/m8 ;r16将r8/m8符号扩展 MOVZX r16,r8/m8 ;r16将r8/m8零位扩展 MOVSX r32,r8/m8/r16/m16 ;r32将r8/m8/r16/m16符号扩展 MOVZX r32,r8/m8/r16/m16 ;r32将r

9、8/m8/r16/m16零位扩展,3. 位操作指令扩展 移位指令从80186开始支持一个立即数做移位次数,其指令格式为: SHL/SHR/SAL/SAR/ROL/ROR/RCL/RCR reg/mem,1/cl/i8,4. 串操作指令扩展 从80186开始支持端口的串操作,配合重复前缀指令就能够实现用一条指令连续进行输入或输出操作,大大提高了CPU的I/O操作能力。,(1) 串输入 指令格式及功能: INSB/INSW/INSD ;ES:DI/EDI DX指定的输入端口,DI/EDIDI/EDI1/2/4 指令说明:INS指令从由DX指定的输入端口中输入一 个字节(INSB)或一个字(INSW

10、)或一个双字INSD) 数据到由ES:DI/EDI指定的存储单元中,且能使 DI/EDI自动1或2或4;DX内容保持不变。ES段寄 存器不能被段超越。,(2) 串输出 指令格式及功能: OUTSB/OUTSW/OUTSD ;DX指定的输出端口DS:SI/ESI,SI/ESISI/ESI1/2/4 指令说明:该指令实现从由DS:SI/ESI指定的内存单元中的一个字节(OUTSB)或一个字(OUTSW)或一个双字(OUTSD)数据到由DX指定输出端口中,且能使SI/ESI自动1或2或4;DX内容保持不变。DS段寄存器可以被段超越。,80386新增指令,80386CPU中通用寄存器由32位寄存器组成

11、,因此所有16位指令都有其相应的32位指令形式,以支持32位数据类型的操作。操作数可为8位、16位或32位,并且可以使用32位寻址方式。80386的执行单元中新增了一个“桶型”移位器,所以可以实现快速移位操作,新增的指令主要是有关位操作的。另外,80386还增加了条件设置指令,以及对控制、调试和测试寄存器的传送指令。,80486新增指令,80486CPU不仅包括80386CPU的结构,还包括了80387协处理器FPU的结构,且在此基础上增加了8KB的Cache高速缓冲存储器,它的最高内部时钟频率达到了100MHZ。采用了精简指令系统集计算机技术RISC和指令流水线方式,使指令的执行速度及其他性

12、能有了更大的提高,且可以直接执行8087的所有浮点运算指令。 80486的指令系统在80386指令系统的基础上增加了6条指令,其中,INVLPG、INVD及WBINVD三条专用于Cache管理,一般用户不需使用,另外三条XADD、CMPXCHG和BSWAP指令是可供系统应用程序使用的指令。,Pentium新增指令,Pentium CPU仍为32位结构,地址总线为32位,但外部数据线为64位,内部时钟频率为60MHZ200MHZ。Pentium CPU对浮点处理单元进行了重大改进,增加了专用的加法、乘法和除法单元;采用具有两条流水线的超标量技术;对常用的简单指令用硬件实现等,进一步提高了Pent

13、ium CPU的整体性能。 Pentium CPU指令系统中新增加了一条8字节比较交换指令CMPXCHG8B,一条处理器识别指令CPUID,4条系统专用指令RDTSC、RDMSR、WRMSR、RSM。,Pentium pro新增指令,Pentium Pro CPU的地址总线为36位,可以寻址的主存空间可达64GB。Pentium Pro CPU内含一级Cache 为16 KB,二级Cache 为256/512KB;扩展了超标量技术,具有三个整数处理单元和一个浮点处理单元,能同时执行三条指令,并对32位指令进行了优化处理。 Pentium Pro CPU在Pentium指令系统的基础上新增了3条

14、实用的指令CMOV、RDPMC、UD2。,DOS下32位汇编程序,32位程序编写规范 32位指令的程序设计方法和我们在前面讲过的16位指令的程序设计方法基本相同。但在编写完整的汇编程序时,需注意以下问题:,指定汇编程序识别新指令 处理16位段和32位段 注意有些指令在16位段和32位段的差别,DOS 32位程序举例,例1:将一个64位数据算术左移4位 分析:本例采用EDX.EAX保存64位数据,用4次循环实现移位。 .MODEL SMALL .386 ;采用32位指令,16位段模式 .STACK .DATA QVAR DQ 1234567887654321H .CODE .STARTUP MO

15、V EAX,DWORD PTR QVAR MOV EDX DWORD PTR QVAR 4 MOV ECX,4 NEXT: SHL EAX,1 RCL EDX,1 LOOP NEXT MOV DWORD PTR QVAR,EAX MOV DWORD PTR QVAR4,EDX .EXIT 0 END,Windows下32位汇编程序,若较好地掌握了Windows下的汇编程序开发,可以让我们深刻地理解高级语言是怎么来的,而且在学习反病毒技术、软件的加密解密方面这是必须的。在高级语言的开发中涉及到程序的调试,也要用到汇编语言。 Windows下汇编语言的开发使用软件Masm32或Tasm32,本书使

16、用的是Masm32。程序的调试使用W32dasm、Soft-Ice等软件。,Windows汇编语言特点,DOS下的汇编程序是“指令+中断”,而Windows下32位汇编程序是“指令+API+消息”。 API函数:API是“Application Programming Interface”的英文缩写,很象DOS下的中断。中断是系统提供的功能,在操作系统运行后就被装载在内存中,而API函数是通过将函数所在的动态连接库装载到内存后调用函数的。,在Windows下设计应用程序不使用API是不可能的,有些高级语言看似没有使用API,只不过它们提供的模块对API进了封装。 API是Windows的基础,API包含在众多扩展名为dll的动态连接库中,三个关键的动态连接库文件是:,Kernel32.dll:系统服务功能。包含内

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号