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

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

1、2008年下半年软件水平考试(中级)嵌入式系统设计师下午(应用技术)试题真题试卷及答案与解析 一、试题一 1 下面是关于某测试设备的叙述,仔细阅读并分析,回答问题 1至问题 4,将答案填入对应栏内。【说明】 某测试设备是一个嵌入式系统,是为了测试一个专用设备而研制的,如下图所示。测试设备用于测试被测设备的各项软、硬件功能,包括2路 RS232串口、 2路模拟量、电源以及专用设备的其他内部部件。在被测专用设备内部有专门的自检测程序,来测试内部各部件。测试设备的串口与被测设备相连接,加电后,通过按测试设备的周边键与 被测设备握手同步,再向被测设备发送检测消息,被测设备测试自己的某项功能后,通过串口

2、将测试结果发回给测试设备,显示在测试设备的 LCD屏上。 测试设备的硬件由处理器模块、 IO模块和电源模块组成,处理器模块上有 CPU、存储器、 2路串口、键盘控制器; IO模块上有D/A、 A/D转换器,用作为模拟量输入和采集电源的电压值,以测试被测设备的模拟量和电源;电源模块提供测试设备的电源;测试设备模块间采用 ISA总线。 测试设备的 2路串口与被测设备相连,同时测试设备的 D/A、 A/D转换控制器的输入线路与被测设备的模拟量和电源线相 连,可直接测试被测设备的 2路 RS232串口、 2路模拟量、电源。 测试设备的软件由底层驱动 (串口驱动、 D/A、 A/D驱动和自定义键盘驱动

3、)、嵌入式操作系统和测试软件组成。1 设存储器容量为 4兆字,字长 32位,模块数为 4,分别用顺序方式和交叉方式进行组织,存储周期为 200ns,数据线宽度 32位,总线传送周期为 50ns,请计算顺序存储器和交叉存储器的平均存取时间 (单位: ns)和带宽 (单位:位 /秒 )。 2 测试设备的软件工作过程为:测试设备和被测设备同时加电,测试设备的操作系统启动后自动执行测试程序。测试 程序首先采集被测设备的电源是否正常,并在屏幕显示测试信息。如果被测设备正常,则向被测设备发送握手消息,与被测设备同步;如果同步不上,则报 “不能与设备同步 ”,测试结束。接下来,测试程序接收周边键命令,按要求

4、测试。如果测试 2路模拟量,则由测试设备通过 D/A转换,向被测设备发送模拟信号,被测设备得到模拟信号,判断正确性后,通过串口将结果返回给测试设备。另外,被测设备还有 4个功能项是通过串口发送测试命令给被测设备的,由被测设备内的自测试程序测试后,将结果再通过串口传回给测试设备。 请完成下图所示的流程图,按编号将正 确答案填写在对应栏中。3 请把下面列出的 6个空位的答案填入相应的位置。 1 ISA总线为 (1)位总线。 2由模拟信号到数字信号的转换过程称为 (2)。 3将数字信号变成模拟信号的过程称为 (3)。 4 D/A转换器的主要性能指标有 (4)、 (5)、 (6)。 (回答其中的三个主

5、要性能指标即可 ) 4 在本测试设备的异步串行传输中,数据格式为:数据位 8位、奇校验位 1位、停止位 1位。当波特率为 9600b/s时,每秒钟传送的有效数据是多少字节 ?为保证数据收发正确,试分析发送方和接收方时 钟允许的误差范围,并以百分比形式给出最大误差。 二、试题二 5 阅读以下关于输入输出接口设计的说明,回答问题 1至问题 3,将解答填入对应栏内。 【说明】 下图为采用查询方式工作的输入接口,地址译码器中 A15 A1直接接到或门的输入端。 5 输入设备在向接口传送 8位数据的同时,还传送负脉冲 STB,该信号的作用是什么 ? 6 D触发器的作用是什么 ?7 用查询方式将输入设备的

