目录
基本套路
头部:
段:
函数:
导入masm32库
输入输出
加法指令
常见数据类型
定义数据类型
数据传达指令(mov)
加减法
常用伪指令
间接寻址
JMP和LOOP
堆栈操作
定义函数(ret,call)
位运算
jcc(跳转指令)
条件语句(伪指令)
乘法
字符串
结构体与宏
内联汇编
基本套路
头部:
段:
.data:已经初始化的数据
.data? 未初始化的数据
.const: 常量数据
.code:代码段
.stack:堆栈段,可读可写可执行
函数:
main是自行定义的入口函数名称
导入masm32库
INVOKE是伪指令,可以避免使用完整的汇编指令,简化代码。上面两图的效果相同。
db类似c语言的char类型。
ExitProcess是退出进程。
add esp,16的目的是为了保持堆栈平衡:
输入输出
输出/入的依赖库是msvcrt.lib
text2作为接受输入的参数,format作为输入的格式化
加法指令
mov eax,5 把5这个值放到eax寄存器里面,add eax,6 将6与eax里的值相加并将结果放到eax里。
常见数据类型
定义数据类型
数组
数组初始化
数组赋值
数据传达指令(mov)
mov的五种常见类型:
不能把大的数据mov到小的存储空间中(mov reg16 mem32是不合法的)
加减法
dec--:(结果为5)
inc++:
常用伪指令
间接寻址
因为DWORD类型占4个字节,所以esi*4,取到var的4这个元素。
JMP和LOOP
jmp类似goto关键字,执行跳转。
loop可以通过ecx的值决定循环次数。
堆栈操作
定义函数(ret,call)
uses是伪指令,后面跟上函数的参数。
位运算
异或(xor),将结果放到第一个操作数里。
与(or) ,或(and),逻辑非(not)
jcc(跳转指令)
je为相等就跳转。
条件语句(伪指令)
.if是伪指令,.endif是结尾。
while循环
乘法
8位的乘法(al,bl)
16位乘法(bx,ax),乘法高位结果放到edx里。低位放到eax里。
32位由ebx和eax作为乘数和被乘数。
字符串
传送(赋值):
rep指的是循环执行,由ecx决定次数,类似loop。
比较:
扫描
结构体与宏
宏:(MACRO后面接形参)
内联汇编
使用_asm关键字。