[计算机类试卷]软件水平考试(中级)嵌入式系统设计师下午(应用技术)试题模拟试卷2及答案与解析.doc

上传人:hopesteam270 文档编号:506815 上传时间:2018-11-29 格式:DOC 页数:27 大小:742.50KB
下载 相关 举报
[计算机类试卷]软件水平考试(中级)嵌入式系统设计师下午(应用技术)试题模拟试卷2及答案与解析.doc_第1页
第1页 / 共27页
[计算机类试卷]软件水平考试(中级)嵌入式系统设计师下午(应用技术)试题模拟试卷2及答案与解析.doc_第2页
第2页 / 共27页
[计算机类试卷]软件水平考试(中级)嵌入式系统设计师下午(应用技术)试题模拟试卷2及答案与解析.doc_第3页
第3页 / 共27页
[计算机类试卷]软件水平考试(中级)嵌入式系统设计师下午(应用技术)试题模拟试卷2及答案与解析.doc_第4页
第4页 / 共27页
[计算机类试卷]软件水平考试(中级)嵌入式系统设计师下午(应用技术)试题模拟试卷2及答案与解析.doc_第5页
第5页 / 共27页
点击查看更多>>
资源描述

1、软件水平考试(中级)嵌入式系统设计师下午(应用技术)试题模拟试卷 2及答案与解析 一、试题一 1 阅读以下关于嵌入式系统 I2C总线接口电路的技术说明,根据要求回答问题 1至问题 4。【说明】 I2C总线是一种多主控器总线,对多个 IC器件具有控制总线的能力。采用串行 I2C总线技术设计接口电路,可节约嵌入式系统微处理器的 I/O端口。图 6-17给出了一种实现了键盘、时钟和实时参数存储三个功能模块的应用电路。图 6-17中仅应用 I2C总线构成单主控器的系统。此时时钟线 SCL仅由微处理器驱动,因此可以用微处理器的一根 I/O线作为 SCL信号线,将其设置为输出方式,由软件控制产生串行时钟信

2、号;用微处理器的另一根 I/O线作为 I2C总线的串行数据线,由软件控制在时钟的低电平期间读取或输出数据。 在图 6-17中采用ATMEL公司的 E2PROM AT24C64(IC8)实现了系统初始化数据、仪表系数、用户设置的参数或某些重要的实时数据参数的存储。 DS1302时钟芯片可以对年、月、日、周日、时、分、秒进行计时,且具有闰年补偿功能,工作电压宽达 2.5 5.5 V。 8位并行 I/O口扩展器件 PCF8574具有口输出锁存功能,可直接驱动大电流LED管,同时还带有一个中断请求输出端 INT(漏极开路方式 )。在图 6-17中,将PCF8574器件的 8位准双向口外挂了一个 44键

3、盘矩阵。1 电阻 R36、 R37在图 6-17电路中有何作用。请在 100字以内简要说明。 2 图 6-18给出了 I2C总线开始条件与停止条件的时序图。通常 I2C总线的开始条件、停止条件总是由 (1)产生。在开始条件产生后,总线被认为处于 (2),在完成数据传输产生停止条件后,总线被认为处于空闲状态。在时钟信号的高电子期间,SDA传输线上的电平必须稳定,只有在 SCL传输线上的时钟信 号为 (3),数据线上的高低电子才允许发生变化,此时传送的数据才有效。每一个写到 SDA传输线上的数据字节必须为 8位长度,每一次传输的字节数没有限制,每传输一个字节必须跟一个 (4),传输字节时最高位在前

4、。3 I2C总线的寻址过程是在 (5)后发送第 1个字节,该字节地址决定主控器选择哪一个从器件,还可以通过 (6) 方式同时寻址所有的 I2C器件,但当某个 I2C器件不需要进行数据传输时,将忽略该寻址方式而不作任何应答。如果某个 I2C器件需要获取数据,则将发出 (7)信号并作为一个 (8)。 4 以下是利用 MCS-51系列单片机汇编语言实现模拟 I2C总线接收 N个字节数据的程序段 (RDNBYTE),请将汇编程序代码中 (9) (13)空缺处的内容填写完整。表 6-21所示为 MCS-51系列单片机部分汇编指令及寄存器说明。程序中已定义了标号为 START的启动位子程序、标号为 STO

