【计算机类职业资格】软件水平考试(中级)嵌入式系统设计师下午(应用技术)试题-试卷2及答案解析.doc

上传人:eventdump275 文档编号:1339970 上传时间:2019-10-17 格式:DOC 页数:12 大小:105KB
下载 相关 举报
【计算机类职业资格】软件水平考试(中级)嵌入式系统设计师下午(应用技术)试题-试卷2及答案解析.doc_第1页
第1页 / 共12页
【计算机类职业资格】软件水平考试(中级)嵌入式系统设计师下午(应用技术)试题-试卷2及答案解析.doc_第2页
第2页 / 共12页
【计算机类职业资格】软件水平考试(中级)嵌入式系统设计师下午(应用技术)试题-试卷2及答案解析.doc_第3页
第3页 / 共12页
【计算机类职业资格】软件水平考试(中级)嵌入式系统设计师下午(应用技术)试题-试卷2及答案解析.doc_第4页
第4页 / 共12页
【计算机类职业资格】软件水平考试(中级)嵌入式系统设计师下午(应用技术)试题-试卷2及答案解析.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

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

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

3、INT(漏极开路方式)。在图 6-17 中,将PCF8574 器件的 8 位准双向口外挂了一个 44 键盘矩阵。 (分数:8.00)(1).电阻 R36、R37 在图 6-17 电路中有何作用。请在 100 字以内简要说明。(分数:2.00)_(2).图 6-18 给出了 I2C 总线开始条件与停止条件的时序图。通常 I2C 总线的开始条件、停止条件总是由(1)产生。在开始条件产生后,总线被认为处于(2),在完成数据传输产生停止条件后,总线被认为处于空闲状态。在时钟信号的高电子期间,SDA 传输线上的电平必须稳定,只有在 SCL 传输线上的时钟信号为(3),数据线上的高低电子才允许发生变化,此

4、时传送的数据才有效。每一个写到 SDA 传输线上的数据字节必须为 8 位长度,每一次传输的字节数没有限制,每传输一个字节必须跟一个(4),传输字节时最高位在前。(分数:2.00)_(3).I2C 总线的寻址过程是在(5)后发送第 1 个字节,该字节地址决定主控器选择哪一个从器件,还可以通过 (6) 方式同时寻址所有的 I2C 器件,但当某个 I2C 器件不需要进行数据传输时,将忽略该寻址方式而不作任何应答。如果某个 I2C 器件需要获取数据,则将发出(7)信号并作为一个(8)。(分数:2.00)_(4).以下是利用 MCS-51 系列单片机汇编语言实现模拟 I2C 总线接收 N 个字节数据的程

5、序段(RDNBYTE),请将汇编程序代码中(9)(13)空缺处的内容填写完整。表 6-21 所示为 MCS-51 系列单片机部分汇编指令及寄存器说明。 (分数:2.00)_二、试题二(总题数:1,分数:6.00)阅读以下说明和 x86 汇编语言代码,根据要求回答问题 1 至问题 3。表 6-3 所示为 x86 系统指令及寄存器说明表。 说明 在计算机控制中,有些数据补偿、计算及转换等参数的计算非常复杂,编程难,程序长且运算费时,但是用数表却比较容易实现。 设有 256 个字节的数据,已按从小到大的顺序存放在以BINTAB 为首地址的数据区单元中,现要求查找其中值为 126 的数据,用对分查表法

6、查询的汇编程序如下:汇编程序代码DATA SEGMENTBINTAB DBl8,25,32,46,56,78, ;第 1100 个数据 DB 90,95,99,100,106,126, ;第 101200 个数据 DB 189,195,197,202,206,216, ;第201256 个数据 COUNT EQU 256FLAG DW ?KEY EQU (1) DATA ENDSSTAK SEGMENTSTPN DB 20 DUP(?)STAK ENDSCODE SEGMENT ASSUME CS,CODE, DS,DATA, ES:DATA, SS:STAKBINSEAT PROC FARS

