整理计算机原理与应用上机考试三星题代码doc.docx
《整理计算机原理与应用上机考试三星题代码doc.docx》由会员分享,可在线阅读,更多相关《整理计算机原理与应用上机考试三星题代码doc.docx(26页珍藏版)》请在冰豆网上搜索。
整理计算机原理与应用上机考试三星题代码doc
1.在多模块设计中,主模块中调用内部模块buf1,buf2,buf3,buf4。
主模块根据键盘输入的指令(如:
a,b,c,d)调用上述对应的子程序,每个子程序的任务是显示其入口地址。
调用后继续等待调用,若输入ESC键(ASCII码为1BH)则结束程序的执行。
请编写完成该任务的程序。
DATASSEGMENT
ADDRESSDB?
?
?
?
'$'
EXITDB1BH
MESSDB'Pleaseinputoneofthecharacterof"a,b,c,d"',0DH,0AH,'$'
MESS1DB0DH,0AH,'PressESCtoendthisprogram',0DH,0AH,'$'
DATASENDS
STACKSSEGMENT
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
;显示提示句
MOVAH,9
MOVDX,OFFSETMESS
INT21H
;输入字符
MOVAH,1
INT21H
;比较确定输入的字符
CMPAL,'a'
JAN1
CALLa
JMPNEXT
N1:
CMPAL,'b'
JAN2
CALLb
JMPNEXT
N2:
CMPAL,'c'
JAN3
CALLCc
JMPNEXT
N3:
CALLd
;一个数一个数转换成ASCII
NEXT:
MOVAX,BX;BX内存有地址,给ax
MOVBX,10H;
MOVCX,4;
MOVSI,3;令si指向address的最后一个单元
ZH:
MOVDX,0
DIVBX;取出地址的最低位到dx
CMPDX,9
JAZF
ORDX,30H
MOV[ADDRESS+SI],DL
JMPL
ZF:
ADDDX,55;字符
MOV[ADDRESS+SI],DL
L:
DECSI
LOOPZH
;显示地址
MOVAH,9
MOVDX,OFFSETADDRESS
INT21H
;显示提示准备结束程序
NEXT1:
MOVAH,9
MOVDX,OFFSETMESS1
INT21H
MOVAH,1
INT21H
CMPAL,EXIT
JNENEXT1
MOVAH,4CH
INT21H
;子程序部分
aPROC
MOVBX,OFFSETa
RET
aENDP
bPROC
MOVBX,OFFSETb
RET
bENDP
CcPROC
MOVBX,OFFSETCc
RET
CcENDP
dPROC
MOVBX,OFFSETd
RET
dENDP
CODESENDS
ENDSTART
2.现有一控制程序共5个工序,要求输入0-4的序号,分别执行各工序的子程序,每个子程序的任务是显示其入口地址。
调用后继续等待调用,按回车则结束程序的执行。
DATASSEGMENT
MESSDB0DH,0AH,'Pleaseinputanumber(0,1,2,3,4)toselectaprocesstoexecute.',0DH,0AH,'OrpressENTERtoexit',0DH,0AH,'$'
ADDRESSDB0DH,0AH,?
?
?
?
'$'
DATASENDS
STACKSSEGMENT
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
;显示提示信息,输入字符
L1:
MOVAH,9
MOVDX,OFFSETMESS
INT21H
MOVAH,1
INT21H
;判断输入字符,调用子程序
CMPAL,'0'
JNZN1
CALLZERO
JMPNEXT
N1:
CMPAL,'1'
JNZN2
CALLONE
JMPNEXT
N2:
CMPAL,'2'
JNZN3
CALLTWO
JMPNEXT
N3:
CMPAL,'3'
JNZN4
CALLTHREE
JMPNEXT
N4:
CMPAL,'4'
JNZN5
CALLFOUR
JMPNEXT
N5:
CMPAL,0DH;如果输入回车就结束运行
JNZNEXT
MOVAH,4CH
INT21H
;把地址转化成对应ASCII
NEXT:
MOVAX,BX
MOVBX,10H
MOVCX,4
MOVSI,5
ZH:
MOVDX,0
DIVBX
CMPDX,9
JAZF
ORDX,30H
MOV[ADDRESS+SI],DL
JMPL
ZF:
ADDDX,55
MOV[ADDRESS+SI],DL
L:
DECSI
LOOPZH
;显示地址
MOVAH,9
MOVDX,OFFSETADDRESS
INT21H
JMPL1
;子程序部分
ZEROPROC
MOVBX,OFFSETZERO
RET
ZEROENDP
ONEPROC
MOVBX,OFFSETONE
RET
ONEENDP
TWOPROC
MOVBX,OFFSETTWO
RET
TWOENDP
THREEPROC
MOVBX,OFFSETTHREE
RET
THREEENDP
FOURPROC
MOVBX,OFFSETFOUR
RET
FOURENDP
CODESENDS
ENDSTART
3.现有一组字符串为data,name,time,file,code,path,user,exit,quit,text,请编写程序从键盘输入4个字符的字符串,若存在将其修改为disk,并将结果在显示器上显示。
DATASSEGMENT
MESSDB'Pleaseinputawordwith4letters',0DH,0AH,'$'
SMAXDB5
SACTDB?
STRING2DB4DUP(?
),0DH
STRING3DB'disk'
DATASENDS
STACKSSEGMENT
STACKSENDS
EXTRASEGMENT
STRING1DB'data,name,time,file,code,path,user,exit,quit,text','$'
EXTRAENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
MOVAX,EXTRA
MOVES,AX
MOVSI,OFFSETSTRING2
MOVDI,OFFSETSTRING1
LEABX,STRING3
;显示提示信息,输入字符串
MOVAH,9
MOVDX,OFFSETMESS
INT21H
MOVAH,10
LEADX,SMAX
INT21H
;准备串操作
CLD
MOVAX,0
MOVCX,49
;主算法部分
L1:
CMPSB
JNZL2;不相等就跳去下一次循环
INCAX;ax记录相等字符的个数
CMPAX,4
JNZXH;有四个相等就说明找到了
SUBDI,4
MOVDX,0;dx记录替换到第几个字母
;替换
CDZ:
MOVAL,DS:
[BX]
MOVES:
[DI],AL
INCDI
INCBX
INCDX
CMPDX,4
JNZCDZ
L2:
MOVSI,OFFSETSTRING2
MOVAX,0
XH:
LOOPL1
;显示回车
MOVAH,2
MOVDL,0DH
INT21H
MOVAH,2
MOVDL,0AH
INT21H
;显示结果
MOVAX,EXTRA
MOVDS,AX;ds段地址改为附加段,便于输出字符串
MOVAH,9
MOVDX,OFFSETSTRING1
INT21H
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
4.现有一组字符串为data,name,time,file,code,path,user,exit,quit,text,请编写程序从键盘输入4个字符的字符串,若存在将其删除,并在显示器上显示。
DATASSEGMENT
MESSDB'Pleaseinputawordwith4letters',0DH,0AH,'$'
SMAXDB5
SACTDB?
STRING2DB4DUP(?
),0DH
STRING3DB45DUP(0),'$'
DATASENDS
STACKSSEGMENT
STACKSENDS
EXTRASEGMENT
STRING1DB'data,name,time,file,code,path,user,exit,quit,text','$'
EXTRAENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
MOVAX,EXTRA
MOVES,AX
MOVSI,OFFSETSTRING2
MOVDI,OFFSETSTRING1
LEABX,STRING3
;显示提示信息,输入字符串
MOVAH,9
MOVDX,OFFSETMESS
INT21H
MOVAH,10
LEADX,SMAX
INT21H
CLD
MOVAX,0
MOVCX,49
MOVDX,0
;主程序
L1:
CMPSB;比较,有三种情况:
;
(1)发现接下来4个字符都相等,表明找到单词,只需跳过比较下一个字符串
;
(2)发现此字符不相等,且前面的字符也都不相等,此字符正常复制
;(3)发现此字符不相等,而前x个字符相等,表明前面x个相等的字符是巧合,退回去复制前x个字符
JNZNOTEQUAL
INCAX;记录相等字符的个数
INCDX;记录出现第一个相等的字符以后比较到第几个字符了
CMPAX,4
JZN2;ax=4说明找到了单词,跳去准备比较下一个字符;ax!
=4则还没找完,继续比对寻找
JMPXH
NOTEQUAL:
CMPAX,0;判断前面有没有相等的字符,有则退回复制字符,没有则复制这个字符
JAN1
CALLTRANSFER
INCBX
MOVSI,OFFSETSTRING2
JMPXH
;退回复制字符部分
N1:
SUBDI,DX
ADDCX,DX
N:
CALLTRANSFER
INCBX
DECDX
CMPDX,0
JNZN
;循环前的调整
N2:
MOVDX,0
MOVAX,0
MOVSI,OFFSETSTRING2
XH:
LOOPL1
;显示结果
MOVAH,2
MOVDL,0DH
INT21H
MOVAH,2
MOVDL,0AH
INT21H
MOVAH,9
MOVDX,OFFSETSTRING3
INT21H
MOVAH,4CH
INT21H
;子程序,用于传递字符
TRANSFERPROC
MOVAL,ES:
[DI-1]
MOVDS:
[BX],AL
MOVAL,0
RET
TRANSFERENDP
CODESENDS
ENDSTART
5.一个有符号字数组以0为结束标志,编程求这个数组的最大值、最小值、平均值。
DATASSEGMENT
NUMDW-3,-2,-1,0,1,2,3,0
MAXDW1
MINDW1
AVERAGEDW1
DATASENDS
STACKSSEGMENT
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
MOVBX,LENGTHOFNUM;bx储存数组长度
;求最大值
LEASI,NUM
LEADI,MAX
CALLFMAX
;求最小值
LEASI,NUM
LEADI,MIN
CALLFMIN
;求平均值
LEASI,NUM
LEADI,AVERAGE
CALLFAVE
;结束程序
MOVAH,4CH
INT21H
FMAXPROC
MOVAX,[SI]
MOVCX,BX
L:
CMPAX,[SI]
JNLXH
MOVAX,[SI]
XH:
ADDSI,2
LOOPL
MOV[DI],AX
RET
FMAXENDP
FMINPROC
MOVAX,[SI]
MOVCX,BX
L1:
CMPAX,[SI]
JLXH1
MOVAX,[SI]
XH1:
ADDSI,2
LOOPL1
MOV[DI],AX
RET
FMINENDP
FAVEPROC
MOVAX,0
MOVCX,BX
L2:
ADDAX,[SI];求和
ADDSI,2
LOOPL2
MOVDX,0
DIVBX;求平均值
MOV[DI],AX
RET
FAVEENDP
CODESENDS
ENDSTART
6.在BUFFER中定义了的十个带符号字,将其中的负数变成绝对值,并以十进制方式输出。
DATASSEGMENT
BUFFERDB-1,-2,-3,-4,1,2,3,4,0,0
DATASENDS
STACKSSEGMENT
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
MOVSI,OFFSETBUFFER
MOVCX,10
MOVDX,0
;主算法
L:
MOVDL,[SI]
CMPBYTEPTR[SI],0;判断数字正负,正则跳去输出,负则求相反数
JNLNEXT
NEGDL
NEXT:
;转换为ASCIIcode输出
ORDL,30H
MOVAH,2
INT21H
INCSI
MOVDX,0
LOOPL
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
7.已知数组A包含20个互不相等的字型整数,数组B包含30个互不相等的字型整数,试编制一程序把在A中而不在B中出现的整数放于数组C中。
DATASSEGMENT
ARRAYADW1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
ARRAYBDW1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30
ARRAYCDW30DUP(0)
COUNTDB30
DATASENDS
STACKSSEGMENT
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
MOVDI,OFFSETARRAYA
MOVSI,OFFSETARRAYB
MOVCL,LENGTHOFARRAYB
;主算法部分
L2:
MOVBYTEPTR[COUNT],CL;把cl的值给count外循环计数变量
MOVCX,20;内循环次数给cx
MOVAX,[SI]
;内循环,找
L1:
CMPAX,[DI]
JNENEXT
MOVBX,1;记录是否找到相同的数字
NEXT:
ADDDI,2
CMPBX,1
LOOPNZL1;找到相同数字了,跳出循环,否则继续找知道全部遍历完
CMPBX,1;检查有没有找到相同的数字,有则复制,否则跳去准备下一轮大循环
JENEXT1
MOV[ARRAYC+SI-50],AX
NEXT1:
ADDSI,2
MOVDI,OFFSETARRAYA
MOVBX,0
MOVCL,BYTEPTR[COUNT];count值给cx用于外循环计数
LOOPL2
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
8.已知数组A包含20个互不相等的字型整数,数组B包含30个互不相等的字型整数,试编制一程序把既在A中又在B中出现的数存放于数组C中。
DATASSEGMENT
ARRAYADW1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
ARRAYBDW1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30
ARRAYCDW20DUP(0)
COUNTDB20
DATASENDS
STACKSSEGMENT
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
MOVSI,OFFSETARRAYA
MOVDI,OFFSETARRAYB
MOVCL,LENGTHOFARRAYA
;主算法部分
L2:
MOVBYTEPTR[COUNT],CL;把cx值赋给外循环计数变量count
MOVCX,30;把内循环次数给cx
MOVAX,[SI]
L1:
CMPAX,[DI];比较,相等时bx记1,否则跳到准备下一次内循环
JNENEXT
MOVBX,1
NEXT:
ADDDI,2
CMPBX,1;判断有没有找到相同的数字,有则跳出循环,否则继续寻找,直到所有都被遍历
LOOPNZL1
CMPBX,1;判断内循环结束时有没有找到相同的数字,有则复制,否则跳去准备下一次外循环
JNENEXT1
MOV[ARRAYC+SI],AX
NEXT1:
ADDSI,2
MOVDI,OFFSETARRAYB
MOVBX,0
MOVCL,BYTEPTR[COUNT]
LOOPL2
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
9.(***)在内存中定义一个用于加密的key和明文字符串,用这个key的每个字符依次和明文字符串的对应字符进行异或操作得到密文字符串,并将密文字符串保存在另一个变量中。
例如:
key为“ABXmv#7”
明文字符串
T
h
i
s
a
p
l
a
i
n
t
e
x
t
Key
A
B
X
m
v
#
7
A
B
X
m
v
#
7
A
B
X
DATASSEGMENT
STRINGDB'Thisisaplaintext'
KEYDB'ABXmv#7'
STRING1DB20DUP(0),0DH,0AH,'$'
DATASENDS
STACKSSEGMENT
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
LEASI,STRING
LEADI,KEY
LEABX,STRING1
MOVCX,LENGTHOFSTRING
MOVDX,0;记录key是否到最后
;主算法部分
L:
MOVAL,[SI]
XORAL,[DI]
MOV[BX+SI],AL
INCSI
INCDI
INCDX
CMPDX,7;判断key是否到最后,是则回到第一个,否则继续
JNZXH
LEADI,KEY
MOVDX,0
XH:
LOOPL
;显示结果
MOVAH,9
MOVDX,OFFSETSTRING1
INT21H
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
10.(***)在内存中定义一个用于加密的key和明文字符串,key中的每个数字表示将明文字符串中的对应字符进行旋转移位的次数,负数表示左移位,正数表示右移位。
加密key的长度为10个字节:
-2,4,1,0,-3,5,2,-4,-4,6。
先用加密key处理字符串的前10个字节,再处理接下来的10个字节,以此类推。
将密文字符串保存在另一个变量中。
DATASSEGMENT
STRINGDB'Thisisaplaintext'
KEYDB-2,4,1,0,-3,5,2,-4,-4,6
STRING1DB20DUP(0),0DH,0AH,'$'
COUNTDB0
DATASENDS
STACKSSEGMENT
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
LEASI,STRIN