6、一个数据读入 CPU的 BL中,程序段如下所示,请完成该段 8086汇编程序,将 (1) (5)的内容填入相应的位置。 START: MOV DX, (1) NEXT1: IN AL, DX NEXT2: AND AL, (2) JZ (3) MOV DX, (4) IN AL, DX NEXT3: MOV (5), AL RET 三、试题三 8 阅读以下有关软件工程开发的叙述,回答问题 1至问题 3,将答案填入对应栏内。【说明】 V模型是在快速应用开发模型基础上 演变而来的,由于将开发过程构造成一个 V字型而得名, V模型强调软件开发的协作和速度,将软件实现和验证有机结合起来,在保证较高的软

7、件质量情况下缩短开发周期,下图为 V模型的完整诠释。8 上图所示的 V模型中,与开发阶段中概要设计对应测试阶段称为 (1)。在系统或配置项测试阶段处应采用 (2)方法。请将 (1)和 (2)处的内容填入相应位置。 9 请完成下面叙述,在 (3)、 (4)处填入恰当的内容,将解答填写在对应栏中。 从上图中水平对应关系看,左边是软件设计过程,右边是软件测试过程。在软件设计过程中, SQA应按 (3)进行检查活动。在软件测试过程中,系统测试是基于 (4)的测试。 10 完成下面对 V模型优点的论述,将答案填写在对应栏中。 1客户需求分析对应验收测试。在进行需求分析、功能设计的同时,测试人员就可以阅读

8、、审查分析结果,从而 (5)。 2系统设计人员做系统设计时,测试人员可了解实现的过程,可 (6)。 3设计人员做详细设计时,测试人员可参与设计,对设计 (7),同时 (8),并基于用例开发测试脚本。 4编码的同时进行单元测试,可尽快找出程序中的缺陷,提高 (9)。 5避 免了瀑布模型所带来的误区,即软件测试是在 (10)之后进行。 四、试题四 11 阅读以下有关 80X86汇编语言的叙述,回答问题 1和问题 2,将解答填入对应栏内。 【说明】 本题由两部分组成,第一部分为计算 AX寄存器的值,第二部分为判错题。 11 已知 DS=2000H, BX=0100H, SI=0002H,存储单元 2

9、0100H到 20103H依次存放 12H、 34H、 56H、 78H, 21200H 21203H依次存放 2AH、 4CH、 B7H、65H,说明下列每一条指令执行后 AX寄存器的内容 。 (1)MOV AX, 1200H (2)MOV AX, BX (3)MOV AX, BX+1100H (4)MOV AX, BX+SI (5)MOV AX, BXSI+1100H 12 下列 MOV指令都是错误的,请指出错误原因。 (1)MOV ES, 1234H (2)MOV AL, 300 (3)MOV SP, AX (4)MOV AX, BX+DI (5)MOV 20H, AH 五、试题五 13

10、 阅读以下说明和 C语言代码,回答问题 1至问题 4,将解答填入对应栏内。 【说明】 在嵌入式操作系统设备管理的实现上,常使用到 C语言的函数指针变量,由统一的管理函数调用不同的设备驱动程序。下面的一段 C语言代码是驱动管理程序 manage_device调用 4个不同设备驱动程序,但没有用到函数指针变量。 【 C语言代码】 /*变量与类型说明 */ #include “stdio.h“ #include “stdlib.h“ extern int sys_status; extern int Dev_drv1(int arg1, int arg2); extern int Dev_drv2(

11、int arg1, int arg2); extern int Dev_drv3(int arg1, int arg2); extern int Dev_drv4(int arg1, iht arg2); #define NOERROR 0 type struct int _fd; TYP_DEV_TAB; TYP DEV_TAB dev_tab50= 101,99, 80, 120,; /*程序代码 */ void manage_device(int devid, int arg1, int arg2) int place ; int ret; for(place=0 ; place 50

12、; place+) if dev_tab place. fd = devid) break; if(place =50) printf(“ NO DEVICE fd = %dn “,devid); switch(dev_tab place._fd) case 80: ret = Dev_drv3(int arg1,int arg2); break; case 99: ret = Dev_drv2(int arg1,int arg2); break; case 101: ret = Dev_drv1(int arg1,int arg2); break; case 120: ret = Dev_d

