微机原理习-题-3_第1页
微机原理习-题-3_第2页
微机原理习-题-3_第3页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、习题33.1 在以 Block 为首地址的字节单元中,存放了一个班级的学生考试成绩。试编写一程序, 利用学生的序号来查表得到该学生的成绩,设学生的序号在 NUMBER 单元,查表结果 存入 RESULT 单元。解:DSEG SEGMENTBLOCKDB 67,78,86,57,88,75,78,96,77,88,87,95,67,86,83,55NUMBERDB 9 ; 要显示的 16 进制数字RESULT DB ? ; 存放要显示数字对应的七段码DSEG ENDSCSEG SEGMENTASSUME CS: CSEG, DS:DSEGSTART :MOV AX, DSEGMOV DS, AX

2、MOV BX, OFFSET BLOCKMOV AL, NUMBER; 取 16进制数字AND AL, 0FHXLAT; 查表取得对应的七段码MOV RESULT, AL; 保存MOV AX, 4C00HINT 21HCSEG ENDSEND START3.2试编程序,统计由 52600H开始的100个单元中所存放的字符“ A “的个数,并将结果 存放在 DX 中。解:CSEG SEGMENTASSUME CS: CSEGSTART :MOV AX, 5260HMOV DS, AXMOV BX, 0MOV AL, AMOV CX,100MOV DX,0AGA:CMP AL,BXJNZ LPIN

3、C DXLP: INC BXLOOP AGA MOV AX, 4C00HINT 21HCSEG ENDSEND START3.3在当前数据段(DS),偏移地址为 GRADE 同学某门考试成绩。按要求编写程序: 试编写程序统计90分;80分89分; 各为多少,并将结果放在同一数据段、偏移地址为 试编写程序,求该班这门课的平均成绩为多少, 解:开始的连续 80 个单元中,存放着某班80 个70分79分;60分69分,V 60分的人数LEVEL 开始的连续单元中。 并放在该数据段的AVER 单元中。DATASEGMENTGRADEDB80DUP(?);运行前置入具体数据LEVELDB0;大于 90L

4、EVEL1DB0;80分 89分LEVEL2DB0;70分 79分LEVEL3DB0;60分 69分LEVEL4DB0V 60分AVERDB?DATAENDSCODESEGMENTASSUME CS: CODE, DS: DATASTART:MOV AX, DATAMOV DS, AXLEA SI, GRADEMOV DX,0MOV CX, 80AGAIN: MOV AL, SICMP AL, 59;分段测试JAL1L0:INC LEVEL4JMPNEXTL1:CMP AL, 69JAL2INCLEVEL3JMPNEXTL2:CMP AL, 79JAL3INCLEVEL2JMPNEXTL3:C

5、MP AL, 89JAL4INCLEVEL1JMPNEXTL4: INC LEVELNEXT:ADD SI, 1ADD DL,AL;求累加和ADCDH,0LOOPAGAINMOVAX,DXMOVBL,80DIVBLMOVAVER,ALEXIT: MOV AX, 4C00HINT21HCODE ENDSEND START试编写程序将数3.4 在以字节变量 ARRAY 为首地址的内存区域存储了一组带符号的数据, 据组的所有正数相加,并将和送入SUM 字单元。解:DATA SEGMENTARRAY DB 12,-67,44,67,-35,66,55,-98,87,-87,33,83COUNT EQU

6、 $-ARRAYSUM DW ? ;SUM 存放累加和DATA ENDSCODE SEGMENTASSUME DS: DATA, CS: CODESTART: MOV AX, DATAMOV DS, AXMOV BX, 0 ;BX 是数组元素在数组内的位移 ,初值 0MOV CX, COUNTMOV DX, 0ONE: MOV AL,ARRAYBXCMP AL,0JLE NEXTCBWADD DX,AX ;NEXT: INC BXLOOP ONE MOV SUM, DXMOV AX, 4C00H INT 21HCODE ENDSEND START;装载循环计数器的初始值;累加器 AX 清零;修

7、改 BX 的值 ,为下一次操作做准备 ;计数循环 ;保存结果(累加和)XX 单元开始的3.5 若某班有 50 名学生,考汇编语言课程,且所有考生的成绩都已存放自 内存区中,试编写一程序找出最高分和最低分。解: DATA SEGMENTXX DB50 DUP(?);运行前置入具体数据COUNTEQU $-XXMINDB ?MAX DB ?DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATASTART:MOV AX, DATAMOV DS, AXMOV MIN, 100MOV MAX, 0LEA SI, XXMOV CX, COUNTAGAIN: MOV A

