目标:
以创建一个简单的对话框程序为例搭建环境,目标是用到最少的资源,这样我们能够知道一个程序的来龙去脉。
实现:
从Visual Studio 安装环境中拷贝 ML宏汇编器和LINK链接器;拷贝部分.h头文件和.lib链接库文件。
分析:
[工具]C和C++的编译器为CL.EXE,汇编语言的编译器为ML.EXE,这两个程序都能生成COFF格式的目标文件OBJ;然后用通用的LINK.EXE链接器将OBJ文件链接为EXE文件。编译和链接工具准备完毕。
[lib库]Windows系统是基于DLL的,PE文件会记录他引用的所有DLL和这些DLL中的API,链接器LINK必须根据LIB文件才能将OBJ文件链接为EXE,也就是说LIB文件记录API在DLL中的偏移量,必不可少!如果你只做底层测试,我觉得USER32.LIB、KERNEL32.LIB、GDI32.LIB、ADVAPI32.LIB、NTDLL.LIB、NTOSKRNL.LIB就足够了。
[头文件]至于头文件,你可以将Platform SDK 的.h头文件转换为MASM认可的格式,或者根据引用的API在你的源代码中声明下原型,再或者偷懒的方法,从网络上的MASM32集成开发环境直接拷贝,inc扩展名无所谓!
例如,在msdn站点查询到MessageBox函数的原型如下:
int MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption,UINT uType);
对应的汇编一眼声明方式如下:( ExitProcess PROTO :DWORD )
MessageBox proto:dword,:dword,:dword,:dword
我想,照葫芦画瓢,这没什么难度,下面是简单的对话框程序:
;ml /c /coff MessageBox.asm
;link /subsystem:windows MessageBox.obj user32.lib kernel32.lib
.386
.model flat,stdcall
ExitProcess PROTO :DWORD
MessageBoxA PROTO :DWORD,:DWORD,:DWORD,:DWORD
MessageBox equ <MessageBoxA>
.data
szContent db 'MessageBox from MASM32! It is so powerful!',0
szCaption db 'MessageBox MASM32',0
.code
start:
;invoke MessageBox,0,offset szContent,addr szCaption,40h
push 40h
lea eax,szCaption
push eax
lea eax,szContent
push eax
push 0
call MessageBox
invoke ExitProcess,0
end start
[环境变量]如上述代码,内置API原型的声明,链接器也直接知名了要引用的lib库,可以不用关心inc头文件,但至少lib库要知道从哪里去查找,还有ml和link工具的路径也需要设置,还需设置lib库和include头文件的环境变量,如下我用到了RadASM这一IDE,我把我的源程序放到c:\codes\masm32,可以新建一个批处理MASM32.BAT:
set include=C:\RadASM\masm32\Include;%include%
set lib=C:\RadASM\masm32\lib;%lib%
set path=C:\RadASM\masm32\bin;%path%
cd C:\codes\MASM32
但批处理运行后就直接退出,你就无法在console上运行ml和link指令流,所以还需要cmd的一个快捷方式,目标设置为%comspec% /k "C:\RadASM\masm32\Masm32.bat" 。如此,环境变量设置完毕!
用include环境变量指明头文件的路径,lib环境变量知名lib库文件的路径,path环境变量知名ml和link的路径,且拷贝了inc头文件和lib库文件的情况下,你的代码和编译方式如下:
;ml /c /coff MessageBox.asm
;link /subsystem:windows MessageBox.obj
.386
.model flat,stdcall
include user32.inc
include kernel32.inc
includelib kernel32.lib
includelib user32.lib
.data
szContent db 'MessageBox from MASM32! It is so powerful!',0
szCaption db 'MessageBox MASM32',0
.code
start:
invoke MessageBox,0,offset szContent,addr szCaption,40h
invoke ExitProcess,0
end start
分享到:
相关推荐
本指南《Microsoft .NET IL 汇编语言程序设计》将深入探讨IL汇编语言及其在.NET环境中的应用。IL是一种静态类型的语言,它包含了一系列指令,这些指令在.NET Framework的JIT(Just-In-Time)编译器的作用下被转换为...
程序设计语言可以分为机器语言、汇编语言和高级语言三种。机器语言是计算机所能识别的唯一语言,由二进制代码0和1构成指令和数据。但是,机器语言编写的程序依赖于计算机的结构,可移植性差,繁琐且难于记忆、识别和...
Windows操作系统是目前最广泛使用的桌面系统,因此掌握在该环境下用汇编语言编写程序的能力对于深入理解计算机工作方式、优化性能以及开发特定系统级应用具有重要意义。 首先,我们要明白汇编语言是一种低级编程...
《汇编语言程序设计自学教程》是一本专为编程初学者设计的教程,旨在帮助读者掌握汇编语言的基础知识和编程技巧。汇编语言是一种低级编程语言,它与计算机硬件紧密相连,允许程序员直接控制计算机的硬件资源,因此在...
《汇编语言程序设计》 汇编语言是一种符号化的机器语言,它的指令通过助记符来表示,使得程序员更容易记忆和理解。...理解这两种语言的特性以及如何在单片机环境下进行汇编是嵌入式系统开发的基础知识。
【汇编语言程序设计简介】 汇编语言是一种低级编程语言,它与机器语言密切相关,是程序员与计算机硬件之间直接沟通的桥梁。汇编语言程序设计主要包括以下几个关键概念: 1. **程序设计步骤** 程序设计通常包括四...
首先,介绍了汇编语言程序设计的概述,包括汇编语言的优点和缺点,汇编语言程序设计步骤,顺序程序设计、分支程序设计、循环程序设计、位操作程序设计、子程序设计等。 在汇编语言程序设计中,需要将汇编语言源程序...
【推选】汇编语言程序设计3PPT资料.ppt主要涵盖了汇编语言的基本概念、语句结构以及汇编过程。下面将详细阐述这些知识点。 3.1 汇编语言基本概念 1. 程序设计语言: - 机器语言:计算机能直接执行的二进制代码,是...
《汇编语言程序设计》是计算机科学中一个重要的学习领域,它涉及到计算机底层运作的细节。汇编语言是一种低级编程语言,每条指令都直接对应于计算机硬件能够理解和执行的机器码。以下是对汇编语言程序设计的一些关键...
汇编语言是一种低级编程语言,它使用助记符来代表机器语言的二进制指令,使得程序设计更为易读。 3.1.1 程序设计语言的分类 程序设计语言分为三类: 1. 机器语言:机器语言是计算机可以直接理解和执行的二进制代码...
汇编语言是一种低级编程语言,它直接对应于计算机的机器语言,但使用了人类可读的助记符和符号来替代机器语言中的二进制指令和地址。以下是关于汇编语言的详细说明: ### 基本概念与特性 1. **机器相关性**: - *...
**汇编语言程序设计概述** 汇编语言是一种低级编程语言,它与计算机硬件紧密相关,每条汇编指令对应一个或多个机器码。在ATS汇编语言中,程序设计主要包括指令语句和伪指令语句。 ### **1. 指令语句** 汇编语言的...
汇编语言编写的小程序虽然开发难度大,但能够实现高度优化和定制的功能。这个特定的汇编小程序展示了如何在底层与操作系统交互,构建出具有用户友好界面的应用,同时利用汇编语言的特性实现高效的滚屏操作。这样的...
汇编语言是一种低级编程语言,它使用助记符来表示机器语言中的指令,使得程序更易于理解和记忆。虽然汇编语言具有较高的可读性和灵活性,尤其是对于实时控制任务,其效率往往高于高级语言,但它的编写过程需要深入...
【汇编语言程序设计】是计算机科学中的一个重要领域,它涉及到计算机底层的指令集和程序设计。汇编语言与机器语言密切相关,其中的指令通过助记符表示,使得程序员能够更方便地理解和编写程序,同时保持了接近硬件的...
【汇编语言程序设计简介】 汇编语言是一种低级编程语言,它与计算机的硬件紧密相关,用于编写和理解机器语言。程序设计通常包括几个基本步骤:分析问题、确定算法、绘制流程图、编写源代码,然后进行调试和仿真。 ...
【汇编语言程序设计】是计算机科学中的一个重要领域,它涉及到使用汇编语言编写程序的原理和技巧。汇编语言是一种低级编程语言,每条指令通常对应于计算机硬件能够直接理解和执行的机器码指令。在80C51这个微控制器...
AT89S51是一款常见的8位单片机,其程序设计通常涉及到汇编语言。汇编语言的优势在于它能直接控制硬件,编写出效率高、占用存储空间小、运行速度快的程序,特别是对于需要优化性能和实时性的应用。然而,汇编语言的...
Android SDK开发环境搭建是 Android 应用程序开发的基础阶段。要搭建 Android SDK开发环境,需要安装 JDK、Eclipse 和 Android SDK 三个组件。在这里,我们将详细介绍如何安装和配置这三个组件,以便搭建 Android ...