




已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机三级(PC技术)机试67背景色: 字体大小: 行高: 隐藏所有题目 折叠过长题目 计算机三级PC技术(机试)题11. 请编制程序,其功能是:对一个由可打印ASCII字符(ASCII值为20H7FH)组成的字符串可采用下列方法进行压缩:从串首开始向后扫描,如某字符单独出现则该字符不变,如某字符连续出现n次,则该字符用ESC(1BH),n,原字符三个字节来代替(假定n不超过255)。 设内存中从SOURCE开始有一用上述方法压缩的字符串,其以OOH结束,解压后长度不超过100。试编程对其解压缩,结果存入RESULT开始的内存单元。 例如: 原串: 41H,1BH,06H,43H,61H,00H 解压缩后:41H,43H,43H,43H,43H,43H,43H,61H,OOH(ACCCCCCa) 部分程序已给出,原始数据由过程LOAD从文件INPUT.DAT中读入SOURCE开始的内存单元中,结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT.DAT中。 请填空BEGIN和END之间已给出的源程序使其完整,空白己用横线标出,每个空白一般只需一条指令,但采用功能相当的多条指令亦可,或删除BEGIN和END之间原有的代码并自行编写程序片段来完成所要求的功能。 对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。 【试题程序】 EXTRN LOAD:FAR, SAVE:FAR N EQU 100 ESC_CODE EQU 27 STAC SEGMENT STACK DB 128 DUP(?) STAC ENDS DATA SEGMENT RESULT DB N DUP(0) NAME0 DB INPUT.DAT,0 NAME1 DB OUTPUT.DAT,0 DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STAC START PROC FAR PUSH DS XOR AX,AX PUSH AX MOV AX,DATA MOV DS, AX MOV ES, AX ;置附加段寄存器 LEA DX, SOURCE ;数据区起始地址 LEA SI, NAME0 ;原始数据文件名起始地址 MOV CX, N ;字节 CALL LOAD ;从INPUT.DAT 中读取数据 * BEGIN * LEA SI, SOURCE LEA DI, RESULT CLD LO: LODSB CMP AL, 0 JE QUIT CMP AL, ESC_CODE J (1) EXPAND (2) JMP L0 EXPAND: (3) ;解压缩 XOR CX, CX (4) (5) (6) (7) JMP LO QUIT: STOSB ;STORE THE 00H * END * LEA DX, RESULT ;结果数据区首址 LEA SI, NAME1 ;结果文件名起始地址 MOV CX,N ;字节数 CALL SAVE ;保存结果到output.dat 文件 RET START ENDP CODE ENDS END START_ +-= 参考答案(1分) (1)E (2)STOSB (3)CID (4)MOV CL,SI (5)MOV AL,SI+1 (6)REP STOSB (7)ADD SI,2 您的答案 详细解答 本题是一道数据插入题,其中本题采用的算法是首先从原始数据区读取一个字节,判断是否为结束标志,若是结束标志,则直接送至结果数据区并结束处理,若不是结束标志则再次判断是否是压缩标志,是则读取下一个字节,然后将其值送CL,再读取下一个字节到AL,以CL为计数器重复将刚才读取的数据写入结果数据区,然后继续读取下一个数据开始进行判断,直到发现结束标志为止。反之则直接将该字符送到结果数据区。 程序中使用串处理指令LODSB来完成读取数据和修改原始数据区偏移地址的目的:使用串处理指令STOSB来完成写入数据和修改结果数据区偏移地址的目的;使用CL做计数器和指令REP完成循环处理计算机三级(PC技术)机试66背景色: 字体大小: 行高: 隐藏所有题目 折叠过长题目 计算机三级PC技术(机试)题11. 编制一个程序,其实现的功能是:对一个数字采集系统采集的50个字节无符号数按算术平均数字滤波方法进行数字滤波,每5个数求一个平均数(含余数,其中低字节为商,高字节为余数),将10个平均值依次存入RESULT指示的内存区域。 例如: 原始采集数据:05H,07H,12H,08H,10H,09H,2EH,56H,48H,85H,65H,36H,45H 则结果为: 0A04H,4003H 部分程序已经给出,其中原始数据由过程LOAD从文件INPUTDAT中读入以SOURCE开始的内存单元中。运算结果要求从RESULT开始的内存单元存放,由过程SAVE保存到文件OUTPUT.DAT中。 请填空BEGIN和END之间已给出的源程序使其完整,空白已经用横线标出,每行空白一般只需要一条指令,但采用功能相当的多条指令也行,考生也可以删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。 对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。 【试题程序】 EXTRN LOAD:FAR,SAVE:FAR N EQU 10 DSEG SEGMENT SOURCE DB 6*N DUP(?) RESULT DW N DUP(0) NAME0 DB INPUT.DAT,0 NAME1 DB OUTPUT.DAT,0 DSEG ENDS SSEG SEGMENT STACK DB 256 DUP(?) SSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG,SS:SSEG START PROC FAR PUSH DS XOR AX,AX PUSH AX MOV AX,DSEG MOV DS,AX LEA DX,SOURCE LEA SI,NAME0 MOV CX,6*N CALL LOAD ;* BEGIN * LEA SI,SOURCE LEA DI,RESULT MOV DX,N AGAIN: SUB AX,AX (1) MOV CX,6 AGAIN1: MOV AX,SI ADD BX,AL INC SI (2) (3) MOV CL,6 (4) (5) ADD DI,2 DEC DX JNZ AGAIN ;* END * LEA DX,RESULT LEA SI,NAME1 MOV CX,N*2 CALL SAVE RET START ENDP CSEG ENDS END START_ +-= 参考答案(1分) (1)SUB BX,BX 或 XOR BX,BX 或 MOV BX,0 (2)LOOP AGAIN1 (3)MOV AX,BX (4)DIV CL (5)MOVDI,AX 您的答案 详细解答 如果将数据中6个数分为一组的话,则对每一组的操作是一样的,即求这一组数的平均数,因此只需要实现一组的操作,其他的用循环程序来实现。 将指针初始化以后,将循环的参数送DX寄存器,用来控制循环。进入循环以后,因为每次循环都要使用某些寄存器,并且每次的内容都不一样,所以要对部分寄存器进行清零操作。从后面的程序可以看出,BX寄存器是用来进行求和操作的,所以在每次进行求和操作之前应该对其进行清零操作,否则会把前一次的结果累加到后一次中。因此,需要对BX寄存器进行清零,这就是第一个空白处应该填的内容。通常进行清零的操作有SUB BX,BX 或 XOR BX,BX 或 MOV BX,0。 完成清零工作以后,便对数据进行处理。要求一组数据的平均数,首先要进行求和操作,从程序中可以看出求和操作用循环AGAIN1来实现,然而程序中没有控制AGAIN1循环结束的语句(即判断什么情况继续循环,什么情况停止循环向下执行的语句),所以需要在空白处填写。从第二个空白以上的程序来看,已经完成了加法运算,只需要控制其循环结束即可,所以要在第二个空白处填控制循环语句。在前面的程序中,已经将循环次数送到CX中,因此用LOOP AGAIN1即可控制求和运算的循环。 求和结束以后,就要对数据进行除法操作。由于程序中除数为6,所以被除数放到AX中即可。前面的求和操作结束时,所得结果最后存放的寄存器为BX,因此需要将数据从BX传送到AX中。传送结束以后,就可以进行除法操作。除完以后,将结果存入RESULT中,所以第三个、第四个和第五个空加上已经有的语句需要完成上述操作。在第三个空中,将被除数传送到BX,因此指令为MOV AX,BX。MOV CL,6,将除数传送到CL寄存器中,接下来进行除法操作,即第四个空要填写的内容为DIV CL。执行完除法操作以后,商和余数分别位于AL和AH寄存器中,与题目要求的商在低字节,余数在高字节的要求刚好吻合,因此直接送入RESULT中即可,这样便由最后一个空来实现,而指针DI已经指向RESULT,所以应填MOV DI,AX。计算机三级(PC技术)机试65背景色: 字体大小: 行高: 隐藏所有题目 折叠过长题目 计算机三级PC技术(机试)题11. 编制一个程序,实现如下功能:将内存中连续存放的10个八位二进制无符号数按照从大到小的顺序排列。 例如: 内存中有:3EH,0FEH,5DH(假设后面的7个数都小于3EH) 结果为: 0FEH,5DH,3EH(后面跟7个字,按照从大到小的顺序排列)。 部分程序已经给出,其中原始数据由过程LOAD从文件INPUTDAT中读入以SOURCE开始的内存单元中。运算结果要求从RESULT开始的内存单元存放,由过程SAVE保存到文件OUTPUT.DAT中。 请填空BEGIN和END之间已给出的源程序使其完整,空白已经用横线标出,每行空白一般只需要一条指令,但采用功能相当的多条指令也行,考生也可以删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。 对程序必须进行汇编,并与IOOBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。 【试题程序】 EXTRN LOAD:FAR,SAVE:FAR N EQU 10 SSEG SEGMENT STACK DB 256 DUP (?) SSEG ENDS DSEG SEGMENT SOURCE DB N DUP (?) RESULT DB N DUP (0) NAME0 DB INPUT.DAT,0 NAME1 DB OUTPUT.DAT,0 DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG,SS:SSEG START PROC FAR PUSH DS XOR AX,AX PUSH AX MOV AX,DSEG MOV DS,AX LEA DX, SOURCE LEA SI,NAME0 MOV CX,N CALL LOAD ;* BEGIN * MOV SI,OFFSET SOURCE MOV DI,OFFSET RESULT MOV CX,N AGAIN0: MOV AX, SI MOV DI,AX ADD SI, (1) (2) LOOP AGAIN0 CLD MOV BX,N-1 AGAIN1: MOV SI,OFFSET RESULT MOV CX,BX AGAIN2: LODSB CMP SI,AX (3) XCHG SI,AX (4) NEXT: LOOP AGAIN2 (5) JNZ AGAIN1 ;* END * LEA DX,RESULT LEA SI,NAME1 MOV CX,N CALL SAVE RET START ENDP CSEG ENDS END START_ +-= 参考答案(1分) (1)1 (2)ADD DI,1 (3)JBE NEXT (4)MOVSI-1,AX (5)DEC BX 您的答案 详细解答 本题是一道降序排列题,程序首先是将以SOURCE开始的内存单元中的数据传送到RESULT中,利用循环AGAIN0实现。在循环中,需要不断地改变指针,但由于题中的变量为字节型,因此指针的改变为1,即第一个空白处应填1。指向SOURCE的指针增加1的时候,指向RESULT的指针也应该增加1,所以第二个空白处应填ADD DI,1。 接下来的程序便是对数据进行从大到小排列,CLD使指针向着增加的方向移动。在对两个数据进行比较后,因为要求从大到小排列,所以小的数据要往后移,若后面的数据较小,则不需要交换,直接进行下一次比较,所以第三个空白处应填JBE NEXT。若后面的数据大,则在进行数据交换以后需要将大的数据装入前面的存储单元,因此第四个空白处应填MOVSI-1,AX。每一轮比较后,参加比较的数据的较小者都被放到了最后,这样只需要N-1轮比较就可以得到正确的排序。排序轮次的控制由BX寄存器来实现,因此最后一个空白处应填DEC BX。计算机三级(PC技术)机试64背景色: 字体大小: 行高: 隐藏所有题目 折叠过长题目 计算机三级PC技术(机试)题11. 请编制程序,其功能是;内存中共有30个字节型数据,找出其中的两个ASCII字符串并进行校验。欲寻找的ASCII字符串由13个字符组成:#(23H),7个ASCII字符,*(2AH),2个ASCII字符,回车符(0DH),换行符(0AH)。 校验方法为:对字符#及字符,之间的7个ASCII字符进行异或操作,若异或操作结果的ASCII字符表示(异或操作结果高4位的ASCII字符表示在前,低4位的ASCII字符表示在后)与原字符串中字符,之后的两个ASCII字符相同,则将原字符串原样保存:反之,则将原字符串中的所有字符(共13个)均用字符!(21H)代替。 例如: 内存中有:33H,35H,23H(#,第一个字符串开始),46H,41H,30H,2EH,34H,3DH,31H,2AH(#),32H, 31H,ODH,OAH,46H,23H(#,第二个字符串开始),46H,41H,30H,2EH,34H,46H,41H, 30H,46H,41H,30H,2EH,34H,3DH,30H,2AH(*),32H,31H,ODH,OAH,55H 结果为:23H,46H,41H,30H,2EH,34H,3DH,31H,2AH(*),32H,31H(校验正确,该字符串原样保持), ODH,OAH,21H,21H,21H,21H,21H,21H,21H,21H,21H,21H,21H,21H,21H(校验错,整个字符串用字符“!”代替) 部分程序已给出,其中原始数据由过程LOAD从文件INPUTDAT中读入SOURCE开始的内存单元中。运算结果要求从 RESULT开始存放,由过程SAVE保存到文件OUTPUTDAT中。 请填空BEGIN和END之间已给出的源程序使其完整,空白已用横线标出,每个空白一般只需一条指令,但采用功能相当的多条指令亦可,或删除BEGIN和END之间原有的代码并自行编程来完成所要求的功能。 对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。 【试题程序】 EXTRN LOAD:FAR, SAVE:FAR N EQU 26 STAC SEGMENT STACK DB 128 DUP (?) STAC ENDS DATA SEGMENT SOURCE DB N+4 DUP(?) RESULT DB N DUP(0) HH DB 2 DUP(0) NAME0 DB INPUT.DAT,0 NAME1 DB OUTPUT.DAT,0 DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STAC START PROC FAR PUSH DS XOR AX,AX PUSH AX MOV AX,DATA MOV DS,AX LEA DX, SOURCE ; 数据区起始地址 LEA SI,NAME0 ; 原始数据文件名 MOV CX, N+4 ; 字节数 CALL LOAD ; 从INPUT. DAT 中读取数据 ;* BEGIN * MOV SI,0 MOV DI,0 MOV BX,2 ; 两个ASCII 字符串 REPEAT: MOV AH,0 SEARCH: MOV AL,SOURCESI INC SI CMP AL,# (1) SEARCH MOV RESULTDI,AL INC DI SEARCH1: MOV AL,SOURCESI INC SI CMP AL, (2) JE ASCII MOV RESULTDI,AL INC DI XOR AH,AL JMP (3) ASCII: MOV RESULTDI,AL INC DI PUSH DI MOV DI,0 MOV DH,2 MOV DL,AH ; 异或结果暂存在DL MOV CL, 4 ; 先将结果高4位转换成ASDCII字符 SHR AH, CL ; 本行开始的4行语句将一个十六进制数转换 ; 为ASCII码 CHANGE: CMP AH,10 JL ADD_0 ADD AH, A-0-10 ADD_O: ADD AH, 0 MOV HHDI,AH INC DI DEC DH JZ EXT MOV AH, DL ; 再将异或结果低4位转换成ASDCII字符 AND AH, 0FH JMP CHANGE EXT: POP DI MOV AL,SOURCESI MOV RESULTDI,AL INC SI INC DI MOV AH,SOURCESI MOV RESULTDI,AH INC SI INC DI MOV DL,HH MOV DH,HH+1 CMP AX,DX (4) ERR MOV AL, 0DH ; 校验正确 MOV RESULTDI,AL INC DI MOV AL,0AH MOV RESULTDI,AL INC DI JMP LP ERR: SUB DI, 11 ;校验正确 MOV AL,! MOV CX, (5) COVER: MOV RESULTDI,AL INC DI LOOP COVER LP: (6) JZ EXIT JMP REPEAT EXIT: NOP ;* END * LEA DX, RE*SULT ; 结果数据区首址 LEA SI, NAME1 ; 结果文件名 MOV CX, N ;结果字节数 CALL SAVE ; 保存结果到文件 RET START ENDP CODE ENDS END START_ +-= 参考答案(1分) JNZ (2)* (3)SEARCH1 (4)JNZ (5)13 (6)DEC BX 您的答案 详细解答 本题是一道字符转换题,解决此类题型的关键是确定转换范围和条件。其中转换范围在题目中已给出为30个字符,同时还给出了需要查找的两个字符串。 接下来,首先计算指定范围内字符串中字符的异或操作结果,并将结果转换为对应的十六进制ASCII码字符,然后再与字符串结束符后面的两个字符进行比较,若相同,则直接将原来的字符串存入结果数据区,反之则将字符串中全部的字符替换为一个固定字符,存入结果数据区中。 此题目中涉及到的逻辑判断比较多,如果有一个地方出现错误,就很容易造成整个题目计算结果的错误,因此需要非常的认真和仔细。计算机三级(PC技术)机试63背景色: 字体大小: 行高: 隐藏所有题目 折叠过长题目 计算机三级PC技术(机试)题11. 请编制程序,其功能是:从第0行第0列开始,依次取出N阶矩阵中对角线上的元素(字节型)并计算累加和(字型),然后将其存放在指定的内存区中。 例如: 内存中有:01H,01H,01H,02H,02H,02H,03ff,03H,03H 结果为: 01H,02H,03H,06H,00H 部分程序已给出,其中原始数据由过程LOAD从文件INPUTDAT中读入SOURCE开始的内存单元中,转换结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUTDAT中。 请填空BEGIN和END之间已经给出的一段源程序使其完整,需填空处已经用横线标出,每个空白一般只需要填一条指令或指令的一部分(指令助记符或操作数),也可以填入功能相当的多条指令,或删去BEGIN和END之间原有的代码并自行编程来完成所要求的功能。 对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。 【试题程序】 EXTRN LOAD:FAR, SAVE:FAR N EQU 10 DSEG SEGMENT SOURCE DB N*10 DUP(?) RESULT DB (N+2) DUP(0) NAME0 DB INPUT.DAT,0 NAME1 DB OUTPUT.DAT,0 DSEG ENDS SSEG SEGMENT STACK DB 256 DUP (?) SSEG ENDS CSEG SEGMENT ASSUME CS:CSEG, SS:SSEG, DS:DSEG START PROC FAR PUSH DS XOR AX,AX PUSH AX MOV AX,DSEG MOV DS,AX MOV ES,AX LEA DX, SOURCE LEA SI,NAME0 MOV CX,N*10 CALL LOAD * BEGIN * LEA DI,RESULT MOV CX,0 MOV DH,0 ;行 MOV DL,0 ;行 NEXT: MOV AL,N MUL (1) MOV BX,AX MOV AL,DL (2) MOV SI, AX ;列号送SI MOV AL, (3) BX+SI MOV DI,AL ADD CL,AL (4) INC DI INC DH INC DL CMP DL, (5) JNE NEXT MOV DI,CX ; * END * LEA DX,RESULT LEA SI,NAME1 MOV CX,N+2 CALL SAVE RET START ENDP CSEG ENDS END START_ +-= 参考答案(1分) (1)DH (2)MOV AH,0 (3)SOURCE (4)ADC CH,0 (5)N 您的答案 详细解答 本题是一道矩阵计算题,解决此类题型除了要注意数据范围、类型等方面的问题,还要对计算方法进行比较分析。 本题的数据范围在题目中并没有明确给出,但从程序的数据段定义中可以看出,N的取值为10,即本题的程序要求计算的是10阶矩阵,1010100个字节数据,共占100个存储单元。而需要计算的原始数据为字节数,同时累加运算结果以字的形式连续存放在对角线数据之后。 题目要求首先依次取出矩阵对角线上的元素存放到结果数据区,并累加求和这些数据的和,将运算结果以字数据的形式保存到对角线元素的后面,由于对角线上的元素有一个特点就是行和列的序号是相同的,因此寻找对角线上的元素就比较容易了。 计算机三级(PC技术)机试62背景色: 字体大小: 行高: 隐藏所有题目 折叠过长题目 计算机三级PC技术(机试)题11. 请编制程序,其功能是:内存中连续存放着20个ASC字符,如果是小写字母az之间的字符(包括字母a和z),请把它们转换成相应的大写字母所对应的ASC字符;若为其他字符,不作转换。 例如: 内存中有:61H(a),62H(b),31H(1),41H(A),42H(B) 结果为: 41H(A),42H(B),31H,41H,42H 部分程序已经给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中,运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。 请填空BEGIN和END之间已给出的源程序使其完整,空白处已用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可,或删去BEGIN和END之间原有的代码并自行编程来完成所要求的功能。 对程序必须进行汇编,并与I
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年BIM工程师之BIM工程师题库附答案(典型题)
- 梨花头发设计增加女人俏皮气息
- 元旦童话精彩插画故事
- 老年性白内障的日常护理
- 城市轨道交通的BIM实施案例
- 医疗器械行业国产化替代下的产业链整合与市场竞争力分析报告
- 环境教育与环境教育技术政策重点基础知识点归纳
- 泌尿淤滞及护理方法
- 土木工程项目的生态设计理念
- 护理方案实施
- 代购代售合同(2024年版)
- 2024年湖南省高考生物试卷真题(含答案解析)
- 广东省肇庆市2023-2024学年高二上学期期末教学质量检测试题 化学 含解析
- 《篮球原地双手胸前传接球》教案 (三篇)
- SOR-04-014-00 药品受托生产企业审计评估报告模板
- 两人股权分配协议书模板
- 2024至2030年中国中试基地行业发展形势及前景规划分析报告
- 儿科护理期末试卷及答案
- 安全伴我行-大学生安全教育智慧树知到期末考试答案章节答案2024年哈尔滨工程大学
- 江西省第一届职业技能大赛分赛场项目技术文件(世赛选拔)重型车辆维修
- CJ/T 28-2013 中餐燃气灶炒菜灶
评论
0/150
提交评论