写在前面的话

笔者机器环境:Win10 + VS2017

环境配置参考:https://moddemod.blog.csdn.net/article/details/102858284

.386
.model flat, stdcalloption casemap:noneMessageBoxA PROTO :dword, :dword, :dword, :dword
MessageBox equ <MessageBoxA>
Includelib  user32.lib
NULL    equ 0
MB_OK   equ 0
.stack  4096
.data
SzTitle byte    'test!', 0
SzMsg       byte    'welcome to moddemod!', 0.code
start:invoke    MessageBox,NULL,offset SzMsg,offset SzTitle,MB_OKret
end start

或者

 .386.model flat, stdcalloption casemap:noneinclude windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib; 数据段.data
szText db 'HelloWorld', 0
; 代码段.code
start:invoke MessageBox, NULL, offset szText, NULL, MB_OKinvoke ExitProcess, NULL
end start
  1. .386语句,定义了程序使用80386指令集

  2. .model flat,stdcall 这里指定内存模式为flat模式。因为Windows操作系统和应用程序运行在保护模式下,系统每一个Windows可执行程序都都放在一个虚拟地址空间中运行,每个程序都拥有相互独立的4G地址空间。因此,Windows可执行程序只有一种内存模式,即flat模式,表示内存是很"平坦"的,不再像DOS可执行程序那样,必须把超过64KB的一块内存划分为几个小的、不超过64KB的段来使用。
    .model语句还应该指定调用规则,WindowsAPI使用stdcall调用规则,因此这里选择stdcall。使用stdcall规则调用子程序时,堆栈平衡的事情由被调用者(子程序)用RETn指令实现,因此,在程序中调用WindowsAPI函数或子程序后,调用者不必考虑堆栈平衡的问题。

  3. options语句有许多选项,例如option language、option segment等,在Win32中需要定义option casemap:none,用以说明程序中的变量和子程序名对大小写敏感。由于WindowsAPI中的函数名称是区分大小写的,所以应该指定选项"casemap:none",否则,在调用函数的时候会出现问题。

  4. includelib语句 和C一样,在汇编程序中也需要调用一些外部模块(子程序\函数)来完成部分功能。

  5. 函数声明语句 对于所有要用到的库函数,在程序的开始部分必须预先声明。包括函数的名称、参数的类型等。

  6. include语句 对于所有要用到的库函数及WindowsAPI函数,在程序的开始部分都必须预先声明,这显然是比较麻烦的。在汇编语言中,也可以采用C语言办法,就是把所有的函数声明及常量定义等公用部分预先放在一个头文件中。一些汇编语言工具包,如MASM32等,提供了这样的一些头文件,需要使用这些函数声明或者常量定义的时候,再用include语句将其包含进来。

程序中的数据部分从**.data语句开始定义,代码部分从.code**语句开始定义,所有的指令都必须写在代码区中。

与DOS程序相同,Win32程序在遇到end语句时结束。end语句后面跟的标号指出了程序执行的入口点,即装入执行的第一条指令的位置,表示源程序结束。

当源程序的某一语句过长,不利于书写和阅读时,可以用反斜杠**“\”**做换行符,将这条语句分为几行来写。每一行的最后加上一个反斜杠,说明下一行是当前行的继续。语句的最后一行不要加反斜杠。

