1、微机原理与接口技术实验报告微机原理与接口技术实验报告 班级:电信学院自动化74 姓名: 学号: 日期:2009.12.13第一题:试编制一个程序,用乘法指令实现32位二进制数与16位二进制数的相乘。算法分析:由于8086的寄存器只能存放16位数字,所以需要将32位的数字分成2个16位的数字,然后分别相乘,最后将对应位放入相应的寄存器。实验流程图为实验源程序为:DATAS SEGMENT M1 DW 0FFFFH M2 DW 0FFFFH N DW 2H SUM DW 3 DUP(0)DATAS ENDSSTACKS SEGMENT DW 256 DUP(?)STACKS ENDSCODES S
2、EGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX MOV AX,M1 MOV BX,N MUL BX ;与32位数的低16位相乘 MOV SUM2,DX MOV SUM4,AX MOV AX,M2 MUL BX ;与32位数的高16位相乘 CLC ADD SUM2,AX ADC SUM,DX MOV AH,4CH INT 21HCODES ENDS END START程序调试过程;调试环境为emu8086根据程序的运行进行单步分析,可以得出每条指令语句在寄存器和内存中的执行情况。16位数与32位数的低1
3、6位相乘图示为16位数与32位数的高16位相乘图示为最后对数据进行分配 ,按位组合为此时即实现了2个数的相乘,结果存放在相应的寄存器中。该程序主要是对寄存器的实验进行合理的分配,熟悉乘法运算指令及其结果。第二题:试编制程序,计算出从2开始的前10个质数.算法原理:已知2为第一个质数,然后被除数从2依次递增,除数从2递增,将被除数依次除以比它自己小的数字,然后将余数与0比较,若等于0,则其不是质数,若被除数递增至本身,则该数位质数。算法流程图为源程序代码为:DATA SEGMENT VAR DW 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
4、,21,22,23,24,25,26,27,28,29,30 RESULT DW 10 DUP(?) M DW 2DATA ENDSSTACK SEGMENT DW 256 DUP(?) TOP LABEL WORDSTACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV SP,OFFSET TOP CALL QIUSHU MOV AH,4CH INT 21HQIUSHU PROC NEAR PUSH AX PUSH BX PUSH
5、CX PUSH DX MOV BX,4 MOV RESULT,2 MOV SI,0AGAIN1:MOV DX,M MOV AX,VAR+BX AGAIN2:MOV AX,VAR+BX CMP DX,VAR+BX-2 JG NEXT2 DIV DL CMP AH,0 JNE NEXT1 INC BX INC BX JMP AGAIN1 NEXT1:INC DX JMP AGAIN2 NEXT2: INC SI INC SI CMP SI,18 JG DONE MOV DI,VAR+BX MOV RESULT+SI,DI INC BX INC BX JMP AGAIN1 POP DX POP CX
6、 POP DI POP AX DONE: RETQIUSHU ENDP CODE ENDS END START程序运行结果为:在程序单步调试过程中可以读取当前寄存器和内存的占用情况和所存的数据,最后得出前十个质数分别为第三题:编写一个通用多字节数相加的宏定义,并调用它实现多字节数的加法,注意观察汇编时宏调用被展开的情况算法分析:首先定义一个宏 ,实现某项功能,然后在主程序中调用该宏,即可在单步调试过程中观察到该宏的调用及展开过程。程序源代码为:DADD MACRO C,M1,M2 MOV SI,OFFSET M1 MOV DI,OFFSET M2 CLC AGAIN:MOV AL,SI ADC
7、 DI,AL INC SI INC DI DEC C JNZ AGAINENDMDATA SEGMENT VAR1 DB 1,2,3,4 VAR2 DB 1,2,3,4DATA ENDSSTACK SEGMENT DW 256 DUP(?) TOP LABEL WORDSTACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV SP,OFFSET TOP MOV CX,4 DADD CX,VAR1,VAR2 MOV AH,4CH INT
8、 21HCODE ENDSEND START程序运行结果为:此时实现宏的调用:第四题:编写程序:屏幕显示“Password:”,随后从键盘读入字符串,并比较这个字符串与程序内部设定的字符串。若二者相同则显示“Hello!”,否则显示“Sorry!”,注意:要求键盘输入字符不能直接回显在显示器上,而要用*号代替算法分析:首先编写一段程序,用来读取和记录从键盘输入的字符串,现实在屏幕上用*代替,然后再输入一串字符,与记录的字符串进行逐个比较,输出结果。程序流程图为:程序源代码为:DATA SEGMENT PASSW DB PASSWORD:,0DH,0AH,$ DAT1 DB 1234 DAT2
9、DB 10 DUP(0) STR1 DB HELLO!,0DH,0AH,$ STR2 DB SORRY!,0DH,0AH,$ DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX XOR AX,AX MOV DI,OFFSET DAT2 MOV SI,OFFSET DAT1 LEA DX,PASSW MOV SI,0 MOV AH,09H INT 21HINPUT:MOV AH,07H INT 21H CMP AL,0DH JZ CHECK PUSH AX MOV DL,* MOV AH,02H INT
10、21H POP AX MOV DAT2+SI,AL INC SI JMP INPUTCHECK:CMP SI,4 JNE SORRYAGAIN:DEC SI MOV BL,DAT1+SI MOV AL,DAT2+SI CMP BL,AL JE AGAIN INC SI CMP SI,0 JNE SORRY HELLO:LEA DX,STR1 MOV AH,09H INT 21H JMP DONE SORRY: LEA DX,STR2 MOV AH,09H INT 21HDONE: MOV AH,4CH INT 21HCODE ENDSEND START程序运行结果为:第五题:编写一个汇编语言程
11、序,实现N!(N大于等于0)N!=N*(N-1)*(N-2).*1算法分析:该题适合用递归子程序的方法来实现,调用若干次递归函数,直到N=1,即可得出结果。程序流图为:源程序文件为:DATA SEGMENTVAL_N DW ?RESULT DW ?DATA ENDSSTACK SEGMENTTOP LABEL WORD DW 128 DUP(0)STACK ENDSCODE1 SEGMENTMAIN PROC FAR ASSUME CS:CODE1,DS:DATA,SS:STACKSTART: MOV AX,STACK MOV SS,AX MOV SP,OFFSET TOP PUSH DS S
12、UB AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOV BX,OFFSET RESULT PUSH BX MOV BX,VAL_N PUSH BX CALL FAR PTR FACT RETMAIN ENDPCODE1 ENDSCODE SEGMENTFRAME STRUCT SAVE_BP DW ? SAVE_CS_IP DW 2 DUP(?) N DW 3 RESULT_ADDR DW ?FRAME ENDS FACT PROC FAR PUSH BP MOV BP,SP PUSH BX PUSH AX MOV BX,BP.RESULT_ADDR MOV AX
13、,BP.N CMP AX,0 JE DONE PUSH BX DEC AX PUSH AX CALL FAR PTR FACT MOV BX,BP.RESULT_ADDR MOV AX,BX MUL BP.N JMP SHORT RETURNDONE: MOV AX,1RETURN: MOV BX,AX POP AX POP BX POP BP RET 4FACT ENDPCODE ENDS END START程序运行结果为:然后可以计算N的阶乘。实验总结:汇编语言作为一种以处理器指令系统为基础的低级程序设计语言,可以直接有效的控制计算机硬件。汇编语言主要是在处理器的寄存器内实现逻辑与算术运算
14、,指令较为复杂,语句繁琐。此次的程序设计主要是熟悉汇编的语法,语义及编程规则,题目不太复杂,涉及到了宏指令,伪指令,循环语句,递归调用等。程序的执行过程中,可以实行单步调试过程,清晰的观察和分析寄存器,内存中地址和数据的变化,所产生的一些错误主要是由于定义的时候不规范产生的。程序的执行结果之类的跟事先的流程图所显示的基本一样。此次试验对于我们熟悉汇编语句,语法,和编程软件及调试过程都有很大帮助。对于汇编语言,还是应该熟悉底层硬件结构,然后再实验中不断提高。出师表两汉:诸葛亮先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。然侍卫之臣不懈于内,忠志之士忘身于外者,盖追先帝之殊遇,
15、欲报之于陛下也。诚宜开张圣听,以光先帝遗德,恢弘志士之气,不宜妄自菲薄,引喻失义,以塞忠谏之路也。宫中府中,俱为一体;陟罚臧否,不宜异同。若有作奸犯科及为忠善者,宜付有司论其刑赏,以昭陛下平明之理;不宜偏私,使内外异法也。侍中、侍郎郭攸之、费祎、董允等,此皆良实,志虑忠纯,是以先帝简拔以遗陛下:愚以为宫中之事,事无大小,悉以咨之,然后施行,必能裨补阙漏,有所广益。将军向宠,性行淑均,晓畅军事,试用于昔日,先帝称之曰“能”,是以众议举宠为督:愚以为营中之事,悉以咨之,必能使行阵和睦,优劣得所。 亲贤臣,远小人,此先汉所以兴隆也;亲小人,远贤臣,此后汉所以倾颓也。先帝在时,每与臣论此事,未尝不叹息
16、痛恨于桓、灵也。侍中、尚书、长史、参军,此悉贞良死节之臣,愿陛下亲之、信之,则汉室之隆,可计日而待也。臣本布衣,躬耕于南阳,苟全性命于乱世,不求闻达于诸侯。先帝不以臣卑鄙,猥自枉屈,三顾臣于草庐之中,咨臣以当世之事,由是感激,遂许先帝以驱驰。后值倾覆,受任于败军之际,奉命于危难之间,尔来二十有一年矣。先帝知臣谨慎,故临崩寄臣以大事也。受命以来,夙夜忧叹,恐托付不效,以伤先帝之明;故五月渡泸,深入不毛。今南方已定,兵甲已足,当奖率三军,北定中原,庶竭驽钝,攘除奸凶,兴复汉室,还于旧都。此臣所以报先帝而忠陛下之职分也。至于斟酌损益,进尽忠言,则攸之、祎、允之任也。愿陛下托臣以讨贼兴复之效,不效,则治臣之罪,以告先帝之灵。若无兴德之言,则责攸之、祎、允等之慢,以彰其咎;陛下亦宜自谋,以咨诹善道,察纳雅言,深追先帝遗诏。臣不胜受恩感激。今当远离,临表涕零,不知所言。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1