第四章——第一个程序

对于每一本编程书,这样的标题似乎都会令人感到振奋。。
特别对于一个编程小白来说,尤其振奋。
心里一定是这样想的:“天天看周围的编程大佬在那装逼,今天终于要出一口气了,我也要会写程序了!”
那么就让我们带着这样的心情去看这一章吧!(虽然我可能已经没有这样的心情了)
先讲一下整个过程:编写汇编源程序->对源程序进行编译->执行可执行文件中的程序
就是这么简单。
下面让我们细细地来看一下。
我们先来讲一下源程序。
先贴一段代码:

assume cs:codesg

codesg segment

		mov ax,0123H
		mov bx,0456H
		add ax,bx
		add ax,ax

		mov ax,4c00H
		int 21H

codesg ends

end

看不懂?别急!别让问题压倒你!我们下面就解释。
首先,在汇编语言中有两种指令,一种是汇编指令,另一种是伪指令。
在上面的程序中出现了三种伪指令。
(1)XXX segment……XXX ends
这两个是成对的。
它们的功能是定义一个段,segment说明的是段的开始,ends说明的是一个段的结束,而XXX则是段的名称。
一个有意义的汇编程序至少有一个存放代码的段。
(2)end
end是汇编程序的结束标记,也就是说这个标记是告诉编译器,这个程序已经编译结束了
(3)assume
这个单词的中文意思是假设。
这个指令是假设某一段寄存器和程序中的某一个用segment……ends定义的段相关联。
比如,这里的codesg是一个代码段,所以一定与cs相关。

那么除了伪指令,剩下的就是汇编指令,想必有了前面的学习,大部分的代码大家都能看懂了,但是,可能有疑惑的就是最后的那一个“int 21H”
那么这是什么意思呢?
其实,这里是为了实现程序返回,也就是说程序P1启动P2后,当P2运行结束后,P2需要将控制权再交回给P1,所以最后的两个指令:

mov ax,4c00H
int 21H

这两个指令就是为了程序返回。
那么为什么这个能实现程序返回呢?
这个呢?现阶段,我们暂时不需要知道,我们只要知道这个代码可以实现程序返回就行了。
我们会在以后学到相应的知识后,再讲这个知识点。

编译与运行

下面我们来讲讲具体应该怎么去写程序并编译运行。
首先我们得写程序。
用什么写呢?
你可以选择用notepad(记事本)或者是edit,最后保存为X.asm即可。
这里给个有用的提示,那就是如何用edit。
首先,什么是edit?
就是Windows自带的一个编辑器。
那么怎么用呢?
打开DOS,输入edit,按回车就行了。
看起来好像很简单。
但是当你信心满满地去尝试的时候,你可能会发现,咦?为什么我的不行?
好像总弹出一个窗口,上面写着“NTVDM”和“句柄”啥的,好像很复杂,该怎么解决呢?
首先,按如下操作:

控制面板->程序和功能->启动或关闭Windows功能->旧版组件->勾选“NTVDM”->确定

这一步只是确保你的这个组件是开着的。
此时你可以再试一下,如果可以了,就很好,如果还不行,那么我们就实行第二步。

打开DOS->右击标题栏->属性->勾选“使用旧版控制台”->确定->重启即可

这样的话你就可以进入edit了。

好,现在我们将前面讲的程序输入进去,保存好。
现在我们用masm去编译我们的源程序。
首先,下载对应的程序,这个自行百度“masm”,我们使用masm的时候,还是在DOS中使用。也就是说我们把masm当做一个外部命令使用。
我们在DOS中输入:

masm 【对应的文件路径(不加后缀)】;

这样我们就可以得到一个X.obj

这样我们就完成了编译的环节,接下来我们需要进行连接。
如何连接?
这就需要我们用link来完成,我们在DOS中输入如下命令:

link 【对应的文件路径(不加后缀)】;

这里的文件路径是指我们刚刚编译得到的X.obj,这样我们就可以得到我们最终的程序——X.exe。

这时候我们就可以执行这个可执行文件了。
但是,你不会看到任何结果,因为这个程序并没有向屏幕输出任何结果,所以不要太奇怪。
那么我们如何去调试我们的程序呢?
因为有的小错误是很容易被检查出来的,但是一些隐藏较深的逻辑错误,就不容易被检查出来,这是我们就需要去调试。
你可能会想起我们之前讲过的debug,没错,我们这里就要把debug搬上舞台了,我们只需要在DOS中输入:

debug 【可执行文件路径(加exe)】

这样我们就可以去调试我们的程序,怎么调试的我就不详述了。

当然了,我们也可以先输入masm,link,然后再输入文件名(不要扩展名)

exe加载过程

在这里插入图片描述

第四章就这样了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值