8、L, SICMP AL, MINJAE SKIP1MOV MIN, ALSKIP1: CMP AL, MAXJBE SKIP2MOV MAX, ALSKIP2: INC SILOOP AGAINEXIT: MOV AX, 4C00HINT 21HCODE ENDS;假设最小的数;假设最大的数;比预设最小值还小,保留;比预设最大值还大,保留END START3.6 在首地址为 ARRAY 为首地址的内存区域里,存放了一组带符号的数据,试编写程序分 别统计零、正数和负数的个数,统计结果分别存放在ZZ、XX、YY 中。解:DATA SEGMENTARRAY DB56,-42,66,87,0,88,-

9、88,68,0,-67,58,97,-66,86,77;运行前置入具体数据COUNT EQU$-ARRAYXXDB0; 正数的个数YYDB0;0的个数ZZDB0;负数的个数DATAENDSCODESEGMENTASSUME CS: CODE, DS: DATASTART:MOV AX, DATAMOV DS, AXLEASI, ARRAYMOV CX, COUNTAGAIN:MOV AL, SICMP AL, 0;分段测试JGEL1L0:INCZZJMPNEXTL1:JGL2INCYYJMPNEXTL2:INC XXNEXT:ADD SI, 1LOOPAGAINEXIT:MOV AX, 4C0

10、0HINT21HCODE ENDSEND START3.7设有一个管理软件可接受十个键盘命令(分别是A、B、C,,J),执行这十个命令的程序入口地址分别是 PROCA、PROCB、PROCC,,PROCJ。编写一程序从键盘上接 收命令,并转去执行相应的程序。要求分别用以下两种方式来实现:( 1)用比较转移指令( 2)用地址表法解:( 1)DATA SEGMENTPROMPTDB0DH, 0AH, INPUT A CHAR (AJ): $MSGADB0DH, 0AH, FUNCTION A EXECUTED. $MSGBDB0DH, 0AH, FUNCTION B EXECUTED. $MSGC

11、DB0DH, 0AH, FUNCTION C EXECUTED. $MSGDDB0DH, 0AH, FUNCTION D EXECUTED. $MSGEDB0DH, 0AH, FUNCTION E EXECUTED. $MSGFDB0DH, 0AH, FUNCTION F EXECUTED. $MSGGDB0DH, 0AH, FUNCTION G EXECUTED. $MSGHDB0DH, 0AH, FUNCTION H EXECUTED. $MSGIDB0DH, 0AH, FUNCTION I EXECUTED .$MSGJDB 0DH, 0AH, FUNCTION J EXECUTED .

12、 $DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATASTART: MOV AX, DATAMOV DS, AXINPUT: LEA DX, PROMPTMOV AH, 9INT 21H;输出提示信息MOV AH, 1INT 21H;输入一个数字.* 开始测试条件*CMP AL, A JB INPUT JE FA CMP AL, B JE FB CMP AL, C JE FC CMP AL, D JE FD CMP AL, E JE FE CMP AL, F JE FF CMP AL, G JE FG CMP AL, H JE FH CMP AL, I

13、 JE FI CMP AL, J JE FJ不在AJ内重新输入;字符 A, 转 FA;字符 B, 转 FB; 字符 C, 转 FC;字符 D, 转 FD;字符 E, 转 FE; 字符 F, 转 FF;字符 G, 转 FG;字符 H, 转 FH;字符 I, 转 FI;字符J,转FJJMP INPUT大于J,重新输入.*J各分支语句序列 *FA:CALLPROCA;调用 PROCA 程序块JMPEXIT;每个分支结束,都要用 JMP 指令跳转到所有分支结束的地方FB:CALLPROCB;调用 PROCB 程序块JMPEXITFC:CALLPROCC;调用 PROCC 程序块JMPEXITFD:CA

14、LLPROCD;调用 PROCD 程序块JMPEXITFE:CALL PROCE ;调用 PROCE 程序块 JMP EXITFF:CALL PROCF ;调用 PROCF 程序块JMP EXITFG:CALL PROCG ;调用 PROCG 程序块JMP EXITFH:CALL PROCH ;调用 PROCH 程序块JMP EXITFI:CALL PROCI ;调用 PROCI 程序块JMP EXITFJ:CALL PROCJ ;调用 PROCJ 程序块JMP EXIT;最后一个分支结束, JMP 可以省略EXIT:MOV AX, 4C00HINT 21HPROCAPROCLEADX, MS

