快捷搜索:  汽车  科技

学习汇编语言工具和方法(MASM学习x86汇编语言第一个程序)

学习汇编语言工具和方法(MASM学习x86汇编语言第一个程序)命令行编译的话使用:.386 .model flat stdcall option casemap :none include \masm32\include\windows.inc include \masm32\include\kernel32.inc include \masm32\include\user32.inc includelib \masm32\lib\kernel32.lib includelib \masm32\lib\user32.lib .data HelloWorld db "Hello World!" 0 .code start: invoke MessageBox NULL addr HelloWorld addr HelloWorld MB_OK invoke ExitProcess 0 end start直接在菜单里编

学习汇编语言工具和方法(MASM学习x86汇编语言第一个程序)(1)

一、本章准备工作
  • Windows环境,x86主机
  • 安装MASM软件
    下载地址:http://www.masm32.com/download.htm
    我这里安装到了D盘根目录。

为方便后面命令行调用,安装以后,可以把D:\masm32\bin目录放到系统环境变量PATH里。本章示例使用d:/masm32/qeditor.exe 可视化开发工具。

二、x86 处理器架构

学习汇编语言工具和方法(MASM学习x86汇编语言第一个程序)(2)

8086 的寄存器:

  • AX、BX、CX、DX通常用来存放一般性数据,被称为通用寄存器。
  • 16位寄存器所能存储的数据最大值为2162^{16}216-1 。
  • 8086 CPU的通用寄存器可以分为两个独立的8位寄存器使用。例: AX可分为AH和AL。
三、几条简单的汇编指令

学习汇编语言工具和方法(MASM学习x86汇编语言第一个程序)(3)

四、启动qeditor 录入测试程序1. 源代码

.386 ; 编译器指令,使用386指令集 .model flat stdcall ; model汇编指令,程序的内存模式 flat是windows程序,没有远近指针,stdcall是windows函数用的参数方式,即参数从右向左传递 option casemap :none ; 标签是否区分大小写 include \masm32\include\windows.inc ; 包含了win32 API 的一些常量和函数定义 include \masm32\include\kernel32.inc ; 包含了后面使用的ExitProcess函数 include \masm32\include\masm32.inc ; 包含了后面使用的StdOut函数,不是标准的Win32函数,由MASM提供 includelib \masm32\lib\kernel32.lib ; 库文件 includelib \masm32\lib\masm32.lib .data HelloWorld db "Hello World!" 0 ; 定义使用的字符串常量 db代表define byte。最后跟一个NUL,表示ANSI字符集结束符 .code ; 开始代码区 start: ; 所有的代码要在start标签后、end start前 invoke StdOut addr HelloWorld ; 调用函数StdOut,参数量HelloWorld的地址。注意StdOut是MASM提供的宏。其它编辑器里可以使用WriteConsole之类win32函数代替。 invoke ExitProcess 0 ; 调用ExitProcess end start

保存文件。

2. 编译

选择菜单 Project-Assemble ASM file 进行编译,生成obj文件:

学习汇编语言工具和方法(MASM学习x86汇编语言第一个程序)(4)

再选择Link 链接文件,生成可执行文件:

学习汇编语言工具和方法(MASM学习x86汇编语言第一个程序)(5)

运行效果:

学习汇编语言工具和方法(MASM学习x86汇编语言第一个程序)(6)

3. 命令行编译

ml /c /Zd /coff hello.asm link /SUBSYSTEM:CONSOLE hello.obj

学习汇编语言工具和方法(MASM学习x86汇编语言第一个程序)(7)

学习汇编语言工具和方法(MASM学习x86汇编语言第一个程序)(8)

也可以生成 hello.exe。

五、调用Windows API的版本

.386 .model flat stdcall option casemap :none include \masm32\include\windows.inc include \masm32\include\kernel32.inc include \masm32\include\user32.inc includelib \masm32\lib\kernel32.lib includelib \masm32\lib\user32.lib .data HelloWorld db "Hello World!" 0 .code start: invoke MessageBox NULL addr HelloWorld addr HelloWorld MB_OK invoke ExitProcess 0 end start

直接在菜单里编译运行:

学习汇编语言工具和方法(MASM学习x86汇编语言第一个程序)(9)

命令行编译的话使用:

ml /c /Zd /coff hellow.asm link /SUBSYSTEM:WINDOWS hellow.obj

这里SUBSYSTEM使用WINDOWS代替了CONSOLE,表示是一个Windows GUI程序。

猜您喜欢: