问答题
【说明】
在某嵌入式安全监测系统中,对某任务的加工操作需通过数据采集(Collect_task)、计算(Calculate_task)这两个不同的程序段来完成,并且执行程序段Collect_task和Calculate _task的顺序及次数有如下约定:
Collect_task(2次)→Calculate_task(1次)→Collect_task(5次)→Calculate_task(4次)→Collect_task(2次)→Calculate_task(2次)
表 所示为x86系统部分指令及寄存器说明。
表 x86系统部分指令及寄存器说明表
|
指令
|
功能
|
寄存器
|
功能
|
|
MOV
|
传送字或字节
|
段寄存器
|
CS
|
代码段寄存器
|
|
LEA
|
地址传送
|
DS
|
数据段寄存器
|
|
ADD
|
加法指令
|
SS
|
堆栈段寄存器
|
|
SUB
|
减法指令
|
ES
|
附加段寄存器
|
|
PUSH
|
进栈操作
|
AX
|
累加器
|
|
POP
|
出栈操作
|
数据寄存器
|
BX
|
基址寄存器
|
|
SAL
|
算术左移
|
CX
|
计数寄存器
|
|
CALL
|
子程序调用
|
DX
|
数据寄存器
|
|
DEC
|
减1指令
|
专用寄存器
|
BP
|
基数指针寄存器
|
|
JMP
|
无条件转移指令
|
SP
|
堆栈指针寄存器
|
|
JZ/JNZ
|
结果为0/不为0时转移
|
SI
|
源变址寄存器
|
|
JL/JG
|
结果小于/大于转移
|
DI
|
目的变址寄存器
|
|
JC/JNC
|
有进(借)位/无进(借)位时转移
|
|
|
|
|
INT
|
软中断
|
|
RET
|
返回主程序
|
|
IRET
|
从中断服务程序返回
|
采用逻辑尺控制法实现以上要求的汇编程序如下:
【汇编程序代码】
N EQU
1
RULE EQU
2
CODE SEGMENT
ASSUME CS:CODE
START: MOV AX,RULE
MOV CL,N
LOP: SAL AX,1
JC
3
Collect: CALL Collect_task ;执行Collect_task程序段
JMP
4
Calculate:CALL Calculate_task ;执行Calculate_task程序段
NEXT:
5
JNZ
6
MOV AH,4CH ;功能号送入AH寄存器
INT
7
;结束程序运行,中断返回
8
END START
问答题
【问题1】
请根据试题的要求,将汇编程序代码中(1)~(8)空缺处的内容填写完整。
【正确答案】
【答案解析】(1)16或等价的二进制数“00010000B”
(2)20F3H或等价的二进制数“0010000011110011B”
(3)Calculate (4)NEXT
(5)DEC CL (6)LOP
(7)21H (8)CODE ENDS
问答题
【问题2】
汇编程序是一种系统软件,它的基本功能是将汇编语言源程序翻译成(1)。对于一个 N行汇编语言代码的源程序,由于汇编指令中形成操作数地址的部分可能出现后面才会定义的符号,因此汇编程序一般至少需要(2)次扫描程序才能完成翻译过程。
【正确答案】
【答案解析】(1)机器语言程序
(2)两次
这是一道要求读者掌握汇编程序基本功能及其执行过程的常识题。本题所涉及的知识点如下:
①汇编程序是一种系统软件,它的基本功能是将汇编语言源程序翻译成机器语言程序。
②对于一个N行汇编语言代码的源程序,由于汇编指令中形成操作数地址的部分可能出现后面才会定义的符号,因此汇编程序一般至少需要两次扫描程序才能完成翻译过程。
③其中,第1次扫描的主要工作是通过固定的机器指令表MOT1定义符号的值并创建一个符号表ST,其中,ST记录了汇编时所遇到的符号的值。
④第2次扫描的任务是使用机器指令表MOT2产生目标程序。
问答题
【问题3】
编译程序的功能是什么?解释程序与编译程序的主要区别是什么?请在150字以内简要说明。
【正确答案】
【答案解析】编译程序的功能是把某些高级语言编写的源程序翻译成与之等价的目标语言程序
解释程序与编译程序的主要区别是它不产生源程序的目标程序
这是一道要求读者掌握编译程序、解释程序基本功能的常识题。本题所涉及的知识点如下:
①编译程序的功能是把某些高级语言编写的源程序翻译成与之等价的目标语言程序。通常将编译程序的工作过程分为六个阶段,如表所示。每个阶段的操作在逻辑上是紧密相连的,将源程序从一种表示形式一步步转换成目标代码。
表 编译器六个工作阶段功能
|
名称
|
主要任务
|
备注
|
|
词法分析阶段
|
对源程序从前到后、从左到右逐个字符进行扫描,从中识别出一个“单词”符号
|
这两个阶段的本质都是对源程序的结构进行分析
|
|
语法分析阶段
|
根据语言的语法规则将单词符号序列分解成各类语法单位,构造出相应的语法树
|
|
|
语义分析阶段
|
对源程序进行类型分析,检查是否存在语义错误,并收集类型信息供代码生成阶段使用
|
这两个阶段的依据是语言的语义规则
|
|
中间代码生成阶段
|
根据语义分析的输出生成与具体机器无关的中间代码
|
|
|
代码优化阶段
|
优化中间代码在时间和空间上的浪费问题
|
依据是程序的等价变换规则
|
|
目标代码生成阶段
|
把中间代码变换成特定机器上的绝对指令码、可重定位的指令代码或汇编指令代码
|
此阶段的工作与与具体的机器相关
|
|
符号表管理
|
记录源程序中各个符号的必要信息,以辅助语义的正确性检查和代码生成
|
|
|
出错处理
|
处理源程序中的静态错误和动态错误
|
|
②解释程序是另一种语言处理程序,在词法、语法和语义分析方面与编译程序的工作原理基本相同,但在运行用户程序时,它直接执行源程序或源程序的内部形式。
解释程序与编译程序的主要区别在于它不产生源程序的目标程序。
③解释程序通常可以分为两部分:第一部分是分析部分,包括通常的词法分析、语法分析和语义分析程序,经语义分析后把源程序翻译成中间代码,中间代码常采用逆波兰表示形式;第二部分是解释部分,用来对第一部分所生产的中间代码进行解释执行。