15、GAMOV AH, 9INT21HRETPROCAENDPPROCBPROCLEADX, MSGBMOV AH, 9INT21HRETPROCBENDPPROCCPROCLEADX, MSGCMOV AH, 9INT21HRETPROCCENDPPROCDPROCLEADX, MSGDMOV AH, 9INT21HRETPROCDENDPPROCE PROCLEA DX, MSGE MOV AH, 9INT 21HRETPROCE ENDPPROCF PROCLEA DX, MSGF MOV AH, 9INT 21HRETPROCF ENDPPROCG PROCLEA DX, MSGG MOV

16、 AH, 9INT 21HRETPROCG ENDPPROCH PROCLEA DX, MSGH MOV AH, 9INT 21HRETPROCH ENDPPROCI PROCLEA DX, MSGI MOV AH, 9INT 21HRETPROCI ENDPPROCJ PROCLEA DX, MSGJ MOV AH, 9INT 21HRETPROCJ ENDPCODE ENDSEND START(2)DATA SEGMENTPROMPTDB0DH, 0AH, INPUT A CHAR (AJ): $MSGADB0DH, 0AH, FUNCTION A EXECUTED. $MSGBDB0DH

17、, 0AH, FUNCTION B EXECUTED. $MSGCDB0DH, 0AH, FUNCTION C EXECUTED. $MSGDDB0DH, 0AH, FUNCTION D EXECUTED. $MSGEDB0DH, 0AH, FUNCTION E EXECUTED. $MSGFDB0DH, 0AH, FUNCTION F EXECUTED. $MSGGDB0DH, 0AH, FUNCTION G EXECUTED. $MSGHDB0DH, 0AH, FUNCTION H EXECUTED. $MSGIDB0DH, 0AH, FUNCTION I EXECUTED .$MSGJD

18、B0DH, 0AH, FUNCTION J EXECUTED .$ADDTBL DWFA,FB,FC,FD,FE,FF,FG,FH,FI,FJ;DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATASTART: MOV AX, DATAMOV DS, AXINPUT: LEA DX, PROMPTMOV AH, 9INT 21H;输出提示信息MOV AH, 1INT 21H;输入一个数字CMP AL, AJB INPUT不在AJ内重新输入CMP AL, JJA INPUT;不在 AJ 内 ,重新输入SUB AL,A将数字字符“ T到“ 3”转换为0,1,2

19、SHL AL, 1;转换为 0, 2,4MOV BL, ALMOV BH, 0;转入 BXJMP ADDTBLBX;间接寻址,转移到对应程序块.*J 各分支语句序列 *FA:LEADX, MSGA;FA 程序块JMPOUTPUT ;每个分支结束,都要用FB:LEADX, MSGB ;FB 程序块JMPOUTPUTFC:LEADX, MSGC ;FC 程序块JMPOUTPUTFD:LEADX, MSGD ;FD 程序块JMPOUTPUTJMP 指令跳转到所有分支结束的地方FE:LEAJMPDX, MSGEOUTPUT;FE 程序块FF:LEADX, MSGF ;FF 程序块JMPOUTPUTFG

20、:LEADX, MSGG;FG 程序块JMPOUTPUTFH:LEADX, MSGH;FH 程序块JMPOUTPUTFI:LEADX, MSGI ;FI程序块JMPOUTPUTFJ:LEADX, MSGJ ;FJ 程序块JMPOUTPUT;最后一个分支结束,OUTPUT:MOV AH, 9INT21HJMP 可以省略MOV AX, 4C00HINT 21HCODE ENDSEND START3.8 设在寄存器 AX,BX,CX 中存放的是 16 位无符号数,试编写程序段,找出三个数值居 中的一个,并将其存入 BUFF 字单元中。解:DATA SEGMENTBUFF DW 0DATA ENDSC

21、ODE SEGMENTASSUME CS: CODE, DS: DATASTART:MOV AX, DATAMOV DS, AXMOV AX,5MOV BX,3MOV CX,6CMP AX,BXJAL1JZL2L0:CMPAX,CX ;AXBXJAEL4;AXCXL2:CMPBX,CXJBEL5JMPL6L1:CMPBX,CXJAEL5;BXCMPAX,CXJAL6L4:MOVBUFF,AXJMPDONEL5:MOVBUFF,BXJMPDONEL6:MOVBUFF,CXDONE: MOV AX, 4C00HINT 21HCODE ENDSEND START3.9编写确定一个十进制数 x(2w

22、xw 200)是否是素数(质数)的程序。解:DATA SEGMENTx DB 12;x(2w xw200)FLAGDB 0;X 是素数, FLAG=1, 否则 FLAG=0DATA ENDSCODE SEGMENTASSUME DS: DATA, CS: CODESTART: MOV AX, DATAMOV DS, AXMOV BL,2MOV BH,XSHR BH,1 ;计算测试范围MOV FLAG,1 ;先假设 x 为素数NEXT: MOV AL,XMOV AH,0DIV BLCMP AH,0 ;余数为 0,说明不是素数,退出JZ NOINC BLCMP BL,BHJZ EXIT ;到测试边

