前言

首先下载工具包

安装完成后配置如下3个环境变量

lib :C:\masm32\lib
include:C:\masm32\include
path:C:\masm32\bin

C:\masm32是笔者的安装目录

编译

//编译 /coff表示编译成32 也就是PE结构
ml /c /coff xxx.asm//链接 /subsystem:windows
link /subsystem:console  xxx.asm

基础语法

MSDN相关文档

.386 ;指定指令集
.model flat,stdcall ;指定一些内存指定内存模式 和调用约定https://docs.microsoft.com/en-us/cpp/assembler/masm/dot-model?view=msvc-160option casemap:NONE ;一些编译选项这里casemap表示控制大小写,NONE指示保持大小写敏感ENTRY:end ENTRY ;设置入口点

分段

相对16位汇编,32位汇编汇编已经没有分段了(地址线刚好满足4g寻址要求),但可以根据内存属性来划分,称为节(section),内存区或者内存块。

可读 可写 可执行 备注
.DATA × 初始化的全局变量
.CONST × × 只读数据局
.DATA? × 未初始化的全局变量
.CODE × 代码

寄存器

计算机8位、16位、32位通用寄存器有什么区别?
X86 汇编/X86 架构

相对16位寄存器,32位寄存器添加了前缀Exx用于区分,但是任然可以使用16位的语法操作。

段寄存

器依然是16位共有6

简称 概念
SS 栈段
CS 代码段
DS 数据段
ES 扩展段(E 代办Extra)
FS 扩展段(F在E的后面所以你懂的)
GS 扩展段(G在F的后面所以你懂的)

寻址

除了16位的寻址方式,还多了一个比例因为寻址,叫做比例因为寻址。
简而言之就是乘上一个数字去寻址

  mov dword ptr [ecx+eax*2],05566h

指令补充

x86相关的指令表格

x86下有32168位的寄存器使用规范,但是如果我们想将8位的寄存器数值赋值给32位的是可以的吗?如果直接通过mov是不可以的,但是提供了movsxmovzx来帮助我们实现。

movsx

movsx 提供了有符号的扩展移动
举个例子一个8位的数字0a0h移动到32位的寄存器中
0a0h对应的二进制位1010 0000最告位是1,因此移动到32位后也是一个负数。

下面是一个小Demo

 ;1010 0000 最高位是1mov cl,0a0h;被认定为负数movsx eax,clmovsx ebx,cl;0100 1110 最高位是0mov ch,78h;被认定Wie正数movsx eax,chmovsx ebx,ch

movzx

movsx 提供了无符号的扩展移动,不过多少位数字移动都是高位补0

   ;1010 0000 最高位是1mov cl,0a0h;被认定为负数movzx eax,clmovzx ebx,cl;0100 1110 最高位是0mov ch,78h;被认定Wie正数movzx eax,chmovzx ebx,ch


弹出窗口Demo

下面的代码弹出一个窗口

.386
.model flat,stdcall
option casemap:NONEinclude windows.inc
include user32.inc
include kernel32.incincludelib user32.lib
includelib kernel32.lib.datag_szText db "hello world",0g_szTitle db "Title",0
.datag_sz0 db 11h,22h,33h,44h
.data?g_dw dw ?.constg_sz1 db "test test",0
.codeSTART:invoke MessageBoxA,NULL,offset g_szText,offset g_szTitle,MB_OKinvoke ExitProcess,0end START

