汇编数据定义伪指令
byte db 1字节 字节
word dw 2字节 单字
dword dd 4字节 双字
fword df 6字节 三字
qword dq 8字节 四字
tbyte dt 10字节 十字
--------------------
sbyte 1字节 有符号字节
sword 2字节 有符号字
sdword 4字节 有符号双字
real4 4字节 单精度浮点数
real8 8字节 双精度浮点数
real10 10字节 10字节浮点数
byte db 1字节 字节
word dw 2字节 单字
dword dd 4字节 双字
fword df 6字节 三字
qword dq 8字节 四字
tbyte dt 10字节 十字
--------------------
sbyte 1字节 有符号字节
sword 2字节 有符号字
sdword 4字节 有符号双字
real4 4字节 单精度浮点数
real8 8字节 双精度浮点数
real10 10字节 10字节浮点数
----------------------------
32位汇编伪指令
.mmx ;使用MMX指令
.xmm ;使用SSE指令
.8087;浮点8087协处理器指令
----------------------------
模式设置(汇编模式)
.model flat,stdcall ;用于纯汇编的编写
.model flat,C ;用于C函数的汇编编写,凡是汇编有调用C库函数或者C调用汇编都必须是这种模式
option casemap:none ;忽略大小写
32位汇编伪指令
.mmx ;使用MMX指令
.xmm ;使用SSE指令
.8087;浮点8087协处理器指令
----------------------------
模式设置(汇编模式)
.model flat,stdcall ;用于纯汇编的编写
.model flat,C ;用于C函数的汇编编写,凡是汇编有调用C库函数或者C调用汇编都必须是这种模式
option casemap:none ;忽略大小写
---------------------------
3个段的指令
.stack 128 ;堆栈段 (32位汇编,64位不用)
.data ;数据段
.code; 代码段
3个段的指令
.stack 128 ;堆栈段 (32位汇编,64位不用)
.data ;数据段
.code; 代码段
-----------------------------------
C标准库的链接
includelib msvcrt.lib ;如果C调用汇编,不需要这一句,已经包含
includelib legacy_stdio_definitions.lib ;C基本函数库它需要msvcrt.lib
C标准库的链接
includelib msvcrt.lib ;如果C调用汇编,不需要这一句,已经包含
includelib legacy_stdio_definitions.lib ;C基本函数库它需要msvcrt.lib
---------------------------------------------------------------------
代码段结束
end ;汇编的最后一句。
代码段结束
end ;汇编的最后一句。
...............................................................
64位汇编实例
注意 64位汇编 Microsoft Macro Assemble中Command Line 其它选项中添加 -DX64 定义符号X64.
检查符号X64后的代码,在64位不需要。
而 32位需要那些代码。
--------------------------------------------------------------------------------------------------
;32-64汇编获取返回值示例
ifndef X64
.586
.mmx
.model flat,c
.stack 128
endif
option casemap:none
;includelib msvcrt.lib
includelib legacy_stdio_definitions.lib
.data
.code
getretvalue proc
mov rax,1
ret
getretvalue endp
end
ifndef X64
.586
.mmx
.model flat,c
.stack 128
endif
option casemap:none
;includelib msvcrt.lib
includelib legacy_stdio_definitions.lib
.data
.code
getretvalue proc
mov rax,1
ret
getretvalue endp
end
其中getretvalue 为函数名,在main的c程序中定义
extern "C"{
int getretvalue();
int getretvalue();
}