23、界,退出JMP NEXTNO: MOV FLAG,0EXIT: MOV AX, 4C00HINT 21HCODE ENDSEND START3.10 在以 BLOCK 为首地址的数据区域按着从小到大的顺序存放了一个年级( 180人)学生 的汇编语言成绩表。试编写程序将分数 82插入到该数组合适的位置。解:DATA SEGMENTBLOCK DB 1,3,5,7,9,12,15,25,35,36,37,40,42,46,5学7 生; 的成绩表,可根据实际填写 ST DB 39 ;另外一个学生的成绩DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATASTAR

24、T:MOV AX, DATAMOV DS, AXLEA SI, BLOCK+14 ;取成绩表中最后一个学生成绩的偏移地址给SIMOV CX, 15MOV AL, STCMPBLK: CMP AL, SI ;要插入的学生成绩比成绩表中的成绩小,则转CHANGEJB CHANGEMOV SI+1,AL ;插入该学生成绩JMP DONECHANGE: MOV BL,SI;把表中成绩后移MOV SI+1,BLDEC SILOOP CMPBLKDONE: MOV AX, 4C00HINT 21HCODE ENDSEND START3.11 已知数组 A 中包含 15 个互不相等的整数,数据 B 中包含

25、20 个互不相等的整数,试编 写一程序,将即在 A 数组中出现又在 B 数组中出现的整数存放于数组 C 中。解:DATA SEGMENTA DB 1,3,5,7,9,12,15,25,35,36,37,40,42,46,57B DB 3,5,9,12,25,36,37,42,57,58,60,4,8,11,17,29,33,44,55,66C DB 20 DUP (0)DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATASTART:MOV AX, DATAMOV DS, AXMOV ES, AXLEA SI, ALEA BX, CMOV CX, 15CL

26、DCMPAB:LODSB;从数组 A 中取出一个数LEA DI, BPUSH CXMOV CX, 20REPNZ SCASB ;与数组 B 中的元素比较JNZ LOP ;数据不同,比较下一个数MOV BX,AL ;数据相同,则保存在数组 C 中INC BXLOP: POP CXLOOP CMPABEXIT: MOV AX, 4C00HINT 21HCODE ENDSEND START3.12 在某子程序的开始处要保护标志寄存器Flags、AX 、BX 、CX、DX 寄存器的内容,在子程序结束时要恢复它们的内容。例如:PUSHFPUSHAXPUSHBXPUSHCXPUSHDX;恢复现场试写出恢复

27、现场时的指令序列。 解:POP DXPOP CXPOP BXPOP AXPOPF3.13 什么叫主程序与子程序之间传递参数?实现参数传递一般有哪几种方法?每种方法的 适用场合?解:3.14 简述嵌套调用和递归调用的不同。解:3.15 在以 BLOCK 为首地址处存放 100个无符号字节数。试编写一程序,求出该数组中的最 大数与最小数的差,并将其送入 RESULT 单元,要求调用子程序来完成对最大数和最 小数的求解。解:DATA SEGMENTBLOCK DB 56,42,66,87,88,88,68,67,58,97,66,86,77COUNT EQU $-XX RESULT DB 0DATA

28、 ENDSCODE SEGMENTASSUME CS: CODE, DS: DATASTART:MOV AX, DATAMOV DS, AXMOV MIN, 100;假设最小的数MOV MAX, 0;假设最大的数LEA SI, BLOCKMOV CX, COUNTCALL MAXMINSUB AH,ALMOV RESULT,AHEXIT:MOV AX, 4C00HINT 21HMAXMIN PROCMOV AH,0;存放大数MOV AL,255;存放小数AGAIN: MOV DL,SICMP AL,DLJBE SKIP1MOV AL,DL;比预设最小值还小,保留SKIP1:CMP AH,DLJAE SKIP2MOV AH,DL;比预设最大值还大,保留SKIP2: INC SILOOP AGAINRETMAXMIN ENDPCODEENDSEND START3.16 某年级参加英语 4 级考试的有 250 名学生,试编写一程序完成 60-69,70-79,80-89,90-100 四个分数段的统计工作,要求用子程序完成每个分数段的统计

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论