5、P的停止位子程序、标号为 MACK的发送应答位子程序、标号为 MNACK的发送非应答位子程序、标号为 CACK的应答位检查子程序、标号为 WRBYT的向 VSDA线上发送 1个数据字节的子程序、标号为 RDBYT的从 VSDA线上读取 1个数据字节的子程序。 调用RDNBYTE程序的归一化操作命令是 MOV SLA, #SLAR MOV NUMBYTE, #N LCALL RDNBYT 【汇编程序代码】 VSDA EQU P1.6 ;虚拟 I2C总线数据线 VSCL EQU P1.5 ;虚拟 I2C总线时钟线 SLA EQU 50H ;寻址字节存放单元 NUMBYTE EQU 51H ;传送字

6、节数存放单元 MTD EQU 30H ;发送数据缓冲区 MRD EQU 40H ;接收数据缓冲区 SLAW0 EQU 0AOH ;写 AT24C64(器件地址为0AOH) SLAR0 EQU 0A1H ;读 24C64 SLAW1 EQU 40H ;写 PCF8574(器件地址为040H) SLAR1 EQU 41H ;读 PCF8574 ;模拟 I2C总线接收 N个字节数据 RDNBYTE: MOV R3, NUMBYTE LCALL START ;发送启动位 MOV A,SLA ;发送寻址字节 (读 ) (9) (10) JB F0, RDNBYTE RDN: MOV R1, #MRD R

7、DN1: (11) MOV R1, A DJNZ R3, ACK ; N个字节读完否 ?未完转 (12) LCALL STOP ;发送停止位 RET ACK: (13) INC R1 SJMP RDN1 ;转读下一个字节数据 (9) (13)空缺处供选择的答案 A LCALL START B LCALL MACK C LCALL CACK D LCALL RDBYT E LCALL WRBYT F LCALL MNACK G LCALL STOP 二、试题二 5 阅读以下说明和 x86汇编语言代码,根据要求回答问题 1至问题 3。表 6-3所示为 x86系统指令及寄存器说明表。 说明 在计算机

8、控制中,有些数据补偿、 计算及转换等参数的计算非常复杂,编程难,程序长且运算费时,但是用数表却比较容易实现。 设有 256个字节的数据,已按从小到大的顺序存放在以 BINTAB为首地址的数据区单元中,现要求查找其中值为 126的数据,用对分查表法查询的汇编程序如下: 汇编程序代码 DATA SEGMENT BINTAB DBl8, 25, 32, 46, 56, 78, ;第 1 100个数据 DB 90, 95, 99, 100, 106, 126, ;第 101 200个数据 DB 189, 195, 197, 202, 206, 216, ;第 201 256个数据 COUNT EQU

9、256 FLAG DW ? KEY EQU (1) DATA ENDS STAK SEGMENT STPN DB 20 DUP(?) STAK ENDS CODE SEGMENT ASSUME CS,CODE, DS,DATA, ES:DATA, SS:STAK BINSEAT PROC FAR START, MOV AX, DATA MOV DS, AX MOV ES, AX LEA SI, BINTAB MOV CX, COUNT MOV DX, 1 MOV AX, SI ADD AX, CX MOV DI, AX MOV AL, KEY LOP0, MOV BX, SI ADD BX,

10、DI SHR BX, 1 CMP AL, BX JZ FOUND PUSHF (2) JZ NFOUND POPF JL LESS MOV SI, BX JMP NEXT LESS, (3) NEXT, (4) JMP LOP0 NFOUND: MOV AX, DX ;未找到,标志全 1送 DX FOUND: MOV AX, DX MOV FLAG, AX RET BINSEAT ENDP CODE ENDS (5) 5 请根据试题的要求,将汇编程序代码中 (1) (5)空缺处的内容填写完整。 6 请用 MOV语句实现汇编程序代码中 “LEASI, BINTAB”语 句的功能。 7 该汇编程序

11、执行后, FLAG存储单元中的数值是什么 ?使用对分查表法查询位于这 256个字节数据表中的数据时, “CMPAL, BX”最多被执行几次 ?三、试题三 8 阅读以下说明和 x86汇编语言代码,根据要求回答问题 1至问题 3。 【说明】 在某嵌入式安全监测系统中,对某任务的加工操作需通过数据采集 (Collect_task)、计算 (Calculate_task)这两个不同的程序段来完成,并且执行程序段 Collect_task和Calculate _task的顺序及次数有如下约定: Collect_task(2次 )Calculate_task(1次 )Collect_task(5 次 )C

