计算机等级考试三级PC技术南开100题.docx
《计算机等级考试三级PC技术南开100题.docx》由会员分享,可在线阅读,更多相关《计算机等级考试三级PC技术南开100题.docx(316页珍藏版)》请在冰豆网上搜索。
![计算机等级考试三级PC技术南开100题.docx](https://file1.bdocx.com/fileroot1/2023-2/23/58e3dcd6-644a-4ee9-bc29-a12c65ff9975/58e3dcd6-644a-4ee9-bc29-a12c65ff99751.gif)
计算机等级考试三级PC技术南开100题
三级PC南开100题
第一题:
一、请编制程序,其功能是:
将内存中由SOURCE指示的40个字节有符号数组成的数组分成正数和负数两个数组,并求这两个数组的数据个数,结果存放在RESULT指示的内存区域,存放形式为正数个数在前,其后跟正数数组元素,然后是负数个数及负数数组元素。
例如:
内存中有1EH,91H,74H,91H,42H,30H,81H,F3H,18H,25H
结果为06H,1EH,74H,42H,30H,18H,25H,04H,91H,91H,81H,F3H
试题程序:
EXTRNLOAD:
FAR,SAVE:
FAR
NEQU40
STACSEGMENTSTACK
DB128DUP(?
)
STACENDS
DATASEGMENT
SOURCEDBNDUP(0)
RESULTDBN+2DUP(0)
NAME0DB'INPUT1.DAT',0
NAME1DB'OUTPUT1.DAT',0
NDATADBNDUP(0)
PDATADBNDUP(0)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STAC
STARTPROCFAR
PUSHDS
XORAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVES,AX;置附加段寄存器
LEADX,SOURCE;数据区起始地址
LEASI,NAME0;原始数据文件名
MOVCX,N;字节数
CALLLOAD;从'INPUT1.DAT'中读取数据
;****BEGIN****
LEASI,SOURCE
MOVDI,OFFSETPDATA;PDATA为正数数组存放缓冲区首址
MOVBX,OFFSETNDATA;NDATA为负数数组存放缓冲区首址
XORDX,DX
MOVCX,N
CLD
MAIN1:
LODSB
TESTAL,_______________
JZMAIN2
INCDH;-
MOV[BX],AL
INCBX
_______________
MAIN2:
INCDL
MOV[DI],AL;+
INCDI
MAIN3:
_______MAIN1
LEASI,PDATA
LEADI,RESULT
MOV[DI],DL
INCDI
XORCX,CX
MOVCL,DL
MAIN4:
MOVAL,_______________
MOV[DI],AL
INCDI
INCSI
LOOP_______________
MOV[DI],DH
INCDI
XORCX,CX
MOVCL,DH
MOVBX,OFFSETNDATA
MAIN5:
MOVAL,[BX]
MOV[DI],AL
INCDI
_______________
LOOPMAIN5
;****END****
LEADX,RESULT;结果数据区首址
LEASI,NAME1;结果文件名
MOVCX,N+2;字节数
CALLSAVE;保存结果到文件
RET
STARTENDP
CODEENDS
ENDSTART
第二题:
一、请编制程序,其功能是:
内存中连续存放着10个无符号8位格雷码表示的数,现将此十个数转换成十个8位二进制数,结果存入内存,其转换方法为二进制数的最高位D7与格雷码的最高位G7相同,二进制数的其余七位DK(k=6,…,0)分别为格雷码的位GK(k=6,…,0)与二进制数的位DK+1(k=6,…,0)异或的结果。
例如:
内存中有00H,03H,2BH,67H,0CH,15H,54H,02H,D8H,C7H
结果为00H,02H,32H,45H,08H,19H,67H,03H,90H,85H
试题程序:
EXTRNLOAD:
FAR,SAVE:
FAR
NEQU10
STACSEGMENTSTACK
DB128DUP(?
)
STACENDS
DATASEGMENT
SOURCEDBNDUP(?
);顺序存放10个字节数
RESULTDBNDUP(0);存放结果
NAME0DB'INPUT1.DAT',0
NAME1DB'OUTPUT1.DAT',0
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STAC
STARTPROCFAR
PUSHDS
XORAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
LEADX,SOURCE;数据区起始地址
LEASI,NAME0;原始数据文件名
MOVCX,N;字节数
CALLLOAD;从'INPUT1.DAT'中读取数据
;****BEGIN****
LEASI,SOURCE
LEADI,RESULT
MOVCX,10
AGN0:
MOVAL,[SI]
________________
MOVCX,8
MOVBX,0
AGN1:
MOVAH,0
SHLBL,1
____AL,1
RCLAH,1
CMPAH,____
________________
JMPNEXT
SET_ONE:
ORBL,01H
NEXT:
MOV____,BL
________________
LOOPAGN1
________________
MOV[DI],BL
INCSI
INCDI
LOOPAGN0
;****END****
LEADX,RESULT;结果数据区首址
LEASI,NAME1;结果文件名
MOVCX,N;结果字节数
CALLSAVE;保存结果到文件
RET
STARTENDP
CODEENDS
ENDSTART
第三题:
一、请编制程序,其功能是:
内存中连续存放着20个十六位二进制无符号数序列,请将它们排成升序(从小到大)。
例如:
内存中有7001H,7004H,7002H…(假设后17个字均大与7004H)
结果为7001H,7002H,7004H…(后跟17个字,按从小到大的顺序排列)
试题程序:
EXTRNLOAD:
FAR,SAVE:
FAR
NEQU20
STACSEGMENTSTACK
DB128DUP(?
)
STACENDS
DATASEGMENT
SOURCEDWNDUP(?
)
RESULTDWNDUP(0)
NAME0DB'INPUT1.DAT',0
NAME1DB'OUTPUT1.DAT',0
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STAC
STARTPROCFAR
PUSHDS
XORAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
LEADX,SOURCE;数据区起始地址
LEASI,NAME0;原始数据文件名
MOVCX,N*2;字数
CALLLOAD;从'INPUT1.DAT'中读取数据
;****BEGIN****
LEASI,SOURCE
LEADI,RESULT
MOVCX,N
NEXT0:
MOVAX,[SI]
MOV[DI],AX
ADDSI,_________
_____________________
LOOP____________
CLD
MOVBX,N-1
MAL1:
LEASI,RESULT
MOVCX,_________
NEXT:
LOD______
CMP[SI],AX
JAECONT
XCHG[SI],__________
MOV[SI-2],AX
CONT:
LOOP_______________
________________________
________MAL1
;****END****
LEADX,RESULT;结果数据区首址
LEASI,NAME1;结果文件名
MOVCX,N*2;结果字节数
CALLSAVE;保存结果到文件
RET
STARTENDP
CODEENDS
ENDSTART
第四题:
一、请编制程序,其功能是:
内存中连续存放着24个无符号二进制字序列,字的最高位为000,此序列对应某一信号在一段时间内的连续变化,现对第21个二进制字前的20个二进制字进行移动平均处理,其方法为:
将要处理的字Xi用以它为开始的连续五个字的平均数(Xi+Xi+1Xi+2Xi+3Xi+4)/5代替(余数舍去),得到新的20个无符号二进制字序列,结果存入内存。
例如:
内存中有0100H,0200H,0300H,0400H,0500H,0600H…
结果为0300H,0400H…
试题程序:
EXTRNLOAD:
FAR,SAVE:
FAR
NEQU24
STACSEGMENTSTACK
DB128DUP(?
)
STACENDS
DATASEGMENT
SOURCEDWNDUP(?
);顺序存放24个字
RESULTDW20DUP(0);存放结果
NAME0DB'INPUT1.DAT',0
NAME1DB'OUTPUT1.DAT',0
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STAC
STARTPROCFAR
PUSHDS
XORAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
LEADX,SOURCE;数据区起始地址
LEASI,NAME0;原始数据文件名
MOVCX,N*2;字数
CALLLOAD;从'INPUT1.DAT'中读取数据
;****BEGIN****
MOVDI,0
MOVSI,0
MOVCX,20
MOVBX,__________
AGN0:
MOVAX,SOURCE[SI]
PUSHSI
PUSHCX
MOV_______,_______
AGN1:
INCSI
INCSI
ADDAX,SOURCE[SI]
LOOPAGN1
______________________
DIVBX
MOVRESULT[DI],AX
INCDI
______________________
POPCX
POPSI
INCSI
______________________
LOOPAGN0
;****END****
LEADX,RESULT;结果数据区首址
LEASI,NAME1;结果文件名
MOVCX,40;结果字节数
CALLSAVE;保存结果到文件
RET
STARTENDP
CODEENDS
ENDSTART
第五题:
一、请编制程序,其功能是:
内存中从SOURCE开始连续存放着21个八位有符号数(补码),其相邻两数之间差值不超过-8至7。
对这种变化缓慢的数据可采用差分方法进行压缩。
即第一个数据不变,其后的数据取与前一数据的差值并用四位二进制补码表示,两个差值拼成一个字节,前一个差值放在高四位,后一个差值放在低四位。
例如:
原数据(X[n]):
23H,27H,2AH,29H,22H…
压缩后(Y[n]):
23H,43H,F9H…
编程按上述方法进行压缩,结果保存在RESULT开始的内存单元中。
试题程序:
EXTRNLOAD:
FAR,SAVE:
FAR
NEQU10
STACSEGMENTSTACK
DB128DUP(?
)
STACENDS
DATASEGMENT
SOURCEDB2*N+1DUP(?
)
RESULTDBN+1DUP(0)
NAME0DB'INPUT1.DAT',0
NAME1DB'OUTPUT1.DAT',0
NDATADBNDUP(0)
PDATADBNDUP(0)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STAC
STARTPROCFAR
PUSHDS
XORAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVES,AX;置附加段寄存器
LEADX,SOURCE;数据区起始地址
LEASI,NAME0;原始数据文件名
MOVCX,2*N+1;字节数
CALLLOAD;从'INPUT1.DAT'中读取数据
;****BEGIN****
LEASI,SOURCE
LEADI,RESULT
CLD
MOVSB;Y[0]=X[0]
XORBX,BX;FLAG=0
MOVDX,N*2;COUNTER
COMPRESS:
LODSB;X[n]-X[n-1]
SUB_______________;FLAG=NOTFLAG
________________________
J_______LOW_HEX
MOVCL,4
________AL,CL
MOVAH,AL
JMPNEXT
LOW_HEX:
_________________________
ORAL,AH
STOSB
NEXT:
_________________________
JNECOMPRESS
;****END****
LEADX,RESULT;结果数据区首址
LEASI,NAME1;结果文件名
MOVCX,N+1;字节数
CALLSAVE;保存结果到文件
RET
STARTENDP
CODEENDS
ENDSTART
第六题:
一、请编制程序,其功能是:
将内存中存放着20个数字0~9之间的ASCII字符(包括数字0和9的ASCII字符)或SP字符(20H),请将数字0~9之间的ASCII字符(包括数字0和9的ASCII字符)转换为相应的八位二进制数,并将SP字符转换为$字符(24H)。
将按上述方法处理后得到的20个字节存入内存中。
例如:
内存中有20H(’SP’),30H(’0’),31H(’1’),31H(’1’),20H(’SP’),32H(’2’),…,39H(’9’)(共20个ASCII字符)
结果为24H(’$’),00H,01H,01H,01H,24H(’$’),02H(’2’),…,09H(’9’)(共20个字节)
试题程序:
EXTRNLOAD:
FAR,SAVE:
FAR
NEQU20
STACSEGMENTSTACK
DB128DUP(?
)
STACENDS
DATASEGMENT
SOURCEDBNDUP(?
)
RESULTDBNDUP(0)
NAME0DB'INPUT1.DAT',0
NAME1DB'OUTPUT1.DAT',0
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STAC
STARTPROCFAR
PUSHDS
XORAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
LEADX,SOURCE;数据区起始地址
LEASI,NAME0;原始数据文件名
MOVCX,N;字节数
CALLLOAD;从'INPUT1.DAT'中读取数据
;****BEGIN****
________________________
MOVDI,0
________________________
CHAN:
________________________
SUBAL,20H
JZCHANGE
SUBAL,____________
MOVRESULT[DI],AL
________________________
________________________
DECCX
JZEXIT
JMPCHAN
CHANGE:
MOVRESULT[DI],24H
INCDI
INCSI
JMP_______________
EXIT:
NOP
;****END****
LEADX,RESULT;结果数据区首址
LEASI,NAME1;结果文件名
MOVCX,N;字节数
CALLSAVE;保存结果到文件
RET
STARTENDP
CODEENDS
ENDSTART
第七题:
一、请编制程序,其功能是:
内存中共有30个字节型数据,找出其中的两个ASCII字符串并进行校验。
欲寻找ASCII字符串由13个字符组成:
#(23H),7个ASCII字符,*(2AH),2个ASCII字符,回车符(0DH),换行符(0AH)。
校验方法为:
对字符#及字符*之间的7个ASCII字符进行异或操作,若异或操作结果的ASCCII字符表示(异或操作结果高4位的ASCII字符表示在前,低4位的ASCII字符表示在后)与原字符串中字符*之后的两个ASCII字符相同,则将原字符串原样保存;反之,则将原字符串中的所有字符(共13个)均用字符!
(21H)代替。
例如:
内存中有33H,35H,23H(’#’,第一个字符串开始),46H,41H,30H,2EH,34H,3DH,31H,2AH(’*’),32H,31H,0DH,0AH,46H,23H(’#’,第二个字符串开始),46H,41H,30H,2EH,34H,3DH,30H,2AH(’*’),32H,31H,0DH,0AH,55H
结果为23H,46H,41H,30H,2EH,34H,3DH,31H,2AH(’*’),32H,31H(校验正确,该字符串原样保持),0DH,0AH,21H,21H,21H,21H,21H,21H,21H,21H,21H,21H,21H,21H,21H(校验错,整个字符串用字符’!
’代替)。
试题程序:
EXTRNLOAD:
FAR,SAVE:
FAR
NEQU26
STACSEGMENTSTACK
DB128DUP(?
)
STACENDS
DATASEGMENT
SOURCEDBN+4DUP(?
)
RESULTDBNDUP(0)
HHDB2DUP(0)
NAME0DB'INPUT1.DAT',0
NAME1DB'OUTPUT1.DAT',0
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STAC
STARTPROCFAR
PUSHDS
XORAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
LEADX,SOURCE;数据区起始地址
LEASI,NAME0;原始数据文件名
MOVCX,N+4;字节数
CALLLOAD;从'INPUT1.DAT'中读取数据
;****BEGIN****
MOVSI,0
MOVDI,0
MOVBX,2;两个ASCII字符串
REPEAT:
MOVAH,0
SEARCH:
MOVAL,SOURCE[SI]
INCSI
CMPAL,’#’
________SEARCH
MOVRESULT[DI],AL
INCDI
SEARCH1:
MOVAL,SOURCE[SI]
INCSI
CMPAL,____________
JEASCII
MOVRESULT[DI],AL
INCDI
XORAH,AL
JMP_______________
ASCII:
MOVRESULT[DI],AL
INCDI
PUSHDI
MOVDI,0
MOVDH,2
MOVDL,AH;异或结果暂存在DL中
MOVCL,4;先将异或结果高4位转换成ASCII字符
SHRAH,CL;本行开始的4行语句将一个十六进制数转换为ASCII码
CHANGE:
CMPAH,10
JLADD_0
ADDAH,’A’-’0’-10
ADD_0:
ADDAH,’0’
MOVHH[DI],AH
INCDI
DECDH
JZEXT
MOVAH,DL;再将异或结果低4位转换成ASCII字符
ANDAH,0FH
JMPCHANGE
EXT:
POPDI
MOVAL,SOURCE[SI]
MOVRESULT[DI],AL
INCSI
INCDI
MOVAH,SOURCE[SI]
MOVRESULT[DI],AH
INCSI
INCDI
MOVDL,HH
MOVDH,HH+1
CMPAX,DX
________ERR
MOVAL,0DH;校验正确
MOVRESULT[DI],AL
INCDI
MOVAL,0AH
MOVRESULT[DI],AL
INCDI
JMPLP
ERR:
SUBDI,11;校验错误
MOVAL,’!
’
MOVCX,____________
COVER:
MOVRESULT[DI],AL
INCDI
LOOPCOVER
LP:
________________________
JZEXIT
JMPREPEAT
EXIT:
NOP
;****END****
LEADX,RESULT;结果数据区首址
LEASI,NAME1;结果文件名
MOVCX,N;字节数
CALLSAVE;保存结果到文件
RET
STARTENDP
CODEENDS
ENDSTART
第八题:
一、请编制程序,其功能是:
内存中连续存放着10个十六位二进制数,每个数的序号依次定义为0,1,…,9。
统计每个数中位为0的个数N0,N1,…,N9(均用一个字节表示),然后按序定义将N0至N9存入内存中,最后再用一个字节这10个数中为0的位的总数n(n=N0+N1+…+N9)。
例如:
内存中有0000H,000FH,FFFFH…
结果为10H,0CH,00H…最后为n
试题程序:
E