汇编语言入门10 (王爽汇编语言学完能入门吗)

模块的参数设置

(1)全局符号定义 PUBLIC

在各个模块间共用的变量、符号、标号、过程等要用 PUBLIC 伪指令事先说明为全局变量,以便能被其他模块引用。

格式:PUBLIC 符号1[,符号2,……]

功能:将本模块中的符号或过程定义为全局变量,供其它模块使用。

(2)外部符号说明 EXTRN

EXTRN 伪指令用来说明某个变量、符号或过程是其它模块定义的,在本模块中需要引用。

格式:EXTRN 符号1:类型 [,符号2:类型,……]

功能:对外部符号和其类型进行说明。类型为:BYTE、WORD、DWORD、NEAR、FAR 等。符号的类型要与它在定义模块中的一致。

(3)段属性与段组合

由于多个源程序分别在不同的代码段中使用,因此段的属性要设置正确,以便于段组合。在定义代码段时,代码段名相同时要加上 PARA’CODE’,以使其类别相同;数据段也可以用 PARA’DATA’ 加以说明。

在多模块程序设计中,至少定义一个堆栈段,一般在主模块中定义。主模块的最后一条结束伪指令 END START必须加上标号(START),而其它模块的 END 语句不能带有标号。

(4)参数传递

多模块之间的参数传递方法与子程序传参类似,也可以用寄存器传参、存储单元传参、堆栈传参等。通过对变量的 PUBLIC / EXTRN 的声明,可以实现参数传递,但是要注意段的名字、类别要相同。还可以将数据段定义为共享数据段,即组合类型为 COMMON,利用公共数据段实现模块间的数据访问。

编写软件中断处理子程序与编写子程序有相同的地方,也有的不同之处,要多加注意。

步骤如下:

  • (1)保护现场;
  • (2)STI 开中断指令;如允许中断嵌套,则开中断
  • (3)处理中断;
  • (4)CLI 关中断指令;
  • (5)恢复现场;
  • (6)IRET 指令,返回被中断的程序。

由于从应用程序进入中断子程序时,IF 和 TF 标志都已经被清除,CPU 在中断子程序执行中就不再响应其它外设发出的硬件中断请求。但是如果这个中断子程序的优先级不高,或者在执行时允许被打断;那么在设计中断处理子程序时,就要先开放中断标志,让 CPU 能够响应其它的硬件中断请求,之后再回到本程序继续处理,这样可使系统的执行效率更高。开中断指令可放在程序的任意位置,当然越早开放越好。

在恢复现场和返回之前,要关中断。以免恰在此时有中断发生就会破坏现场,造成无可挽回的灾难。

中断返回指令 IRET 和子程序返回指令 RET 的作用都是返回原调用程序,但是在弹出断点地址之后,IRET 还要弹出保存的标志寄存器的值。