汇编系列文章已经更新了三篇,每一篇都是笔者用心总结,希望对你有帮助
手把手教你汇编 Debug
爱了爱了,这篇寄存器讲的有点意思
之前的文章我们主要聊了一些基本的汇编指令,并且通过一个名为 Debug 的调试软件,让我们看到了内存中是如何存储指令和数据的,在学习了这些之后,我们就可以了解汇编程序了。
程序的执行过程
首先通过一个示意图给大家介绍一下程序的执行过程,我们以 C 语言一个简单的 hello.c 程序为例。
所以,总结一点来说,编写一个汇编程序主要分为下面这几步
- 首先定义一个段 ,比如 code、abc 等
- 在段中写入汇编指令
- 指出程序在何时处结束
- 标 要和寄存器关联起来。
- 程序返回(后面要说)
程序返回
一个完整的程序是要有返回条件的,程序只有在执行完相关代码后,执行返回条件,让出 CPU 执行权,操作系统才会分配时间片给其他程序,程序不能一直霸占着 CPU 不放,这是一种资源的浪费,而且一直占用着 CPU,也会导致程序崩溃。
汇编语言中,实现程序返回的指令只有两行
解释下这两句指令的意思:
mov ax,4c00H 就是把 4c00 移动到 ax,中,INT 21H 是调用系统中断指令,这两句代码起作用的就是 AH = 4CH,意思就是调用 INT 21H 的 4CH 中断,该中断就是安全退出程序。
到目前为止,我们已经了解到了几种和结束的相关内容,比如段结束,汇编程序结束、还有我们刚刚说的程序返回,下表列出了这三个指令的区别。
运行 masm 后,首先会显示一些版本信息,然后输入需要被编译的原程序文件名称,这里需要注意一下,提示我们,默认的文件扩展名是 asm,比如我们要编译的源程序文件名是 ,这里直接输入 asm 即可。如果源程序文件不是以 .asm 为后缀,需要输入它的全名,也就是 test.txt。
这里我们输入的是 test,因为我们编写的文件是 .asm 后缀。
运行 link 后,会出现一些版本信息,然后提示需要被连接的目标文件名称,这里仍需要注意,默认文件是 .obj 结尾,所以如果你需要连接的文件是 obj 文件,就不用输入后缀名,如果不是 obj 文件,则需要输入全名。
我们刚刚编译了一个 test.obj 文件,所以我们直接对这个 obj 文件进行连接。
输入要连接的文件名(这里仍需要输入 obj 所在的路径),按 enter 。
这个提示只是告诉我们没有栈段,我们可以完全忽略这个提示,当然如果你的程序有问题,是无法生成连接之后的文件的。
连接这个过程很有用,归结来说,主要有三个作用
- 当源程序很大时,可以将它分为多个源程序文件来进行编译,每个单独编译之后的目标文件,可以再通过连接将它们连接到一起生成可执行文件。
- 程序中调用了某个库文件中的子程序,需要将这个库文件和目标文件连接到一起生成一个可执行文件。
- 在编译过后生成的机器码文件,其中有些内容还不能直接执行,连接程序需要将这些内容转换为可执行信息,才能够把编译过后的机器码文件,连接成为可执行文件。
执行应用程序
现在我左手一个 asm 文件,右手一个 obj 文件,嘴里叼着一个 exe 文件,所以我就是嘴遁王者。废了半天劲,终于将 asm 搞成 exe 文件了,累屁了,不过先别急着休息,还差最后一步,执行它!
于是我们执行以下 TEST.EXE 文件
如果这篇文章写的不错并且对你有一些帮助,那我就求个赞呀!
文章知识点与官方知识档案匹配,可进一步学习相关知识C技能树首页概览113306 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!