计算机类
公务员类
工程类
语言类
金融会计类
计算机类
医学类
研究生类
专业技术资格
职业技能资格
学历类
党建思政类
计算机软件水平考试
全国计算机应用水平考试(NIT)
计算机软件水平考试
计算机等级考试(NCRE)
全国高校计算机等级考试CCT
行业认证
信息素养
嵌入式系统设计师(中级)
信息系统项目管理师(高级)
系统分析师(高级)
系统架构设计师(高级)
网络规划设计师(高级)
系统规划与管理师(高级)
软件评测师(中级)
软件设计师(中级)
网络工程师(中级)
多媒体应用设计师(中级)
嵌入式系统设计师(中级)
电子商务设计师(中级)
系统集成项目管理工程师(中级)
信息系统监理师(中级)
信息安全工程师(中级)
数据库系统工程师(中级)
信息系统管理工程师(中级)
软件过程能力评估师(中级)
计算机辅助设计师(中级)
计算机硬件工程师(中级)
信息技术支持工程师(中级)
程序员(初级)
网络管理员(初级)
信息处理技术员(初级)
电子商务技术员(初级)
信息系统运行管理员(初级)
网页制作员(初级)
多媒体应用制作技术员(初级)
PMP项目管理员资格认证
嵌入式系统设计应用技术
嵌入式系统基础知识
嵌入式系统设计应用技术
问答题 阅读以下利用场景法设计测试用例的技术说明,回答问题1至问题5。 [说明] 现在的软件几乎都是由事件触发来控制流程的,事件触发时的情景便形成了场景,而同一事件不同的触发顺序和处理结果就形成了事件流。这种在软件设计方面的思想也可被引入到软件测试中,生动地描绘出事件触发时的情景,有利于测试设计者设计测试用例,同时测试用例也更容易得到理解和执行。 用例场景是通过描述流经用例的路径来确定的过程,这个流经过程要从用例开始到结束遍历其中所有基本流(基本事件)和备选流(分支事件)。以下表6-4是对某IC卡加油机应用系统基本流的描述,表6-5是对该IC卡加油机应用系统备选流的描述。{{B}} 表6-4 基本流描述表{{/B}} 序号 用例名称 用例描述 A1 准备加油 客户将IC加油卡插入加油机 A2 验证加油卡 加油机从加油卡的磁条中读取账户代码,并检查它是否属于可以接收的加油卡 A3 验证黑名单 加油机验证卡账户是否存在于黑名单中,如果属于黑名单,则加油机吞卡 A4 输入购油量 客户输入需要购买的汽油数量 A5 加油 加油机完成加油操作,从加油卡中扣除相应金额 A6 返回加油卡 退还加油卡{{B}}                            表6-5 备选流描述表{{/B}} 序号 用例名称 用例描述 B 加油卡无效   在基本汉A2过程中,该卡不能够识别或是非本机可以使用的IC卡,加油机退卡,并退出基本流 C 卡账户属于黑名单   在基本流A3过程中,判断该卡账户属于黑名单,例如,已经挂失,加油机吞卡,退出基本流 D 加油卡账面现金不足   系统判断加油卡内现金不足,重新加入基本流A4,或选择退卡 E 加油机油量不足   系统判断加油机内油量不足,重新加入基本流A4,或选择退卡
进入题库练习
问答题[问题3](3分) 请回答关于面板按键设计过程中的下列问题,将答案填写在答题纸的对应栏中。 在进行面板键盘处理设计时,通常在扫描键盘过程中,按键会产生机械抖动。针对抖动问题,王工认为只有道过硬件设计才能消除抖动,而李工认为用软件方法就可以解决该问题。针对抖动问题,你认为可以采用哪类方式消除?
进入题库练习
问答题[问题2](6分,每空1.5分) 在图2-3中,为了实现嵌入式Web服务器和对应的请求流程,李工设计了该流程示意图,根据网络通信的过程,从下面选项中选择合适的处理过程,填充图2-3中的空(1)~(4)。 空(1)~(4)备选答案: A.创建TCP socket套接字 B.关闭socket套接字 C.accept尝试建立TCP连接 D.HTTP服务 E.数据发送处理 F.数据接收处理 G.bind绑定套接字 H.本地其它服务处理 I.listen侦听客户套接字 J.创建UDP socket套接字
进入题库练习
问答题【说明】 网络应用的基本模型是客户机/服务器模型,这是一个不对称的编程模型,通信的双方扮演不同的角色,分别是客户机和服务器。 一般发起通信请求的应用程序称为客户软件,该应用程序通过与服务器进程建立连接来发送请求,然后等待服务器返回所请求的内容。服务器软件一般是指等待接收并处理客户机请求的应用程序,通常由系统执行,等待客户机请求,并且在接收到请求之后,根据请求的内容,向客户机返回合适内容。 本题中的程序较为简单,客户机接收用户在键盘上输入的文字内容,服务器将客户机发送来的文字内容直接返回给客户机,在通信过程中服务器方和客户机方都遵守的通信协议如下: 由客户机首先发送请求,该请求由首部和内容两大部分组成,两个部分各占一行文字,通过行结束符'/n'隔离。 首部只有一个Length域,用于指定请求的内容部分的长度,首部的结构为 '关键词Length'+' '+数值+'/n' 内容部分为一行文字,其长度必须与Length域的数值相符。 例如,客户机的请求为“Length 14/n hello,welcome to my home!”,服务器接收请求处理后返回文字“Hello,welcome to my home!”。 【Socket程序】 //服务器主程序部分 #include<stdio.h> …… //引用头文件部分略 #define SERVER_PORT 8080 //服务器监听端口号为8080 #define BACKLOG 5 //连接请求队列长度 int main(int argc,char *argv[ ]) { int listenfd,connfd; //监听套接字、连接套接字描述符 struct sockaddr_in servaddr; //服务器监听地址 listenfd={{U}} (1) {{/U}}, //创建用于监听的套接字 if(listenfd<0) { fprintf(stderr,"创建套接字错误!") //套接字创建失败时打印错误信息 exit(1); } bzero(&servaddr.sizeof(servadd)); //将地址结构置空 servaddr.sin_family=AF_INET; //设置地址结构遵循TCP/IP协议 servaddr.sin_addrs_addr=htonl.{{U}} (2) {{/U}} //设置监听的IP地址为任意合法地址,并将该地址转换为网络字节顺序 servaddr.sin_port={{U}} (3) {{/U}}; //设置监听的端口,并转化为网络字节顺序 if(bind((4))<0) { fprintf(stderr,"绑定套接字与地址!"), exit(1); } //将监听地址与用于监听的套接字绑定,绑定失败时打印错误信息 if(listen(listedfd,BACKLOG)<0) { fprintf(stderr,"转换套接字为监听套接字!"); exit(1); } //将用于监听的套接字由普通套接字转化为监听套接字 for(;;) { connfd={{U}} (5) {{/U}}; //从监听套接字的连接队列中接收已经完成的连接并创建新的连接套接字 if(connfd<0) { fprintf(stderr,"接收连接失败!"); exit(1); }//接收失败打印错误信息 serv_respon(connfd); //运行服务器的处理函数 {{U}}(6) {{/U}}; //关闭连接套接字 } close(listenfd); //关闭监听套接字 } //服务器通信部分 #include<stdio.h> …… //引用头文件部分略 void serv_respon(int sockfd) { int nbytes; char buf[1024] for(;;) { nbytes=read_requ(sockfd,buf,1024); //读出客户机发出的请求,并分析其中的协议结构,获知请求的内 //部分的长度,并将内容复制到缓冲区buf中 if(nbytes==0) return; //如客户机结束发送就退出 else if(bytes<0) { fprintf(siderr,"读错误情息:%s/n",strerror(errno)); return; } //读请求错误打印错误信息 if(write_all(sockfd,buf,nbytes)<0) //将请求中的内容部分反向发送回客户机 fprintf(siderr,"写错误信息:%s/n",strerror(errno)); } } int read_requ(int sockfd,char*buf int size) { char inbuf[256], int n; int i; i=read_line(sockfd,inbuf,256); //从套接字接收缓冲区中读出一行数据,该数据为客户请求的首部 if(i<0) return(i); else if(i==0) return(0); if(strncmp(inbuf," ",6)==0) sscanf({{U}} (7) {{/U}},"%d",&n),//从缓冲区buf中读出长度信息 else { sprintf(buf," ",14); return(14); }//取出首部Length域中的数值,该数值为内容部分的长度 return(read_all(sockfd,buf,n)),//从接收缓冲区中读出请求的内容部分 } int get_char(int fd,char*ch) /*get_char的处理方式较为特殊,并不是每次调用read函数读一个字符,而是一次从缓冲区中读一块内容,再一次一个字符提交给函数read_line,如果提交完了就再读一块,这样可以提高读缓冲区的效率。另外,由于客户机是分两次调用writ_all函数将请求的首部和内容发送给服务器,因此get_char不会取出请求内容部分的字符*/ { //声明静态变量,在get_char多次被调用期间,该变量的内存不释放 static int offset=0; static int size=0; static char buffC[1024]; for(;size<=0‖{{U}} (8) {{/U}};) { size=read(M,bur,1024),//一次从套接字缓冲区中读出一个数据块 if(size<0) { if(errno==EINTR) { size=0; contine;//EINTR表示本次读操作没有成功,但可以继续使用该套接字读出数i } else return(-1); } } offset = 0, //读出数据后,将偏址置为0 *ch = buf[{{U}} (9) {{/U}}]; //将当前的字符取出,并将偏址移向下一字符 return(1); } int read_line(int fd,char * buf,int maxlen) //函数read_line的作用是读出请求的首部,其处理的方法是每次调用get_char函数 //取出一个字符,检查该字符是否是回车符'/n',如果是回车符,就返回请求的首部 { int i,n; char ch; for(i=0;i<maxlen;) { n=get_char(fd,&ch);//取出一个字符 if(n==1) { buff[i++]=ch;//将字符加入字符串中 if({{U}} (10) {{/U}}) break; } else if(n<0) return(-1); else break; } buf[i]='/0'; return(i); } 【部分Socket数据结构与函数说明】 1.地址结构 ①sockaddr_in类型的结构定义; sockaddr_in是通用套接字结构SOCkaddr在TCP/IP协议下的结构重定义,为TCP/IP套接字地址结构。 Struct sockaddr_in{ short int sin_family; //地址类型AF_XXX,其中AF_INET为TCP/IP专用 unsigned short int sin_port; //端口号 struct in_addr sin_addr; //Internet地址 //端口号以及Internet地址使用的是网络字节顺序,需要通过函数htons转换 } struct_inaddr{ _u32 s_addr; //类型为unsignel long } ②hostent类型的结构定义: struct hostent{ char *h_name; //主机的正式名称 char* * h_aliases; //别名列表 int h_addrtvPe //主机地址类型:AF_XXX int h_length: //主机地址长度:4字节(32位) char* *h_addr_list; //主机IP地址列表 } #define h_addr h_addr_list[0] 2.基本函数 ①int socket(int domain,int type,int protocol); 函数socket创建一个套接字描述符,如果失败则返回-1。domain为地址类型;type为套接字类型,本题中为SOCK_STREAM;protocol指定协议,本题中为0。 ②int connect(int sockfd,struct sockaddr *servaddr,int addrlen); 函数connect与服务器建立一个连接,成功返回0,失败返回-1。servaddr为远程服务器的套接字地址,包括服务器的IP地址和端口号;addrlen为地址的长度。 ③int read(int fd,char * bur,int len); int write(int fd,char *buf,int len); 函数read和write从套接字读和写数据,成功返回数据量大小,否则返回-1。buf指定数据缓冲区,len指定接收或发送的数据量大小。 ④int bind(int sockfd,struct sockaddr *myaddr,int addrlen); 函数bind将本地地址与套接字绑定在一起,成功返回0,否则返回-1;myaddr是本机地址:addrlen为套接字地址结构的长度。 ⑤int listen(int sockfd,int backlog); 函数listen将一个套接字转换为倾听套接字,成功返回0,否则返回-1;backlog为请求队列的最大长度。 ⑥int accept(int sockfd,struct sockaddr *addr,int *addrlen); 函数accept从监听套接字的完成连接中接收一个连接,如果完成连接队列为空,那么这个进程睡眠,失败则返回—1,成功时返回新的套接字描述符。sockfd为监听套接字, addr为客户机的地址,addlen为地址长度,在调用时用常量NULL代替addr与addlen表示无需取出客户机的地址信息。 ⑦struct hostent *gethostbyname(const char *hostname); 函数gethostbyname查询指定的域名地址对应的IP地址,返回一个hostent结构的指针,如果不成功则返回NULL。 3.用户自定义函数 ①int read_all(int fd,void *buf,int nbyte); 函数read_all从参数fd指定的套接字描述符中读取nbytes字节数据至缓冲区bur中,成功则返回实际读的字节数(可能小于nbyte),失败则返回-1。 ②int write_all(int fd,void * buf,int nbyte); 函数write_all向参数fd指定的套接字描述符中写入缓冲区buf前nbyte字节的数据,成功则返回实际写的字节数(始终等于nbyte),失败则返回-1。 ③write_requ函数为客户机发送请求的函数。 ④read_requ函数为服务器获取请求的函数。
进入题库练习
问答题试题四(共15分)阅读下列说明、图和表,回答问题1至问题3,将答案填入答题纸的对应栏内。[说明]某公司承接了一个控制系统的项目,由王工负责系统的方案设计。王工的设计方案如图4-1所示。该方案是基于VME总线的多机并行处理系统,由主控制模块作为VME总线的主设备,即总线控制器,负责整个系统的控制与管理;3个数据处理模块作为从设备,负责数据处理与计算;1个I/O模块也作为从设备,负责系统与外部接口之间的高速数据通信。同时,为了简化设计,该系统5个模块均采用同一款VME协议芯片,实现内总线和VME总线的连接。该系统中每个模块的相关信息见表4-1所示。
进入题库练习
问答题阅读以下关于某嵌入式处理器和8255的叙述。[说明]图2-1为使用某嵌入式处理器和8255对打印机进行控制的电路图,其中8255的中断请求PC3接到处理器的中断请求输入端上,打印机的数据口接在8255的PAO~PA7上,打印机的输出电平接在8255的PC6上。为了使用嵌入式处理器对打印机进行控制,在程序设计时,需要将8255的PA口设置为工作方式1:PB口设置在工作方式0,配置为输入;PC口的PCO、PC1、PC2、PC3和PC4定义为输出。为了在打印机输出为低电平时通过8255的PC3产生有效的中断请求信号INTRA,必须使得A口的中断请求使能INTE-1,实际上就是通过C口的按位复位操作将PC6置1,整个程序分为四部分:依次是8255的初始化,嵌入式处理器的中断初始化,嵌入式处理器的主程序和打印字符的中断处理程序。其中8255的端口配置功能如表2-1所示。嵌入式处理器的中断使能控制字含义如表2-2所示,该处理器的典型汇编指令如表2-3所示。表2-18255的端口配置功能CSA1A0寻址CSAlA0寻址000A口010C口001B口011控制及状态字表2-2嵌入式处理器的中断使能控制字含义EAXXXXESET1EX1ET0EX0EA:全部中断,0=关中断,1=开中断ES:串口中断,0=关中断,1=开中断ETl:定时器1中断,0=关中断,1=开中断EX1:外部INT1中断,0-关中断,1=开中断ET0:定时器0中断,0-关中断,1=开中断EX0:外部INT0中断,0=关中断,1=开中断表2-3嵌入式处理器的汇编指令指令分类指令举例含义传送指令MovA,RO寄存器寻址MovB,@RO寄存器间接寻址MovRO,direct直接寻址Mov@RO,#data立即数寻址算术运算指令ADDA,RO一般加法指令ADDCA,RO带进位加法指令逻辑及移位指令CLRA单操作数指令,清0ANLA,#data立即数逻辑与指令ANLA,RO寄存器逻辑与指令ANLA,@RO寄存器间接寻址逻辑与指令控制指令LJMPaddr16AJMPaddr11SJMPrelJMP@A+DPTR无条件转移指令CJNEA,#data,relCJNEA,direct,rel条件转移指令
进入题库练习
问答题试题一(共15分)下面是关于PDA设计方案的叙述,仔细阅读并分析,回答问题1至问题3,将答案填入答题纸的对应栏内。【说明】个人数字助理(PersonalDigitalAssistant,PDA)是典型嵌入式系统,具有计算、电话、网络和个人信息管理等多项功能。某单位欲开发一款的PDA产品,选择S3C2410作为CPU,存储器采用SRAM、DRAM和NANDFlash三种内置存储器,显示器采用LCD,图1-1为PDA的硬件示意图。软件采用嵌入式Linux操作系统。图1-1PDA的硬件配置图
进入题库练习
问答题试题一(共15分)阅读以下关于某嵌入式系统设计方案的叙述,回答问题1至问题3,将答案填入答题纸的对应栏内。【说明】通常计算机按其体系结构分为冯?诺依曼(Vonneumann)结构和哈佛(Harvard)结构。冯?诺伊曼结构,也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。哈佛结构是一种将程序指令存储和数据存储分开的存储器结构。复杂系统的不同处理器可采用不同类型体系结构。某嵌入式系统由数据处理模块、信号处理模块和光纤网络交换模块组成,如图1-1所示。其中数据处理模块的主处理器选用PPC7447,内部集成了二级CACHE,并有SDAM存储器、FLASH、NvRAM、实时时钟、FC(FabricChannel)通信接口、以太网接口和RS232接口;信号处理模块采用DSPTMS320C6000,并有FC通信接口、RS232接口,用于SPM与外部数据通信;光纤网络交换模块提供FC协议交换能力,主要由控制单元和交换单元两部分组成。本嵌入式系统的数据处理模块主要接收外部命令、控制系统运行、与系统其它模块通讯;信号处理模块主要进行图形图像处理,需要较大的运算量和较高的运算速度。
进入题库练习
问答题阅读以下关于C语言及C代码的叙述。 [说明] 在开发某嵌入式系统时,设计人员根据系统要求,分别编写了如下三部分程序,其中: [C代码1]是李工为了在嵌入式平台上开发一段可变参数函数,在X86平台上实现的一个参数个数可变函数实例。 [C代码2]是王工在编写软件时,自己编写的内存拷贝函数。 [C代码3]是赵工编写的一段数据处理的程序,其中fun0的含义为从已创建的一个单向链表中查找倒数第index个结点。他的设计思路为:首先创建两个指针ptr1,ptr2,并且都指向链表头,然后ptr1向前走index步,这样ptr1和ptr2之间就间隔index个结点,然后ptr1和ptr2同时向前步进,当ptr1到达最后一个结点时,ptr2就是倒数第index个结点了。ReverseList()为赵工编写的对已有单向链表进行逆序重排的函数。 [C代码1] long sum (int i,…) int*p,j; long s=0; p= for(j=0;j<i;j++) s+=p[j]; return s; long Sum=sum(3,1,2,3); [C代码2] static int pent; ……·· void*MyMemcpy(void*dest, const void*src, int n) char*pDest=(char*)dest; char*pSrc=(char*)src; for(int i=0; i<n; i++) *(pDest +i)=*(pSrc+i); return dest; [C代码3] node *fun(node*head, int index) node *ptr1,*ptr2; int i=0: ptr1=head; ptr2=head; if( head==NULL || head->next==NULL ) return ptr1; while (i<index) (1) ; if (ptrl==NULL) return head; i++; while (ptr1->next !=NULL) ptr1=ptr1->next; (2) ; return (3) ; node* ReverseList (node *head) node *temp1=NULL; node *temp2=NULL; node *temp3=NULL; if ((head->next==NULL) || (head==NULL)) return head; temp1=head; temp3=temp1->next; temp1->next=NULL; while (temp3->next !=NULL) temp2=temp3; temp3=temp3->next; (4) ; temp1=temp2; temp3->next=temp1; return (5) ;
进入题库练习
问答题阅读以下利用场景法设计测试用例的技术说明,回答问题1至问题5。[说明]现在的软件几乎都是由事件触发来控制流程的,事件触发时的情景便形成了场景,而同一事件不同的触发顺序和处理结果就形成了事件流。这种在软件设计方面的思想也可被引入到软件测试中,生动地描绘出事件触发时的情景,有利于测试设计者设计测试用例,同时测试用例也更容易得到理解和执行。用例场景是通过描述流经用例的路径来确定的过程,这个流经过程要从用例开始到结束遍历其中所有基本流(基本事件)和备选流(分支事件)。以下表6-4是对某IC卡加油机应用系统基本流的描述,表6-5是对该IC卡加油机应用系统备选流的描述。
进入题库练习
问答题阅读以下关于嵌入式操作系统软件编码优化的技术说明,根据要求回答问题1至问题5。【说明】由于嵌入式系统对实时性的要求较高,因此一般要求对代码的性能进行优化,使代码的执行速度越快越好。图6-22给出了两个算术运算的程序段(a)、(b)。
进入题库练习
问答题阅读以下关于嵌入式软件测试用例设计的叙述。[说明]某程序段的流程如图3-1所示,x、y是两个变量,K、J表示一段程序执行体,表3-1所示为本题可供选择的四组测试用例组。表3-1测试用例组测试用例xy测试用例xy测试用例组I03测试用例组III-12测试用例组II12测试用例组IV31
进入题库练习
问答题[问题3] 当图16-4所示的程序经过编译连接并装入内存时,与while语句相对应的可执行代码存放在哪一个段?
进入题库练习
问答题[问题3](4分) ATM自动取款机系统是与银行服务器联网的网络系统,由于系统涉及个人和企事业单位的财产安全,要求网络通信安全可靠,因此通信过程要采取消息加解密、身份认证、消息鉴别和访问控制等信息安全措施。 (1)请简要解释下列术语的基本概念,将答案填写在答题纸的对应栏中。 a.对称密钥 b.公开密钥 c.访问控制 d.消息鉴别 (2)以下几种常见的加密算法哪些属于对称加密算法?哪些属于非对称加密算法?请将答案填写在答题纸的对应栏中。 a.DES b.RSA c.AES d.IDEA e.PGP f.DSA g.椭圆曲线DSA
进入题库练习
问答题 阅读以下说明和x86汇编语言代码,根据要求回答问题1至问题3。表6-3所示为 x86系统指令及寄存器说明表。 [说明] 在计算机控制中,有些数据补偿、计算及转换等参数的计算非常复杂,编程难,程序长且运算费时,但是用数表却比较容易实现。 设有256个字节的数据,已按从小到大的顺序存放在以BINTAB为首地址的数据区单元中,现要求查找其中值为126的数据,用对分查表法查询的汇编程序如下: [汇编程序代码]DATA SEGMENTBINTAB 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 256FLAG DW ?KEY EQU {{U}}(1) {{/U}}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, AX MOV AL, KEYLOP0, MOV BX, SI ADD BX, DI SHR BX, 1 CMP AL, [BX] JZ FOUND PUSHF {{U}}(2) {{/U}} JZ NFOUND POPF JL LESS MOV SI, BX JMP NEXTLESS, {{U}}(3) {{/U}}NEXT, {{U}}(4) {{/U}} JMP LOP0NFOUND: MOV AX, DX ;未找到,标志全1送DXFOUND: MOV AX, DX MOV FLAG, AX RETBINSEAT ENDPCODE ENDS {{U}} (5) {{/U}}
进入题库练习
问答题 阅读以下说明和x86汇编语言代码,根据要求回答问题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系统部分指令及寄存器说明。 {{B}} 表6-22 x86系统部分指令及寄存器说明表{{/B}} 指令 功能 寄存器 功能 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{{U}} (1) {{/U}} RULE EQU{{U}} (2) {{/U}} CODE SEGMENT ASSUME CS:CODE START: MOV AX,RULE MOV CL,N LOP: SAL AX,1 JC {{U}}(3) {{/U}} Collect: CALL Collect_task ;执行Collect_task程序段 JMP {{U}} (4) {{/U}} Calculate:CALL Calculate_task ;执行Calculate_task程序段 NEXT: {{U}}(5) {{/U}} JNZ {{U}} (6) {{/U}} MOV AH,4CH ;功能号送入AH寄存器 INT {{U}} (7) {{/U}} ;结束程序运行,中断返回 {{U}}(8) {{/U}} END START
进入题库练习
问答题阅读以下说明和x86汇编语言代码,根据要求回答问题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系统部分指令及寄存器说明。采用逻辑尺控制法实现以上要求的汇编程序如下:【汇编程序代码】NEQU(1)RULEEQU(2)CODESEGMENTASSUMECS:CODESTART:MOVAX,RULEMOVCL,NLOP:SALAX,1JC(3)Collect:CALLCollect_task;执行Collect_task程序段JMP(4)Calculate:CALLCalculate_task;执行Calculate_task程序段NEXT:(5)JNZ(6)MOVAH,4CH;功能号送入AH寄存器INT(7);结束程序运行,中断返回(8)ENDSTART
进入题库练习
问答题试题五(共15分)阅读以下关于利用信号量机制解决进程同步与互斥方面的应用实例,回答问题1问题至3,将解答填入答题纸的对应栏内。【说明】在多道程序系统中,进程是并发执行的。这些进程间存在着不同的相互制约关系,主要表现为同步和互斥两个方面。信号量机制是解决进程间同步与互斥的有效方法。下面是信号量应用实例。图5-1所示代码是在μC/OS-II任务操作系统上运行的一个应用的主函数。该函数创建了任务Task1和Task2,其中Task1实现从键盘读入一个字符的功能,Task2将该字符输出到屏幕,它们使用信号量和一个公共变量buffer来传递该字符。主函数、Task1和Task2中所调用的函数原型说明如下:a.创建一个信号量:OS_EVENT*OSSemCreate(INT16Uvalue);b.创建一个任务:INT8UOSTaskCreate(void(*task)(void*pd),void*pdata,OS_STK*ptos,INT8Uprio);c.开始执行多任务:voidOSStart(void);d.从键盘读入一个字符:charscanc();e.输出一个字符至屏幕:voidprintc(charch);f.发出一个信号量:INT8UOSSemPost(OS_EVENT*pevent);g.等待一个信号量:voidOSSemPend(OS_EVENT*pevent,INT16Utimeout,INT8U*err)图5-1应用的主函数
进入题库练习
问答题[问题2] 常用的堆空间的管理方法主要有哪两种?
进入题库练习