12、alculate_task(4 次 )Collect_task(2 次 )Calculate_task(2次 ) 表 6-22 所示为 x86系统部分指令及寄存器说明。采用逻辑尺控制法实现以上要求的汇编程序如下: 【汇编程序代码】 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_t

13、ask ;执行 Calculate_task程序段 NEXT: (5) JNZ (6) MOV AH, 4CH ;功能号送入 AH寄存器 INT (7) ;结束程序运行,中断返回 (8) END START 8 请根据试题的要求,将汇编程序代码中 (1) (8)空缺处的内容填写完整。 9 请根据试题的要求,将汇编程序代码中 (1) (8)空缺处的内容填写完整。 10 编译程序的功能是什么 ?解释程序与编译程序的主要区别是什么 ?请在 150字以内简要说明。 四、试题四 11 阅读以下利用场景法设计测试用例的技术说明,回答问题 1至问题 5。 说明 现在的软件几乎都是由事件触发来控制流程的,事件

14、触发时的情景便形成了场景,而同一事件不同的触发顺序和处理结果就形成了事件流。这种在软件设计方面的思想也可被引入到软件测试中,生动地描绘出事件触发时的情景,有利于测试设计者设计测试用例,同时测试用例也更容易得到理解和执行。 用例场景是通过描述流经用例 的路径来确定的过程,这个流经过程要从用例开始到结束遍历其中所有基本流 (基本事件 )和备选流 (分支事件 )。以下表 6-4是对某 IC卡加油机应用系统基本流的描述,表 6-5是对该 IC卡加油机应用系统备选流的描述。11 图 6-9是对该 IC卡加油机应用系统的基本流路径和备选流路径的描述,请用题干中描述的相应字每将图中 (1) (6)空缺处的内

15、容填写完整。12 场景中的每一个场景都需要确定测试用例,一般采用矩阵或决策表来确定和管理测试用例。表 6-5是一种通用格式,表中各行代表各个测试用例,而各列代表测试用例的信息 。本例中的测试用例包含测试用例 ID号、场景 (或说明 /条件 )、测试用例中涉及的所有数据元素 (作为输人或已经存在于数据库中 )以及预期结果等项目。 测试用例的设计步骤通常是:首先确定执行用例场景所需的数据元素 (本例中包括账号、是否黑名单卡、输入油量、账面金额以及加油机油量 ),然后构建矩阵,最后确定包含执行场景所需的适当条件的测试用例。在表 6-6的测试矩阵中,V表示有效数据元素, I表示无效数据元素, n/a表

16、示不适用,例如 CW01表示 “成功加油 ”基本流。请按上述规定为其他应用场景设计测试用例矩阵。13 对于基 本流 A来说,表 6-6所示中哪些测试用例属于正面测试用例,哪些测试用例属于负面测试用例。请用表 6-6中相应的 “测试用例 ID号 ”回答问题。 14 请在 150字以内简要说明以表 66所示的方法创建测试用例矩阵的优点。 15 假如加油机内油量足够,油价为 5元 /升,用户的账户金额为 800元,那么在基本流 A4输入油量的过程中,请运用边界值分析方法为 A4选取合适的输人数据 (即油量,单位为升 )。 五、试题五 16 阅读以下关于嵌入式操作系统软件编码优化的技术说明,根据要求回

17、答问题 1至问题 5。 【说明】 由于嵌 入式系统对实时性的要求较高,因此一般要求对代码的性能进行优化,使代码的执行速度越快越好。图 6-22给出了两个算术运算的程序段 (a)、 (b)。16 在嵌入式系统设计过程中,给定一份软件设计规格说明书后,下一步的工作就是编写代码。通常编码工作包含哪些步骤 ? 17 图 6-22所示的 (a)、 (b)程序段的功能是完全一样的,都是对一个结构体数组的各个元素进行初始化,但采用两种不同的方法来实现。请在 200字以内归纳这两个算术运算程序段所采用的实现方法。 18 在一台采用 S3C44BOX微处理器 (32位 RISC结构 )的嵌入式系统中,将图 6-