MASM 32位汇编 32与16汇编区别相关推荐

  1. 32位处理器中,通过汇编指令实现64位数据的加减运算

    32位处理器一次可以处理的数据是32bit,但如果是64bit的数据,依然可以运算,只是不能一步到位.下面以加法为例.         目录 1.基本思路 2.具体实现 (1) 将数据保存到寄存器 ( ...

  2. C#中Guid.ToString (String)五种格式,以及将32位的GUID转为16位及其他格式

    注意:本内容来自:C#中Guid.ToString Method (String)五种格式,以及将将32位的GUID转为16位及其他格式 一.生成各种格式的32位GUID  System.Guid.N ...

  3. 创世贴|怎么在64或32位系统中运行16位程序《大富翁》

    创世贴|怎么在64或32位系统中运行16位程序<大富翁> 绪言 大家好!纵观游戏行业的发展,可谓是进步迅猛.百花齐放.游戏是每个人在学习.工作之余休闲娱乐的良药.玩游戏的人从皇宫贵族到社会 ...

  4. 64位 linux 32位连接器,32位汇编程序在64位Ubuntu上的汇编和连接

    本教程使用的操作系统是Ubuntu Linux 18.04 LTS版本,汇编器是GNU AS(简称as),连接器是GNU LD(简称ld). 以下是一段用于检测CPU品牌的汇编小程序(cpuid2.s ...

  5. 32位颜色 转换成16位颜色

    向别人学习而来:分享.. 1.颜色值有32位存储和16位存储实现呼唤. 2.原理new Color(97,100,255);这个是32位存储 参数依次是 r.g.b.省略了a,alpha通道的值 rg ...

  6. 将32位浮点音频转换为16位

    (注:只改变量化位数,并不改变采样率和声道数等信息)  弄了一个下午加一个早上,终于算是弄完了,效果非常不错,音质无损失,之前一直用ffmpeg做重采样处理,但是一直是各种艰辛,各种奔溃,很无语,最后 ...

  7. 如何分别是32位微型计算机,32位微型计算机中的32指的是啥

    "32位"是指计算机2113的字长,5261字长越长,计算机的运算精度就越高.32位处4102理器,计算机中的位1653数指的是CPU一次能处理的最大位数.32位计算机的CPU一次 ...

  8. c语言 32位浮点数,32位浮点数范围的求法

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:32位浮点数范围的求法回答:浮点数在计算机中用以近似表示任意某个实数.具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计 ...

  9. 什么叫32位计算机,32位是什么意思

    32位是什么意思呢?我们在使用电脑的时候经常听说32位.64位,看别人讨论的津津有味的,自己在那一脸懵.接下来,小编就带你了解一下32位是什么意思,有兴趣的小伙伴赶紧来围观吧 有时候因为学习.工作原因 ...

  10. 计算机中64位和32位什么意思?有什么区别?

    一.64位和32位主要所指 1.32位和64位意味着处理器一次能处理的最大位数.主要区别是针对CPU而言,指CPU一次处理的二进制位数,64位计算机一般指拥有64位的处理器和64位的操作系统,32位计 ...

最新文章

  1. Opencv深拷贝与浅拷贝
  2. Git基础 1 ---- 版本控制系统的介绍
  3. Go 语言 练习 聊天室 01
  4. js 一/二维数组排序
  5. python找到字符中空格所在的位置_Python 查找字符在字符串中的位置示例效果
  6. NET问答: 如何记录 EntityFramework 中的所有 SQL 日志 ?
  7. php能否缓存,PHP缓存实现
  8. python 八大排序_python-打基础-八大排序
  9. 简单聊聊智能硬件的固件测试
  10. P 值(p value)与统计检验
  11. MPEG压缩中的 I、B、P帧
  12. 播布客教学视频_C学习笔记_7_100内最大的素数(97)
  13. 鸿蒙手机系统新桌面布局,鸿蒙系统是什么样的界面,详解华为鸿蒙系统
  14. Arduino框架下 ESP32看门狗使用示例
  15. printf中如何输出长整型?
  16. 【论文写作】如何写科技论文?万能模板!!!(以IEEE会议论文为例)
  17. 谈判技巧---From一亩三分地帖子
  18. 手机显示无法接通服务器是怎么回事,手机无法接通是什么原因及如何解决【图文】...
  19. 信用有多重要?欠款200元,多付4万利息!(附逾期补救办法)
  20. 梦开始的地方----初识c语言(1)

热门文章

  1. 想自学一下程序员,该学些什么?
  2. Linux 串口编程学习记录(termios.h)
  3. 联咏Novatek_NT98566(对标Sigmastar SSC337)_IMX335单板_IPC模组开发案例
  4. RC电路 CR电路 理解
  5. 秒杀面试之通关流程篇
  6. 分析对象竞是我自己?我在 9 月上班划水 1510 分钟!
  7. lbp2900打印机linux驱动下载,佳能LBP2900打印机驱动
  8. linux rs 485应用程序,Linux 的 RS485 通信协议.pdf
  9. 电子设计大赛-AD与DA电路设计
  10. BoundsChecker的使用