微机原理软件实验_第1页
微机原理软件实验_第2页
微机原理软件实验_第3页
微机原理软件实验_第4页
微机原理软件实验_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

微机原理实验报告专业:工业工程姓名:刘雷学号:089094082指导老师:陈全

目录软件实验一汇编语言程序的调试与运行 3一.实验目的 3二.实验内容 3三.程序框图 3四.程序清单 4五.调试步骤 6六.思考题 6软件实验二分支程序设计 14一.实验目的 14二.实验内容与要求 14三.程序框图 15四.程序清单: 16五.思考题 17软件实验三循环程序设计 18一.实验目的 18二.实验内容与要求 18三.程序框图 19四.程序清单〔将程序补充完整〕 20软件实验四子程序结构 22一.实验目的 22二.实验内容与要求 22三.程序框图: 23四.局部程序清单 23五.步骤 25六.思考题 25

软件实验一汇编语言程序的调试与运行一.实验目的1.学习数据传送和算术运算指令的用法2.熟悉在PC机上编辑、汇编、连接、调试和运行汇编语言程序的过程。二.实验内容将两个多位十进制数相加,要求被加数和加数均以ASCII码形式各自顺序存放在DATA1和DATA2为首的5个内存单元中,结果送回DATA1处。三.程序框图图1.1两个多位十进制相加程序流程图四.程序清单 DISP MACROX MOV DL,X;要显示的字符送DL存放器 MOV AH,02H;DOS功能调用号是02H INT 21H;21H中断程序是DOS功能调用 ENDM DATA SEGMENT DATA1 DB'12732' DATA2 DB'06815' N EQU$-DATA2 DATA ENDS STACK SEGMENTSTACK STA DB20DUP(?) TOP EQU$-STA STACK ENDS CODE SEGMENT ASSUMECS:CODE,DS:DATA,SS:STACK,ES:DATA START:MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP,AX LEA SI,DATA1 ;☆ MOV BX,0 MOV CX,N CALL DISPL ;显示被加数 DISP '+' LEA SI,DATA2 MOV BX,0 MOV CX,N CALL DISPL ;显示加数 DISP '=' LEA DI,DATA1 MOV CX,N CALL ADDA ;调用加法子程序 LEA SI,DATA1 MOV BX,0 MOV CX,N CALL DISPL ;显示运算结果 DISP 0DH DISP 0AH MOV AX,4C00H INT 21H DISPL PROC ;显示子程序 DS1: MOV AH,02H MOV DL,[SI+BX] INT 21H INC BX LOOP DS1 RET DISPL ENDP ADDA PROC ;加法子程序 PUSH CX MOV BX,0 AD1:SUB BYTEPTR[SI+BX],30H SUB BYTEPTR[DI+BX],30H INC BX LOOP AD1 POP CX PUSH CX MOV BX,N-1 ;☆☆ CLC AD2: MOV AL,[SI+BX] ADC AL,[DI+BX] AAA MOV [DI+BX],AL DEC BX LOOP AD2 POP CX PUSH CX MOV BX,0 ;☆☆☆ AD3:ADD BYTEPTR[DI+BX],30H INC BX LOOP AD3 POP CX RET ;☆☆☆☆ ADDA ENDP CODE ENDS END START五.调试步骤1.编辑源程序,建立一个以后缀为.ASM的文件.2.汇编源程序,检查程序有否错误,有错时回到编辑状态,修改程序中错误行。无错时继续第3步。连接目标程序,产生可执行程序。TDEBUG调试可执行程序,记录数据段DS:0~DS:10的内容。进入TDEBUG程序后。执行程序至星号处DS:0H~DS:0AH的内容☆(CS:000FH)31323733323036383135☆☆(CS:0076H)01020703020006080105☆☆☆(CS:0086H)01090504070006080105☆☆☆☆(CS:0090H)31393534370006080105在操作系统状态下,运行程序,并记录屏幕显示内容。被加数加数屏幕显示内容127320681519547107324369154423650871763182718六.思考题5位数相加,结果为6位数的加法程序。(需考虑进位)新的程序清单:DISP MACROX MOV DL,X;要显示的字符送DL存放器 MOV AH,02H;DOS功能调用号是02H INT 21H;21H中断程序是DOS功能调用 ENDM DATA SEGMENT DATA1 DB'82732';修改后的5位数,相加为6位数! DATA2 DB'36815' N EQU$-DATA2 DATA ENDS STACK SEGMENTSTACK STA DB20DUP(?) TOP EQU$-STA STACK ENDS CODE SEGMENT ASSUMECS:CODE,DS:DATA,SS:STACK,ES:DATA START:MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP,AX LEA SI,DATA1 ;☆ MOV BX,0 MOV CX,N CALL DISPL ;显示被加数 DISP '+' LEA SI,DATA2 MOV BX,0 MOV CX,N CALL DISPL ;显示加数 DISP '=' LEA DI,DATA1 MOV CX,N CALL ADDA ;调用加法子程序 LEA SI,DATA1 MOV BX,0 MOV CX,N CALL DISPL ;显示运算结果 DISP 0DH DISP 0AH MOV AX,4C00H INT 21H DISPL PROC ;显示子程序 DS1: MOV AH,02H MOV DL,[SI+BX] INT 21H INC BX LOOP DS1 RET DISPL ENDP ADDA PROC ;加法子程序 PUSH CX MOV BX,0 AD1:SUB BYTEPTR[SI+BX],30H SUB BYTEPTR[DI+BX],30H INC BX LOOP AD1 POP CX PUSH CX MOV BX,N-1 ;☆☆ CLC AD2: MOV AL,[SI+BX] ADC AL,[DI+BX] AAA MOV [DI+BX],AL DEC BX LOOP AD2 POP CX PUSH CX MOV BX,0 ;☆☆☆ AD3:ADD BYTEPTR[DI+BX],30H INC BX LOOP AD3 POP CX RET ;☆☆☆☆ ADDA ENDP CODE ENDS END START2.简单表达上机步骤,调试方法。上机步骤及调试①编写代码完成功能要求,文件格式为.asm文件〔如文件名为a.asm〕,将文件放入带汇编工具的文件夹中,即含有汇编工具〔MASM.EXE〕和链接工具〔LINK.EXE〕的文件夹。②翻开运行窗口,输入“cmd〞然后确定。启动命令行,进入上述文件夹回车后链接最后输入:a.exe回车后运行结果如图1如果程序有错误,编译时会产生错误提示,指出错误的位置和错误类型及错误码,改正错误后再重新编译链接,直到没有错误和编译链接成功。③启动TD并载入add.exe,在代码段可以看到程序指令,局部符号已被实际地址或数值替换表示。④查看数据区的数值:右击选择数据区的菜单中的Goto,在其输入框内输入要查看的数据区地址,如cs:000FH,如图2和图3;回车确认后即可查看数据区从段地址为CS、偏移地址为000FH开始的存储情况EQ\o\ac(○,5)设置断点选中“cs:000FH〞段,然后运行菜单栏“Breakpoints〞,在该处设置断点!断点设置完成后再运行程序.EQ\o\ac(○,6)查看DS同样用Goto找到想要查看的DS,EQ\o\ac(○,7)记录DS[注意]将源代码局部直接拷贝到文本文件中,再将其扩展名改为.asm。使用个人主页中的汇编语言编译器(TASM.EXE或MASM.EXE之一均可),将1中的源文件编译成扩展名为.obj的目标文件;再将其链接成为可执行文件(使用TLINK.EXE文件或LINK.EXE文件之一均可);例如:假设源文件名为temp.asm。TDEBUG程序可在个人主页中下载;直接双击运行;程序清单的开始定义了一段宏,作用是显示X字符;宏的作用相当于一个函数,可以在后续的程序中直接调用 DISP0DH和DISP0AH是显示换行回车符