13、rv4(int arg1,int arg2); break; if (ret!=NOERROR) printf(“ DEVICE %d error!n “, devid); int Dev_drv1(int arg1,int arg2) /*局部变量声明,略 */ /*驱动程序代码,略 */ int Dev_drv2(int arg1,int arg2) /*局部变量声明,略 */ /*驱动程序代码,略 */ int Dev_drv3(int arg1,int arg2) /*局部变量声明,略 */ /*驱动程序代码,略 */ int Dev_drv4(int arg1,int arg2) /

14、*局部变 量声明,略 */ /*驱动程序代码,略 */ 13 请用 C语言的函数指针变量,对 manage_device函数进行改造,完成下面 C语言代码中的 (1)、 (2)、 (3)和 (4)处的变量说明或语句,将解答填入对应栏内。 【 C语言代码】 /*变量与类型说明 */ #include “stdio.h“ #include “stdlib.h“ extern int sys_status; extern int Dev_drv1(int arg1, int arg2); extern int Dev_drv2(int arg1, iht arg2); extern int Dev_

15、drv3(int arg1, int arg2); extern int Dev_drv4(int arg1, int arg2); #define NOERROR 0 typedef struct int _fd; (1) 函数指针变量说明; /* 变量名用 process */ TYP_DEV_TAB; TYP_DEV_TAB dev_tab50= 101, Dev_drv1,99, Dev_drv2, 80, Dev_drv3,120, Dev_dry4,; /* 程序 */ void manage_device(int devid, int arg1, int arg2) iht pl

16、ace ; int ret; (2) 函数指针变量说明; /*局部变量,变量名用 ProcAction */ for(place=0 ; place 50 ; place+) if(dev_tab place._fd = devid) (3) 语句 1; /* 变量名胜 ProcAction, 得到具体函数的入口地址 */ break; if(place =50) printf(“NO DEVICE fd = %dn“,devid); (4) 语句 2; if(ret!=NOERROR) printf(“DEVICE %d error!“, devid); 14 在 C语言程序中,常在某些变量

17、的说明前加 extem,如本题在变量说明中的第一条加 extem int sys_stams;请说明加 extem与不加 extem的区别,在进行编译时会有什么样的不同处理 ? 15 函数的参数存放在什么地址空间中 ?说明其作用范围。将答案填入对应栏内。 16 在设备驱动程序 (函数 )Dev_drv1中,对指针 ptr的说明如下: 【 C语文代码】 int Dev_drv1(int arg1,int arg2 ) struct node int ID; char name 20; int range; ; struct node *ptr; /*其他局部变量声明,略 */ ptr = (st

18、ruct node *)malloc(sizeof(struct node)*100); /*其他程序代码,略 */ 设 int为 32位整数, char占 8位。当对指针 ptr赋完值后的值为 0x3751CO,若再执行一条 “ptr+;”语句,此时 ptr的值为多少 ? (用十六进制表示 )。 2008年下半年软件水平考试(中级)嵌入式系统设计师下午(应用技术)试题真题试卷答案与解析 一、试题一 1 【正确答案】 【试题解析】 考查存储器的组织方式和性能计算。 顺序存储器和交叉存储器连续读出 m=4个字的信息总量是: q=32位 4=128位 顺序存储器和交叉存储器连续读出 4个字所需的时

19、间分别是: T2=mT=4200ns=800ns=810-7(s) T1=T+(m-1)总线传送周期 =200ns+350ns=350ns=3.510-7(s) 顺序存储器和交叉存储器的平均存取时间分别是: T2a=T=200ns T1a=350ns/4=87.5ns 顺序存储器带宽:W2=q/T2=128/(810-7)=16107(位 /秒 ) 交叉存储器带宽: W1=q/T1=128/(3.510-7)36.5107(位 /秒 ) 2 【正确答案】 (1)测试电源。 (2)与测试设备同步。 (3)接收周边键命令。 (4)通过数模转换模块 发送模拟量 1给被测设备。 (5)通过数模转换模块

