免费智能真题库 > 历年试卷 > 嵌入式系统设计师 > 2021年上半年 嵌入式系统设计师 上午试卷 综合知识
  第58题      
  知识点:   汇编语言程序   高级语言   汇编语言   机器语言
  关键词:   编译程序   高级语言   汇编语言   机器语言   源程序   编译   语言        章/节:   嵌入式系统程序设计       

 
编译程序的功能是把某高级语言书写的源程序翻译成与之等价的目标程序(形式为汇编语言程序机器语言程序)。如下图所示,编译程序的工作过程可以分为6个阶段,图中①~⑤按次序分别是()。

 
 
  A.  语法分析、词法分析、语义分析、中间代码生成、代码优化
 
  B.  词法分析、语法分析、语义分析、代码优化、中间代码生成
 
  C.  语法分析、语义分析、词法分析、中间代码生成、代码优化
 
  D.  词法分析、语法分析、语义分析、中间代码生成、代码优化
 
 
 

 
  第52题    2011年下半年  
   69%
以下叙述中,正确的是(52)。
  第5题    2010年下半年  
   72%
编写汇编语言程序时,下列寄存器中程序员可访问的是(5)。
 
   知识点讲解    
   · 汇编语言程序    · 高级语言    · 汇编语言    · 机器语言
 
       汇编语言程序
        汇编语言是为特定计算机或计算机系统设计的面向机器的符号化程序设计语言。用汇编语言编写的程序称为汇编语言源程序。由于计算机不能直接识别和运行符号语言程序,所以需要用专门的翻译程序——汇编程序进行翻译。用汇编语言编写程序时要遵循所用语言的规范和约定。汇编语言的核心是汇编指令,它决定了汇编语言的特性。
               汇编语言源程序中的指令
               汇编语言源程序由若干条语句组成。一般来说,在一个程序中可以有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进行与操作即可。
                      数据采集程序段如下,
                      
 
       高级语言
        不论是机器语言还是汇编语言都是面向硬件的具体操作的,语言对机器的过分依赖,要求使用者必须对硬件结构及其工作原理都十分熟悉,非计算机专业人员是难以做到的,对于计算机的推广应用是不利的。计算机事业的发展,促使人们去寻求一些与人类自然语言相接近且能为计算机所接受的语意确定、规则明确、自然直观和通用易学的计算机语言。这种与自然语言相近并为计算机所接受和执行的计算机语言称高级语言。高级语言是面向用户的语言,每一种高级(程序设计)语言,都有自己人为规定的专用符号、英文单词、语法规则和语句结构(书写格式)。高级语言与自然语言(英语)更接近,而与硬件功能相分离(彻底脱离了具体的指令系统),便于广大用户掌握和使用。高级语言的通用性强,兼容性好,便于移植。
        高级语言主要是相对于汇编语言而言,它并不是特指某一种具体的语言,而是包括了很多编程语言。它又可分为面向过程的语言和面向问题的语言,前者在编程时不仅要告诉计算机“做什么”,而且要告诉计算机“怎么做”,如Basic,Pascal, Fortran, C等高级语言。后者只要告诉计算机做什么,如Lisp,Prolog等高级语言,也常称为人工智能语言。
 
       汇编语言
        汇编语言是为特定的计算机或计算机系统设计的面向机器的符号化程序设计语言。用汇编语言编写的程序称为汇编语言源程序。因为计算机不能直接识别和运行符号语言程序,所以要用专门的翻译程序——汇编程序进行翻译。用汇编语言编写程序要遵循所用语言的规范和约定。
        汇编语言源程序由若干条语句组成,一个程序中可以有三类语句:指令语句、伪指令语句和宏指令语句。
        (1)指令语句。指令语句又称为机器指令语句,将其汇编后能产生相应的机器代码,这些代码能被CPU直接识别并执行相应的操作。常见的基本指令如ADD、SUB和AND等,书写指令语句时必须遵循指令的格式要求。
        指令语句可分为传送指令、算术运算指令、逻辑运算指令、移位指令、转移指令和处理机控制指令等类型。
        (2)伪指令语句。伪指令语句指示汇编程序在汇编源程序时完成某些工作,例如给变量分配存储单元地址,给某个符号赋值等。伪指令语句与指令语句的区别是:伪指令语句经汇编后不产生机器代码,而指令语句经汇编后要产生相应的机器代码。另外,伪指令语句所指示的操作是在源程序被汇编时完成的,而指令语句对应的操作必须在程序运行时完成。
        (3)宏指令语句。在汇编语言中,还允许用户将多次重复使用的程序段定义为宏。宏的定义必须按照相应的规定进行,每个宏都有相应的宏名。在程序的任意位置,若需要使用这段程序,只要在相应的位置使用宏名,即相当于使用了这段程序。因此,宏指令语句就是宏的引用。
 
       机器语言
        机器语言是用二进制代码表示的计算机能直接识别和执行的一种机器指令的集合。它是计算机的设计者通过计算机的硬件结构赋予计算机的操作功能。机器语言具有灵活、直接执行和速度快等特点。
        用机器语言编写程序,编程人员要首先熟记所用计算机的全部指令代码和代码的涵义。手编程序时,程序员需要自己处理每条指令和每一数据的存储分配和输入输出,还得记住编程过程中每步所使用的工作单元处在何种状态。现在,除了计算机生产厂家的专业人员外,绝大多数程序员已经不再去学习机器语言了。
   题号导航      2021年上半年 嵌入式系统设计师 上午试卷 综合知识   本试卷我的完整做题情况  
1 /
2 /
3 /
4 /
5 /
6 /
7 /
8 /
9 /
10 /
11 /
12 /
13 /
14 /
15 /
 
16 /
17 /
18 /
19 /
20 /
21 /
22 /
23 /
24 /
25 /
26 /
27 /
28 /
29 /
30 /
 
31 /
32 /
33 /
34 /
35 /
36 /
37 /
38 /
39 /
40 /
41 /
42 /
43 /
44 /
45 /
 
46 /
47 /
48 /
49 /
50 /
51 /
52 /
53 /
54 /
55 /
56 /
57 /
58 /
59 /
60 /
 
61 /
62 /
63 /
64 /
65 /
66 /
67 /
68 /
69 /
70 /
71 /
72 /
73 /
74 /
75 /
 
第58题    在手机中做本题