汇编系列文章:
https://www.jianshu.com/nb/29822876
来源:
https://www.cnblogs.com/del/archive/2010/04/03/1703689.html
https://blog.csdn.net/u011770174/article/details/77914375
https://bbs.csdn.net/topics/390495916
https://www.zhihu.com/question/22095837
https://www.cnblogs.com/yshblog/p/3379663.html
首先放上一段代码:
1 | .386 |
对程序中内容进行逐一解释:
- .386表明使用的指令集
- .model flat, stdcall 表示平坦内存模式,API调用时右边的参数先入栈
- option casemap:none 表示大小写敏感
- include的.inc文件与.h类似,若没有就需要进行类似
StdOut PROTO STDCALL:DWORD
的声明 - includelib指定使用的库文件
- .data与.code分别指定数据与代码
- invoke伪指令用于函数调用
- ret 是用于子程序返回的指令, 这里用它代替 ExitProcess(在没有生成 Win32 窗口时是可以的)
- end start让汇编程序结束汇编并且指明程序开始地址,汇编程序看到这个后就会结束并且找到start标签作为起始位置
但是这样输出变量(内存地址上的值)就不方便,可以使用printf函数(这里是crt_printf
),如下:
1 | .386 |