微机原理习题.docx

上传人:b****6 文档编号:7468280 上传时间:2023-05-11 格式:DOCX 页数:22 大小:22.31KB
下载 相关 举报
微机原理习题.docx_第1页
第1页 / 共22页
微机原理习题.docx_第2页
第2页 / 共22页
微机原理习题.docx_第3页
第3页 / 共22页
微机原理习题.docx_第4页
第4页 / 共22页
微机原理习题.docx_第5页
第5页 / 共22页
微机原理习题.docx_第6页
第6页 / 共22页
微机原理习题.docx_第7页
第7页 / 共22页
微机原理习题.docx_第8页
第8页 / 共22页
微机原理习题.docx_第9页
第9页 / 共22页
微机原理习题.docx_第10页
第10页 / 共22页
微机原理习题.docx_第11页
第11页 / 共22页
微机原理习题.docx_第12页
第12页 / 共22页
微机原理习题.docx_第13页
第13页 / 共22页
微机原理习题.docx_第14页
第14页 / 共22页
微机原理习题.docx_第15页
第15页 / 共22页
微机原理习题.docx_第16页
第16页 / 共22页
微机原理习题.docx_第17页
第17页 / 共22页
微机原理习题.docx_第18页
第18页 / 共22页
微机原理习题.docx_第19页
第19页 / 共22页
微机原理习题.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

微机原理习题.docx

《微机原理习题.docx》由会员分享,可在线阅读,更多相关《微机原理习题.docx(22页珍藏版)》请在冰点文库上搜索。

微机原理习题.docx

微机原理习题

--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--

 

微机原理习题3(总16页)

习题3

3.1在以Block为首地址的字节单元中,存放了一个班级的学生考试成绩。

试编写一程序,利用学生的序号来查表得到该学生的成绩,设学生的序号在NUMBER单元,查表结果存入RESULT单元。

解:

DSEGSEGMENT

BLOCKDB67,78,86,57,88,75,78,96,77,88,87,95,67,86,83,55

NUMBERDB9;要显示的16进制数字

RESULTDB;存放要显示数字对应的七段码

DSEGENDS

CSEGSEGMENT

ASSUMECS:

CSEG,DS:

DSEG

START:

MOVAX,DSEG

MOVDS,AX

MOVBX,OFFSETBLOCK

MOVAL,NUMBER;取16进制数字

ANDAL,0FH

XLAT;查表取得对应的七段码

MOVRESULT,AL;保存

MOVAX,4C00H

INT21H

CSEGENDS

ENDSTART

3.2试编程序,统计由52600H开始的100个单元中所存放的字符“A“的个数,并将结果存放在DX中。

解:

CSEGSEGMENT

ASSUMECS:

CSEG

START:

MOVAX,5260H

MOVDS,AX

MOVBX,0

MOVAL,'A'

MOVCX,100

MOVDX,0

AGA:

CMPAL,[BX]

JNZLP

INCDX

LP:

INCBX

LOOPAGA

MOVAX,4C00H

INT21H

CSEGENDS

ENDSTART

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

JMPNEXT

L2:

CMPAL,79

JAL3

INCLEVEL2

JMPNEXT

L3:

CMPAL,89

JAL4

INCLEVEL1

JMPNEXT

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字单元。

解:

DATASEGMENT

ARRAYDB12,-67,44,67,-35,66,55,-98,87,-87,33,83

COUNTEQU$-ARRAY

SUMDW;SUM存放累加和

DATAENDS

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;保存结果(累加和)

MOVAX,4C00H

INT21H

CODEENDS

ENDSTART

3.5若某班有50名学生,考汇编语言课程,且所有考生的成绩都已存放自XX单元开始的内存区中,试编写一程序找出最高分和最低分。

解:

DATASEGMENT

XXDB50DUP();运行前置入具体数据

COUNTEQU$-XX

MINDB

MAXDB

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVMIN,100;假设最小的数

MOVMAX,0;假设最大的数

LEASI,XX

MOVCX,COUNT

AGAIN:

MOVAL,[SI]

CMPAL,MIN

JAESKIP1

MOVMIN,AL;比预设最小值还小,保留

SKIP1:

CMPAL,MAX

JBESKIP2

MOVMAX,AL;比预设最大值还大,保留

SKIP2:

INCSI

LOOPAGAIN

EXIT:

MOVAX,4C00H

INT21H

CODEENDS

ENDSTART

3.6在首地址为ARRAY为首地址的内存区域里,存放了一组带符号的数据,试编写程序分别统计零、正数和负数的个数,统计结果分别存放在ZZ、XX、YY中。

