PC三级上机试题及答案.docx
- 文档编号:3733073
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:78
- 大小:41.52KB
PC三级上机试题及答案.docx
《PC三级上机试题及答案.docx》由会员分享,可在线阅读,更多相关《PC三级上机试题及答案.docx(78页珍藏版)》请在冰豆网上搜索。
PC三级上机试题及答案
请编制程序,其功能是:
将内存中由SOURCE指示的10个字节有符号数组成的数组分成正数和负数两个数组,并求这两个数组的数据个数,结果存放在RESULT指示的内存区域。
存放形式为正数个数在前,其后跟正数数组元素,然后是负数个数及负数数组元素。
例如:
内存中有:
1EH,91H,74H,91H,42H,30H,81H,F3H,18H,25H
结果为:
06H,1EH,74H,42H,30H,18H,25H,04H,91H,91H,81H,F3H
部分程序已经给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中,转换结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
请填空BEGIN和END之间已经给出的一段原程序使其完整,需填空处已经用横线标出,每个空白一般只需要填一条指令或指令的一部分(指令助记符或操作数),也可以填入功能相当的多条指令,或删去BEGIN和END之间原有的代码并自行编程来完成所要求的功能。
对程序必须进行汇编,并与IO.OBJ连接产生可执行文件,最终运行程序产生结果。
调试中若发现整个程序中存在错误之处,请加以修改。
EXTRNLOAD:
FAR,SAVE:
FAR
NEQU10
;;;;;;;;;;;;;;;;;;;;;;;;;;;堆栈段;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
STACSEGMENTSTACK
DB128DUP(?
);定义128字节的堆栈区
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;段寻址伪操作指令,CS代码段,DS数据段,SS堆栈段
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;初始化;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
STARTPROCFAR;过程定义伪指令,类型属性FAR
PUSHDS;保护PSP段地址
XORAX,AX;置AX为0
PUSHAX;保护PSP偏移地址
MOVAX,DATA
MOVDS,AX;设置DS
MOVES,AX;置附加段寄存器
LEADX,SOURCE;数据区起始地址
LEASI,NAME0;原始数据文件名
MOVCX,N;字节数
CALLLOAD;从'INPUT1.DAT'中读取数据
;;;;;;;;;;;;;;;;;;;;;;;;;;;;开始;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LEASI,SOURCE;将原始数据偏移地址装入到SI中
MOVDI,OFFSETPDATA;PDATA为正数数组存放缓冲区首址
MOVBX,OFFSETNDATA;NDATA为负数数组存放缓冲区首址
XORDX,DX;置DX为0
MOVCX,N
CLD
MAIN1:
LODSB;将[SI]所指向的地址单元(SOURCE)中内容装入到AL中
TESTAL,80H;判断AL的正负性,逻辑与操作
JZMAIN2;若逻辑与的结果为全0,则ZF=1,说明为正数,跳转
INCDH;若逻辑与的结果不为全0,则ZF=0,说明为负数,存放负数个数的DH加1
MOV[BX],AL;将AL的内容存入负数数组缓冲区BX
INCBX;BX加1,指向下一单元
JMPMAIN3
MAIN2:
INCDL;为正数,存放正数个数的DL加1
MOV[DI],AL;将AL的内容存入正数数组缓冲区DI
INCDI;DI加1,指向下一单元
MAIN3:
LOOPMAIN1;继续判断下一个数AL的正负性
LEASI,PDATA;负数数组存放缓冲区首址
LEADI,RESULT;结果数据区首址
MOV[DI],DL;正数个数存入
INCDI;结果数据区偏移地址加1
XORCX,CX
MOVCL,DL;将DL的个数送CL,用于控制循环次数
MAIN4:
MOVAL,[SI];依次将DL个正数存入到DI当前所指向的地址单元DI中
MOV[DI],AL
INCDI
INCSI
LOOPMAIN4
MOV[DI],DH
INCDI
XORCX,CX
MOVCL,DH
MOVBX,OFFSETNDATA
MAIN5:
MOVAL,[BX];依次将负数存放到DI中
MOV[DI],AL
INCDI
INCBX
LOOPMAIN5
;****END****
LEADX,RESULT;结果数据区首址
LEASI,NAME1;结果文件名起始地址
MOVCX,N+2;字节数
CALLSAVE;保存结果到'OUTPUT1.DAT'文件
RET
STARTENDP
CODEENDS
ENDSTART
【参考答案】
(1)MOV
(2)80H
(3)JMPMAIN3
(4)LOOP
(5)[SI]
(6)MAIN4
(7)INCBX
请编制程序,其功能是:
内存中连续存放着16个二进制字节数,在原16个数的第4和第5个数之间插入00H,在原16个数的第8和第9个数之间插入55H,在原16个数的第12和第13个数之间插入AAH,在原16个数的最后加入FFH。
将按上述方法插入4个字节数后得到的20个字节数存入内存中。
例如:
内存中有:
10H,20H,30H,40H,50H,...,8FH(共16个字节)
结果为:
10H,20H,30H,40H,00H,50H,...,8FH,FFH(共20个字节)
部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。
运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
请填空BEGIN和END之间已经给出的源程序使其完整,需填空处已经用横线标出,每个空白一般只需一条指令,也可以填入功能相当的多条指令,或删去BEGIN和END之间原有的代码并自行编程来完成所要求的功能。
对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。
调试中若发现整个程序中存在错误之处,请加以修改。
EXTRNLOAD:
FAR,SAVE:
FAR
NEQU16
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;堆栈段;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
STACSEGMENTSTACK
DB128DUP(?
)
STACENDS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;数据段;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DATASEGMENT
SOURCEDBNDUP(?
);原始数据区
INDATADB0FFH,0AAH,55H,00H;字节型变量
RESULTDBN+4DUP(0);结果数据区
NAME0DB'INPUT1.DAT',0;原始数据文件名
NAME1DB'OUTPUT1.DAT',0;结果数据文件名
DATAENDS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;代码段;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CODESEGMENT;段定义伪操作命令
ASSUMECS:
CODE,DS:
DATA,SS:
STAC;段寻址伪操作指令,CS代码段,DS数据段,SS堆栈段
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;初始化;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
STARTPROCFAR;过程定义伪指令,类型属性FAR
PUSHDS;保护PSP段地址
XORAX,AX;清零AX
PUSHAX
MOVAX,DATA
MOVDS,AX
LEADX,SOURCE;数据区起始地址
LEASI,NAME0;原始数据文件名
MOVCX,N;字节数
CALLLOAD;从'INPUT1.DAT'中读取数据
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;开始;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOVSI,0;原始数据偏移地址SI赋初值为0
MOVDI,0;结果数据偏移地址DI赋初值为0
MOVCX,4;控制循环次数,每4个数之间插入1个数据
MOVBX,4;控制循环次数,一共插入4个字节数
CHAN:
MOVAH,SOURCE[SI];原始数据依次存入结果数据区
MOVRESULT[DI],AH
INCSI;原始数据偏移地址加1继续取下一个数
INCDI;结果数据区偏移地址加1
DECCX;控制循环次数,减1
JZINSER1;为0,说明完成4个数据传送,转INSER1
JMPCHAN;否则,返回CHAN,继续装入数据
INSER1:
PUSHSI;
MOVSI,BX;4个字节数
MOVAX,WORDPTRINDATA[SI-1];取字节数插入结果数据区,SI-1表示每次取完1个数后SI减1
MOVRESULT[DI],AH
DECBX;BX减1
JZEXIT;为0,表示4个字节全部插入数据区,则退出循环程序
MOVCX,04H;否则,重置循环次数
POPSI;弹出
INCDI;结果数据区偏移地址加1
JMPCHAN;转向CHAN,继续移入下一组4个数
EXIT:
POPSI
;****END****
LEADX,RESULT;结果数据区首址
LEASI,NAME1;结果文件名
MOVCX,N+4;结果字节数
CALLSAVE;保存结果到文件
RET
STARTENDP
CODEENDS
ENDSTART
【参考答案】
(1)MOVSI,0
(2)MOVAH,SOURCE[SI]
(3)INCSI
(4)AH
(5)EXIT
(6)POPSI
(7)CHAN
请编制程序,其功能是:
以SOURCE开始的内存区域存放着N个字节的压缩BCD码,将每个压缩BCD码转换成两个ASCII值,并在每个ASCII值的最高位增加偶校验位,结果存放在RESULT指示的内存区域。
例如:
原压缩BCD码:
26H,75H,91H,33H...
结果为:
B2H,36H,B7H...
部分程序已经给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中,转换结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
请填空BEGIN和END之间已经给出的一段原程序使其完整,需填空处已经用横线标出,每个空白一般只需要填一条指令或指令的一部分(指令助记符或操作数),也可以填入功能相当的多条指令,或删去BEGIN和END之间原有的代码并自行编程来完成所要求的功能。
对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。
调试中若发现整个程序中存在错误之处,请加以修改。
EXTRNLOAD:
FAR,SAVE:
FAR
NEQU10
STACSEGMENTSTACK
DB128DUP(?
)
STACENDS
DATASEGMENT
SOURCEDBNDUP(0)
RESULTDB2*NDUP(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
MOVES,AX;置附加段寄存器
LEADX,SOURCE;数据区起始地址
LEASI,NAME0;原始数据文件名
MOVCX,N;字节数
CALLLOAD;从'INPUT1.DAT'中读取数据
;****BEGIN****
LEASI,SOURCE
MOVDI,OFFSETRESULT
MOVCX,N
SERCH1:
MOV____
(1)____
MOVAH,AL
ANDAH,0FH
ANDAL,0F0H
PUSHCX
MOVCL,4
____
(2)____
____(3)____
ADDAL,30H
____(4)____
ORAL,80H
SERCH2:
MOV[DI],AL
INCDI
____(5)____
JPSERCH3
ORAH,80H
SERCH3:
MOV[DI],AH
INCDI
INCSI
____(6)____SERCH1
;****END****
LEADX,RESULT;结果数据区首址
LEASI,NAME1;结果文件名起始地址
MOVCX,2*N;字节数
CALLSAVE;保存结果到'OUTPUT1.DAT'文件中
RET
STARTENDP
CODEENDS
ENDSTART
【参考答案】
(1)AL,[SI]
(2)SHRAL,CL
(3)POPCX
(4)JPSERCH2
(5)ADDAH,30H
(6)LOOP
请编制程序,其功能是:
内存中连续存放着20个十六位二进制无符号数序列,请将它们排成升序(从小到大)。
例如:
内存中有:
7001H,7004H,7002H,...(假设后17个字均大于7004H)
结果为:
7001H,7002H,7004H,...(后跟17个字,按从小到大的顺序排列)
部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。
运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
请填空BEGIN和END之间已经给出的源程序使其完整,需填空处已经用横线标出,每个空白一般只需一条指令,也可以填入功能相当的多条指令,或删去BEGIN和END之间原有的代码并自行编程来完成所要求的功能。
对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。
调试中若发现整个程序中存在错误之处,请加以修改。
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,_____
(1)_____
_____
(2)_____
LOOP_____(3)_____
CLD
MOVBX,N-1
MAL1:
LEASI,RESULT
MOVCX,_____(4)_____
NEXT:
LOD_____(5)_____
CMP[SI],AX
JAECONT
XCHG[SI],____(6)____
MOV[SI-2],AX
CONT:
LOOP____(7)____
_____(8)_____
_____(9)_____MAL1
;****END****
LEADX,RESULT;结果数据区首址
LEASI,NAME1;结果文件名
MOVCX,N*2;结果字数
CALLSAVE;保存结果到文件
RET
STARTENDP
CODEENDS
ENDSTART
【参考答案】
(1)2
(2)ADDDI,2
(3)NEXT0
(4)BX
(5)SW
(6)AX
(7)NEXT
(8)DECBX
(9)JNZ
请编制程序,其功能是:
内存中连续存放着10个十六位二进制数。
分别对每个数的高位字节和低位字节进行逻辑与运算及逻辑或运算。
运算结果以字的形式按序连续存放(低位字节存入逻辑与运算的结果,高位字节存入逻辑或运算的结果)。
例如:
内存中有:
AA55H,55AAH,FFAAH
结果为:
FF00H,FF00H,FFAAH
部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。
运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
请填空BEGIN和END之间已经给出的源程序使其完整,空白处已经用横线标出,每个空白一般只需一条指令,但采用功能相当的多条指令亦可,或删去BEGIN和END之间原有的代码并自行编程来完成所要求的功能。
对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。
调试中若发现整个程序中存在错误之处,请加以修改。
EXTRNLOAD:
FAR,SAVE:
FAR
NEQU3
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****
MOVDI,OFFSETRESULT
MOVCX,N
MOVBX,00
PRO:
MOVAX,____
(1)____
MOVDX,AX
AND____
(2)____,DH
____(3)____AH,AL
MOV____(4)____,DL
ADDBX,2
____(5)____
ADDDI,2
____(6)____
JNZPRO
;****END****
LEADX,RESULT;结果数据区首址
LEASI,NAME1;结果文件名
MOVCX,N*2;结果字节数
CALLSAVE;保存结果到文件
RET
STARTENDP
CODEENDS
ENDSTART
【参考答案】
(1)SOURCE[BX]
(2)DL
(3)OR
(4)AL
(5)MOV[DI],AX
(6)DECCX
编制一个程序,其实现的功能为:
计算10个带符号字节数据的绝对值之和(和为字型),并且找出绝对值最小的数及其所在的偏移地址,将结果依次存入指定的内存区中,结果以0FH结束。
例如:
内存中有:
23H,14H,00H,08H,FEH,87H,02H,01H,FFH,01H
结果为:
BFH,00H,00H,02H,00H,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PC 三级 上机 试题 答案