汇编程序基本原理

汇编程序基本原理

  • 1、汇编语言
  • 2、汇编程序

  语言处理程序是一类系统软件的总称,其主要作用是将高级语言或汇编语言编写的程序翻译成某种机器语言程序,使程序可在计算机上运行。语言处理程序主要分为汇编程序、编译程序和解释程序3种基本类型。本文将着重讲述汇编程序的基本原理。

1、汇编语言

  汇编语言是为特定的计算机设计的面向机器的符号化的程序设计语言。用汇编语言编写的程序称为汇编语言源程序。因为计算机不能直接识别和运行符号语言程序,所以要用专门的翻译程序——汇编程序进行翻译。用汇编语言编写程序要遵循所用语言的规范和约定。
  汇编语言源程序由若干条语句组成,其中可以有三类语句:指令语句、伪指令语句和宏指令语句。
  (1)指令语句。指令语句又称为机器指令语句,将其汇编后能产生相应的机器代码,这些代码能被CPU 直接识别并执行相应的操作。基本的指令有ADD、SUB和AND等,书写指令语句时必须遵循指令的格式要求。
  指令语句可分为传送指令、算术运算指令、逻辑运算指令、移位指令、转移指令和处理机控制指令等类型。
  (2)伪指令语句。伪指令语句指示汇编程序在汇编源程序时完成某些工作,例如为变量分配存储单元地址,给某个符号赋一个值等。伪指令语句与指令语句的区别是:伪指令语句经汇编后不产生机器代码,而指令语句经汇编后要产生相应的机器代码。另外,伪指令语句所指示的操作是在源程序被汇编时完成的,而指令语句的操作必须在程序运行时完成。
  (3)宏指令语句。在汇编语言中,还允许用户将多次重复使用的程序段定义为宏。宏的定义必须按照相应的规定进行,每个宏都有相应的宏名。在程序的任意位置,若需要使用这段程序,只要在相应的位置使用宏名,即相当于使用了这段程序。因此,宏指令语句就是宏的引用。

2、汇编程序

  汇编程序的功能是将用汇编语言编写的源程序翻译成机器指令程序。汇编程序的基本工作包括将每一条可执行汇编语句转换成对应的机器指令;处理源程序中出现的伪指令。由于汇编指令中形成操作数地址的部分可能出现后面才会定义的符号,所以汇编程序一般需要两次扫描源程序才能完成翻译过程。
  第一次扫描的主要工作是定义符号的值并创建一个符号表ST,ST记录了汇编时所遇到的符号的值。另外,有一个固定的机器指令表MOTI,其中记录了每条机器指令的记忆码和指令的长度。在汇编程序翻译源程序的过程中,为了计算各汇编语句标号的地址,需要设立一个位置计数器或单元地址计数器LC(Location Counter),其初值一般为0。在扫描源程序时,每处理完一条机器指令或与存储分配有关的伪指令(如定义常数语句、定义储存语句),LC的值就增加相应的长度。这样,在汇编过程中,LC的内容就是下一条被汇编的指令的偏移地址。若正在汇编的语句是有标号的,则该标号的值就取LC的当前值。
  此外,在第一次扫描中,还需要对与定义符号值有关的伪指令进行处理。为了叙述方便,不妨设立伪指令表POT1。POT1表的每一个元素只有两个域:伪指令助记符和相应的子程序入口。下面的步骤(1)~(5)描述了汇编程序第一次扫描源程序的过程。

  (1)单元计数器LC置初值0。
   (2)打开源程序文件。
   (3)从源程序中读入第一条语句。
   (4)while(若当前语句不是END语句){
      if(当前语句有标号)则将标号和单元计数器LC的当前值填入符号表ST;
      if(当前语句是可执行的汇编指令语句)则查找MOT1表获得当前指令的长度K,并令LC=LC+K;
      if(当前指令是伪指令)则查找POT1表并调用相应的子程序;
      if(当前指令的操作码是非法记忆码)则调用出错处理子程序。
      从源程序中读入下一条语句;
     }
   (5)关闭源程序文件。

  第二次扫描的任务是产生目标程序。除了使用前一次扫描所生成的符号表ST外,还要使用机器指令表 MOT2,该表中的元素有机器指令助记符、机器指令的二进制操作码(Binary-code)、格式(Type)和长度(Length)。此外,还要设立一个伪指令表POT2,供第二次扫描时使用。POT2的每一元素仍有两个域:伪指令记忆码和相应的子程序入口。与第一次扫描的不同之处是:在第二次扫描中,伪指令有着完全不同的处理。
  在第二次扫描中,可执行汇编语句应被翻译成对应的二进制代码机器指令。这一过程涉及两个方面的工作:一是把机器指令助记符转换成二进制机器指令操作码,这可通过查找MOT2表来实现;二是求出操作数区各操作数的值(用二进制表示)。在此基础上,就可以装配出用二进制代码表示的机器指令。

你可能感兴趣的:(程序设计语言基础知识,汇编)