微机原理实验指导书(2012).doc_第1页
微机原理实验指导书(2012).doc_第2页
微机原理实验指导书(2012).doc_第3页
微机原理实验指导书(2012).doc_第4页
微机原理实验指导书(2012).doc_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

昆明理工大学 微机原理及程序设计实验指导书鄢大鹏 付丽霞 编 昆明理工大学信息工程与自动化学院自动化系2007年5月汇编语言的建立和执行要建立和执行汇编语言程序,系统盘上应该首先有如下文件:EDIT.COM 编辑程序ASM.EXE 汇编程序(或MASM.EXE) 宏汇编程序LINK.EXE 链接程序DEBUG.COM 调试程序其中ASM.EXE是普通汇编程序,它不支持宏汇编,如果要用宏汇编,则必须用MASM.EXE。下面,以建立和执行用户程序NEW.EXE为例来说明上机过程。1 用EDIT命令建立汇编语言源程序(ASM文件)源程序就是用汇编语言编写的程序,它不能被机器识别。源程序必须以ASM为附加文件名。例如键入命令:C: EDIT NEW.ASM (如果是建立新程序就不跟文件名)2 用ASM(或MASM)命令产生目标文件(OBJ文件)源程序建立以后,就可以用汇编程序ASM.EXE(或MASM.EXE)进行汇编。所谓汇编,实际上就是把以ASM为附加文件名的源文件转换成用二进制代码表示的目标文件,目标文件以OBJ为附加名。汇编过程中,汇编程序对源文件进行二次扫描,如果源程序中与语法错误,则汇编过程结束后,汇编程序会指出源程序中的错误,这时,用户可以再用编辑程序来修改源程序中的错误,最后,得到没有语法错误的OBJ文件。例如,对NEW.ASM的汇编过程如下:C: MASM NEW.ASM此时,汇编程序给出如下回答:Object filename EX MOVS.OBJ:Source listing NUL.LST: NEWCross reference NUL.CRF:NEW如果被汇编的程序没有语法错误,则屏幕上还会给出如下信息:Warning SeversErrors Errors0 0 汇编程序的输出文件有三个,第一个是目标文件,它以OBJ为扩展名,产生OBJ文件是我们进行汇编操作的主要目的,所以这个文件是一定要产生的,操作时,这一步只要回车就行了;第二个是列表文件,它以LST为扩展名,如不需要,键入回车即可,如需要,则键入文件名然后回车;第三个是交叉符号表,同表文件一样一般只需键入回车。3 用LINK命令产生执行文件(EXE文件)汇编过程根据源程序产生出二进制的目标文件,但OBJ文件用的是浮动地址,它不能直接上机执行。所以还必须使用链接程序(LINK)将OBJ文件转换成可执行的EXE文件。例如:C: LINK NEW4 程序的执行有了EXE文件后,就可以执行程序了,此时,只要键入文件名即可。例如:C: NEW 此时屏幕上就会显示用户所编写程序的运行结果了。实验一 两个多位十进制数相加的实验一、 实验目的1、学习数据传送和算术运算指令的用法。2、熟悉在PC机上建立、汇编、链接、调试和运行8088汇编语言程序的过程。二、 实验内容将两个多位十进制数相加。要求被加数均以ASCII码形式各自顺序存放在以DATA1和DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。三、 程序框图 显示被加数和加数被加数和加数以ASCII码表示的数字串形式转化为由十六进制表示的数字串形式 计数值5CX 清除最低位进位 执行ADC带进位相加 AAA调整 结果送被加数区 调整偏移量 N CX1=0? Y 十六进制的结果转化为ASCII码表示的数字串 显示结果结束四、 程序清单CRLF MACRO MOV DL,0DH MOV AH,02H INT 21H MOV DL,0AH MOV AH,02H INT 21H ENDM DATA SEGMENT DATA1 DB 33H,39H,31H,37H,34H DATA2 DB 36H,35H,30H,38H,32H DATA ENDS STACK SEGMENT STA DB 20 DUP(?) TOP EQU LENGTH STA STACK ENDS CODE SEGMENT ASSUME CS: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 MOV SI,OFFSET DATA2 MOV BX,05 CALL DISPL CRLF MOV SI,OFFSET DATA1 MOV BX,05 CALL DISPL CRLF MOV DI,OFFSET DATA2 CALL ADDA MOV SI,OFFSET DATA1 MOV BX,05 CALL DISPL CRLF MOV AX,4C00H INT 21H DISPL PROC NEAR DS1: MOV AH,02 MOV DL,SI+BX-1 INT 21H DEC BX JNZ DS1 RET DISPL ENDP ADDA PROC NEAR MOV DX,SI MOV BP,DI MOV BX,05 AD1: SUB BYTE PTR SI+BX-1,30H SUB BYTE PTR DI+BX-1,30H DEC BX JNZ AD1 MOV SI,DX MOV DI,BP MOV CX,05 CLC AD2: MOV AL,SI MOV BL,DI ADC AL,BL AAA MOV SI,AL INC SI INC DI LOOP AD2 MOV SI,DX MOV DI,BP MOV BX,05 AD3: ADD BYTE PTR SI+BX-1,30H ADD BYTE PTR DI+BX-1,30H DEC BX JNZ AD3 RET ADDA ENDP CODE ENDS END START五、 实验要求1 读懂源程序,写出源程序注释。2 把源程序修改为任意两个六位十进制相加。并思考如果最高位有进位怎么办?实验二 两个数相乘的实验一、 实验目的掌握乘法指令和循环指令的用法。二、 实验内容实现十进制数的乘法。被乘数和乘数均以ASCII码形式存放在内存中,乘积在屏幕上显示出来。三、 程序框图 乘数BL BL中数由ASCII码转化为十六进制 SI指向被乘数 计数值5CX取被乘数SI单元与BL相乘 AAM调整 结果低位与前次计算的进位DI相加 AAA调整 结果DIDI+1指向下一单元本次计算的进位DI N CX1=0? Y 显示结果 结束 四、 程序清单DATASEGMENTDATA1DB32H,39H,30H,35H,34HDATA2DB33HRESULTDB6DUP(00H)DATAENDSSTACKSEGMENTSTADB20DUP(?)TOPEQULENGTH STASTACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK,ES:DATASTART:MOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXMOVAX,TOPMOVSP,AXMOVSI,OFFSETDATA2MOVBL,SIANDBL,00001111BMOVSI,OFFSETDATA1MOVDI,OFFESTRESULTMOVCX,05LOOP1:MOVAL,SIANDAL,00001111BINCSIMULBLAAMADDAL,DIAAAMOVDI,ALINCDIMOVDI,AHLOOPLOOP1MOVCX,06MOVSI,OFFSETRESULTDISPL:MOVAH,02MOVDL,SI+5ADDDL,30HINT21HDECSILOOPDISPLMOVAX,4C00HINT21HCODEENDSENDSTART五、 实验要求1读懂程序,写出程序注释。2修改程序,实现6位数乘2位数的功能。实验三 BCD码相乘的实验一、实验目的掌握用组合的BCD码表示数据,并熟悉怎样实现组合BCD码乘法运算。二、实验内容实现BCD码的乘法,要求被乘数和乘数均以组合的BCD码形式存放,各占一个内存单元,乘积存放在另外两个内存单元中。由于没有组合BCD码乘法指令,所以程序中采用将乘数1作为计数器,累加另一个乘数的方法得到计算结果。三、程序框图显示乘数1和乘数2乘数1计数器BL中 部分积DX清0 Y BL=0? N进位位清0 显示结果乘数2与部分积低位相加 结束 DAA调整 结果DL部分积高位进行进位位调整DAA调整结果DH计数器BL的值减1DAS调整,并将结果送BL四、程序清单DISPL MACRO ADD DL,30H MOV AH,02 INT 21HENDM CRLF MACRO MOV DL,0DH MOV AH,02 INT 21H MOV DL,0AH MOV AH,02 INT 21H ENDM DATA SEGMENT DATA1 DB 01001000B DATA2 DB 01110101B RESULT DW ?DATA ENDSSTACK SEGMENT STACKSTA DB 20 DUP(?)TOP EQU LENGTH STA STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATASTART: MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP,AX MOV DI,OFFSET RESULT MOV SI,OFFSET DATA1 MOV AH,SI MOV CL,04 SHR AH,CL MOV DL,AH DISPL MOV AL,SI MOV BL,AL AND AL,00001111B MOV DL,AL DISPL CRLF MOV SI,OFFSET DATA2 MOV AH,SI MOV CL,04 SHR AH,CL MOV DL,AH DISPL MOV AL,SI AND AL,00001111B MOV DL,AL DISPL CRLF XOR DX,DXS1: CMP BL,0 JZ S2 CLC MOV AL,SI ADC AL,DL DAA MOV DL,AL MOV AL,00H ADC AL,DH DAA MOV DH,AL MOV AL,BL DEC AL DAS MOV BL,AL JMP S1S2: MOV RESULT,DX MOV SI,DX MOV CL,4 SHR DH,CL MOV DL,DH DISPL MOV DX,SI AND DH,00001111B MOV DL,DH DISPL MOV DX,SI MOV CL,4 SHR DL,CL DISPL MOV DX,SI AND DL,00001111B DISPL CRLFS3: MOV AX,4C00H INT 21HCODE ENDSEND START五、实验要求1读懂源程序,写出程序注释。2修改程序使其不显示被乘数和乘数。实验四 字符匹配程序一、实验目的掌握提示信息的使用方法及键盘输入信息的用法。二、实验内容编写程序,实现两个字符串比较。如果两个字符串中有一个字符相同,显示“MATCH”,否则,显示“NO MATCH”。三、程序框图段寄存器及堆栈初始化 显示“请输入字符串1”使用INT 21H的0A号子功能,接收键入的字符串显示“请输入字符串2”指针SI指向串1的首字符SI指向的字符串和串2中所有字符作比较 Y 相等? N SI+1,指向串1中下一字符 N 串1中的字符已取完? Y显示“NO MATCH” 显示“MATCH” 返回DOS四、程序清单CRLF MACRO MOV AH,02H MOV DL,0DH INT 21H MOV AH,02H MOV DL,0AH INT 21H ENDM DATA SEGMENTMESS1 DB MATCH,0DH,0AH,$MESS2 DB NO MATCH,0DH,0AH,$MESS3 DB INPUT STRING1:,0DH,0AH,$ MESS4 DB INPUT STRING2:,0DH,0AH,$MAXLEN1 DB 81ACTLEN1 DB ?STRING1 DB 81 DUP (?)MAXLEN2 DB 81ACTLEN2 DB ?STRING2 DB 81 DUP (?)DATA ENDSSTACK SEGMENT STACKSTA DB 50 DUP (?)TOP EQU LENGTH STASTACK ENDS CODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX,DATA MOV DS,AX MOV ES,AX MOV AX,STACK MOV SS,AX MOV SP,TOP MOV AH,09H MOV DX,OFFSET MESS3 INT 21H MOV AH,0AH MOV DX,OFFSET MAXLEN1 INT 21H CRLF MOV AH,09H MOV DX,OFFSET MESS4 INT 21H MOV AH,0AH MOV DX,OFFSET MAXLEN2 INT 21H CRLF CLD MOV SI,OFFSET STRING1 MOV CL,SI-1 MOV CH,00H KKK: MOV DI,OFFSET STRING2 PUSH CX MOV CL,DI-1 MOV CH,00H MOV AL,SI MOV DX,DI REPNZ SCASB JZ GGG INC SI POP CX LOOP KKK MOV AH,09H MOV DX,OFFSET MESS2 INT 21H JMP PPP GGG: MOV AH,09H MOV DX,OFFSET MESS1 INT 21HPPP: MOV AX,4C00H INT 21HCODE ENDSEND START五、实验要求1读懂源程序,写出程序注释。2修改源程序,使其实现,当两个字符串中所有字符都匹配(注意字符串的长度和顺序)时才显示“MATCH”,否则显示“NO MATCH”。实验五 排序实验一、实验目的掌握用汇编语言编写排序程序的思路和方法。二、实验内容从首地址为1000H开始存放50个数,要求设计程序将这些数由小到大排序,排序后的数,仍放在该区域中。三、程序框图 入口 段寄存器和堆栈初始化 显示“请输入段址” 调GETNUM,键入段址送ES显示“请输入偏移量” 调GETNUM,键入偏移量SIDS也指向附加段外循环次数SORTNUM1送CX偏移指针BX清0 A从SI+BX单元取数AL 交换单元指针AH=BL CX入栈 计算内循环次数送CX内循环控制变量DX初始化 DX值+1 比较AL与DX指示单元的值 N AL较大? Y DX指示单元的值赋给AL,并修改指针AH NCX1=0? Y 交换SI+BX单元和AH指针指示的单元的值偏移指针BX+1 CX 出栈NA CX1=0? Y显示“SORT OK!”循环调DISP1,将排序后的数依次显示出来 返回DOS四、程序清单CRLF MACRO MOV AH,02H MOV DL,0DH INT 21H MOV AH,02H MOV DL,0AH INT 21HENDMDATA SEGMENTORG 160HDATA1 DB 0ah,09h,08h,07h,06h,05h,04h,03h,02h,01hSORTNUM EQU 10 MESS1 DB INPUT SEGMENT VALUE:$ MESS2 DB INPUT OFFSET VALUE:$MESS3 DB SORT OK!,0DH,0AH,$ERROR DB INPUT ERROR!,0DH,0AH,$DATA ENDSSTACK SEGMENTSTA DW 32 DUP(?) TOP DW ? STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX,DATA MOV DS,AX MOV ES,AX MOV SP,TOP MOV AH,09H MOV DX,OFFSET MESS1 INT 21H CALL GETNUM MOV ES,DX CRLF MOV AH,09H MOV DX,OFFSET MESS2 INT 21H CALL GETNUM MOV SI,DX PUSH ES POP DS; DS= ES MOV CX,SORTNUM DEC CX XOR BX,BXIII: MOV AL,SI+BX MOV AH,BL PUSH CX MOV CX,SORTNUM SUB CX,BX DEC CX MOV DX,BX JJJ: INC DX PUSH BX MOV BX,DX CMP AL,SI+BX JBE UUU MOV AL,SI+BX MOV AH,DLUUU: POP BX LOOP JJJ MOV CL,SI+BX MOV SI+BX,AL MOV DL,AH PUSH BX MOV BX,DX MOV SI+BX,CL POP BX INC BX POP CX LOOP III PUSH DS MOV AX,DATA MOV DS,AX MOV AH,09H MOV DX,OFFSET MESS3 INT 21H POP DS MOV CX,SORTNUMVVV: MOV AL,SI CALL DISP1 CRLF INC SI LOOP VVV MOV AX,4C00H INT 21HDISP1 PROC NEAR PUSH CX MOV BL,AL MOV DL,BL MOV CL,04 ROL DL,CL AND DL,0FH CALL DISPL MOV DL,BL AND DL,0FH CALL DISPL POP CX RETDISP1 ENDPDISPL PROC NEAR ADD DL,30H CMP DL,3AH JB DDD ADD DL,27HDDD: MOV AH,02H INT 21H RET DISPL ENDP GETNUM PROC NEAR PUSH CX XOR DX,DXGGG: MOV AH,01H INT 21H CMP AL,0DH JZ PPP CMP AL,20H JZ PPP SUB AL,30H JB KKK CMP AL,0AH JB GETS CMP AL,11H JB KKK SUB AL,07H CMP AL,0FH JBE GETS CMP AL,2AH JB KKK CMP AL,2FH JA KKK SUB AL,20HGETS: MOV CL,04 SHL DX,CL XOR AH,AH ADD DX,AX JMP GGGKKK: MOV AH,09H MOV DX,OFFSET ERROR INT 21HPPP: PUSH DX CRLF POP DX POP CX RETGETNUM ENDP CODE ENDSEND START五、 实验要求1读懂程序,写出程序注释。2. 修改程序,使其实现从大到小的排序 实验六 接收年、月、日信息显示的程序一、实验目的掌握响铃符方法,并且掌握年、月、日的输入方法。二、实验内容先显示“WHAT IS THE DATA (MM/DD/YY)?”并响铃一次,然后接收键盘输入的月/日/年信息,并显示。三、程序框图入口 段寄存器和堆栈初始化 显示“WHAT IS THE DATA” 输出响铃字符 调GETNUM,接收键入的月值,日值及年值 调DISP显示年值 输出字符“” 调DISP显示月值 输出字符“”调DISP显示日值 返回DOS四、程序清单CRLFMACROMOVAH,02HMOVDL,0DHINT21HMOVAH,02HMOVDL,0AHINT21HENDMDATASEGMENTMESSDB WHAT IS THE DATA(MM/DD/YY)?,0DH,0AH,$ERRORDBINPUT ERROR!,0DH,0AH,$DATAENDSSTACKSEGMENTSTADW32 DUP(?)TOPDW?STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVES,AXMOVSP,TOPMOVAH,09HMOVDX,OFFSET MESSINT21HMOVAH,02HMOVDL,07HINT21HCALLGETNUMPUSHDXCALLGETNUMPUSHDXCALLGETNUMMOVAX,DXCALLDISPMOVAH,02HMOVDL,INT21HPOPDXPOPAXCALLDISPPMOVAH,02HMOVDL,INT21HMOVAX,DX CALLDISPP INT21HDISPPPROCNEARMOVBL,ALMOVDL,BLMOVCL,04MOVDL,CLANDDL,0FHCALLDISPLMOVDL,BL ANDDL,0FHCALLDISPLMOVDL,BLANDDL,0FHCALLDISPLRETDISPPENDPDISPLPROCNEARADDDL,30HCMPDL,3AHJBDDDADDDL,27HDDD:MOVAH,02HINT21HRETDISPLENDPDISPPROCNEARPUSHBXPUSHCXPUSHDXPUSHAXMOVAL,AHCALLDISPPPOPAXCALLDISPPPOPDXPOPCXPOPBXRETDISPENDPGETNUMPROCNEARPUSHCXXORDX,DXGGG:MOVAH,01HINT 21HCMPAL,0DHJZPPPCMPAL,20HJZPPPSUB AL,30HJBKKKCMPAL,11HJBKKKSUB AL,07HCMP AL,0FHJBEGETSJ

温馨提示

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

评论

0/150

提交评论