masm32汇编基础相关推荐

  1. crash工具解析_crash工具和x86-64汇编基础

    在前面的文章中,已经出现了作为Linux重要调试手段之一的crash工具的身影.在后续的文章里,我们还会继续用到它.因此在这里,准备对Linux中的crash工具的原理和使用方法,做一个相对全面的介绍 ...

  2. 反汇编---汇编基础学习

    一.一些简单的说明 本文描述的是x86汇编,采用ATT汇编代码格式,讨论的是一个运行Linux的x86系统.使用gcc编译器,gdb调试器,objdump等相关工具观察反汇编代码. 关于寻址模式.堆栈 ...

  3. 《庖丁解牛Linux内核》笔记之:汇编基础

    <庖丁解牛Linux内核>笔记之:汇编基础 参考视频 下面的说法都来自x86CPU寄存器. 值的不同表示方法 %eax 类似这种就是直接操作该寄存器,效果类似于C语言中的指针:*和& ...

  4. 【转贴】GCC内联汇编基础

    原文作者 Sandeep.S 英文原文 [https://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html] 本文将介绍GCC编译环境下 ...

  5. 【8086汇编基础】05--常用函数库文件--emu8086.inc

    8086汇编语言初学者教程(第5部分) 常用函数库 - emu8086.inc 通过引用一些常用函数,可以使你编程更加方便.在你的程序中使用其他文件中的函数的方法是INCLUDE后面接上你要引用的文件 ...

  6. 汇编基础(加速入门)

    汇编基础 语言 人与人沟通的媒介 什么是机器语言? 0与1 最早的程序员,穿孔卡带 运算->加减乘除 这些复杂的机器语言,如何简化? 助记符!! 汇编语言!! 加 IMC <-编译器-&g ...

  7. SDCC 的 MCS-51 汇编基础概念和传参方式

    寄存器 Register 寄存器用于数据的临时存储, 其数据可以表示为 用于处理的数据字节 指向数据的地址 寄存器的结构 8051的寄存器几乎都是8位寄存器, 因为8位MCU处理的主要是8位数据, 如 ...

  8. 【汇编实战开发笔记】ARM汇编基础的三大块知识

    文章目录 1 前言 2 ARM知识图谱 3 ARM汇编基础三大块 3.1 寻址方式 3.1.1 立即寻址 3.1.2 寄存器寻址 3.1.3 寄存器偏移寻址 3.1.4 寄存器间接寻址 3.1.5 基 ...

  9. win32 masm32 汇编学习 及 远程线程实例

    "门" 指向某个优先级高的程序所规定的入口点,所有优先级低的程序调用优先级高的程序只能通过门重定向 门:中断门,自陷门,任务门. masm32.zip copy D:\Progra ...

  10. 汇编基础知识之输入输出

    最近在学习汇编程序,但输入输出是我遇到的第一个难题,这里就简单讲诉一些汇编的基本输出输出字符串.字符.输出数字等知识,仅供大家学习.这只是一些基础知识,汇编高手亦可以温习一些基础的输入输出知识. 一. ...

最新文章

  1. RDKit | 基于RDKit的SMILES转canonical SMILES
  2. python读数据-python中如何读入数据
  3. 理解面向对象编写的极致简单的小代码
  4. 在安装、重装MySQL时出现could not start the service mysql error:0的错误
  5. CentOS下面ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
  6. 把python37添加到环境变量配置_关于在win 10上成功创建一个Django项目时遇到django-admin的手动配置环境变量问题。...
  7. 怎么实现hover_web前端CSS实现一个粒子动效的按钮
  8. Nagios监控平台完全攻略 (二)
  9. HTTP/1.1与HTTP/1.0的区别
  10. java jdbc连接字符串加密,Java JDBC连接数据库字符串大全
  11. oracle tsm rman,TSM下oracle备份
  12. 监控oracle某条sql语句,Oracle-常用监控SQL语句
  13. Linux(一)之Ubuntu上安装nginx、nginx-rtmp-modeule、libx264、FFmpeg(巨详细)
  14. 网易云ncm转mp3
  15. gps高斯utm_高斯投影与UTM投影
  16. matlab 数据正态性检验
  17. html表单变灰,excel菜单灰色 excel工具栏突然变灰了 怎么办
  18. android抽屉效果
  19. 非API接口限制介绍
  20. SpringCloud(13)之微服务的现状和未来

热门文章

  1. 程序员初学者应该如何自学编程
  2. 20张动图全析四大显微分析(SEM、TEM、AFM、STM)工作原理!
  3. 5S定置管理协调现场的三大元素
  4. 静态HTML个人博客主页 简单个人网页设计作业 DW个人网站模板下载 大学生简单个人网页作品代码 个人网页制作 学生个人网页设计作业
  5. 【考研数学】张宇:十月真题做题建议
  6. 阿里OSS通过WEB直传服务端验证设置回调自定义参数
  7. 通过DXGI实现高效抓屏
  8. 计算机用于材料科学模拟,计算机在材料科学的应用
  9. 自然语言处理——基于预训练模型的方法——第3章 基础工具集与常用数据集
  10. c语言 pow函数及pow函数的错误情况