1、PC技术机试模拟试卷 50及答案与解析 一、程序设计题 1 请编制程序,其功能是:内存中连续存放着五个用压缩型 (组合型 )BCD码表示的2位十进制数,请将它们转换成十个 ASCII字符,高位的 BCD码转换后放在较高的地址单元。 例如: 内存中有: 21H, 43H, (共五个字节 ) 结果为: 31H(1), 32H(2), 33H(3), 34H(4), ( 共十个字节 ) 部分程序已经给出,其中原始数据由过程 LOAD从文件 INPUT1.DA丁中读入SOURCE开始的内存单元中,运算 结果要求从 RESULT开始存放, 由过程 SAVE保存到文件 OUTPUT1 DAT中。 请填空
2、BEGIN和 END之间已给出的源程序使其完整,空白处已用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可,或删去 BEGIN和END之间原有的代码并自行编程来完成所要求的功能。 对程序必须进行汇编,并与 IO.OBJ连接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序存在错误之处,请加以修改。 试题程序 EXTRN LOAD: FAR, SAVE: FAR N EQU 5 STAC SEGMENT STACK DB 128 DUP (?) STAC ENDS DATA SEGMENT SOURCE DB N DUP(?) RESULT DB N*2 DUP(0) N
3、AME0 DB INPUT1 DAT, 0 NAME1 DB OUTPUT1 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, NANE0 ;原始数据文件名 MOV CX, N ;字节数 CALL LOAD ;从 “INPUT DAT“中读取数据 ; * BEGIN * LEA SI, SOURCE LEA DI, RE
4、SULT MOV CX, N NEXT: MOV (1) , SI (2) MOV BL, AL AND AL, (3) OR AL, 30H MOV DI, (4) (5) MOV AL, (6) PUSH (7) MOV CL, (8) SHR AL, CL POP (9) OR AL, 30H MOV DI, AL (10) LOOP NEXT ; * END * LEA DX, RESULT ; 结果数据区首址 LEA SI, NANE1 ; 结果文件名 MOV CX, N*2 ; 结果字节数 CALL SAVE ; 保存结果到文件 RET START ENDP CODE ENDS E
5、ND START PC技术机试模拟试卷 50答案与解析 一、程序设计题 1 【正确答案】 (1)AL (2)INC SI (3)0FH (4)AL (5)INC DI(6)BL (7)CX (8)4 (9)CX (10)INC DI 【试题解析】 本题主要考查的是将压缩型 BcD码转换为数字字符的方法,首先要将 BCD码分离出来,转换为非压缩 BCD码,然后再转换为 ASCII码。给出的程序是每次读取一个 BCD码至 AL中 ,然后再把 AL存入 BI中,取 AL的低 4位再加 30H就可以得到一个数字字符,放到结果数据区,结果数据区位置加 1,接着把 BL中的数仍放到 AL中,右移 4位再加 30H,再次得到一个数字字符,再放到结果数据区,结果数据区位置加 1,直至处理结束为止。