1、26 八月 20241重点大学计算机专业系列教材重点大学计算机专业系列教材重点大学计算机专业系列教材重点大学计算机专业系列教材第第7章章 高级汇编语言程序设计高级汇编语言程序设计【本章提要本章提要本章提要本章提要】本章叙述几种难道较大的程序设计技术,包括本章叙述几种难道较大的程序设计技术,包括本章叙述几种难道较大的程序设计技术,包括本章叙述几种难道较大的程序设计技术,包括CPUCPUCPUCPU工作模式的工作模式的工作模式的工作模式的切换,以及切换,以及切换,以及切换,以及32323232位和位和位和位和64646464位位位位WindowsWindowsWindowsWindows汇编语言程
2、序的设计,最后讲汇编语言程序的设计,最后讲汇编语言程序的设计,最后讲汇编语言程序的设计,最后讲述汇编语言和高级语言的简单混合编程。述汇编语言和高级语言的简单混合编程。述汇编语言和高级语言的简单混合编程。述汇编语言和高级语言的简单混合编程。【学习目标学习目标学习目标学习目标】掌握掌握掌握掌握32323232位、位、位、位、64646464位位位位WindowsWindowsWindowsWindows程序的汇编语言设计程序的汇编语言设计程序的汇编语言设计程序的汇编语言设计的基本方法的基本方法的基本方法的基本方法 简单掌握简单掌握简单掌握简单掌握MASM32MASM32MASM32MASM32以及
3、以及以及以及FASMFASMFASMFASM汇编工具的基本应用汇编工具的基本应用汇编工具的基本应用汇编工具的基本应用 简要掌握汇编语言和高级语言的混合编程及其简要掌握汇编语言和高级语言的混合编程及其简要掌握汇编语言和高级语言的混合编程及其简要掌握汇编语言和高级语言的混合编程及其汇编、编译和汇编、编译和汇编、编译和汇编、编译和 链接过程链接过程链接过程链接过程汇汇编编语语言言程程序序设设计计及及上上机机指指导导第第7章章返回返回226 八月 20247.1 保护模式编程介绍保护模式编程介绍 7.1.1 7.1.1 保护模式的特征保护模式的特征保护模式的特征保护模式的特征oo实模式下的寄存器、寻址
4、方式和指令等基本概念,除特别说明外实模式下的寄存器、寻址方式和指令等基本概念,除特别说明外实模式下的寄存器、寻址方式和指令等基本概念,除特别说明外实模式下的寄存器、寻址方式和指令等基本概念,除特别说明外在保护方式下仍然保持。尽管实方式下在保护方式下仍然保持。尽管实方式下在保护方式下仍然保持。尽管实方式下在保护方式下仍然保持。尽管实方式下CPUCPU的功能要大大超过其的功能要大大超过其的功能要大大超过其的功能要大大超过其先前的处理器,但只有在保护方式下,才能发挥其更大的作用。先前的处理器,但只有在保护方式下,才能发挥其更大的作用。先前的处理器,但只有在保护方式下,才能发挥其更大的作用。先前的处理
5、器,但只有在保护方式下,才能发挥其更大的作用。oo在保护方式下,全部在保护方式下,全部在保护方式下,全部在保护方式下,全部3232条地址线有效,可寻址高达条地址线有效,可寻址高达条地址线有效,可寻址高达条地址线有效,可寻址高达4G4G字节的物字节的物字节的物字节的物理地址空间;扩充的存储器分段管理机制和可选的存储器分页管理地址空间;扩充的存储器分段管理机制和可选的存储器分页管理地址空间;扩充的存储器分段管理机制和可选的存储器分页管理地址空间;扩充的存储器分段管理机制和可选的存储器分页管理机制,不仅为存储器共享和保护提供了硬件支持,而且为实现理机制,不仅为存储器共享和保护提供了硬件支持,而且为实
6、现理机制,不仅为存储器共享和保护提供了硬件支持,而且为实现理机制,不仅为存储器共享和保护提供了硬件支持,而且为实现虚拟存储器提供了硬件支持;支持多任务,能够快速地进行任务虚拟存储器提供了硬件支持;支持多任务,能够快速地进行任务虚拟存储器提供了硬件支持;支持多任务,能够快速地进行任务虚拟存储器提供了硬件支持;支持多任务,能够快速地进行任务切换和保护任务环境;切换和保护任务环境;切换和保护任务环境;切换和保护任务环境;4 4个特权级和完善的特权检查机制,既能个特权级和完善的特权检查机制,既能个特权级和完善的特权检查机制,既能个特权级和完善的特权检查机制,既能实现资源共享又能保证代码和数据的安全和保
7、密及任务的隔离;实现资源共享又能保证代码和数据的安全和保密及任务的隔离;实现资源共享又能保证代码和数据的安全和保密及任务的隔离;实现资源共享又能保证代码和数据的安全和保密及任务的隔离;支持虚拟支持虚拟支持虚拟支持虚拟80868086方式,便于在保护方式下同时又能执行方式,便于在保护方式下同时又能执行方式,便于在保护方式下同时又能执行方式,便于在保护方式下同时又能执行80868086程程程程序。序。序。序。汇汇编编语语言言程程序序设设计计及及上上机机指指导导第第7章章返回返回326 八月 20247.1.2 保护模式编程保护模式编程o保护模式编程的要点就是如何实现实模式和保护模式编程的要点就是如
8、何实现实模式和保护模式的相互切换。保护模式的相互切换。一、从实模式切换到保护模式一、从实模式切换到保护模式 从实模式切换到保护模式一般需要两个步骤:从实模式切换到保护模式一般需要两个步骤:作好切换到保护模式下的准备;作好切换到保护模式下的准备;切换到保护模式。切换到保护模式。主要准备工作就是建立全局描述符表,并使主要准备工作就是建立全局描述符表,并使GDTR指向指向GDT,因为切换到保护模式下,因为切换到保护模式下,至少要将代码段的选择子装入到至少要将代码段的选择子装入到CS中。中。汇汇编编语语言言程程序序设设计计及及上上机机指指导导第第7章章返回返回426 八月 20241 1)定义好段描述
9、符的结构:)定义好段描述符的结构:)定义好段描述符的结构:)定义好段描述符的结构:DESCRIPTOR STRUCT DESCRIPTOR STRUCT ;每个段描述符占;每个段描述符占;每个段描述符占;每个段描述符占8 8个字节个字节个字节个字节LIMIT DW 0 ;段界限;段界限BASEL DW 0 ;段基址的低;段基址的低16位位BASEM DB 0 ;段基址的;段基址的1623位位ATTRIBUTES DW 0;段属性;段属性BASEH DB 0 ;段基址的高;段基址的高8位位,2431DESCRIPTOR ENDSDESCRIPTOR ENDS2 2)定义好伪描述符:)定义好伪描述
10、符:)定义好伪描述符:)定义好伪描述符:PDESCRIPTOR STRUCT PDESCRIPTOR STRUCT ;装入;装入;装入;装入4848位全局描述符表寄存器时要用到位全局描述符表寄存器时要用到位全局描述符表寄存器时要用到位全局描述符表寄存器时要用到LIMIT DW 0 ;段界限;段界限BASE DD 0 ;段基址;段基址PDESCRIPTOR ENDSPDESCRIPTOR ENDS3 3)通常要定义一个段间跳转的宏,这样的话就可以保证在进入保护模式)通常要定义一个段间跳转的宏,这样的话就可以保证在进入保护模式)通常要定义一个段间跳转的宏,这样的话就可以保证在进入保护模式)通常要定
11、义一个段间跳转的宏,这样的话就可以保证在进入保护模式时将代码段的选择子装入到时将代码段的选择子装入到时将代码段的选择子装入到时将代码段的选择子装入到CSCS寄存器。寄存器。寄存器。寄存器。JUMPFAR MACRO selector,offsetsJUMPFAR MACRO selector,offsetsDB 0EAH ;0EAH为为JUMP指令的机器码指令的机器码DW offsets ;段偏移;段偏移DW selector ;段选择子;段选择子ENDMENDM汇汇编编语语言言程程序序设设计计及及上上机机指指导导第第7章章返回返回526 八月 20244 4)打开)打开)打开)打开A20A2
12、0地址线:保护模式下访问的地址空间超过地址线:保护模式下访问的地址空间超过地址线:保护模式下访问的地址空间超过地址线:保护模式下访问的地址空间超过1M1M,所以必须要,所以必须要,所以必须要,所以必须要用到用到用到用到A20A20地址线。地址线。地址线。地址线。ENABLE_A20 MACRO ENABLE_A20 MACRO ;通过;通过;通过;通过92H92H号端口的输出,可以使地址线号端口的输出,可以使地址线号端口的输出,可以使地址线号端口的输出,可以使地址线 ;A20A20打开,能够被访问打开,能够被访问打开,能够被访问打开,能够被访问 PUSH AXPUSH AX IN AL,92H
13、 IN AL,92H OR AL,2 OR AL,2 ;在;在;在;在92H92H号端口的号端口的号端口的号端口的d1d1位输出位输出位输出位输出1 1,打开,打开,打开,打开A20A20地址线地址线地址线地址线 OUT 92H,ALOUT 92H,AL POP AX POP AXENDMENDM5 5)切换到保护模式下的最关键的动作为,将)切换到保护模式下的最关键的动作为,将)切换到保护模式下的最关键的动作为,将)切换到保护模式下的最关键的动作为,将CR0CR0寄存中的第寄存中的第寄存中的第寄存中的第0 0位置位置位置位置1 1。TO_PROTECT MACROTO_PROTECT MACR
14、OMOV EAX,CR0OR CR0,1MOV CR0,EAXENDMENDM汇汇编编语语言言程程序序设设计计及及上上机机指指导导第第7章章返回返回626 八月 2024二、保护模式切换到实模式二、保护模式切换到实模式二、保护模式切换到实模式二、保护模式切换到实模式显而易见,在保护模式返回到实模式时,只要做和上述的几个动作相反显而易见,在保护模式返回到实模式时,只要做和上述的几个动作相反显而易见,在保护模式返回到实模式时,只要做和上述的几个动作相反显而易见,在保护模式返回到实模式时,只要做和上述的几个动作相反的动作就行了。主要要做好以下几个方面:的动作就行了。主要要做好以下几个方面:的动作就行
15、了。主要要做好以下几个方面:的动作就行了。主要要做好以下几个方面:1 1)定义一个宏,回到实模式,将)定义一个宏,回到实模式,将)定义一个宏,回到实模式,将)定义一个宏,回到实模式,将CR0CR0寄存中的第寄存中的第寄存中的第寄存中的第0 0位清位清位清位清0 0。TO_REAL MACROTO_REAL MACRO mov eax,cr0 mov eax,cr0 and eax,0fffffffeh and eax,0fffffffeh mov cr0,eax mov cr0,eaxENDMENDM2 2)定义一个宏,关闭)定义一个宏,关闭)定义一个宏,关闭)定义一个宏,关闭A20A20地址
16、线。地址线。地址线。地址线。DISABLE_A20 MACRO DISABLE_A20 MACRO PUSH AX PUSH AX IN AL,92HIN AL,92HAND AL,0FDH AND AL,0FDH ;在;在;在;在92H92H号端口的号端口的号端口的号端口的d1d1位输出位输出位输出位输出0 0,关闭,关闭,关闭,关闭A20A20地址线地址线地址线地址线OUT 92H,ALOUT 92H,ALPOP AXPOP AXENDMENDM3 3)恢复)恢复)恢复)恢复DSDS,使其内容为数据段基址,可用以下两条指令:,使其内容为数据段基址,可用以下两条指令:,使其内容为数据段基址,
17、可用以下两条指令:,使其内容为数据段基址,可用以下两条指令:mov ax,DATAmov ax,DATAmov ds,axmov ds,ax4 4)用一个段间跳转的宏,清指令预取队列)用一个段间跳转的宏,清指令预取队列)用一个段间跳转的宏,清指令预取队列)用一个段间跳转的宏,清指令预取队列,使使使使CSCS内容为代码段基址。内容为代码段基址。内容为代码段基址。内容为代码段基址。汇汇编编语语言言程程序序设设计计及及上上机机指指导导第第7章章返回返回726 八月 2024三具体实现方法三具体实现方法三具体实现方法三具体实现方法下面的例子给出了如何从实模式转换到保护模式,并在保护模下访问下面的例子给
18、出了如何从实模式转换到保护模式,并在保护模下访问下面的例子给出了如何从实模式转换到保护模式,并在保护模下访问下面的例子给出了如何从实模式转换到保护模式,并在保护模下访问680000H680000H单元开始的内容(数据段基地址为单元开始的内容(数据段基地址为单元开始的内容(数据段基地址为单元开始的内容(数据段基地址为680000H680000H),最后又),最后又),最后又),最后又如何从保护模式返回到实模式的方法,程序结构片段如下:如何从保护模式返回到实模式的方法,程序结构片段如下:如何从保护模式返回到实模式的方法,程序结构片段如下:如何从保护模式返回到实模式的方法,程序结构片段如下:.386
19、P ;.386P ;定义使用定义使用定义使用定义使用386386指令集指令集指令集指令集data segment use16 ;data segment use16 ;定义定义定义定义1616位数据段位数据段位数据段位数据段GDT LABEL BYTE ;GDT LABEL BYTE ;定义全局描述符表定义全局描述符表定义全局描述符表定义全局描述符表EMPTY DESCRIPTOR ;EMPTY DESCRIPTOR ;空描述符,空描述符,空描述符,空描述符,CODESEG DESCRIPTOR0FFFFH,98H,;CODESEG DESCRIPTOR0FFFFH,98H,;代码段的描述符代
20、码段的描述符代码段的描述符代码段的描述符CODE_SEL=CODESEG-GDT ;CODE_SEL=CODESEG-GDT ;代码段描述符的选择子代码段描述符的选择子代码段描述符的选择子代码段描述符的选择子DATASEG DESCRIPTOR0FFFFH,0H,68H,92H,;DATASEG DESCRIPTOR0FFFFH,0H,68H,92H,;数据段描述数据段描述数据段描述数据段描述符,即符,即符,即符,即680000H680000HDATA_SEL=DATASEG-GDT ;DATA_SEL=DATASEG-GDT ;数据段选择子数据段选择子数据段选择子数据段选择子GDTLEN=$
21、-GDTGDTLEN=$-GDTVGDTR PDESCRIPTOR GDTLEN-1VGDTR PDESCRIPTOR GDTLEN-1,data endsdata ends汇汇编编语语言言程程序序设设计计及及上上机机指指导导第第7章章返回返回826 八月 2024code segment use16code segment use16assume cs:code,ds:dataassume cs:code,ds:datastart:mov ax,datastart:mov ax,datamov ds,axmov ds,axmov bx,16mov bx,16mul bx ;mul bx ;设
22、置全局描述表设置全局描述表设置全局描述表设置全局描述表GDTGDT基址,因为现在还处在实模式下,所以段地址要左移基址,因为现在还处在实模式下,所以段地址要左移基址,因为现在还处在实模式下,所以段地址要左移基址,因为现在还处在实模式下,所以段地址要左移4 4位位位位add ax,offset GDTadd ax,offset GDTadc dx,0adc dx,0mov word ptr VGDTR.BASE,ax ;mov word ptr VGDTR.BASE,ax ;设置全局描述符表寄存器设置全局描述符表寄存器设置全局描述符表寄存器设置全局描述符表寄存器GDTRGDTR的内容的内容的内容的
23、内容mov word ptr VGDTR.BASE+2,dxmov word ptr VGDTR.BASE+2,dxmov ax,cs ;mov ax,cs ;以下为设置代码段描述符以下为设置代码段描述符以下为设置代码段描述符以下为设置代码段描述符mul bxmul bxmov CODE.BASEL,axmov CODE.BASEL,axmov CODE.BASEM,dlmov CODE.BASEM,dlmov CODE.BASEH,dhmov CODE.BASEH,dhLGDT FWORD PTR VGDTR ;LGDT FWORD PTR VGDTR ;加载加载加载加载GDTRGDTRCL
24、I ;CLI ;关中断关中断关中断关中断ENABLE_A20 ;ENABLE_A20 ;打开打开打开打开A20A20地址线地址线地址线地址线TO_PROTECT ;TO_PROTECT ;切换到保护模式切换到保护模式切换到保护模式切换到保护模式JUMPFAR Code_Sel,;JUMPFAR Code_Sel,;清指令预取队列,清指令预取队列,清指令预取队列,清指令预取队列,PROTECT:;PROTECT:;现在开始在保护方式下运行现在开始在保护方式下运行现在开始在保护方式下运行现在开始在保护方式下运行mov ax,Data_Selmov ax,Data_Selmov ds,ax ;mov
25、 ds,ax ;加载数据段描述符加载数据段描述符加载数据段描述符加载数据段描述符 ;根据具体任务要求实现程序段根据具体任务要求实现程序段根据具体任务要求实现程序段根据具体任务要求实现程序段;以下为回到实模式的步骤以下为回到实模式的步骤以下为回到实模式的步骤以下为回到实模式的步骤JUMPFAR ,;JUMPFAR ,;清指令预取队列清指令预取队列清指令预取队列清指令预取队列REALMODE:REALMODE:TO_REAL ;TO_REAL ;回到实方式回到实方式回到实方式回到实方式DISABLE_A20 ;DISABLE_A20 ;关闭关闭关闭关闭A20A20地址线地址线地址线地址线mov a
26、x,DATAmov ax,DATAmov ds,axmov ds,axSTI;STI;开中断开中断开中断开中断 ;根据具体任务要求实现程序段根据具体任务要求实现程序段根据具体任务要求实现程序段根据具体任务要求实现程序段code endscode endsend startend start汇汇编编语语言言程程序序设设计计及及上上机机指指导导第第7章章返回返回926 八月 20247.2 用汇编语言编写用汇编语言编写Windows应用程序应用程序7.2.1 Windows7.2.1 Windows与与与与DOSDOS区别区别区别区别一、工作方式一、工作方式一、工作方式一、工作方式1616位位位位
27、DOSDOS操作系统工作于实地址方式,是单任务操作系统,一个正操作系统工作于实地址方式,是单任务操作系统,一个正操作系统工作于实地址方式,是单任务操作系统,一个正操作系统工作于实地址方式,是单任务操作系统,一个正在运行的程序独占了所有系统资源,只有一个特权级别,任何程在运行的程序独占了所有系统资源,只有一个特权级别,任何程在运行的程序独占了所有系统资源,只有一个特权级别,任何程在运行的程序独占了所有系统资源,只有一个特权级别,任何程序和操作系统都是同级的。序和操作系统都是同级的。序和操作系统都是同级的。序和操作系统都是同级的。3232位位位位WindowsWindows操作系统运行于操作系统运
28、行于操作系统运行于操作系统运行于IA-32IA-32微处理器的保护地址模式,微处理器的保护地址模式,微处理器的保护地址模式,微处理器的保护地址模式,是多任务操作系统,系统资源由多个程序共享,系统存在两个特是多任务操作系统,系统资源由多个程序共享,系统存在两个特是多任务操作系统,系统资源由多个程序共享,系统存在两个特是多任务操作系统,系统资源由多个程序共享,系统存在两个特权级别,操作系统运行在最高级别权级别,操作系统运行在最高级别权级别,操作系统运行在最高级别权级别,操作系统运行在最高级别0 0级,应用程序都运行于最低级,应用程序都运行于最低级,应用程序都运行于最低级,应用程序都运行于最低级别级
29、别级别级别3 3级。级。级。级。6464位位位位WindowsWindows操作系统运行于操作系统运行于操作系统运行于操作系统运行于6464位模式下,和位模式下,和位模式下,和位模式下,和3232位位位位WindowsWindows操作系统的特征基本类似,但只能工作在支持操作系统的特征基本类似,但只能工作在支持操作系统的特征基本类似,但只能工作在支持操作系统的特征基本类似,但只能工作在支持EM64TEM64T技术的技术的技术的技术的IA-32IA-32或或或或IA-64IA-64处理器环境中,目前主要有处理器环境中,目前主要有处理器环境中,目前主要有处理器环境中,目前主要有6464位版的位版的
30、位版的位版的Windows XPWindows XP和和和和6464位版的位版的位版的位版的Windows VistaWindows Vista。汇汇编编语语言言程程序序设设计计及及上上机机指指导导第第7章章返回返回1026 八月 2024二、内存空间二、内存空间二、内存空间二、内存空间DOSDOS平台下只能访问平台下只能访问平台下只能访问平台下只能访问1MB1MB物理存储空间,而且内存必须分成不大物理存储空间,而且内存必须分成不大物理存储空间,而且内存必须分成不大物理存储空间,而且内存必须分成不大于于于于64KB64KB的逻辑段,由不同的段寄存器来寻址不同的段。的逻辑段,由不同的段寄存器来寻
31、址不同的段。的逻辑段,由不同的段寄存器来寻址不同的段。的逻辑段,由不同的段寄存器来寻址不同的段。3232位位位位WindowsWindows平台下,直接使用平台下,直接使用平台下,直接使用平台下,直接使用3232位地址来寻址一个不分段的、位地址来寻址一个不分段的、位地址来寻址一个不分段的、位地址来寻址一个不分段的、达达达达4GB4GB的主存空间,的主存空间,的主存空间,的主存空间,WindowsWindows应用程序只有代码段和数据段,应用程序只有代码段和数据段,应用程序只有代码段和数据段,应用程序只有代码段和数据段,无须和段寄存器打交道。只有一种内存管理模式无须和段寄存器打交道。只有一种内存
32、管理模式无须和段寄存器打交道。只有一种内存管理模式无须和段寄存器打交道。只有一种内存管理模式FLATFLAT。6464位位位位WindowsWindows平台下,默认采用平台下,默认采用平台下,默认采用平台下,默认采用6464位线性地址空间,支持位线性地址空间,支持位线性地址空间,支持位线性地址空间,支持4040位物理地址空间,通常不采用分段方式,而是将位物理地址空间,通常不采用分段方式,而是将位物理地址空间,通常不采用分段方式,而是将位物理地址空间,通常不采用分段方式,而是将CSCS,DSDS,ESES和和和和SSSS的段基址看成的段基址看成的段基址看成的段基址看成0 0,这样线性地址等于有
33、效地址,也是只有,这样线性地址等于有效地址,也是只有,这样线性地址等于有效地址,也是只有,这样线性地址等于有效地址,也是只有一种一种一种一种FLATFLAT存储管理模式。存储管理模式。存储管理模式。存储管理模式。汇汇编编语语言言程程序序设设计计及及上上机机指指导导第第7章章返回返回1126 八月 2024三、系统功能调用三、系统功能调用三、系统功能调用三、系统功能调用DOSDOS操作系统为程序员提供中断服务程序,以中断调用的方法进行操作系统为程序员提供中断服务程序,以中断调用的方法进行操作系统为程序员提供中断服务程序,以中断调用的方法进行操作系统为程序员提供中断服务程序,以中断调用的方法进行系
34、统功能调用,而且系统功能调用,而且系统功能调用,而且系统功能调用,而且DOSDOS中断调用采用寄存器传递参数;中断调用采用寄存器传递参数;中断调用采用寄存器传递参数;中断调用采用寄存器传递参数;Windows32/64Windows32/64操作系统提供了动态链接库操作系统提供了动态链接库操作系统提供了动态链接库操作系统提供了动态链接库DDLDDL,利用应用程,利用应用程,利用应用程,利用应用程序接口序接口序接口序接口APIAPI(也曾被称为软件开发包(也曾被称为软件开发包(也曾被称为软件开发包(也曾被称为软件开发包SDKSDK)调用动态链接库中)调用动态链接库中)调用动态链接库中)调用动态链
35、接库中的函数,应用程序利用堆栈传递参数。的函数,应用程序利用堆栈传递参数。的函数,应用程序利用堆栈传递参数。的函数,应用程序利用堆栈传递参数。四、输入输出方式四、输入输出方式四、输入输出方式四、输入输出方式DOSDOS平台下的程序以字符方式输出信息,程序需要用户输入数据时平台下的程序以字符方式输出信息,程序需要用户输入数据时平台下的程序以字符方式输出信息,程序需要用户输入数据时平台下的程序以字符方式输出信息,程序需要用户输入数据时就停下来,一直等到用户输入了数据之后才继续执行;就停下来,一直等到用户输入了数据之后才继续执行;就停下来,一直等到用户输入了数据之后才继续执行;就停下来,一直等到用户
36、输入了数据之后才继续执行;Windows32/64Windows32/64程序采用图形用户界面进行信息的输入输出,程序采用图形用户界面进行信息的输入输出,程序采用图形用户界面进行信息的输入输出,程序采用图形用户界面进行信息的输入输出,用户的每个操作都会形成消息(用户的每个操作都会形成消息(用户的每个操作都会形成消息(用户的每个操作都会形成消息(MessageMessage)传递给相应程序,各)传递给相应程序,各)传递给相应程序,各)传递给相应程序,各个同时运行的程序彼此之间相对独立。个同时运行的程序彼此之间相对独立。个同时运行的程序彼此之间相对独立。个同时运行的程序彼此之间相对独立。汇汇编编语
37、语言言程程序序设设计计及及上上机机指指导导第第7章章返回返回1226 八月 2024 masm32子文件夹介绍子文件夹介绍 目目目目 录录录录介介介介 绍绍绍绍masm32masm32IDEIDE环境、内带的文本编辑程序和模板生成程序等环境、内带的文本编辑程序和模板生成程序等环境、内带的文本编辑程序和模板生成程序等环境、内带的文本编辑程序和模板生成程序等masm32includemasm32include所有的头文件,所有的头文件,所有的头文件,所有的头文件,Windows.inc Windows.inc 为数据结构和预定义值的定义文件,为数据结构和预定义值的定义文件,为数据结构和预定义值的定
38、义文件,为数据结构和预定义值的定义文件,Resouce.h Resouce.h 为资源文件的头文件,其他为资源文件的头文件,其他为资源文件的头文件,其他为资源文件的头文件,其他.inc.inc 文件为对应同名文件为对应同名文件为对应同名文件为对应同名DLL DLL 文件中的文件中的文件中的文件中的API API 函数声明文件函数声明文件函数声明文件函数声明文件masm32libmasm32lib所有的导入库文件,每个所有的导入库文件,每个所有的导入库文件,每个所有的导入库文件,每个.lib.lib 文件是对应文件是对应文件是对应文件是对应DLL DLL 文件的导入库文件的导入库文件的导入库文件
39、的导入库masm32binmasm32bin可执行文件目录,里面包括可执行文件目录,里面包括可执行文件目录,里面包括可执行文件目录,里面包括Ml.exeMl.exe,Link.exe Link.exe 和和和和Rc.exe Rc.exe 等等等等masm32helpmasm32help帮助文件目录帮助文件目录帮助文件目录帮助文件目录masm32examplesmasm32examples一些常用一些常用一些常用一些常用Win32Win32汇编语言源程序,很有参考价值汇编语言源程序,很有参考价值汇编语言源程序,很有参考价值汇编语言源程序,很有参考价值汇汇编编语语言言程程序序设设计计及及上上机机指
40、指导导第第7章章返回返回1326 八月 2024MASM32QEDITOR.EXEMASM32QEDITOR.EXE集成开发工具集成开发工具集成开发工具集成开发工具 汇汇编编语语言言程程序序设设计计及及上上机机指指导导第第7章章返回返回1426 八月 2024在在在在windows.incwindows.inc文件中关于文件中关于文件中关于文件中关于UTypeUType的定义的定义的定义的定义:MB_ABORTRETRYIGNORE MB_ABORTRETRYIGNORE ;消息框有三个按钮:;消息框有三个按钮:;消息框有三个按钮:;消息框有三个按钮:.终止终止终止终止.,.重试重试重试重试.
41、和和和和.忽略忽略忽略忽略.MB_HELP MB_HELP ;消息框上显示一个;消息框上显示一个;消息框上显示一个;消息框上显示一个.帮助帮助帮助帮助.按钮,按下后发送按钮,按下后发送按钮,按下后发送按钮,按下后发送WM_HELPWM_HELP消息消息消息消息MB_OK MB_OK ;消息框上显示一个;消息框上显示一个;消息框上显示一个;消息框上显示一个.确定确定确定确定.按钮,这是默认值按钮,这是默认值按钮,这是默认值按钮,这是默认值MB_OKCANCEL MB_OKCANCEL ;消息框上显示两个按钮:;消息框上显示两个按钮:;消息框上显示两个按钮:;消息框上显示两个按钮:.确定确定确定确
42、定.和和和和.取消取消取消取消.MB_RETRYCANCEL MB_RETRYCANCEL ;消息框上显示两个按钮:;消息框上显示两个按钮:;消息框上显示两个按钮:;消息框上显示两个按钮:.重试重试重试重试.和和和和.忽略忽略忽略忽略.MB_YESNO MB_YESNO ;消息框上显示两个按钮:;消息框上显示两个按钮:;消息框上显示两个按钮:;消息框上显示两个按钮:.是是是是.和和和和.否否否否.MB_YESNOCANCEL MB_YESNOCANCEL ;消息框上显示三个按钮:;消息框上显示三个按钮:;消息框上显示三个按钮:;消息框上显示三个按钮:.是是是是.、.否否否否.和和和和.取消取消
43、取消取消.要在消息框中显示图标,用下面的某一个标志:要在消息框中显示图标,用下面的某一个标志:要在消息框中显示图标,用下面的某一个标志:要在消息框中显示图标,用下面的某一个标志:MB_ICONWARNING MB_ICONWARNING ;显示惊叹号图标;显示惊叹号图标;显示惊叹号图标;显示惊叹号图标MB_ICONINFORMATION MB_ICONINFORMATION ;显示消息图标;显示消息图标;显示消息图标;显示消息图标MB_ICONASTERISK MB_ICONASTERISK ;显示危险图标;显示危险图标;显示危险图标;显示危险图标MB_ICONQUESTION MB_ICON
44、QUESTION ;显示问号图标;显示问号图标;显示问号图标;显示问号图标MB_ICONSTOP MB_ICONSTOP ;显示停止图标;显示停止图标;显示停止图标;显示停止图标汇汇编编语语言言程程序序设设计计及及上上机机指指导导第第7章章返回返回1526 八月 2024简单简单Win64程序设计程序设计 format PE64 GUIformat PE64 GUI ;定义;定义;定义;定义6464位程序位程序位程序位程序entry startentry start ;指定程序入口为;指定程序入口为;指定程序入口为;指定程序入口为startstart标号标号标号标号section.codeco
45、de readable executablesection.codecode readable executable ;定义代码段;定义代码段;定义代码段;定义代码段start:start:;程序入口标号;程序入口标号;程序入口标号;程序入口标号sub rspsub rsp,8*4 8*4 ;为;为;为;为APIAPI调用预留堆栈空间并使调用预留堆栈空间并使调用预留堆栈空间并使调用预留堆栈空间并使rsprsp指针指针指针指针6464位对齐位对齐位对齐位对齐movmov r9d r9d,1 1 ;r9dr9d寄存器用于传送寄存器用于传送寄存器用于传送寄存器用于传送MessageBoxAMessa
46、geBoxA函数的按钮参数函数的按钮参数函数的按钮参数函数的按钮参数lea r8lea r8,caption caption ;r8r8寄存器用于传送寄存器用于传送寄存器用于传送寄存器用于传送MessageBoxAMessageBoxA函数的标题参数函数的标题参数函数的标题参数函数的标题参数lea rdxlea rdx,message message ;rdxrdx寄存器用于传送寄存器用于传送寄存器用于传送寄存器用于传送MessageBoxAMessageBoxA函数的文本参数函数的文本参数函数的文本参数函数的文本参数mov rcxmov rcx,0 0 ;rcxrcx寄存器用于传送消息框的类
47、型参数寄存器用于传送消息框的类型参数寄存器用于传送消息框的类型参数寄存器用于传送消息框的类型参数call MessageBoxA call MessageBoxA ;调用;调用;调用;调用MessageBoxAMessageBoxA函数,显示消息框函数,显示消息框函数,显示消息框函数,显示消息框movmovecxecx,eax eax ;把;把;把;把eaxeax中消息框的返回值保存到中消息框的返回值保存到中消息框的返回值保存到中消息框的返回值保存到ecxecxcall ExitProcess call ExitProcess ;调用;调用;调用;调用ExitProcess ExitProce
48、ss 函数,结束程序并返回到函数,结束程序并返回到函数,结束程序并返回到函数,结束程序并返回到OSOSsection.datadata readable writeablesection.datadata readable writeable ;定义数据段;定义数据段;定义数据段;定义数据段 caption db Windows64caption db Windows64位应用程序位应用程序位应用程序位应用程序,0 0 ;定义消息框要显示的标题;定义消息框要显示的标题;定义消息框要显示的标题;定义消息框要显示的标题 message db message db 好好学习,天天向上!好好学习,天天
49、向上!好好学习,天天向上!好好学习,天天向上!,0 0 ;定义消息框要显示的文本;定义消息框要显示的文本;定义消息框要显示的文本;定义消息框要显示的文本用汇编语言开发用汇编语言开发用汇编语言开发用汇编语言开发6464位位位位WindowsWindows应用程序,首先要有应用程序,首先要有应用程序,首先要有应用程序,首先要有6464位的处理器和操作位的处理器和操作位的处理器和操作位的处理器和操作系统软硬件支持,另外还要选择合适的系统软硬件支持,另外还要选择合适的系统软硬件支持,另外还要选择合适的系统软硬件支持,另外还要选择合适的6464位汇编工具。位汇编工具。位汇编工具。位汇编工具。汇汇编编语语
50、言言程程序序设设计计及及上上机机指指导导第第7章章返回返回1626 八月 2024 ;以下是为程序的链接和执行所进行的辅助定义;以下是为程序的链接和执行所进行的辅助定义;以下是为程序的链接和执行所进行的辅助定义;以下是为程序的链接和执行所进行的辅助定义section.idata import data readable writeablesection.idata import data readable writeable ;定义入口数据段;定义入口数据段;定义入口数据段;定义入口数据段dd 0,0,0,RVA kernel_name,RVA kernel_table dd 0,0,0,RV