18、22所示的 (a)、 (b)程序段分别重复 11 000次, (a)程序段需要 2.13 ms; (b)程序段需要1.01 ms。 由此可见,在进行算术运算编码时遵守哪些编码准则 ? 19 在嵌入式系统中,由于软 /硬件资源有限,且系统对实时性和可靠性要求较高,因此在进行嵌入式软件开发时,要注意对执行时间、存储空间和开发 /维护时间这三种资源的使用进行优化。请具体说明在编写代码时,需要做到哪几点编码准则 ? 20 编译器对程序进行一定的优化是非常有必要的,高级语言的程序可以被转 化为汇编语言的指令形式。通常优化的方法有 (1)、循环优化、废代码的清除等。 对嵌入式系统进行性能测试可以衡量系统的

19、实时性,分析嵌入式软件的优劣,同时分析程序的执行时间可以帮助分析 CPU功耗等特性。最坏执行时间是指 (2)。 软件水平考试(中级)嵌入式系统设计师下午(应用技术)试题模拟试卷 2答案与解析 一、试题一 1 【正确答案】 R36、 R37分别是 I2C串行总线上双向的数据线 SDA与时钟线SCL的上拉电阻 这是一道要求读者掌握 I2C串行总线接口电路中各个部件作用的电路分析题。本题的解答思路如下 : I2C串行总线有两根信号线:一根是双向的数据线 SDA;另一根是时钟线SCL。总线上受控器件的串行数据线 SDA都接到总线的 SDA线上,各受控器件的时钟线 SCL接到总线的 SCL上。 在图 6

20、-17所示的电路中,电阻 R36、 R37的阻值为 10 k,分别接在AT24C64、 DS1302、 PCF8574芯片的时钟线 SCL和数据线 SDA上。 由于 I2C总线接口均采用漏极开路 (Open-drain)或集电极开路 (Open-collector)的方式来完成线与 (Wired AND)功能,因此需 在数据线 SDA、时钟线 SCL上接人上拉电阻。可见 R36、 R37分别是 I2C串行总线上双向的数据线 SDA与时钟线 SCL的上拉电阻。 另外,设计 I2C总线接口电路时需要注意,总线的驱动能力以所连接器件的负载电容量不超过 400 pF为宜。 2 【正确答案】 (1)主器

21、件 (2)忙状态 (3)低电平 (4)应答位 ACK 这是一道要求读者阅读 I2C总线开始条件与停止条件的时序图,并理解 I2C总线数据有效性,数据字节格式的综合分析题。本题的解答思路如下: 每一个 I2C总线器件都通过惟一的 地址进行识别,根据其特性,可作为发送器或接收器工作。 由于连接到 I2C总线上的器件各不相同 (如有 CMOS器件、 NMOS器件、 TTL器件等 ),逻辑。或逻辑 1的电平会根据电源电压的高低发生变化,因此,每传输一个位就产生一个时钟脉冲。 在图 6-18所示的时序图中, I2C总线的开始条件是指当 SCL为高电平时,SDA产生由高电平到低电平的跳变。停止条件是指当

22、SCL为高电平时, SDA产生由低电平到高电子的跳变。 开始和停止条件总是由主器件产生。在开始条件产生后,总线被认为处于忙状态,在完成数据传 输产生停止条件后,总线被认为处于空闲状态。因此 (1)空缺处应填入 “主器件 ”, (2)空缺处应填入 “忙状态 ”。 I2C总线数据有效性是指在时钟信号的高电平期间, SDA传输线上的电平必须稳定,只有在 SCL传输线上的时钟信号为低电平时,数据线上的高低电子才允许发生变化。因此 (3)空缺处应填入 “低电子 ”。 I2C总线数据字节的格式规定,每一个写到 SDA传输线上的数据字节必须为 8位长度,每一次传输的字节数没有限制,每传输一个字节必须跟一个应

23、答位ACK(见图 6-18),传输字节时最高位在前 (MSB-first)。如果接收器因为执行其他功能 (如中断服务 )而不能接收剩余的数据字节时,接收器就保持时钟线 SCL为低电平强制发送器进入等待状态,只有当接收器准备接收其他字节并释放 SCL传输线时,数据传输才会继续进行。可见, (4)空缺处应填入 “应答位 ACK”。 3 【正确答案】 (5)开始条件 (6)广播寻址 (7)应答 (8)从接收器 这是一道要求读者掌握 I2C总线寻址的综合分析题。本题的解答思路源于图 6-18所给出的 I2C总线开始条件与停止条件的时序图。 试题关键信息 “该字节地址决定主控 器选择哪一个从器件 ”中,