20、发送模拟量 2给被测设备。 (6)通过串口发送测试功能 1命令给被测设备。 (7)通过串口发送测试功能 2命令给被测设备。 (8)通过串口发送测试功能 3命令给被测设备。 (9)通过串口发送测试功能 4命令给被测设备。 【试题解析】 考查软件的测试流程,依据题意以及问题 2描述的测试过程,其完整的测试软件流程图如下图所示。3 【正确答案】 (1)16 (2)AD转换,或 A/D转换 (3)DA转换,或 D/A转换 D/A转换器的主要性能指标除建立时间外,还有分辨率、转换精度、线性误差。所以 (1)、 (2)、 (6)应分别填写上述三个的任意一个 (不计次序 )。 【试题解析】 考查总线及数模转

21、换知识。 ISA总线即工业标准体系结构 (Industry Standard Architecture),为 16位总线,是最早出现的微型计算机总线标准,广泛应用于嵌入式系统。 由模拟信号到数字信号的转换过程称为 AD转换,或 A/D转换,或模数转换;将数字信号变成模拟信号的过程称为 DA转换,或 D/A转换,或数模转换。 D/A转换器的主要性能指标有建立时间、分辨率、转换精度、线性误差等。 4 【正确答案】 【试题解析】 考查异步数据传输应用知识。 每秒钟传送的有效数据: 9600(1+8+1+1)=872.7字节 分析发送方和接收方时钟允许的最大误差: 在启动位同步后,在 8位数据位、 1

22、位奇校验位、 1位停止位之后累积的最大误差为 (8+1+1),该值应小于 1/2位,即 (8+1+1) 1/2。 因此,最大误差 为 5%。 二、试题二 5 【正确答案】 脉冲除了将输入设备的数据 锁存到锁存器的输出端外,该脉冲还用来触发 D触发器,使其输出 Q为高电平,此高电平表示外设有数据准备好。 【试题解析】 本题考查输入输出接口设计以及输入输出控制方式应用知识。 计算机与外设之间进行数据传送主要有三种基本控制方式:查询方式、中断方式和DMA方式。 查询方式是通过执行输入 /输出查询程序来完成数据传送的,其工作原理是:当 CPU。启动外设工作后,不断地读取外设的状态信息进行测试,查询外设

23、是否准备就绪,如外设准备好,则可以进行数据传送:否则, CPU继续读取外设的状态信息进行查询等待,直到外设准备好。 采 用程序查询方式进行数据传送时,实际上在外设准备就绪之前, CPU一直处于等待状态,致使 CPU的利用率较低。倘若 CPU按这种方式与多个外设传送数据时,就需要周期性的依次查询每个外设的状态,浪费的时间就更多, CPU的利用率就更低。因此,这种方式适合于工作不太繁忙的系统。 中断方式是一种硬件和软件相结合的技术,中断请求和处理依赖于中断控制逻辑,而数据传送则是通过执行中断服务程序来实现的。这种方式的特点是:在外设工作期间, CPU无须等待,可以处理其他任务, CPU与外设可以并

24、行工作,提高了系统效率,同时又能满足实时信息 处理的需要。但在进行数据传送时,仍需要通过执行程序来完成。 采用中断方式可以提高 CPU的利用率,但有些 I/O设备 (如磁盘、光盘等 )需要高速而又频繁地与存储器进行批量的数据交换,此时中断方式已不能满足速度上的要求。而直接存储器处理 DMA方式,可以在存储器与外设之间开辟一条高速数据通道,使外设与存储器之间可以直接进行批量数据传送。实现 DMA传送,要求 CPU让出系统总线的控制权,然后由专用硬件设备 (DMA控制器 )来控制外设与存储器之间的数据传送。这种传送方式的特点是:在数据传送过程中,由 DMA控制器参与工作,不需 要 CPU的干预,批

