2019-09-14 MASM+VS:配置与控制台输出显示字符串

2019-10-02  本文已影响0人  FeinZee

新学期入门汇编语言,作业1就是用控制台输出个人信息。我选择的语言环境是MASM32+Visual Studio2019,因为VS早就装好啦。我自己写的时候,别人的博客只贴代码不解释,这谁看得懂啊orz。希望这篇小白文能帮到一些人吧

配置

  1. VS2019的下载安装已有许多博客介绍,在此略过。

  2. 上官网[http://www.masm32.com] 下载MASM32, 具体选项可参考https://blog.csdn.net/u013761036/article/details/52186683

  3. 配置VS2019

2.png 3.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

可以看到,我们的字符串正常显示了。如果你打开你的项目文件夹下的Debug文件夹(本例是C:\Users\FeinZee\source\repos\printInfo\Debug),你可以看到一个exe文件。双击它,控制台会一闪而过,你啥也看不清。如果你想看到你的输出信息,你可以用cmd打开它。


11.png

吐槽

一开始走了很多弯路,想不用任何库,就用DOS的一些指令,比如INT 21H来实现,但是现在也没整明白,最后还是问了同学,结果我思路错了,用库就完事儿了,两个下午没搞定的作业半小时就好了。人还是要厚脸皮多问啊。

上一篇 下一篇

猜你喜欢

热点阅读