24、 “该字节地址 ”是指图 6-18中开始条件之后的 “Address”。因此可推理出 (5)空缺处应填入 “开始条件 ”。 I2C总线还可以通过 “广播 ”寻址方式同时寻址所有的 IC器件。当使用广播寻址时,理论上所有的 IC器件都应该返回应答信号,但当某个 IC器件不需要进行数据传输时,将忽略广播寻址而不作任何应答。广播寻址的第二个字节决定其后的操作。可见 (6)空缺处应填入 “广播寻址 ”。 如果某个 I2C器件需要获取数据,则将发出应答信号并作为一个从接收器。因此 (7)、 (8)空缺处应分别填 入 “应答 ”、 “从接收器 ”。 4 【正确答案】 (9)E或 LCALL WRBYT (

25、10)C或 LCALL CACK (11)D或 LCALL RDBYT (12)F或 LCALL MNACK (13)B或 LCALL MACK 这是一道要求读者掌握汇编语言程序分析的综合题。本题的解答思路源于图 6-18所给出的 I2C总线开始条件与停止条件的时序图。根据该时序图及题干中已定义的各个子程序可知, (9)空缺处应选择 “LCALL WRBYT”; (10)空缺处应选择 “LCALL CACK”; (11)空缺处应选择 “LCALL RDBYT”; (12)空缺处应选择 “LCALL MNACK”; (13)空缺处应选择 “LCALL MACK”。 以下给出完整的模拟 I2C总线

26、接收 N个字节数据的程序段 (RDNBYTE)及其各条语句的功能注释。 RDNBYTE: MOV R3, NUMBYTE ;取所需传送的字节数,即 N值 LCALL START ;发送启动位 MOV A, SLA ;读取寻址字节类型 LCALL WRBYT ;发送寻址宁节 (读 ) LCALL CACK ;检查应答位 JB F0, RDNBYTE ;用户标志位为 1时,转移至 RDNBYTE标号 ;处,否则向下执行 RDN: MOV R1, #MRD ;取接收数据缓冲区的首地址 RDN1: LCALL RDBYT ;读入 一个字节 MOV R1, A ;将所读入的内容送至接收数据缓冲区 DJN

27、Z R3, ACK ; N个字节读完否 ?未完转至 ACK标号处 LCALL MNACK ; N个字节读完后,发送非应答位 LCALL STOP ;发送停止位 RET ;子程序返回 ACK: LCALL MACK ;发送应答位 INC R1 ;接收数据缓冲区的地址指针增 1 SJMP RDN1 ;无条件转至 RDN1标号处,继续读下一个字 ;节数据 二、试题二 5 【正确答案】 (1)126,或其对应的二进制数形式 (2)CMP BX, SI (3)MOV DI, BX (4)INC DX (5)END START 这是一道要求读者掌握对分查表法算法的程序分析题。本题的解答思路如下: 对分查表

28、法用于有序表的查找。对一个字节长度为 N的有序表 (从小到大排列 ),先取 N/2处的值与待找的数据 X进行比较,若 X大于 N/2处的值,则下一次取 N/2至 N的中间值即 3N/4处的值进行比较,反之下一次取 0至 N/2的中间值即N/4处的值进行比较。如此不断对分查找,直到找出所需要的数据 X。 结合以上算法思想,仔细分析试题的程序段。以下给出该程序段的每条语句的详细解析。 DATA SEGMENT ; DATA段定义伪指令 BINTAB DB 18, 25, 32, 46, 56, 78, ;第 1 100个数据 DB 90, 95, 99, 100, 106, 126, ;第 101

29、 200个数据 DB 189, 195, 197, 202, 206, 216, ;第 201 256个数据 COUNT EQU 256 ; 数据块长度 FLAG DW? ;查到所找数据需要查找次数的存储单元 KEY EQU 100 ; 所查找的数据 DATA ENDS ; DATA段定义结束伪指令 STAK SEGMENT ; STAK段定义伪指令 STPN DB 20 DUP(?) STAK ENDS ; STAK段定义结束伪指令 CODE SKGMENT ; CODE段定义伪指令 ASSUME CS: CODE, DS: DATA, ES; DATA, SS: STAK ;段寄存器说明伪

