您好,欢迎来电子发烧友网! ,新用户?[免费注册]

当前位置:电子发烧友网 > 图书频道 > 电子 > 《计算机组成原理与汇编语言》 > 第3章 指令系统与汇编语言设计

第11节 汇编语言源程序结构

数据段应放在代码段之前,这是因为在数据段中先定义了变量,而后才能在代码段中使用,否则汇编时,在代码段中用到的变量将不能确定其类型,
         
致使汇编时得不到正确的机器代码,如:

         MOVAL,WA

汇编程序不能确定WA是字节还是字,因而将给出错误信息,只有在数据段中对WA定义为字节型变量时,这条指令才能正确汇编。

由上所述可知,一个源程序模块,一般都应有一个相同的结构,它们可以复制。编程时只要改变有关的名称,填入自己的程序内容即可。一个标准的程序结构如下: 

   STACK SEGMENT PARASTACK′STACK′
   DB 500DUP(0)
   STACK ENDS
   DATAS EGMENT
    …DATA ENDS
   CODE SEGMENT
   MAIN PROC FAR
   ASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACK
   PUSH DS
   MOV AX,0
   PUSH AX
   MOV AX,DATA
   MOV DS,AX
   MOV ES,AX… RET
   MAIN ENDP
   CODE ENDS
   END MAIN
      ①必须用ASSUME伪指令告诉汇编程序,哪一个段和哪一个段寄存器相对应,即某一段地址应放入哪一个段寄存器。
 
       ②DOS的装入程序在装入执行时,将把CS初始化为正确的代码段地址,把SS初始化为正确的堆栈段地址,因此在源程序中不需要再对它们进行初始化。

                            MOV AX,DATA
                        MOV DS,AX
      ③模块在要执行时,通常先由DOS的装入程序将执行模块装入内存。 
   
    由上述我们知道,PSP的段地址为DS中的值,而该地址又指向INT20H指令,因此偏移量应该为0。

                         PUSH DS ;压入PSP的段地址
                         MOV AX,0
                     PUSH AX ;压入INT20H的偏移量

    以上3条指令就是为主模块返回DOS所做的准备。当然,如果不是主模块,这3条指令是不需要的。