微机原理程序设计.doc_第1页
微机原理程序设计.doc_第2页
微机原理程序设计.doc_第3页
微机原理程序设计.doc_第4页
微机原理程序设计.doc_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

微机原理程序设计XX理工大学微机原理程序设计-实验一实验要求:试编写一个程序,要求比较数组ARRAY中的三个16位补码数,并根据比较结果在显示终端上显示如下信息:(1)如果三个数都不相等则显示0;(2)如果三个数有两个相等则显示1;(3)如果三个数都相等则显示2。程序流程图:程序清单:DATASEGMENTARRAYDW1,2,3DATAENDSCODESEGMENTASSUMECS:CODE, DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAX,ARRAYMOVBX,ARRAY+2MOVCX,ARRAY+4CMPAX,BXJELCMPBX,CXJEL1 CMP AX,CX JE L1MOVDL,30HJMPEXITL:CMPBX,CXJNEL1MOVDL,32HJMPEXITL1:MOVDL,31HEXIT:MOVAH,2INT21HMOVAH,4CHINT21HCODEENDSENDSTART运行结果:ARRAY中三个数互不不相等:ARRAY中三个数有两个相等:ARRAY中三个数都相等:实验二实验要求:从键盘输入一系列字符(以回车符结束),并按字母、数字及其它字符分类计数,最后显示出这三类计数结果。程序流程图:程序清单:DATA SEGMENT COUNT_OF_LETTER DB the number of letter is :,$ COUNT_OF_NUMBER DB the number of number is :,$ COUNT_OF_CHARACTER DB the number of charater is :,$DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: PUSH DS SUB AX,AX PUSH AX MOVAX,DATA MOV DS,AX MOV BH,0 MOV BL,0 MOV CL,0 NEXT: MOV AH,1 INT 21H CMP AL,0DH JE EXIT CMP AL,30H JB COUT_OF_CHARATER_ADD CMP AL,39H JBECOUT_OF_NUMBER_ADD CMPAL,41H JBCOUT_OF_CHARATER_ADD CMPAL,5AH JBECOUNT_OF_LETTER_ADD CMPAL,61H JBCOUT_OF_CHARATER_ADD CMPAL,7AH JBECOUNT_OF_LETTER_ADDCOUT_OF_CHARATER_ADD: INCCL JMPNEXTCOUT_OF_NUMBER_ADD: INCBL JMPNEXTCOUNT_OF_LETTER_ADD: INCBH JMPNEXTEXIT: CALLCRLF LEADX,COUNT_OF_LETTER MOVAH,09 INT21H MOVAL,BH CALLBIN_DEC CALL CRLF LEADX,COUNT_OF_NUMBER MOVAH,09 INT21H MOVAL,BL CALL BIN_DEC CALL CRLF LEADX,COUNT_OF_CHARACTER MOVAH,09 INT21H MOVAL,CL CALL BIN_DEC CALL CRLF RETCRLF PROC NEAR MOVAH,02 MOVDL,0DH INT21H MOVAH,02 MOVDL,0AH INT21H RETCRLF ENDPBIN_DEC PROC NEAR PUSHBX PUSH CX ANDAX,00FFH MOVCX,0 MOVBX,0 MOVDL,10ROTATE: DIVDL MOVBL,AH ANDAX,00FFH PUSH BX INCCX CMPAX,10 JAEROTATE MOVBX,AX PUSH BX INCCXCONTINUE: POPBX ADDBL,30H MOVDL,BL MOVAH,02H INT21H LOOP CONTINUE POP CX POP BX RETBIN_DEC ENDPCODE ENDSEND START运行结果:实验三实验要求:假设已编制好五个歌曲程序,它们的段地址和偏移地址存放在数据段的跳转表SONGLIST 中。试编一程序,根据从键盘输入的歌曲编号1 5 ,转去执行五个歌曲程序中的一个。程序流程图:程序清单:DATA SEGMENT SONGLIST DW MUSIC1,MUSIC2,MUSIC3,MUSIC4,MUSIC5 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AXREADLIST:MOV AH,1 INT 21H SUB AL, 0 CMP AL,0JE EXITCMP AL,5JA READLISTDEC ALMOV BX,0 MOV BL,AL ADD BX,BX JMP SONGLISTBX JMP READLISTMUSIC1:MOV DL, 1 MOV AH,2 INT 21H JMP EXIT MUSIC2:MOV DL, 2 MOV AH,2 INT 21H JMP EXIT MUSIC3:MOV DL, 3 MOV AH,2 INT 21H JMP EXIT MUSIC4:MOV DL, 4 MOV AH,2 INT 21H JMP EXIT MUSIC5:MOV DL, 5 MOV AH,2 INT 21H JMP EXIT EXIT: MOV AX,4C00H INT 21H CODE ENDS END START运行结果:实验四实验要求:试编写一个程序,从键盘接收一个个位数N,然后响铃N次。(响铃的ASCII码为07H)。程序流程图:程序清单:DATA SEGMENT TIP DB PLEASE INPUT A NUMBER:,$DATA ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATASTART: MOV AX,DATA MOV DS,AX LEA DX,TIP MOV AH,09H INT 21H MOV AH,01H INT 21H AND AX,01H MOV CX,AX BE:MOV DL,07H MOV AH,02H INT 21H LOOP BECODES ENDS END START运行结果:输入数字后听到对应次数的响铃实验五实验要求:从键盘输入一系列以 $ 为结束符的字符串,然后对其中的非数字字符计数,并显示计数结果。程序流程图:程序清单:DATA SEGMENTS1 DB 0DH,0AH,PLEASE INPUT : $S2 DB 0DH,0AH,TOTAL NON_DIGITAL ARE: $NUM DB 0DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: PUSHDS MOVAX,0 PUSHAX MOVAX,DATA MOVDS,AX LEADX,S1 MOVAH,9 INT21HNEXT:MOVAH,01INT21HCMPAL,$JE DOWNCMPAL,0JBNO09CMPAL,9JA NO09JMP NEXTNO09:INCNUM JMPNEXTDOWN: LEADX,S2MOVAH,9 INT21HMOVAL,NUMMOVAH,0MOVDL,100DIVDLCALLDISP_P MOVAL,AHMOVAH,0MOVDL,10 DIVDLCALLDISP_P XCHGAH,ALCALLDISP_PRETDISP_P PROC NEARPUSH AXMOV DL,ALADDDL,30HMOVAH,2INT21HPOPAXRETDISP_PENDPCODE ENDSEND START运行结果:实验六实验要求:试编制一个程序, 把AX中存放的16进制数转换为ASCII码,并将对应的ASCII码依次存放在MEM数组中的四个字节中。例如:当(AX)= 2A49H时,程序执行完后,MEM中的四个字节的内容为39H,34H,41H,32H。程序流程图:程序清单:DATA SEGMENTMEM DB4 DUP (?)NDW2A49HDATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATASTART: PUSHDS SUB AX, AXPUSHAXMOV AX, DATAMOV DS, AX BEGIN: MOV CH, 4 MOV CL, 4MOV AX, NLEA BX, MEMROTATE: MOV DL, AL AND DL, 0FHADD DL, 30HCMPDL, 3AH JLNEXTADD DL, 07H NEXT: MOV BX, DL INCBXRORAX, CL DEC CHJNZROTATERETCODE ENDS END START运行结果:实验七实验要求:设有十个学生的成绩分别是76,69,84,90,73,88,99,63,100,80分,试编制一个子程序统计60 69分,70 79分,80 89分,90 99分和100分的人数,分别存放在S6,S7,S8,S9和S10单元中。程序流程图:程序清单:DATA SEGMENT RESULT DB 0DH,0AH,THE RESULT $GRADE DW 76,69,84,90,73,88,99,63,100,80S6 DB 0 S7 DB0 S8 DB0 S9 DB 0 S10 DB0 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:PUSH DS SUB AX,AX PUSH AX MOV AX,DATAMOV DS,AX MOV CX,10CALLCOUNT CALL DISP MOV AH,1 INT 21H RET COUNT PROC NEAR MOV SI,0 NEXT:MOV AX,GRADESI MOV BL,10 DIV BL MOVBL,AL MOV BH,0 SUB BX,6 CMPBX,0 JAE NEXT1 NEXT1: INC S6BX ADD SI,2 LOOP NEXT RET COUNT ENDP DISP PROC NEAR LEA SI,S6 MOV CX,5 LOOP1:MOV DX,OFFSET RESULTMOV AH,9INT 21H MOVDL,SI ADD DL,30H MOV AH,2 INT 21H INC SI LOOP LOOP1 RET DISP ENDP MOV AH,4CH INT 21HCODE ENDS END START运行结果:实验八实验要求:编写一个子程序嵌套的程序模块,分别从键盘输入姓名和电话号码(8位),并以一定的格式显示出来。主程序 TELLIST: 显示提示符 INPUT NAME:; 调用子程序 INPUT_NAME 输入姓名; 显示提示符 INPUT A TELEPHONE NUMBER:; 调用子程序 INPUT_PHONE 输入电话号码; 调用子程序 PRINT 显示姓名和电话号码。子程序 INPUT_NAME: 调用键盘输入子程序 GET_CHAR,把输入的姓名存放在 IN_BUFFER缓冲区中; 把IN_BUFFER缓冲区中的姓名移入输出行 OUT_NAME。子程序 INPUT_PHONE: 调用键盘输入子程序 GET_CHAR,把输入的电话号码存放在 IN_BUFFER缓冲区中; 把IN_BUFFER缓冲区中的电话号码移入输出行 OUT_PHONE。子程序 PRINT: 显示姓名及电话号码,格式为: NAME TELPHONE 子程序 CET_CHAR:从键盘输入以回车符结尾的字符串。程序流程图:程序清单:DATA SEGMENT NO_OF_NAME DB20 NO_OF_PHONE DB 8 INBUF DB 20 DUP(?) OUTNAME DB 20 DUP(?),$ OUTPHONE DB 8 DUP(?),$ MESSAGE1 DB PLEASE INPUT NAME:,$ MESSAGE2 DB PLEASE INPUT A TELEPHONE NUMBER:,$ MESSAGE3 DB NAME,16 DUP(20H),TEL.,13,10,$ ERRORMESSAGE1DB YOU SHOULD INPUT 8 NUMBERS!,13,10,$ ERRORMESSAGE2 DB YOU INPUT A WRONG NUMBER!,13,10,$ FLAG DB ?DATAENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: PUSH DS SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOVFLAG,0 LEADX,MESSAGE1 MOVAH,09 INT21H CALL INPUT_NAME CALL CRLF LEADX,MESSAGE2 MOVAH,09 INT 21H CALL INPHONE CALL CRLF CMPFLAG,1 JEEXIT CALL PRINTLINEEXIT: RETINPUT_NAME PROC NEAR PUSH AX PUSH DX PUSH CX MOV CX,0 MOVCL,NO_OF_NAME CALL GETCHAR MOVAX,0 MOVAL,NO_OF_NAME SUBAX,CX MOVCX,AX MOV SI,0NEXT1: MOVAL,INBUFSI MOVOUTNAMESI,AL INCSI LOOP NEXT1 POPCX POPDX POPAX RETINPUT_NAME ENDPINPHONE PROC NEAR PUSHAX PUSH DX MOVCX,0 MOVCL,NO_OF_PHONE CALLGETCHAR CMPCX,0 JNZERROR1 MOVCL,NO_OF_PHONE MOVSI,0 NEXT2: MOVAL,INBUFSI CMPAL,30H JLERROR2 CMPAL,39H JAERROR2 MOVOUTPHONESI,AL INCSI LOOP NEXT2 JMPEXIT2ERROR1: CALL CRLF LEADX,ERRORMESSAGE1 MOVAH,09 INT21H MOVFLAG,1 JMPEXIT2ERROR2: CALL CRLF LEADX,ERRORMESSAGE2 MOVAH,09 INT21H MOVFLAG,1 JMPEXIT2EXIT2: POPDX POPAX RETINPHONE ENDPGETCHAR PROC NEAR PUSH AX PUSH DX MOV DI,0ROTATE: MOV AH,01 INT 21H CMP AL,0DH JE EXIT1 MOVINBUFDI,AL INCDI LOOP ROTATEEXIT1: POP DX POP AX RETGETCHAR ENDPCRLF PROC NEAR PUSH AX PUSHDX MOVDL,0DH MOVAH,2 INT21H MOVDL,0AH MOVAH,2 INT21H POPDX POPAX RETCRLF ENDPPRINTLINE PROC NEAR PUSHAX PUSH DX LEADX,MESSAGE3 MOVAH,09 INT21H LEADX,OUTNAME MOVAH,09 INT21H LEADX,OUTPHONE MOVAH,09 INT21H POPDX POPAX RETPRINTLINE ENDPCODE ENDSENDSTART运行结果:实验九实验要求:从键盘输入一个不大于65535 的无符号数,然后把它转换成等值的二进制数,最后把该数以十六进制数的形式在显示器上显示出来。编程实现。(将有独立功能的程序用子程序独立出来)程序流程图:程序清单:DATA SEGMENTBUF1 DB 20 DB ? DB 20 DUP(?)BUF2 DB 20 DB ? DB 20 DUP(?)INPUT DB INPUT:$OUTPUT DB OUTPUT:$CTRL DB 0DH,0AH,$SHI DW 0AH IINT DW0DATA ENDSSTACK SEGMENT DB 200 DUP(0)STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK

温馨提示

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

评论

0/150

提交评论