解:

DATASEGMENT

ARRAYDB56,-42,66,87,0,88,-88,68,0,-67,58,97,-66,86,77

;运行前置入具体数据

COUNTEQU$-ARRAY

XXDB0;正数的个数

YYDB0;0的个数

ZZDB0;负数的个数

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

LEASI,ARRAY

MOVCX,COUNT

AGAIN:

MOVAL,[SI]

CMPAL,0;分段测试

JGEL1

L0:

INCZZ

JMPNEXT

L1:

JGL2

INCYY

JMPNEXT

L2:

INCXX

NEXT:

ADDSI,1

LOOPAGAIN

EXIT:

MOVAX,4C00H

INT21H

CODEENDS

ENDSTART

3.7设有一个管理软件可接受十个键盘命令(分别是A、B、C,...,J),执行这十个命令的程序入口地址分别是PROCA、PROCB、PROCC,...,PROCJ。

编写一程序从键盘上接收命令,并转去执行相应的程序。

要求分别用以下两种方式来实现:

(1)用比较转移指令

(2)用地址表法

解:

(1)

DATASEGMENT

PROMPTDB0DH,0AH,"INPUTACHAR('A'~'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.$"

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

INPUT:

LEADX,PROMPT

MOVAH,9

INT21H;输出提示信息

MOVAH,1

INT21H;输入一个数字

;*****************①开始测试条件*******************

CMPAL,'A'

JBINPUT;不在"A~J"内,重新输入

JEFA;字符"A",转FA

CMPAL,'B'

JEFB;字符"B",转FB

CMPAL,'C'

JEFC;字符"C",转FC

CMPAL,'D'

JEFD;字符"D",转FD

CMPAL,'E'

JEFE;字符"E",转FE

CMPAL,'F'

JEFF;字符"F",转FF

CMPAL,'G'

JEFG;字符"G",转FG

CMPAL,'H'

JEFH;字符"H",转FH

CMPAL,'I'

JEFI;字符"I",转FI

CMPAL,'J'

JEFJ;字符"J",转FJ

JMPINPUT;大于"J",重新输入

;*****************②各分支语句序列******************

FA:

CALLPROCA;调用PROCA程序块

JMPEXIT;每个分支结束,都要用JMP指令跳转到所有分支结束的地方

FB:

CALLPROCB;调用PROCB程序块

JMPEXIT

FC:

CALLPROCC;调用PROCC程序块

JMPEXIT

FD:

CALLPROCD;调用PROCD程序块

JMPEXIT

FE:

CALLPROCE;调用PROCE程序块

JMPEXIT

FF:

CALLPROCF;调用PROCF程序块

JMPEXIT

FG:

CALLPROCG;调用PROCG程序块

JMPEXIT

FH:

CALLPROCH;调用PROCH程序块

JMPEXIT

FI:

CALLPROCI;调用PROCI程序块

JMPEXIT

FJ:

CALLPROCJ;调用PROCJ程序块

JMPEXIT;最后一个分支结束,JMP可以省略

EXIT:

MOVAX,4C00H

INT21H

PROCAPROC

LEADX,MSGA

MOVAH,9

INT21H

RET

PROCAENDP

PROCBPROC

LEADX,MSGB

MOVAH,9

INT21H

RET

PROCBENDP

PROCCPROC

LEADX,MSGC

MOVAH,9

INT21H

RET

PROCCENDP

PROCDPROC

LEADX,MSGD

MOVAH,9

INT21H

RET

PROCDENDP

PROCEPROC

LEADX,MSGE

MOVAH,9

INT21H

RET

PROCEENDP

PROCFPROC

LEADX,MSGF

MOVAH,9

INT21H

RET

PROCFENDP

PROCGPROC

LEADX,MSGG

MOVAH,9

INT21H

RET

PROCGENDP

PROCHPROC

LEADX,MSGH

MOVAH,9

INT21H

RET

PROCHENDP

PROCIPROC

LEADX,MSGI

MOVAH,9

INT21H

RET

PROCIENDP

PROCJPROC

LEADX,MSGJ

MOVAH,9

INT21H

RET

PROCJENDP

CODEENDS

ENDSTART

(2)

DATASEGMENT

PROMPTDB0DH,0AH,"INPUTACHAR('A'~'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.$"

ADDTBLDWFA,FB,FC,FD,FE,FF,FG,FH,FI,FJ;

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

INPUT:

LEADX,PROMPT

MOVAH,9

INT21H;输出提示信息

MOVAH,1

INT21H;输入一个数字

CMPAL,'A'

JBINPUT;不在"A~J"内,重新输入