25、量数据传送时效率很高,通常用于高速 I/O设备与内存之间的数据传送。 本题采用程序查询方式从输入设备读取数据。 接口图中的选通信号 低电平有效,是由外设提供的输入信号。当该信号有效时,将输入设备送来的数据锁存至输入锁存器中临时存储起来,并设置数据已经准备好的状态,标志该状态的是上图中的 D触发器。 D触发器的初始状态为 0(数据未准备好 ),当输入设备的数据准备好时,通过 CP将 D触发器设置为 1,标明数据已准备好, CPU可随时读取。 要从输入设备读取数据 ( 有效 ),首先应确定输入设备的端口地址,包括 状态端口和数据端口。从题图中可知,要读取输入设备的状态端口 (即数据是否准备好 ),

26、需进行下面的运算: A15+A14+A13+A2+A1+ + 即地址信号 A15、A14、 、 A2、 A1与 IOR进行或运算 (经过或门 )后的输出,与 A0经非门后的输出再进行或运算,若为 0,则可将 D触发器中的状态输出至数据线 D7,因此,要求 A15、 A14、 、 A2、 A1全部为 0且 A0为 1,即状态端口地址为 0001H。同理,要读取输入设备的数据,需进行下面的运算: A15+A14+A13+A2+A1+ +A0 即当 A15、 A14、 、 A2、 A1全部为 0并且A0也为 0,才能通过三态门将数据送往数据总线,因此数据端口地址为 0000H。 若用查询方式将输入设

27、备的一个数据读入 CPU的 BL寄存器中,则根据其工作方式,需要对 I/O接口的状态不断进行测试,一旦满足条件 (准备好传送数据即外设就绪 ),紧接着就执行数据传送指令,程序如下: START: MOV DX, 0001H ;外设的状态端口号送入 DX寄存器 NEXT1: IN AL, DX ;从外设端口读取状态并暂存入 AL NEXT2: AND AL, 80H ;判断数据是否就绪 (D7是否为 1) JZ NEXT1 ;未就绪 (D7为 0),则继续查询,否则开始读取数据 MOV DX, 0000H ;外设数据端口号送入 DX寄存器 IN AL, DX ;从外设端口读取数据到的数据暂存入

28、AL NEXT3: MOV BL, AL ;将数据送入 BL寄存器 RET 6 【正确答案】 D触发器用来提供外设数据准备好的状态。 7 【正确答案】 (1)0001H (2)80H (3)NEXT1,或 START (4)0000H (5)BL 三、试题三 8 【正确答案】 (1)部件测试或组件 测试 或 集成测试 (2)灰盒测试 【试题解析】 空 (1)处对应概要设计,在软件工程中,以概要设计为测试依据的测试级别应为集成测试或部件测试。所以 (1)处的正确答案应为部件测试,或组件测试,或集成测试。空 (2)处的测试方法应为系统或配置项测试的测试方法,系统或配置项测试时,应该主要使用黑盒测试

29、方法,但对一些特殊功能的测试还要对照代码使用白盒测试方法进行验证,所以应为灰盒测试方法。所以 (1)处的正确答案应为灰盒测试。 9 【正确答案】 (3)质量保证计划 (4)需求 或软件需求,或 软件需求规格说明 【试题解析】 在设计和分析过程中, SQA(Supplier Quality Assurance)的主要职责是进行质量保证活动,但 SQA进行质量保证活动的依据为项目策划阶段制定的质量保证计划。所以 (3)处的正确答案应为质量保证计划。 从上图可以看出,系统测试阶段的测试依据为软件需求规格说明,软件需求规格说明主要描述软件的功能需求、性能需求、接口需求等,它描述的每一条功能,在程序不一

