全部科目 > 软件评测师 >
2010年下半年 上午试卷 综合知识
第 5 题
知识点 汇编语言   汇编语言程序  
关键词 汇编语言   寄存器   语言  
章/节 计算机系统构成及硬件基础知识  
 
 
编写汇编语言程序时,下列寄存器中程序员可访问的是(5)。
 
  A.  程序计数器(PC)
 
  B.  指令寄存器(IR)
 
  C.  存储器数据寄存器(MDR)
 
  D.  存储器地址寄存器(MAR)
 
 




 
 
相关试题     计算机系统的构成 

  第5题    2017年下半年  
CPU是一块超大规模的集成电路,其中主要部件有( )。

  第3题    2017年下半年  
CPU中设置了多个寄存器,其中,( )用于保存待执行指令的地址。

  第5题    2016年下半年  
在计算机系统中总线宽度分为地址总线宽度和数据总线宽度。若计算机中地址总线的宽度为32位,则最多允许直接访问主存储器(5)的物理空间。

 
知识点讲解
· 汇编语言
· 汇编语言程序
 
        汇编语言
        汇编语言是为特定的计算机或计算机系统设计的面向机器的符号化程序设计语言。用汇编语言编写的程序称为汇编语言源程序。因为计算机不能直接识别和运行符号语言程序,所以要用专门的翻译程序——汇编程序进行翻译。用汇编语言编写程序要遵循所用语言的规范和约定。
        汇编语言源程序由若干条语句组成,一个程序中可以有三类语句:指令语句、伪指令语句和宏指令语句。
        (1)指令语句。指令语句又称为机器指令语句,将其汇编后能产生相应的机器代码,这些代码能被CPU直接识别并执行相应的操作。常见的基本指令如ADD、SUB和AND等,书写指令语句时必须遵循指令的格式要求。
        指令语句可分为传送指令、算术运算指令、逻辑运算指令、移位指令、转移指令和处理机控制指令等类型。
        (2)伪指令语句。伪指令语句指示汇编程序在汇编源程序时完成某些工作,例如给变量分配存储单元地址,给某个符号赋值等。伪指令语句与指令语句的区别是:伪指令语句经汇编后不产生机器代码,而指令语句经汇编后要产生相应的机器代码。另外,伪指令语句所指示的操作是在源程序被汇编时完成的,而指令语句对应的操作必须在程序运行时完成。
        (3)宏指令语句。在汇编语言中,还允许用户将多次重复使用的程序段定义为宏。宏的定义必须按照相应的规定进行,每个宏都有相应的宏名。在程序的任意位置,若需要使用这段程序,只要在相应的位置使用宏名,即相当于使用了这段程序。因此,宏指令语句就是宏的引用。
 
        汇编语言程序
        汇编语言是为特定计算机或计算机系统设计的面向机器的符号化程序设计语言。用汇编语言编写的程序称为汇编语言源程序。由于计算机不能直接识别和运行符号语言程序,所以需要用专门的翻译程序——汇编程序进行翻译。用汇编语言编写程序时要遵循所用语言的规范和约定。汇编语言的核心是汇编指令,它决定了汇编语言的特性。
               汇编语言源程序中的指令
               汇编语言源程序由若干条语句组成。一般来说,在一个程序中可以有3类语句:指令语句、伪指令语句和宏指令语句。
                      指令语句
                      指令语句又称为机器指令语句,将其汇编后能产生相应的机器代码,这些代码能被CPU直接识别并执行相应的操作。例如,表示传数据、相加、相减和与运算的MOV、ADD、SUB和AND等,书写指令语句时必须遵循指令的格式要求。
                      指令语句可分为传送指令、算术运算指令、逻辑运算指令、移位指令、转移指令和处理器控制指令等。
                      伪指令语句
                      伪指令语句指示汇编程序在对源程序进行汇编时完成某些工作。例如,给变量分配存储单元地址,给某个符号赋一个值等。伪指令语句与指令语句的区别是:伪指令语句经汇编后不产生机器代码,而指令语句经汇编后要产生相应的机器代码。另外,伪指令语句所指示的操作是在源程序被汇编时完成的,而指令语句的操作必须在程序运行时完成。
                      通常,汇编语言都应设立常数定义、存储定义、汇编控制、开始和结束等伪指令。
                      (1)常数定义伪指令。例如,在ARM汇编语言中定义常数的格式为:
                      
                      其中,EQU是语句的记忆码,x是用户定义的常数。这条语句的功能是定义标记符x的值为50。
                      (2)存储定义伪指令。例如,ARM汇编语言使用DCB来定义内存单元。
                      
                      这条语句用于指示分配一片连续的字节存储单元并进行初始化,str表示被分配的存储区域的起始地址。
                      (3)汇编控制伪指令,用于控制汇编程序的执行流程。
                      例如,在ARM汇编语言中,常用的汇编控制伪指令包括:
                      IF、ELSE、ENDIF:条件判断指令
                      WHILE、WEND:循环执行指令
                      (4)开始伪指令。例如,在ARM中可以使用ENTRY伪指令来指定汇编程序的入口点。
                      (5)结束伪指令。例如,在ARM中END伪指令用于通知编译器已经到了源程序的结尾。
                      对于每一条汇编指令语句,它由四个部分组成,或者说,被划分为4个区,依次是标号区、操作码区、操作数区和注释区。各个区域之间用确定的符号分隔开。标号区中的标号用于指示一条汇编指令语句,它实际上代表该指令的内存单元地址。操作码区是该语句的指令助记符,它可以是机器指令助记符、伪指令码等。操作数区指出本条汇编指令所操作的运算对象,用寻址方式指定操作数的来源,常用的是寄存器操作数和内存单元操作数。
                      宏指令语句
                      在汇编语言中,还允许用户将多次重复使用的程序段定义为宏。宏的定义必须按照相应的规定进行,每个宏都有相应的宏名。在程序的任意位置,若需要使用这段程序,只要在相应的位置使用宏名,即相当于使用了这段程序。因此,宏指令语句就是宏的引用。
               汇编语言程序示例
               下面分别以ARM和x86汇编语言为例,通过示例简要介绍汇编语言程序的基本格式。
                      ARM汇编语言程序示例
                      ARM汇编语言以段(section)为单位来组织源文件。段是相对独立的、具有特定名称的、不可分割的指令或数据序列。段又可以分为代码段和数据段,代码段存放执行代码,数据段存放代码运行时需要用到的数据。一个ARM源程序至少需要一个代码段,大的程序可以包含多个代码段和数据段。
                      ARM汇编语言源程序经过汇编处理后生成一个可执行的映像文件(类似于Windows系统下的EXE文件)。该映像文件通常包括以下的三个部分:
                      .一个或多个代码段,代码段通常是只读的。
                      .零个或多个包含初始值的数据段,这些数据段通常是可读写的。
                      .零个或多个不含初始值的数据段,这些数据段被初始化为0,通常是可读写的。
                      链接器根据一定的规则将各个段安排到内存的不同位置,源程序中相邻的段在可执行映像文件中不一定是相邻的。
                      x86汇编语言程序示例
                      不同平台有不同的汇编语言相对应,实际应用系统中,开发人员可能会用汇编来实现部分功能以获得更高的性能。下面用一个程序段简要说明x86汇编语言程序的简单示例。
                      设要利用某16位嵌入式CPU进行A/D采集,所设计的硬件电路(此处略)利用8255控制器C口中的PC0输出控制信号,利用PC7读入AD574的状态信号,再利用8255的A口和B口读入AD574转换好的12位数据。其中,8255控制器各个管脚及地址控制描述如下表所示。
                      
                      8255控制器各个管脚功能定义表
                      根据相应硬件设计编写对应的数据采集程序,首先需要对8255进行初始化,然后进行数据采集。
                      初始化8255程序段如下,先对8255(寻址其A口为C000H、寻址其控制寄存器为C003H)的工作模式进行配置。在给出的配置情况下,必须使得8255的A1 A0=11,即工作在寻址控制器模式下,同时保证8255的片选有效,即必须使得A15=A14=1,A13 =A12=A11=…=A2=0,因此给DX寄存器的地址为C003H,使8255的A口8位、B口8位及C口的高4位均设置为输入,C口的低4位设置为输出,将控制字写入8255的控制寄存器。
                      
                      在进行数据采集过程中,需要先通过8255的C口进行AD574的转换控制,要对C口操作,就需要设置A1 A0=10,再考虑到片选的有效性,需要给DX的地址是C002H。在进行一次数据转换时需要在PC0产生一个上升沿,所以要给C口输出配置为00H和01H。
                      当从C口取出状态字后,需要借助C口的最高位STS进行转换完毕的状态判断,因此取出数据保存在AL寄存器,需要将其与80H进行与操作来判断最高位的完成状态。
                      当判断结果是有效数据时候,需要分别从8255的A口和B口进行数据的获取,因此需要分别配置A口和B口的地址,依次为C000H和C001H。
                      在进行12位数据合并时,需要通过与操作取出低4位数据,与#0FH进行与操作即可。
                      数据采集程序段如下,
                      



更多复习资料
请登录电脑版软考在线 www.rkpass.cn

京B2-20210865 | 京ICP备2020040059号-5
京公网安备 11010502032051号 | 营业执照
 Copyright ©2000-2023 All Rights Reserved
软考在线版权所有