新学期入门汇编语言,作业1就是用控制台输出个人信息。我选择的语言环境是MASM32+Visual Studio2019,因为VS早就装好啦。我自己写的时候,别人的博客只贴代码不解释,这谁看得懂啊orz。希望这篇小白文能帮到一些人吧
配置
-
VS2019的下载安装已有许多博客介绍,在此略过。
-
上官网[http://www.masm32.com] 下载MASM32, 具体选项可参考https://blog.csdn.net/u013761036/article/details/52186683
-
配置VS2019
-
创建空项目
1.png
-
添加依赖项:右键项目名称-生成依赖项-生成自定义-选择masm
5.png -
创建asm文件(Assembly Language):右键项目名称-添加-新建项,自己输入文件名,注意后缀自己添加为asm
4.png -
配置lib和include路径:
-
右键项目名称-属性-链接器-常规-附加库目录-之前下载的MASM32安装文件夹下有一个lib文件夹
6.png -
右键项目名称-属性-链接器-输入-附加依赖项(本次不需要添加什么新的依赖项)
7.png -
右键项目名称-属性-Microsoft Macro Assembler-Include Paths
8.png - 确定
-
输出至控制台
汇编语言中,注释以分号;开头。见代码第一行。
.386 ;伪指令,它表示这是一个 32 位程序,能访问 32 位寄存器和地址。
.model flat, stdcall
;选择了程序的内存模式(flat),并确定了子程序的调用规范(称为 stdcall)。其原因是 32 位 Windows 服务要求使用 stdcall 规范。
option casemap : none
include windows.inc;这些语句就去引入了所需要的inc文件和库文件,这就是为什么前面要做那些配置
include kernel32.inc
include masm32.inc
include user32.inc
includelib kernel32.lib
includelib masm32.lib
includelib user32.lib
.data ; 表明下面是数据段
szText db "Name:FeinZee", 0dh, 0ah, "Gender:Female", 0dh, 0ah, "ID:00000000", 0dh, 0ah, "Class:73", 0
;szText是变量名,自己按变量命名规则取, db是伪指令,表示以8位整数为单元,就是1个字节大小
;这一部分可以参考[http://c.biancheng.net/view/3476.html]
;后面跟着的就是字符串的内容,每一个字符都占了1个字节大小
;引号内是字符串内容,0dh是回车的ASCII码,0ah是换行的ASCII码,根据自己的需要添加
;最后一个0表示字符串以空字节结束,这个是可以改的
.code ;表明下面是代码段
main PROC ;一个叫做main的过程
;过程可以非正式地定义为:由返回语句结束的已命名的语句块。过程用 PROC 和 ENDP 伪指令来定义,并且必须为其分配一个名字(有效标识符)
invoke StdOut, addr szText
;引入StdOut函数,szText的地址addr作为它的参数传入,就会在控制台输出了
INVOKE ExitProcess, 0 ;可以将其看作为给 Windows 操作系统的返回值,返回值为零,则表示程序执行成功;而任何其他的整数值都表示了一个错误代码。
main ENDP
END main
-
调试
调试后,下方输出会显示:
9.png
还会弹出黑框:
10.png
可以看到,我们的字符串正常显示了。如果你打开你的项目文件夹下的Debug文件夹(本例是C:\Users\FeinZee\source\repos\printInfo\Debug),你可以看到一个exe文件。双击它,控制台会一闪而过,你啥也看不清。如果你想看到你的输出信息,你可以用cmd打开它。
11.png
吐槽
一开始走了很多弯路,想不用任何库,就用DOS的一些指令,比如INT 21H来实现,但是现在也没整明白,最后还是问了同学,结果我思路错了,用库就完事儿了,两个下午没搞定的作业半小时就好了。人还是要厚脸皮多问啊。
网友评论