CMPAL,'J'

JAINPUT;不在"A~J"内,重新输入

SUBAL,'A';将数字字符“1”到“3”转换为0,1,2

SHLAL,1;转换为0,2,4

MOVBL,AL

MOVBH,0;转入BX

JMPADDTBL[BX];间接寻址,转移到对应程序块

;*****************②各分支语句序列******************

FA:

LEADX,MSGA;FA程序块

JMPOUTPUT;每个分支结束,都要用JMP指令跳转到所有分支结束的地方

FB:

LEADX,MSGB;FB程序块

JMPOUTPUT

FC:

LEADX,MSGC;FC程序块

JMPOUTPUT

FD:

LEADX,MSGD;FD程序块

JMPOUTPUT

FE:

LEADX,MSGE;FE程序块

JMPOUTPUT

FF:

LEADX,MSGF;FF程序块

JMPOUTPUT

FG:

LEADX,MSGG;FG程序块

JMPOUTPUT

FH:

LEADX,MSGH;FH程序块

JMPOUTPUT

FI:

LEADX,MSGI;FI程序块

JMPOUTPUT

FJ:

LEADX,MSGJ;FJ程序块

JMPOUTPUT;最后一个分支结束,JMP可以省略

OUTPUT:

MOVAH,9

INT21H

MOVAX,4C00H

INT21H

CODEENDS

ENDSTART

3.8设在寄存器AX,BX,CX中存放的是16位无符号数,试编写程序段,找出三个数值居中的一个,并将其存入BUFF字单元中。

解:

DATASEGMENT

BUFFDW0

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVAX,5

MOVBX,3

MOVCX,6

CMPAX,BX

JAL1

JZL2

L0:

CMPAX,CX;AX

JAEL4;AXCX

L2:

CMPBX,CX

JBEL5

JMPL6

L1:

CMPBX,CX

JAEL5;BX

CMPAX,CX

JAL6

L4:

MOVBUFF,AX

JMPDONE

L5:

MOVBUFF,BX

JMPDONE

L6:

MOVBUFF,CX

DONE:

MOVAX,4C00H

INT21H

CODEENDS

ENDSTART

3.9编写确定一个十进制数x(2≤x≤200)是否是素数(质数)的程序。

解:

DATASEGMENT

xDB12;x(2≤x≤200)

FLAGDB0;X是素数,FLAG=1,否则FLAG=0

DATAENDS

CODESEGMENT

ASSUMEDS:

DATA,CS:

CODE

START:

MOVAX,DATA

MOVDS,AX

MOVBL,2

MOVBH,X

SHRBH,1;计算测试范围

MOVFLAG,1;先假设x为素数

NEXT:

MOVAL,X

MOVAH,0

DIVBL

CMPAH,0;余数为0,说明不是素数,退出

JZNO

INCBL

CMPBL,BH

JZEXIT;到测试边界,退出

JMPNEXT

NO:

MOVFLAG,0

EXIT:

MOVAX,4C00H

INT21H

CODEENDS

ENDSTART

3.10在以BLOCK为首地址的数据区域按着从小到大的顺序存放了一个年级(180人)学生的汇编语言成绩表。

试编写程序将分数82插入到该数组合适的位置。

解:

DATASEGMENT

BLOCKDB1,3,5,7,9,12,15,25,35,36,37,40,42,46,57;学生的成绩表,可根据实际填写

STDB39;另外一个学生的成绩

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

LEASI,BLOCK+14;取成绩表中最后一个学生成绩的偏移地址给SI

MOVCX,15

MOVAL,ST

CMPBLK:

CMPAL,[SI];要插入的学生成绩比成绩表中的成绩小,则转CHANGE

JBCHANGE

MOV[SI+1],AL;插入该学生成绩

JMPDONE

CHANGE:

MOVBL,[SI];把表中成绩后移

MOV[SI+1],BL

DECSI

LOOPCMPBLK

DONE:

MOVAX,4C00H

INT21H

CODEENDS

ENDSTART

3.11已知数组A中包含15个互不相等的整数,数据B中包含20个互不相等的整数,试编写一程序,将即在A数组中出现又在B数组中出现的整数存放于数组C中。

解:

DATASEGMENT

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)

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVES,AX

LEASI,A

LEABX,C

MOVCX,15

CLD

CMPAB:

LODSB;从数组A中取出一个数

LEADI,B

PUSHCX

MOVCX,20

REPNZSCASB;与数组B中的元素比较

JNZLOP;数据不同,比较下一个数

MOV[BX],AL;数据相同,则保存在数组C中

INCB

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2