30、指 令 BINSEAT PROC FAR ;过程 (子程序 )定义伪指令 START: MOV AX, DATA MOV DS, AX MOV ES, AX LEA SI, BINTAB ; SI 数据表上指针 MOV CX, COUNT ; CS 数据块长度 MOV DX, 1 ;立即数 1送 DX,表示第 1次查询 MOV AX, SI ;数据表首地址送 AX ADD AX, CX ; AX 数据表首地址十数据块长度 MOV DI, AX ; DI 数据表下指针 (AX) MOV AL, KEY ; AL 要查询的数据 LOP0: MOV BX, SI ;数据表首地址送 BX ADD BX

31、, DI ; BX 数据表首地址 +数据表尾地址 SHR BX, 1 ; BX 中项指针 =(SI+D1)/2,操作数逻辑右移 ;移一位相当对其除 2 CMP AL, BX ;要查询的数据与中项数据比较 J2 FOUND ;结果相同,找到则转至 FOUND PUSHF ;保存状态标志 CMP BX, SI ;比较中项指针上指针 ? JZ NFOUND ;相等表示未找到,转至 NFOUND POPF ;恢复状态标志 JL LESS ;要查询的数据小于中项数据时,转至 LESS MOV SI, BX ;要查询的数据大于中项数据时,修改上指针 JMP NEXT ;表示在后一半继续查找 LESS: M

32、OV DI, BX ;要查询的数据小于中项数据时,修改下指针 ;表示在前一半继续查找 NEXT; INC DX ;查找次数加 1 JMP LOP0 ;重新计算中 项指针继续查找 NFOUND: MOV AX, DX ;未找到,标志全 1送 DX FOUND; MOV AK, DX ;查找次数送 AX MOV FLAG, AX ;查找次数送 FLAG单元 RET :返回主程序 BINSEATENDP ;过程 (子程序 )定义结束伪指令 CODE ENDS ; CODE段定义结束伪指令 END START ; 模块结束伪指令 由以上分析可知,根据 “MOV AL, KE Y”、 “CMP AL,

33、BX”两条语句可推理出, (1)空缺处应填入题干中要求查询的数据 126。 “CMP AL, BX”语句用于所查询的数据与中项数据比较, “JZ FOUND”语句表示如果比较结果相同,则转至找到后的处理标号 FOUND处,由此可判断 (2)空缺处填写的内容与所查询的数据不等于中项数据处理过程相关。 (2)空缺处的后一条语句 “JZ NFOUND”语句表示如果比较结果相等,则转至未找到处理标号 NFOUND处,由此可判断,该空缺处填写的内容用于判断查找过程是否可以结束,可通过比较中项指针是否等于数据表上指针的语句 “CMP BX, SI”来完成此功能。 由 (3)空缺处所在语句的标 号 “LES

34、S”可知, (3)空缺处填写的内容与 “JL LESS”语句 (判断所查询的数据是否小于中项数据 )相关。由对分查表法算法可知,当所查询的数据小于中项数据时,需修改数据表下指针,以使查找过程在前一半继续进行。因此该空缺处需填入与数据表下指针 DI相关的语句 “MOV DI, BX”。 同理,由 (4)空缺处所在语句的标号 “NEXT”可知, (4)空缺处填写的内容也与“JL LESS”语句 (判断所查询的数据是否小于中项数据 )相关。由对分查表法算法可知,当所查询的数据大于中项数据时,通过 “MOV SI, BX”语 句修改数据表上指针,以使查找过程在后一半继续进行。可见该空缺处是修改数据表下

35、指针或上指针后继续查找的公共执行语句。再由 “MOV DX, 1”语句及 “MOV AX, DX”、 “MOV FLAG, AX”语句可推理出, (4)空缺处填写的内容是查找次数加 1的 “INC DX”语句。 由于 (5)空缺处所填写的语句是程序模块的最后一条语句,因此由程序中启动标号 “START”可推理出,该空缺处是一条与之相对应的模块结束伪指令 “END START”,用于告诉汇编程序源文件结束,并给出执行程序的入口位置。 另外,为 了使读者更深入掌握对分查表法的应用,下面给出用对分查表法进行子程序设计的步骤: a表的长度放在 CX寄存器中。 b将 BINTAB表的首地址放人 SI寄存