7、TART, 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, KEYLOP0, MOV BX, SI ADD BX, DI SHR BX, 1 CMP AL, BX JZ FOUND PUSHF (2) JZ NFOUND POPF JL LESS MOV SI, BX JMP NEXTLESS, (3) NEXT, (4) JMP LOP0NFOUND: MOV AX, DX ;未找到,标志全 1 送 DXFOUN

8、D: MOV AX, DX MOV FLAG, AX RETBINSEAT ENDPCODE ENDS (5)(分数:6.00)(1).请根据试题的要求,将汇编程序代码中(1)(5)空缺处的内容填写完整。(分数:2.00)_(2).请用 MOV 语句实现汇编程序代码中“LEASI,BINTAB”语句的功能。(分数:2.00)_(3).该汇编程序执行后,FLAG 存储单元中的数值是什么?使用对分查表法查询位于这 256 个字节数据表中的数据时,“CMPAL,BX”最多被执行几次? (分数:2.00)_三、试题三(总题数:1,分数:6.00)阅读以下说明和 x86 汇编语言代码,根据要求回答问题

9、1 至问题 3。 【说明】 在某嵌入式安全监测系统中,对某任务的加工操作需通过数据采集(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 次) 表 6-22 所示为 x86 系统部分指令及寄存器说明。 (分数:6.00)(1).请根据试题的要求,

10、将汇编程序代码中(1)(8)空缺处的内容填写完整。(分数:2.00)_(2).请根据试题的要求,将汇编程序代码中(1)(8)空缺处的内容填写完整。(分数:2.00)_(3).编译程序的功能是什么?解释程序与编译程序的主要区别是什么?请在 150 字以内简要说明。(分数:2.00)_四、试题四(总题数:1,分数:10.00)阅读以下利用场景法设计测试用例的技术说明,回答问题 1 至问题 5。 说明 现在的软件几乎都是由事件触发来控制流程的,事件触发时的情景便形成了场景,而同一事件不同的触发顺序和处理结果就形成了事件流。这种在软件设计方面的思想也可被引入到软件测试中,生动地描绘出事件触发时的情景,

11、有利于测试设计者设计测试用例,同时测试用例也更容易得到理解和执行。 用例场景是通过描述流经用例的路径来确定的过程,这个流经过程要从用例开始到结束遍历其中所有基本流(基本事件)和备选流(分支事件)。以下表 6-4 是对某 IC 卡加油机应用系统基本流的描述,表 6-5 是对该 IC 卡加油机应用系统备选流的描述。(分数:10.00)(1).图 6-9 是对该 IC 卡加油机应用系统的基本流路径和备选流路径的描述,请用题干中描述的相应字每将图中(1)(6)空缺处的内容填写完整。 (分数:2.00)_(2).场景中的每一个场景都需要确定测试用例,一般采用矩阵或决策表来确定和管理测试用例。表 6-5

