微机原理习题Word格式文档下载.docx
- 文档编号:18522858
- 上传时间:2022-12-19
- 格式:DOCX
- 页数:22
- 大小:22.31KB
微机原理习题Word格式文档下载.docx
《微机原理习题Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《微机原理习题Word格式文档下载.docx(22页珍藏版)》请在冰豆网上搜索。
3.3在当前数据段(DS),偏移地址为GRADE开始的连续80个单元中,存放着某班80个同学某门考试成绩。
按要求编写程序:
①试编写程序统计≥90分;
80分~89分;
70分~79分;
60分~69分,<60分的人数各为多少,并将结果放在同一数据段、偏移地址为LEVEL开始的连续单元中。
②试编写程序,求该班这门课的平均成绩为多少,并放在该数据段的AVER单元中。
DATASEGMENT
GRADEDB80DUP();
运行前置入具体数据
LEVELDB0;
大于90
LEVEL1DB0;
80分~89分
LEVEL2DB0;
70分~79分
LEVEL3DB0;
60分~69分
LEVEL4DB0;
<60分
AVERDB
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
LEASI,GRADE
MOVDX,0
MOVCX,80
AGAIN:
MOVAL,[SI]
CMPAL,59;
分段测试
JAL1
L0:
INCLEVEL4
JMPNEXT
L1:
CMPAL,69
JAL2
INCLEVEL3
L2:
CMPAL,79
JAL3
INCLEVEL2
L3:
CMPAL,89
JAL4
INCLEVEL1
L4:
INCLEVEL
NEXT:
ADDSI,1
ADDDL,AL;
求累加和
ADCDH,0
LOOPAGAIN
MOVAX,DX
MOVBL,80
DIVBL
MOVAVER,AL
EXIT:
MOVAX,4C00H
INT21H
CODEENDS
ENDSTART
3.4在以字节变量ARRAY为首地址的内存区域存储了一组带符号的数据,试编写程序将数据组的所有正数相加,并将和送入SUM字单元。
ARRAYDB12,-67,44,67,-35,66,55,-98,87,-87,33,83
COUNTEQU$-ARRAY
SUMDW;
SUM存放累加和
CODESEGMENT
ASSUMEDS:
DATA,CS:
CODE
START:
MOVAX,DATA
MOVDS,AX
MOVBX,0;
BX是数组元素在数组内的位移,初值0
MOVCX,COUNT;
装载循环计数器的初始值
MOVDX,0;
累加器AX清零
ONE:
MOVAL,ARRAY[BX]
CMPAL,0
JLENEXT
CBW
ADDDX,AX;
NEXT:
INCBX;
修改BX的值,为下一次操作做准备
LOOPONE;
计数循环
MOVSUM,DX;
保存结果(累加和)
CODEENDS
3.5若某班有50名学生,考汇编语言课程,且所有考生的成绩都已存放自XX单元开始的内存区中,试编写一程序找出最高分和最低分。
XXDB50DUP();
COUNTEQU$-XX
MINDB
MAXDB
MOVMIN,100;
假设最小的数
MOVMAX,0;
假设最大的数
LEASI,XX
MOVCX,COUNT
AGAIN:
CMPAL,MIN
JAESKIP1
MOVMIN,AL;
比预设最小值还小,保留
SKIP1:
CMPAL,MAX
JBESKIP2
MOVMAX,AL;
比预设最大值还大,保留
SKIP2:
INCSI
3.6在首地址为ARRAY为首地址的内存区域里,存放了一组带符号的数据,试编写程序分别统计零、正数和负数的个数,统计结果分别存放在ZZ、XX、YY中。
ARRAYDB56,-42,66,87,0,88,-88,68,0,-67,58,97,-66,86,77
;
COUNTEQU$-ARRAY
XXDB0;
正数的个数
YYDB0;
0的个数
ZZDB0;
负数的个数
LEASI,ARRAY
CMPAL,0;
JGEL1
INCZZ
JGL2
INCYY
INCXX
3.7设有一个管理软件可接受十个键盘命令(分别是A、B、C,...,J),执行这十个命令的程序入口地址分别是PROCA、PROCB、PROCC,...,PROCJ。
编写一程序从键盘上接收命令,并转去执行相应的程序。
要求分别用以下两种方式来实现:
(1)用比较转移指令
(2)用地址表法
(1)
PROMPTDB0DH,0AH,"
INPUTACHAR('
~'
J'
):
$"
MSGADB0DH,0AH,"
FUNCTIONAEXECUTED.$"
MSGBDB0DH,0AH,"
FUNCTIONBEXECUTED.$"
MSGCDB0DH,0AH,"
FUNCTIONCEXECUTED.$"
MSGDDB0DH,0AH,"
FUNCTIONDEXECUTED.$"
MSGEDB0DH,0AH,"
FUNCTIONEEXECUTED.$"
MSGFDB0DH,0AH,"
FUNCTIONFEXECUTED.$"
MSGGDB0DH,0AH,"
FUNCTIONGEXECUTED.$"
MSGHDB0DH,0AH,"
FUNCTIONHEXECUTED.$"
MSGIDB0DH,0AH,"
FUNCTIONIEXECUTED.$"
MSGJDB0DH,0AH,"
FUNCTIONJEXECUTED.$"
ASSUMECS:
INPUT:
LEADX,PROMPT
MOVAH,9
INT21H;
输出提示信息
MOVAH,1
输入一个数字
;
*****************①开始测试条件*******************
CMPAL,'
JBINPUT;
不在"
A~J"
内,重新输入
JEFA;
字符"
A"
转FA
B'
JEFB;
B"
转FB
C'
JEFC;
C"
转FC
D'
JEFD;
D"
转FD
E'
JEFE;
E"
转FE
F'
JEFF;
F"
转FF
G'
JEFG;
G"
转FG
H'
JEFH;
H"
转FH
I'
JEFI;
I"
转FI
JEFJ;
J"
转FJ
JMPINPUT;
大于"
重新输入
*****************②各分支语句序列******************
FA:
CALLPROCA;
调用PROCA程序块
JMPEXIT;
每个分支结束,都要用JMP指令跳转到所有分支结束的地方
FB:
CALLPROCB;
调用PROCB程序块
JMPEXIT
FC:
CALLPROCC;
调用PROCC程序块
FD:
CALLPROCD;
调用PROCD程序块
FE:
CALLPROCE;
调用PROCE程序块
FF:
CALLPROCF;
调用PROCF程序块
FG:
CALLPROCG;
调用PROCG程序块
FH:
CALLPROCH;
调用PROCH程序块
FI:
CALLPROCI;
调用PROCI程序块
FJ:
CALLPROCJ;
调用PROCJ程序块
最后一个分支结束,JMP可以省略
PROCAPROC
LEADX,MSGA
MOVAH,9
INT21H
RET
PROCAENDP
PROCBPROC
LEADX,MSGB
PROCBENDP
PROCCPROC
LEADX,MSGC
PROCCENDP
PROCDPROC
LEADX,MSGD
PROCDENDP
PROCEPROC
LEADX,MSGE
PROCEENDP
PROCFPROC
LEADX,MSGF
PROCFENDP
PROCGPROC
LEADX,MSGG
PROCGENDP
PROCHPROC
LEADX,MSGH
PROCHENDP
PROCIPROC
LEADX,MSGI
PROCIENDP
PROCJPROC
LEADX,MSGJ
PROCJENDP
(2)
ADDTBLDWFA,FB,FC,FD,FE,FF,FG,FH,FI,FJ;
INT21H;
MOVAH,1
CMPAL,'
JBINPUT;
JAINPUT;
SUBAL,'
;
将数字字符“1”到“3”转换为0,1,2
SHLAL,1;
转换为0,2,4
MOVBL,AL
MOVBH,0;
转入BX
JMPADDTBL[BX];
间接寻址,转移到对应程序块
LEADX,MSGA;
FA程序块
JMPOUTPUT;
LEADX,MSGB;
FB程序块
JMPOUTPUT
LEADX,MSGC;
FC程序块
LEADX,MSGD;
FD程序块
LEADX,MSGE;
FE程序块
LEADX,MSGF;
FF程序块
LEADX,MSGG;
FG程序块
LEADX,MSGH;
FH程序块
LEADX,MSGI;
FI程序块
LEADX,MSGJ;
FJ程序块
OUTPUT:
3.8设在寄存器AX,BX,CX中存放的是16位无符号数,试编写程序段,找出三个数值居中的一个,并将其存入BUFF字单元中。
BUFFDW0
START:
MOVAX,DATA
MOVAX,5
MOVBX,3
MOVCX,6
CMPAX,BX
JAL1
JZL2
L0:
CMPAX,CX;
AX<
BX
JAEL4;
BXAX>
CX
L2:
CMPBX,CX
JBEL5
JMPL6
L1:
CMPBX,CX
JAEL5;
CMPAX,CX
JAL6
L4:
MOVBUFF,AX
JMPDONE
L5:
MOVBUFF,BX
JMPDONE
L6:
MOVBUFF,CX
DONE:
3.9编写确定一个十进制数x(2≤x≤200)是否是素数(质数)的程序。
xDB12;
x(2≤x≤200)
FLAGDB0;
X是素数,FLAG=1,否则FLAG=0
MOVBL,2
MOVBH,X
SHRBH,1;
计算测试范围
MOVFLAG,1;
先假设x为素数
MOVAL,X
MOVAH,0
DIVBL
CMPAH,0;
余数为0,说明不是素数,退出
JZNO
INCBL
CMPBL,BH
JZEXIT;
到测试边界,退出
JMPNEXT
NO:
MOVFLAG,0
3.10在以BLOCK为首地址的数据区域按着从小到大的顺序存放了一个年级(180人)学生的汇编语言成绩表。
试编写程序将分数82插入到该数组合适的位置。
BLOCKDB1,3,5,7,9,12,15,25,35,36,37,40,42,46,57;
学生的成绩表,可根据实际填写
STDB39;
另外一个学生的成绩
LEASI,BLOCK+14;
取成绩表中最后一个学生成绩的偏移地址给SI
MOVCX,15
MOVAL,ST
CMPBLK:
CMPAL,[SI];
要插入的学生成绩比成绩表中的成绩小,则转CHANGE
JBCHANGE
MOV[SI+1],AL;
插入该学生成绩
CHANGE:
MOVBL,[SI];
把表中成绩后移
MOV[SI+1],BL
DECSI
LOOPCMPBLK
INT21H
ENDSTART
3.11已知数组A中包含15个互不相等的整数,数据B中包含20个互不相等的整数,试编写一程序,将即在A数组中出现又在B数组中出现的整数存放于数组C中。
ADB1,3,5,7,9,12,15,25,35,36,37,40,42,46,57
BDB3,5,9,12,25,36,37,42,57,58,60,4,8,11,17,29,33,44,55,66
CDB20DUP(0)
MOVES,AX
LEASI,A
LEABX,C
CLD
CMPAB:
LODSB;
从数组A中取出一个数
LEADI,B
PUSHCX
MOVCX,20
REPNZSCASB;
与数组B中的元素比较
JNZLOP;
数据不同,比较下一个数
MOV[BX],AL;
数据相同,则保存在数组C中
INCB
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 习题