36、器中。 c将要搜索的关键字放在 AL中。 d计算中点元素的地址 (中项指针 ),并放入 BX寄存器中。 e将关键字 AL与中点元素的值进行比较, 若 (AL) BX),则选低值的半个表 (即 SI为首地址, BX为尾地址 ),并转步骤d; 若 (AL) BX,则选高值的半个表 (即 BX为首地址, DI为尾地址 ),并转步骤d; 若 (AL) BX,则找到并将查找次数送人 FLAG存储单元。 6 【正确答案】 MOV SI, OFFSET BINTAB 这是一道要求读者掌握实现相同功能的汇编语句改写的编程题。本题的解答思路如下: 在汇编程序代码中 “LEA SI, BINTAB”语句用于实现将

37、数据表 BINTAB的首地址送源变址寄存器 SI的功能,在第 1次查询时该地址被定义为数据表的上指针。 传送指令 MOV可实现 CPU内部寄存器之间的数据传送、寄存器与内存之间的数据传送,以及将一个立即数送给 CPU的内部寄存器或内 存单元。 由于每个变量具有段属性 (SEG)、偏移量属性 (OFFSET)和类型属性 (TYPE),其中,段和偏移量两个属性可构成变量的逻辑地址。由此与 “LEA SI, BINTAB”语句所实现的功能等价的语句是: “MOV SI, OFFSET BINTAB”。 7 【正确答案】 FLAG存储单元中的数值是 7(或其对应的二进制数形式 ) CMP AL, BX

38、语句最多被执行的次数为 9次这是一道要求读者掌握汇编程序分析的综合理解题。本题的分析思路如下: “MOV AX, DX”、 “MOV FLAG, AX”这两条 语句实现将查找次数送入 FLAG单元的功能。而题干关键信息 “现要求查找其中值为 126的数据 ”,在数据段定义伪指令程序段中: BINT AB DB 18, 25, 32,46, 56, 78, ;第 1 100个数据 DB 90, 95, 99, 100, 106, 126, ;第101 200个数据 DB 189, 195, 197, 202, 206, 216, ;第 201 256个数据 由该定义可知,值为 126的数据是数据

39、表的第 106个数据。过程才能找到所查询的数据。因此,该汇编程序执行后, FLAG存储单元中的数值是 7,即查询 到值为 126的数据的查找次数。 由于对分查表法对数据表的要求是元素按从大到小或从小到大的顺序排列,因此该算法对有序表的查找速度较快。假如数据表中有 N个数据,则该算法最多的比较次数是 1b N+1。 比较语句 “CMP AL, BX”,通过比较所查询的数据与中项数据两者的值,可判断是否已找到所要查找的数据值。 本试题要求查询位于这 256个字节数据表中的数据,注意所查询的数据是数据表中的一个元素。因此 “CMP AL, BX”语句最多被执行的次数为比 N+1=1b256+1=8+

40、1=9。 三、试题三 8 【正确答案】 (1)16或等价的二进制数 “00010000B”(2)20F3H或等价的二进制数“0010000011110011B”(3)Calculate (4)NEXT(5)DEC CL (6)LOP(7)21H (8)CODE ENDS这是一道要求读者利用逻辑尺控制法进行循环程序设计的程序分析题。本题的解答思路如下: 在本案例的循环程序中,循环体又内嵌有多个不同的分支结构。每执行循环体一次,将根据事先规定好的标志位去执行具体的分支程序。试题要求采用逻辑尺控制法实现对于这种结构的循环程序设计。逻辑尺 控制法首先应设计一把逻辑 “尺 ”,即用字节、字、双字,甚至根

41、据需要所设置的多字节中的各位表示不同的操作,如果需在循环中执行更多分支,也可采用多位组合。 题干中对执行程序段 Collect_task和 Calculate_task的顺序及次数做了如下约定: Collect_task(2次 )Calculate_task(1 次 )Collect_task(5 次 )Calculate_task(4次 )Collect_task(2 次 )Calculate_task(2 次 ) 由于程序只简单执行两种不同的程序段,因此用一 位 “0”或 “1”来分别标志转向执行两种不同的分支操作。执行程序段Collect_task和 Calculate_task共有 1