30、定有一段相应的代码对应,而可能由多个程序单元的部分代码实现。故不能进行基于代码的测试,而应进行基于需 求的测试。所以 (4)处的正确答案应为需求,或软件需求,或软件需求规格说明都可。 10 【正确答案】 (5)了解产品设计特性及用户的真正需求,确定测试目标,可准备用例并策划测试活动。 (6)设计系统测试方案和计划,并准备环境。 (7)进行评审,找出设计缺陷。 (8)设计测试用例,完善测试计划。 (9)程序质量,或软件质量。 (10)代码完成。 【试题解析】 从上图所示的 V模型中还可以看出,左边是设计和分析,是软件设计实现的过程,同时伴随着质量保证活动 审核的过程,也就 是静态的测试过程;右边

31、是对左边结果的验证,是动态测试的过程,即对设计和分析的结果进行测试,以确认是否满足用户的需求。 需求分析和功能设计对应验收测试,说明在做需求分析、产品功能设计的同时,测试人员就可以阅读、审查需求分析的结果,从而了解产品的设计特性、用户的真正需求,确定测试目标,可以准备用例 (Use Case)并策划测试活动。 当系统设计人员在做系统设计时,测试人员可以了解系统是如何实现的,基于什么样的平台,这样可以设计系统的测试方案和测试计划,并事先准备系统的测试环境,包括硬件和第三方软件的 采购。因为这些准备工作,实际上是要花去很多时间。 当设计人员在做在做详细设计时,测试人员可以参与设计,对设计进行评审,

32、找出设计的缺陷,同时设计功能、新特性等各方面的测试用例,完善测试计划,并基于这些测试用例以开发测试脚本。 在编程的同时,进行单元测试,是一种很有效的办法,可以尽快找出程序中的错误,充分的单元测试可以大幅度提高程序质量、减少成本。 从中可以看出, V模型使我们能清楚地看到质量保证活动和项目同时展开,项目一启动,软件测试的工作也就启动了,避免了瀑布模型所带来的误区 软件测试是在 代码完成之后进行。 四、试题四 11 【正确答案】 (1)4C2AH (2)3412H (3)4C2AH (4)7856H (5)65B7H 【试题解析】 本问题主要考查汇编语言中数据寻址方式,寻址方式是寻找指令中用于说明

33、操作数所在地址的方法,或者是寻找操作数有效地址的方法。包括数据寻址和转移地址寻址两大类。本问题的具体解析如下: MOV AX, 1200H 为直接寻址,对应的物理地址为: DS10H+200H=21200H,该单元的字内容为4C2AH,所以该条指令执 行后 AX的内容为 4C2AH。 MOV AX, BX 为寄存器间接寻址,对应的物理地址为: DS10H+BX=20100H,该单元的字内容为 3412H,所以该条指令执行后 AX的内容为 3412H。 MOV AX, BX+1100H 为寄存器相对寻址,对应的物理地址为: DS10H+BX+1100H=21200H,该单元的内容为 4C2AH,

34、所以该条指令执行后 AX的内容为 4C2AH。 MOV AX, BX+SI 为基址变址寻址,对应的物理地址为: DS10H+BX+SI=20102H,该单元的字内容为 7856H,所以该条指令执行后 AX的内容为 7856H。 MOV AX, BXSI+1100H 为基址变址相对寻址,对应的物理地址为: DS10H+BX+SI+1100H=21202H,该单元字的内容为 65B7H,所以该条指令执行后 AX的内容为 65B7H。 12 【正确答案】 (1)立即数不能直接赋给段寄存器。 (2)立即数 300超过 8位,不能赋给 8位寄存器 AL。 (3)SP不能作为间接寻址寄存器寻址。 (4)两

35、个寄存 器不能相加。 (5)立即数不能作为目标操作数。 【试题解析】 本问题主要考查汇编语言的基础知识。在 8086的指令系统中,应用通用传送指令时,需要注意以下几点: 传送指令可传送 8位数据,也可传送 16位数据,具体取决于指令中涉及的寄存器是 8位还是 16位,也取决于立即数的形式。 传送指令中总是即含源操作数,又含目的操作数,两者之中至少有一个是用寄存器来指出的,这可减少指令长度。因此,一个立即数不能直接送直接寻址的内存单元。交换指令 (XCHG)两个操作数都不能是立即数。 传送指令不能在 两个内存单元之间直接传送数据。 在传送指令中,寄存器即可以作为源操作数,也可以作为目的操作数,但

