MASM 32位汇编 32与16汇编区别
Posted 不会写代码的丝丽
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MASM 32位汇编 32与16汇编区别相关的知识,希望对你有一定的参考价值。
前言
安装完成后配置如下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
基础语法
.386 ;指定指令集
.model flat,stdcall ;指定一些内存指定内存模式 和调用约定https://docs.microsoft.com/en-us/cpp/assembler/masm/dot-model?view=msvc-160
option 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
下有32
位16
位8
位的寄存器使用规范,但是如果我们想将8位的寄存器数值赋值给32
位的是可以的吗?如果直接通过mov
是不可以的,但是提供了movsx
和movzx
来帮助我们实现。
movsx
movsx 提供了有符号的扩展移动
举个例子一个8位的数字0a0h
移动到32位的寄存器中
0a0h
对应的二进制位1010 0000
最告位是1
,因此移动到32位后也是一个负数。
下面是一个小Demo
;1010 0000 最高位是1
mov cl,0a0h
;被认定为负数
movsx eax,cl
movsx ebx,cl
;0100 1110 最高位是0
mov ch,78h
;被认定Wie正数
movsx eax,ch
movsx ebx,ch
movzx
movsx 提供了无符号的扩展移动,不过多少位数字移动都是高位补0
;1010 0000 最高位是1
mov cl,0a0h
;被认定为负数
movzx eax,cl
movzx ebx,cl
;0100 1110 最高位是0
mov ch,78h
;被认定Wie正数
movzx eax,ch
movzx ebx,ch
弹出窗口Demo
下面的代码弹出一个窗口
.386
.model flat,stdcall
option casemap:NONE
include windows.inc
include user32.inc
include kernel32.inc
includelib user32.lib
includelib kernel32.lib
.data
g_szText db "hello world",0
g_szTitle db "Title",0
.data
g_sz0 db 11h,22h,33h,44h
.data?
g_dw dw ?
.const
g_sz1 db "test test",0
.code
START:
invoke MessageBoxA,NULL,offset g_szText,offset g_szTitle,MB_OK
invoke ExitProcess,0
end START
以上是关于MASM 32位汇编 32与16汇编区别的主要内容,如果未能解决你的问题,请参考以下文章