42、6次,因此采用一个字 (16位 )来分别表示这两个程序段的执行顺序和次数。因此 (1)空缺处可填人循环的总次数 “16”,或者是等价的二进制数 “00010000B”。 根据以上分析结果可设计出相应的逻辑尺,如图 6-25所示。图 6-25中,阴影部分是程序段 Collect_task执行的顺序和次数,其余是程序段 Calculate task执行的顺序和次数。注意,执行 “Collect_task(2次 )”中第 1次执行的 Collect_task任务是放置在逻辑尺的最高位,还是放置在逻辑尺的最低位,由程序段中算术左移操作语句 “SAL AX, 1”决定。将图 6-25所示的逻辑尺的参数定

43、义转换成等价的十六进制数, 0010 0000 1111 0011B=20F3H。因此 (2)空缺处可填入“20F3H”,或者是等价的二进制数 “0010000011110011B”。 程序中已给出代码(CODE)段定义伪指令 “CODE SEGMENT”,由于段定义伪指令的格式是: 段名 SEGMENT定位方式 连接方式工 ,类别名, 段名 ENDS 因此在模块结束伪指令 “END START”之前需安排一条 “CODE ENDS”,即 (8)空缺处需填入 CODE段定义结束伪指令一 “CODE ENDS”。 由于程序段中已给出 “功能号送入 AH寄存器 ”及 “中断返回 ”等关键信息,由此

44、可判断 (7)空缺处需填入某一个中断类型码。由于软中断类型码通常取 20H 27H,其中系统功能调用的通用格式是: 功能号送入 AH寄存器 INT 21H 语句 “MOV AH, 4CH”中 “4CH”就是相应的功能号,因此 (7)空缺处需填入 “21H”。 结合逻辑 尺控制算法的设计思想和试题中给出的指令及寄存器说明表,仔细分析试题的程序段,先填写 (3)、 (4)、 (6)空缺处的标号内容,最后完成 (5)空缺处循环计数减 1操作 (DEC CL)的推理。以下给出该程序段的每条语句的详细解析。 N EQU 14 ;定义循环的总次数 RULE EQU 183CH ;定义逻辑尺 CODE SE

45、GMENT ; CODE段定义伪指令 ASSUME CS: CODE ;段寄存器说明伪指令 START: MOV AX, RULE ; AX 逻辑尺标志 MOV CL, N ; CL 循环的总次数 LOP: SAL AX, 1 ;算术左移操作, CF 逻辑尺最高位 JC Calculate ;当CF 1时,转至 Calculate标号处 Collect: CALL Collect_task ;当 CF 0时,执行Collect_task程序段 JMP NEXT ;无条件转至 NEXT标号处 Calculate: CALL Calculate_task ;执行 Calculate_task程序段

46、 NEXT: DEC CL ;循环计数,CLCL 1 JNZ LOP ;若 CL0,转至 LOP标号处,继续循环 MOV AH, 4CH ;若 CL 0,结束程序运行,返回 INT 21H ;系统功能调用 CODE ENDS ; CODE段定义结束伪指令 END START ;模块结束伪指令 9 【正确答案】 (1)机器语言程序 (2)两次 这是一道要求读者掌握汇编程序基本功能及其执行过程的常识题。本题所涉及的知识点如下: 汇编程序是一种系统软件,它的基本功能是将汇编语言源程序翻译成机器语言程序。 对于一个 N行汇编语言代码的源程序,由于汇编指令中形成操作数地址的部分可能出现后面才会定义的符号,因此汇编程序一般至少需要 两次扫描程序才能完成翻译过程。 其中,第 1次扫描的主要工作是通过固定的机器指令表 MOT1定义符号的值并创建一个符号表 ST,其中, ST记录了汇编时所遇到的符号的值。 第 2次扫描的任务是使用机器指令表 MOT2产生目标程序。 10 【正确答案】 编译程序的功能是把某些高级语言编写的源程序翻译成与之等价的目标语言程序解释程序与编译程序的主要区别是它不产生源程序的目标程序这是一道要求读者掌握编译程序、解释程序基本功能的常识题。本题所涉及的知识点如下: 编译程序的功能是把某些高级语言编写的源程序翻译 成与之等价

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试资料 > 职业资格

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1