36、 CS寄存器不能作为目的操作数,换句话说,这个寄存器的值不能随意修改。而 IP寄存器即不能作源操作数,也不能作为目的操作数。 用 BX、 SI、 DI来间接寻址时,默认的段寄存器位 DS,而用 BP来间接寻址时,默认的段寄存器为 SS。 8086系统规定,凡是遇到给 SS寄存器赋值的传送指令时,系统会自动禁止外部中断,等到本条指令和下条指令执行后,又自动恢复对 SS寄存器赋值前的中断开放状态。这样做是为了允许程序员 连续用两条指令分别对 SS和 SP寄存器赋值,同时又防止堆栈空间变动过程中出现中断。了解这点后,就应注意在修改 SS和SP的指令之间不要插入其他指令。 除了一些直接影响 FLAGS

37、的指令外,一般传送指令不改变标志寄存器的内容。 立即数不能直接送段寄存器 DS、 ES以及 SS,要用通用寄存器或存储单元作桥梁。 因此,指令 “MOV ES, 1234H”的错误在于立即数直接赋给了段寄存器;指令“MOV AL, 300”的错误在于立即数 300超过 8位,不能赋给 8位寄存器 AL;指令 “MOVSP, AX”的错误在 于 SP不能作为间接寻址寄存器寻址:指令 “MOV AX, BX+DI”的错误在于两个寄存器不能相加;指令 “MOV 20H, AH”的错误在于立即数不能作为目标操作数。 五、试题五 13 【正确答案】 (1)int (*process)(int arg1,

38、int arg2); (2)int (*ProcAction)(int arg1,int arg2); (3)ProcAction=dev_tabplace.process; (4)ret=ProcAction(arg1,arg2); 【试题解析】 本题考查对 C语言中函数指针变量的理解和用法。在 C语言中,可以用指针变量指向整型变量、字符串、数组、结构变量,也可以指向一个函数,对指针的用法非常灵活,也很容易出错。其中,函数指针变量为较高级的用法。 一个函数在编译时被分配给一个入口地址,这个入口地址就称为函数的指针。可以用一个指针变量指向函数,然后通过该指针变量调用此函数。 本题已将使用变量指

39、向函数编写设备驱动程序的大部分给出,只需在对函数指针变量的声明和引用处,只需给出正确的用法即可。 14 【正确答案】 【试题解析】 本题考查对 C语言的变量声明类型的理解。在变量声明前加extem,表明为引用一个外部变量,是外部变量引用声明,不管该变量在程序的什么位置。如果在一个文件中要引用在另一文件中定义的全局变量,就应在变量声明前加 extem。 如果在一个全局变量前不加 extem,表明该变量是在本文件中定义的一个全局变量,同时可被其他文件作为外部变量引用。 在不加 extem外部变量的定义处,编译时要给变量分配地址空间。在加 extem外部变量引用声明处,不给变量分配地址。 值得注意的

40、是,如果在全局变量的声 明前都加 extem,在这种情况下,编译连接时会确定一处分配一次地址空间。 15 【正确答案】 【试题解析】 本题考查对栈空间基础知识。函数的参数存放在进程或任务的栈空间中,在调用函数时,给函数的各参数在栈空间分配地址;函数返回时退出栈空间。所以,函数参数在函数被调用时起作用。 16 【正确答案】 ptr的值为以下均按正确对待。 0x3751DC,或 3751DCH,或十六进制 3751DC,或 3751DC。 【试题解析】 本题考查对 C语言指针变量的理解。在指针赋予某一变量的地址后,该 指针就指向该变量所分配的地址空间。需要强调的是,指针变量是有类型的,指针的值加 1,表示增加按其声明类型所占的字节数,而不是增加一个字节的地址。因此 ptr+后 ptr的值比原来增加 28个字节,当前的值应为 0x3751DC。

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

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

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