第一个程序02 – 零基础入门学习汇编语言21

第四章:第一个程序 02

让编程改变世界

Change the world by program

源程序

标号

一个标号指代了一个地址。

codesg:放在 segment 的前面,作为一个段的名称,这个段的名称最终将被编译、连接程序处理为一个段的段地址。

程序的结构

任务:编程运算 2^3。

程序结构如下:

段与段寄存器关联

定义一个段

实现处理任务

程序结束

汇编程序

assume cs:abc

abc segment

    mov ax,2

    add ax,ax

    add ax,ax

abc ends

end

程序返回

我们的程序最先以汇编指令的形式存在源程序中,经编译、连接后转变为机器码,存储在可执行文件中,那么,它怎样得到运行呢?

DOS 中的程序运行

DOS 是一个单任务操作系统。一个程序 P2 在可执行文件中,则必须有一个正在运行的程序 P1,将 P2 从可执行文件中加载入内存后,将 CPU 的控制权交给 P2,P2 才能得以运行。

P2 开始运行后,P1 暂停运行。而当 P2 运行完毕后,应该将 CPU 的控制权交还给使它得以运行的程序 P1,此后,P1 继续运行。

现在,我们知道,一个程序结束后,将 CPU 的控制权交还给使它得以运行的程序,我们称这个过程为:程序返回。

最后如何返回呢?

应该在程序的末尾添加返回的程序段。

mov ax,4c00H

int 21H

这两条指令所实现的功能就是程序返回。

几个和结束相关的内容

宽客网,量化投资,宽客俱乐部

几个和结束相关的内容

语法错误和逻辑错误

语法错误是指程序在编译时被编译器发现的错误,容易发现。

例如:

aume cs:abc

abc segment

    mov ax,2

    add ax,ax

    add ax,ax

end

逻辑错误是程序在编译时不能表现出来的、在运行时发生的错误,不容易发现。

例如:

assume cs:abc

abc segment

   mov ax,2

   add ax,ax

   add ax,ax

   mov ax,4c00H

   int 21H

abc ends

end

上机实践

一般来说,有两类错误使我们得不到所期望的目标文件:

  1. 我们程序中有“Severe Errors”;

  2. 找不到所给出的源程序文件。

1.exe 的执行

我们的程序没有像显示器输出任何信息。程序只是做了一些将数据送入寄存器和加法的操作,而这些事情,我们不可能从显示屏上看出来。

程序执行完成后,返回,屏幕上再次出现操作系统的提示符。

关于编译和链接

编译连和接的作用是什么呢?

连接的作用有以下几个:

当源程序很大时,可以将它分为多个源程序文件来编译,每个源程序编译成为目标文件后,再用连接程序将它们连接到一起,生成一个可执行文件;

程序中调用了某个库文件中的子程序,需要将这个库文件和该程序生成的目标文件连接到一起,生成一个可执行文件;

一个源程序编译后,得到了存有机器码的目标文件,目标文件中的有些内容还不能直接用来生成可执行文件,连接程序将这此内容处理为最终的可执行信息。

所以,在只有一个源程序文件,而又不需要调用某个库中的子程序的情况下,也必须用连接程序对目标文件进行处理,生成可执行文件。

注意,对于连接的过程,可执行文件是我们要得到的最终结果。

这里再次强调一下,我们学习汇编的主要目的,就是通过用汇编语言进行编程而深入地理解计算机底层的基本工作机理,达到可以随心所欲地控制计算机的目的。

我们用汇编语言编程,就要用到编辑器(Edit)、编译器(masm)、连接器(link)、调试工具(debug)等所有工具,而这些工具都是在操作系统之上运行的程序,所以我们的学习过程必须在操作系统的环境中进行。

视频下载