软件实验二分支程序设计一.实验目的掌握分支结构程序的编制方法。二.实验内容与要求编制程序实现如下操作:设有10个学生成绩,分别统计低于60分、60~69分、70~79分、80~89分、90~99分及100分的人数,并存放于S5、S6、S7、S8、S9、S10单元中。

三.程序框图开始开始初始化计数单元初始化计数单元初始化循环计数值初始化循环计数值初始化首地址初始化首地址取一个成绩取一个成绩<60?<60?N<70?0?<70?0?S6+1NY<80?0?<80?0?<90?0<90?0?Y<100?0?<100?0?NS9+1YS10+1修改地址N循环结束?结束结束图1.2统计学生成绩程序流程图四.程序清单: ; 统计学生成绩 DATA SEGMENT GRADEDW95H,60H,75H,92H,71H,86H,54H,89H,83H,76H NEQU($—GRADE)/2 ORG30H S5 DW0 S6 DW0 S7 DW0 S8 DW0 S9 DW0 S10 DW0 DATA` ENDS ; STACK SEGMENTSTACK STA DB20DUP(0)TOPEQU$—STA STACKENDS ; CODE SEGMENT MAIN PROCFAR ASSUMECS:CODE,DS:DATA,SS:STACK START:PUSHDS SUBAX,AXPUSHAX MOVAX,DATA MOVDS,AX MOVCX,N LEABX,GRADE;成绩表首地址 COMPARE: MOVAX,[BX] CMPAX,60H;<60? JLFIVE CMPAX,70H ;<70? JLSIX CMPAX,80H ;<80? JLSEVEN CMPAX,90H ;<90? JLEIGHT CMPAX,100H ;=100 JNENINE INCS10 JMPCHA NINE:INCS9 JMPCHA EIGHT:INCS8 JMPCHA SEVEN: INCS7 JMPCHA SIX: INCS6 JMPCHA FIVE: INCS5 JMPCHA CHA: ADDBX,2 ;循环学生人数 LOOPCOMPARE RET MAIN ENDP CODE ENDS ENDSTART 执行程序后,将结果分别填入以下表中N(总人数)S5S6S7S8S9S1010113320五.思考题计算出各等级成绩百分比。分别填入下面表的A、B、C、D、E、中增加统计平均成绩一项。平均成绩EDCBA10%10%30%30%20%

软件实验三循环程序设计一.实验目的掌握循环程序设计的方法〔两重性循环结构〕掌握正确分配与使用存放器。二.实验内容与要求以GRADE为首地址的10个字的数组中保存有学生成绩。建立一个10个字的RNAK数组,并根据GRADE中的学生成绩将学生名次填入RANK数组中〔提示:一个学生的名次等于成绩高于等于该学生的人数加1〕。存放器分配情况说明如下:AX存放当前被测学生的成绩BX存放当前被测学生的相对地址指针CX内循环计数值DX存放当前被测学生的名次计数值SI内循环测试时的地址指针DI外循环计数值三.程序框图图1.3程序框图四.程序清单〔将程序补充完整〕 建立学生成绩名次表修改正的程序如下:DISP MACROX MOV DX,X;要显示的字符送DL存放器 MOV AH,02H;DOS功能调用号是02H INT 21H;21H中断程序是DOS功能调用 ENDM DATASEGMENT GRADE DW88H,75H,95H,63H,98H,78H,87H,73H,90H,60H COUNT EQU($-GRADE)/2 RANK DW10DUP(?) DATA ENDS STACK SEGMENTSTACK STADB20DUP(20H) TOP EQU$-STA STACK ENDS CODE SEGMENT ASSUMECS:CODE,DS:DATA,SS:STACK START: MOVAX,DATA MOVDS,AX MOVAX,STACK MOVSS,AX MOVSP,TOP MOVDI,0;成绩的个数 MOVBX,0 LOOP1: MOVAX,GRADE[BX] MOVCX,COUNT LEASI,GRADE;成绩的存放地址NEXT: CMPAX,[SI] JNANO_COUNT INCWORDPTRRANK[BX];存放学生名次 NO_COUNT:ADDSI,2 JMPNEXT ADDBX,2 DECDI JMPLOOP1DISPRANKMOVAX,4C00H INT21H CODE ENDS ENDSTART软件实验四子程序结构一.实验目的1.掌握程序设计方法,合理划分层次2.掌握子程序的调用与返回的方法3.了解子程序的嵌套与递归二.实验内容与要求编制一程序,要求键入一个班的学生成绩,并存放于50字的ERADE数组中,然后根据ERADE中的成绩,把学生名次填入50字的RANK数组中,再按学号顺序把名次从终端上显示出来。提示:程序MAIN功能:根据输入的学生成绩,计算并显示出学生名次。程序INPUT功能:接收一个班级学生的成绩,各成绩之间用空格隔开。程序RANKP功能:计算一个班级学生的名次。(可参照循环程序(一)中的程序段)程序OUTPUT功能:输出〔显示〕一个班级的学生名次程序DECIBIN功能:十进制转换二进制,存入BX程序BINDEC功能:十进制转换二进制,并在屏幕上显示。程序DEC_DIV功能:BX的内容除以CX的内容,并在屏幕上显示一位商。三.程序框图:图1.4程序流程图四.局部程序清单1.键入学生成绩(成绩之间用空格间隔,回车结束输入)INPUT PROC MOV SI,0 MOV COUNT,0ENTER:CALL DECIBIN INC COUNTCMP DL,‘89JZ STORECMP DL,0DHJZ EXITJMP RET1STORE:MOV GRADE[SI],BXADD SI,2 JMP ENTEREXIT:MOV GRADE[SI],BXRET1: RETINPUT ENDP2.十进制转换成二进制DECIBIN PROCMOV BX,0NEM: MOV AH,1INT 21HMOV DL,ALCMP AL,30HJL EXIT1CMP AL,39HJG EXITSUB AL,30HCBWXCHG AX,BXMOV CX,10MUL CLXCHG AX,BXADD BX,AXJMP NEWEXIT1:RETDECIBIN ENDP3.二进制转换成十进制BINIDECPROCPUSH BXPUSH CXPUSH SIPUSH DIMOV CX,100CALL DEC_DIVMOV CX,10CALL DEC_DIVMOV CX,1CALL DEC_DIVPOP DI POP SIPOP CXPOP BXRETBINIDEC ENDP4.十进制转换成ASCII码,并输出DEC_DIV PROCMOV AX,BXMOV DX,0DIV CXMOV BX,DXMOV DL,ALADD DL,30HMOV AH,02HINT 21HRETDEC_DIV ENDP五.步骤1.自编程序 主程序MAIN,子程序OUTPUT和子程序RANKP。2.将上述程序与自编程序统调。3.输入本班级某门根底课成绩。六.思考题写出4位BCD码转二进制数的算法。写出AX中进二制数转BCD码的算法。将上述子程序结构改为模块化程序设计。程序代码:DATASEGMENTGRADEDW50DUP(?)RANKDW50DUP(?)COUNTDW?MESS1DB'Pleaseenterstudentsgrade:$'MESS2DB0DH,0AH,'Youinputnon-digits...',0DH,0AH,0DH,0AH,'$'MESS3DB'Rank:$'DATAENDSPROGNAMSEGMENTMAINPROCFARASSUMECS:PROGNAM,DS:DATA;,ss:stack_segSTART:PUSHDSSUBAX,AXPUSHAXMOVAX,DATAMOVDS,AXCALLINPUT;CMPSI,0;JEEXITCALLRANKPCALLOUTPUTEXIT:RETMAINENDP;入口:无;出口:COUNT=存入输入成绩个数,GRADE=存储成绩表;功能:GRADE首地址处开始存储每科成绩,数据类型为字,COUNT为输入成绩个数,提示输入与出错信息INPUTPROCNEARPUSHAXPUSHBXPUSHCXPUSHDXPUSHSILEADX,MESS1MOVAH,09INT21HCALLCRLFMOVSI,0MOVCOUNT,0BEGIN:CALLDECIBININCCOUNTCMPDL,''JESTORECMPDL,0DHJEEXIT2JMPERRORSTORE:MOVGRADE[SI],BXADDSI,2JMPBEGINERROR:LEADX,MESS2MOVAH,09INT21HCALLINPUTEXIT2:MOVGRADE[SI],BXCALLCRLF;调用CRLF,回车换行POPSIPOPDXPOPCXPOPBXPOPAXRETINPUTENDP;功能:计算一个班级学生的名次RANKPPROCNEARMOVDI,COUNT;grade数组元素个数,外循环次数MOVBX,0;grade数组元素下标L1:MOVAX,GRADE[BX];取grade数组内一个元素MOVWORDPTRRANK[BX],1;将该学生名次初始化1MOVCX,COUNT;内循环次数MOVSI,0NEXT:PUSHDICMPAX,GRADE[SI]JGENO_COUNTMOVDI,-2IF_SAME:ADDDI,2;成绩相同不重复计数MOVDX,GRADE[DI]CMPDX,GRADE[SI]JNZIF_SAMECMPDI,SIJNZNO_COUNTINCWORDPTRRANK[BX]NO_COUNT:POPDIADDSI,2LOOPNEXTADDBX,2;执行grade数组下一元素DECDI;外循环计数减一JNEL1RETRANKPENDP;功能:输出〔显示〕一个班级的学生名次OUTPUTPROCNEARLEADX,MESS3MOVAH,09INT21HCALLCRLFMOVSI,0MOVDI,COUNTNEXT4:MOVBX,RANK[SI]CALLBINIDECMOVDL,''MOVAH,02INT21HADDSI,2DECDIJNZNEXT4CALLCRLFRETOUTPUTENDP;入口:无;出口:BX=存输入十进制转换二进制的结果,DL=十进制数最后一个字符,为非数字字符;功能:输入十进制数,遇非数字字符结束输入,最大输入十进制数65535DECIBINPROCNEARPUSHAXPUSHCXMOVBX,0NEWCHAR:MOVAH,1INT

温馨提示

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

评论

0/150

提交评论