12、是一种通用格式,表中各行代表各个测试用例,而各列代表测试用例的信息。本例中的测试用例包含测试用例 ID 号、场景(或说明/条件)、测试用例中涉及的所有数据元素(作为输人或已经存在于数据库中)以及预期结果等项目。 测试用例的设计步骤通常是:首先确定执行用例场景所需的数据元素(本例中包括账号、是否黑名单卡、输入油量、账面金额以及加油机油量),然后构建矩阵,最后确定包含执行场景所需的适当条件的测试用例。在表 6-6 的测试矩阵中,V 表示有效数据元素,I 表示无效数据元素,n/a 表示不适用,例如 CW01 表示“成功加油”基本流。请按上述规定为其他应用场景设计测试用例矩阵。 (分数:2.00)_(

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

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

15、(32 位 RISC 结构)的嵌入式系统中,将图 6-22 所示的(a)、(b)程序段分别重复 11 000 次,(a)程序段需要 2.13 ms;(b)程序段需要 1.01 ms。 由此可见,在进行算术运算编码时遵守哪些编码准则?(分数:2.00)_(4).在嵌入式系统中,由于软/硬件资源有限,且系统对实时性和可靠性要求较高,因此在进行嵌入式软件开发时,要注意对执行时间、存储空间和开发/维护时间这三种资源的使用进行优化。请具体说明在编写代码时,需要做到哪几点编码准则?(分数:2.00)_(5).编译器对程序进行一定的优化是非常有必要的,高级语言的程序可以被转化为汇编语言的指令形式。通常优化的

16、方法有(1)、循环优化、废代码的清除等。 对嵌入式系统进行性能测试可以衡量系统的实时性,分析嵌入式软件的优劣,同时分析程序的执行时间可以帮助分析 CPU 功耗等特性。最坏执行时间是指(2)。(分数:2.00)_软件水平考试(中级)嵌入式系统设计师下午(应用技术)试题-试卷 2 答案解析(总分:40.00,做题时间:90 分钟)一、试题一(总题数:1,分数:8.00)阅读以下关于嵌入式系统 I2C 总线接口电路的技术说明,根据要求回答问题 1 至问题 4。【说明】 I2C总线是一种多主控器总线,对多个 IC 器件具有控制总线的能力。采用串行 I2C 总线技术设计接口电路,可节约嵌入式系统微处理器

17、的 I/O 端口。图 6-17 给出了一种实现了键盘、时钟和实时参数存储三个功能模块的应用电路。图 6-17 中仅应用 I2C 总线构成单主控器的系统。此时时钟线 SCL 仅由微处理器驱动,因此可以用微处理器的一根 I/O 线作为 SCL 信号线,将其设置为输出方式,由软件控制产生串行时钟信号;用微处理器的另一根 I/O 线作为 I2C 总线的串行数据线,由软件控制在时钟的低电平期间读取或输出数据。在图 6-17 中采用 ATMEL 公司的 E2PROM AT24C64(IC8)实现了系统初始化数据、仪表系数、用户设置的参数或某些重要的实时数据参数的存储。DS1302 时钟芯片可以对年、月、日

18、、周日、时、分、秒进行计时,且具有闰年补偿功能,工作电压宽达 2.55.5 V。8 位并行 I/O 口扩展器件 PCF8574 具有口输出锁存功能,可直接驱动大电流 LED 管,同时还带有一个中断请求输出端 INT(漏极开路方式)。在图 6-17 中,将PCF8574 器件的 8 位准双向口外挂了一个 44 键盘矩阵。 (分数:8.00)(1).电阻 R36、R37 在图 6-17 电路中有何作用。请在 100 字以内简要说明。(分数:2.00)_正确答案:(正确答案:R36、R37 分别是 I2C 串行总线上双向的数据线 SDA 与时钟线 SCL 的上拉电阻 这是一道要求读者掌握 I2C 串

19、行总线接口电路中各个部件作用的电路分析题。本题的解答思路如下: I2C串行总线有两根信号线:一根是双向的数据线 SDA;另一根是时钟线 SCL。总线上受控器件的串行数据线SDA 都接到总线的 SDA 线上,各受控器件的时钟线 SCL 接到总线的 SCL 上。 在图 6-17 所示的电路中,电阻 R36、R37 的阻值为 10 k,分别接在 AT24C64、 DS1302、PCF8574 芯片的时钟线 SCL 和数据线 SDA上。 由于 I2C 总线接口均采用漏极开路(Open-drain)或集电极开路(Open-collector)的方式来完成线与(Wired AND)功能,因此需在数据线 S

20、DA、时钟线 SCL 上接人上拉电阻。可见 R36、R37 分别是 I2C 串行总线上双向的数据线 SDA 与时钟线 SCL 的上拉电阻。 另外,设计 I2C 总线接口电路时需要注意,总线的驱动能力以所连接器件的负载电容量不超过 400 pF 为宜。)解析:(2).图 6-18 给出了 I2C 总线开始条件与停止条件的时序图。通常 I2C 总线的开始条件、停止条件总是由(1)产生。在开始条件产生后,总线被认为处于(2),在完成数据传输产生停止条件后,总线被认为处于空闲状态。在时钟信号的高电子期间,SDA 传输线上的电平必须稳定,只有在 SCL 传输线上的时钟信号为(3),数据线上的高低电子才允

21、许发生变化,此时传送的数据才有效。每一个写到 SDA 传输线上的数据字节必须为 8 位长度,每一次传输的字节数没有限制,每传输一个字节必须跟一个(4),传输字节时最高位在前。(分数:2.00)_正确答案:(正确答案:(1)主器件 (2)忙状态 (3)低电平 (4)应答位 ACK 这是一道要求读者阅读 I2C 总线开始条件与停止条件的时序图,并理解 I2C 总线数据有效性,数据字节格式的综合分析题。本题的解答思路如下: 每一个 I2C 总线器件都通过惟一的地址进行识别,根据其特性,可作为发送器或接收器工作。 由于连接到 I2C 总线上的器件各不相同(如有 CMOS 器件、NMOS 器件、TTL

22、器件等),逻辑。或逻辑1 的电平会根据电源电压的高低发生变化,因此,每传输一个位就产生一个时钟脉冲。 在图 6-18 所示的时序图中,I2C 总线的开始条件是指当 SCL 为高电平时,SDA 产生由高电平到低电平的跳变。停止条件是指当 SCL 为高电平时,SDA 产生由低电平到高电子的跳变。 开始和停止条件总是由主器件产生。在开始条件产生后,总线被认为处于忙状态,在完成数据传输产生停止条件后,总线被认为处于空闲状态。因此(1)空缺处应填入“主器件”,(2)空缺处应填入“忙状态”。 I2C 总线数据有效性是指在时钟信号的高电平期间,SDA 传输线上的电平必须稳定,只有在 SCL 传输线上的时钟信

23、号为低电平时,数据线上的高低电子才允许发生变化。因此(3)空缺处应填入“低电子”。 I2C 总线数据字节的格式规定,每一个写到 SDA 传输线上的数据字节必须为 8 位长度,每一次传输的字节数没有限制,每传输一个字节必须跟一个应答位 ACK(见图 6-18),传输字节时最高位在前(MSB-first)。如果接收器因为执行其他功能(如中断服务)而不能接收剩余的数据字节时,接收器就保持时钟线 SCL 为低电平强制发送器进入等待状态,只有当接收器准备接收其他字节并释放 SCL 传输线时,数据传输才会继续进行。可见,(4)空缺处应填入“应答位 ACK”。)解析:(3).I2C 总线的寻址过程是在(5)

24、后发送第 1 个字节,该字节地址决定主控器选择哪一个从器件,还可以通过 (6) 方式同时寻址所有的 I2C 器件,但当某个 I2C 器件不需要进行数据传输时,将忽略该寻址方式而不作任何应答。如果某个 I2C 器件需要获取数据,则将发出(7)信号并作为一个(8)。(分数:2.00)_正确答案:(正确答案:(5)开始条件 (6)广播寻址 (7)应答 (8)从接收器 这是一道要求读者掌握 I2C 总线寻址的综合分析题。本题的解答思路源于图 6-18 所给出的 I2C 总线开始条件与停止条件的时序图。 试题关键信息“该字节地址决定主控器选择哪一个从器件”中,“该字节地址”是指图 6-18 中开始条件之

25、后的“Address”。因此可推理出(5)空缺处应填入“开始条件”。 I2C 总线还可以通过“广播”寻址方式同时寻址所有的 IC 器件。当使用广播寻址时,理论上所有的 IC 器件都应该返回应答信号,但当某个 IC 器件不需要进行数据传输时,将忽略广播寻址而不作任何应答。广播寻址的第二个字节决定其后的操作。可见(6)空缺处应填入“广播寻址”。 如果某个 I2C 器件需要获取数据,则将发出应答信号并作为一个从接收器。因此 (7)、(8)空缺处应分别填入“应答”、“从接收器”。)解析:(4).以下是利用 MCS-51 系列单片机汇编语言实现模拟 I2C 总线接收 N 个字节数据的程序段(RDNBYT

26、E),请将汇编程序代码中(9)(13)空缺处的内容填写完整。表 6-21 所示为 MCS-51 系列单片机部分汇编指令及寄存器说明。 (分数:2.00)_正确答案:(正确答案:(9)E 或 LCALL WRBYT (10)C 或 LCALL CACK (11)D 或 LCALL RDBYT (12)F 或 LCALL MNACK (13)B 或 LCALL MACK 这是一道要求读者掌握汇编语言程序分析的综合题。本题的解答思路源于图6-18 所给出的 I2C 总线开始条件与停止条件的时序图。根据该时序图及题干中已定义的各个子程序可知,(9)空缺处应选择“LCALL WRBYT”;(10)空缺处

27、应选择“LCALL CACK”;(11)空缺处应选择“LCALL RDBYT”;(12)空缺处应选择“LCALL MNACK”;(13)空缺处应选择“LCALL MACK”。 以下给出完整的模拟 I2C 总线接收 N 个字节数据的程序段(RDNBYTE)及其各条语句的功能注释。 RDNBYTE:MOV R3,NUMBYTE ;取所需传送的字节数,即 N 值 LCALL START ;发送启动位 MOV A,SLA ;读取寻址字节类型 LCALL WRBYT ;发送寻址宁节(读) LCALL CACK ;检查应答位 JB F0,RDNBYTE ;用户标志位为 1 时,转移至RDNBYTE 标号

28、;处,否则向下执行 RDN: MOV R1,#MRD ;取接收数据缓冲区的首地址 RDN1: LCALL RDBYT ;读入一个字节 MOV R1,A ;将所读入的内容送至接收数据缓冲区 DJNZ R3,ACK ;N 个字节读完否?未完转至 ACK 标号处 LCALL MNACK ;N 个字节读完后,发送非应答位 LCALL STOP ;发送停止位 RET ;子程序返回 ACK: LCALL MACK ;发送应答位 INC R1 ;接收数据缓冲区的地址指针增 1 SJMP RDN1 ;无条件转至 RDN1 标号处,继续读下一个字 ;节数据)解析:二、试题二(总题数:1,分数:6.00)阅读以下

29、说明和 x86 汇编语言代码,根据要求回答问题 1 至问题 3。表 6-3 所示为 x86 系统指令及寄存器说明表。 说明 在计算机控制中,有些数据补偿、计算及转换等参数的计算非常复杂,编程难,程序长且运算费时,但是用数表却比较容易实现。 设有 256 个字节的数据,已按从小到大的顺序存放在以BINTAB 为首地址的数据区单元中,现要求查找其中值为 126 的数据,用对分查表法查询的汇编程序如下:汇编程序代码DATA SEGMENTBINTAB DBl8,25,32,46,56,78, ;第 1100 个数据 DB 90,95,99,100,106,126, ;第 101200 个数据 DB

30、189,195,197,202,206,216, ;第201256 个数据 COUNT EQU 256FLAG DW ?KEY EQU (1) DATA ENDSSTAK SEGMENTSTPN DB 20 DUP(?)STAK ENDSCODE SEGMENT ASSUME CS,CODE, DS,DATA, ES:DATA, SS:STAKBINSEAT PROC FARSTART, 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,

31、AX MOV AL, KEYLOP0, MOV BX, SI ADD BX, DI SHR BX, 1 CMP AL, BX JZ FOUND PUSHF (2) JZ NFOUND POPF JL LESS MOV SI, BX JMP NEXTLESS, (3) NEXT, (4) JMP LOP0NFOUND: MOV AX, DX ;未找到,标志全 1 送 DXFOUND: MOV AX, DX MOV FLAG, AX RETBINSEAT ENDPCODE ENDS (5)(分数:6.00)(1).请根据试题的要求,将汇编程序代码中(1)(5)空缺处的内容填写完整。(分数:2.00

32、)_正确答案:(正确答案:(1)126,或其对应的二进制数形式 (2)CMP BX,SI (3)MOV DI,BX (4)INC DX (5)END START 这是一道要求读者掌握对分查表法算法的程序分析题。本题的解答思路如下: 对分查表法用于有序表的查找。对一个字节长度为 N 的有序表(从小到大排列),先取 N/2 处的值与待找的数据 X 进行比较,若 X 大于 N/2 处的值,则下一次取 N/2 至 N 的中间值即 3N/4 处的值进行比较,反之下一次取 0 至N/2 的中间值即 N/4 处的值进行比较。如此不断对分查找,直到找出所需要的数据 X。 结合以上算法思想,仔细分析试题的程序段

33、。以下给出该程序段的每条语句的详细解析。 DATA SEGMENT ;DATA 段定义伪指令 BINTAB DB 18,25,32,46,56,78, ;第 1100 个数据 DB 90,95,99,100,106,126, ;第 101200 个数据 DB 189,195,197,202,206,216, ;第201256 个数据 COUNT EQU 256 ; 数据块长度 FLAG DW? ;查到所找数据需要查找次数的存储单元 KEY EQU 100 ; 所查找的数据 DATA ENDS ;DATA 段定义结束伪指令 STAK SEGMENT ;STAK 段定义伪指令 STPN DB 20

34、 DUP(?) STAK ENDS ;STAK 段定义结束伪指令 CODE SKGMENT ;CODE 段定义伪指令 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 ;SI数据表上指针 MOV CX,COUNT ;CS数据块长度 MOV DX,1 ;立即数 1 送 DX,表示第 1 次查询 MOV AX,SI ;数据表首地址送 AX ADD AX,CX ;AX数据表首地址十数据块

35、长度 MOV DI,AX ;DI数据表下指针(AX) MOV AL,KEY ;AL要查询的数据 LOP0: MOV BX,SI ;数据表首地址送 BX ADD BX,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 ;要查询的数据小于中项数

36、据时,转至 LESS MOV SI,BX ;要查询的数据大于中项数据时,修改上指针 JMP NEXT ;表示在后一半继续查找 LESS: MOV 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 段定

37、义结束伪指令 END START ; 模块结束伪指令 由以上分析可知,根据“MOV AL,KE Y”、“CMP AL,BX”两条语句可推理出, (1)空缺处应填入题干中要求查询的数据126。 “CMP AL,BX”语句用于所查询的数据与中项数据比较,“JZ FOUND”语句表示如果比较结果相同,则转至找到后的处理标号 FOUND 处,由此可判断(2)空缺处填写的内容与所查询的数据不等于中项数据处理过程相关。 (2)空缺处的后一条语句“JZ NFOUND”语句表示如果比较结果相等,则转至未找到处理标号 NFOUND 处,由此可判断,该空缺处填写的内容用于判断查找过程是否可以结束,可通过比较中项指

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

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

40、 寄存器中。 b将 BINTAB 表的首地址放人 SI 寄存器中。 c将要搜索的关键字放在 AL 中。 d计算中点元素的地址(中项指针),并放入 BX 寄存器中。 e将关键字 AL 与中点元素的值进行比较, 若(AL)BX),则选低值的半个表(即 SI 为首地址,BX为尾地址),并转步骤 d; 若(AL)BX,则选高值的半个表(即BX为首地址,DI 为尾地址),并转步骤 d; 若(AL)BX,则找到并将查找次数送人 FLAG 存储单元。)解析:(2).请用 MOV 语句实现汇编程序代码中“LEASI,BINTAB”语句的功能。(分数:2.00)_正确答案:(正确答案:MOV SI,OFFSET

41、 BINTAB 这是一道要求读者掌握实现相同功能的汇编语句改写的编程题。本题的解答思路如下: 在汇编程序代码中“LEA SI,BINTAB”语句用于实现将数据表 BINTAB的首地址送源变址寄存器 SI 的功能,在第 1 次查询时该地址被定义为数据表的上指针。 传送指令 MOV可实现 CPU 内部寄存器之间的数据传送、寄存器与内存之间的数据传送,以及将一个立即数送给 CPU 的内部寄存器或内存单元。 由于每个变量具有段属性(SEG)、偏移量属性(OFFSET)和类型属性(TYPE),其中,段和偏移量两个属性可构成变量的逻辑地址。由此与“LEA SI,BINTAB”语句所实现的功能等价的语句是:“MOV SI,OFFSET BINTAB”。)解析:(3).该汇编程序执行后,FLAG 存储单元中的数值是什么?使用对分查表法查询位于这 256 个字节数据表中的数据时,“CMPAL,BX”最多被执行几次? (分数:2.00)_正确答案:(正确答案:FLAG 存储单元中的数值是 7(或其对应的二进制数形式) CMP AL,BX语句最多被执行的次数为 9 次 这是一

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

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

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