微机原理与接口技术实验报告.docx

上传人:b****5 文档编号:5145612 上传时间:2022-12-13 格式:DOCX 页数:20 大小:1.20MB
下载 相关 举报
微机原理与接口技术实验报告.docx_第1页
第1页 / 共20页
微机原理与接口技术实验报告.docx_第2页
第2页 / 共20页
微机原理与接口技术实验报告.docx_第3页
第3页 / 共20页
微机原理与接口技术实验报告.docx_第4页
第4页 / 共20页
微机原理与接口技术实验报告.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

微机原理与接口技术实验报告.docx

《微机原理与接口技术实验报告.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术实验报告.docx(20页珍藏版)》请在冰豆网上搜索。

微机原理与接口技术实验报告.docx

微机原理与接口技术实验报告

 

微机原理与接口技术

实验报告

 

班级:

电信学院自动化74

姓名:

学号:

日期:

2009.12.13

第一题:

试编制一个程序,用乘法指令实现32位二进制数与16位二进制数的相乘。

算法分析:

由于8086的寄存器只能存放16位数字,所以需要将32位的数字分成2个16位的数字,然后分别相乘,最后将对应位放入相应的寄存器。

实验流程图为

实验源程序为:

DATASSEGMENT

M1DW0FFFFH

M2DW0FFFFH

NDW2H

SUMDW3DUP(0)

DATASENDS

STACKSSEGMENT

DW256DUP(?

STACKSENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

MOVAX,DATAS

MOVDS,AX

MOVAX,M1

MOVBX,N

MULBX;与32位数的低16位相乘

MOVSUM[2],DX

MOVSUM[4],AX

MOVAX,M2

MULBX;与32位数的高16位相乘

CLC

ADDSUM[2],AX

ADCSUM,DX

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

程序调试过程;调试环境为emu8086

根据程序的运行进行单步分析,可以得出每条指令语句在寄存器和内存中的执行情况。

16位数与32位数的低16位相乘图示为

16位数与32位数的高16位相乘图示为

最后对数据进行分配,按位组合为

此时即实现了2个数的相乘,结果存放在相应的寄存器中。

该程序主要是对寄存器的实验进行合理的分配,熟悉乘法运算指令及其结果。

 

第二题:

试编制程序,计算出从2开始的前10个质数.

算法原理:

已知2为第一个质数,然后被除数从2依次递增,除数从2递增,将被除数依次除以比它自己小的数字,然后将余数与0比较,若等于0,则其不是质数,若被除数递增至本身,则该数位质数。

算法流程图为

源程序代码为:

DATASEGMENT

VARDW1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30

RESULTDW10DUP(?

MDW2

DATAENDS

STACKSEGMENT

DW256DUP(?

TOPLABELWORD

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

START:

MOVAX,DATA

MOVDS,AX

MOVAX,STACK

MOVSS,AX

MOVSP,OFFSETTOP

CALLQIUSHU

MOVAH,4CH

INT21H

QIUSHUPROCNEAR

PUSHAX

PUSHBX

PUSHCX

PUSHDX

MOVBX,4

MOVRESULT,2

MOVSI,0

AGAIN1:

MOVDX,[M]

MOVAX,[VAR+BX]

AGAIN2:

MOVAX,[VAR+BX]

CMPDX,[VAR+BX-2]

JGNEXT2

DIVDL

CMPAH,0

JNENEXT1

INCBX

INCBX

JMPAGAIN1

NEXT1:

INCDX

JMPAGAIN2

NEXT2:

INCSI

INCSI

CMPSI,18

JGDONE

MOVDI,[VAR+BX]

MOV[RESULT+SI],DI

INCBX

INCBX

JMPAGAIN1

POPDX

POPCX

POPDI

POPAX

DONE:

RET

QIUSHUENDP

CODEENDS

ENDSTART程序运行结果为:

在程序单步调试过程中可以读取当前寄存器和内存的占用情况和所存的数据,

最后得出前十个质数分别为

第三题:

编写一个通用多字节数相加的宏定义,并调用它实现多字节数的加法,注意观察汇编时宏调用被展开的情况

算法分析:

首先定义一个宏,实现某项功能,然后在主程序中调用该宏,即可在单步调试过程中观察到该宏的调用及展开过程。

程序源代码为:

DADDMACROC,M1,M2

MOVSI,OFFSETM1

MOVDI,OFFSETM2

CLC

AGAIN:

MOVAL,[SI]

ADC[DI],AL

INCSI

INCDI

DECC

JNZAGAIN

ENDM

DATASEGMENT

VAR1DB1,2,3,4

VAR2DB1,2,3,4

DATAENDS

STACKSEGMENT

DW256DUP(?

TOPLABELWORD

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

START:

MOVAX,DATA

MOVDS,AX

MOVAX,STACK

MOVSS,AX

MOVSP,OFFSETTOP

MOVCX,4

DADDCX,VAR1,VAR2

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

程序运行结果为:

此时实现宏的调用:

第四题:

编写程序:

屏幕显示“Password:

”,随后从键盘读入字符串,并比较这个字符串与程序内部设定的字符串。

若二者相同则显示“Hello!

”,否则显示“Sorry!

”,注意:

要求键盘输入字符不能直接回显在显示器上,而要用*号代替

算法分析:

首先编写一段程序,用来读取和记录从键盘输入的字符串,现实在屏幕上用*代替,然后再输入一串字符,与记录的字符串进行逐个比较,输出结果。

程序流程图为:

程序源代码为:

DATASEGMENT

PASSWDB'PASSWORD:

',0DH,0AH,'$'

DAT1DB'1234'

DAT2DB10DUP(0)

STR1DB'HELLO!

',0DH,0AH,'$'

STR2DB'SORRY!

',0DH,0AH,'$'

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

XORAX,AX

MOVDI,OFFSETDAT2

MOVSI,OFFSETDAT1

LEADX,PASSW

MOVSI,0

MOVAH,09H

INT21H

INPUT:

MOVAH,07H

INT21H

CMPAL,0DH

JZCHECK

PUSHAX

MOVDL,'*'

MOVAH,02H

INT21H

POPAX

MOV[DAT2+SI],AL

INCSI

JMPINPUT

CHECK:

CMPSI,4

JNESORRY

AGAIN:

DECSI

MOVBL,[DAT1+SI]

MOVAL,[DAT2+SI]

CMPBL,AL

JEAGAIN

INCSI

CMPSI,0

JNESORRY

HELLO:

LEADX,STR1

MOVAH,09H

INT21H

JMPDONE

SORRY:

LEADX,STR2

MOVAH,09H

INT21H

DONE:

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

程序运行结果为:

 

第五题:

编写一个汇编语言程序,实现N!

(N大于等于0)

N!

=N*(N-1)*(N-2)……….*1

算法分析:

该题适合用递归子程序的方法来实现,调用若干次递归函数,直到N=1,即可得出结果。

程序流图为:

源程序文件为:

DATASEGMENT

VAL_NDW?

RESULTDW?

DATAENDS

STACKSEGMENT

TOPLABELWORD

DW128DUP(0)

STACKENDS

CODE1SEGMENT

MAINPROCFAR

ASSUMECS:

CODE1,DS:

DATA,SS:

STACK

START:

MOVAX,STACK

MOVSS,AX

MOVSP,OFFSETTOP

PUSHDS

SUBAX,AX

PUSHAX

MOVAX,DATA

MOVDS,AX

MOVBX,OFFSETRESULT

PUSHBX

MOVBX,VAL_N

PUSHBX

CALLFARPTRFACT

RET

MAINENDP

CODE1ENDS

CODESEGMENT

FRAMESTRUCT

SAVE_BPDW?

SAVE_CS_IPDW2DUP(?

NDW3

RESULT_ADDRDW?

FRAMEENDS

FACTPROCFAR

PUSHBP

MOVBP,SP

PUSHBX

PUSHAX

MOVBX,[BP].RESULT_ADDR

MOVAX,[BP].N

CMPAX,0

JEDONE

PUSHBX

DECAX

PUSHAX

CALLFARPTRFACT

MOVBX,[BP].RESULT_ADDR

MOVAX,[BX]

MUL[BP].N

JMPSHORTRETURN

DONE:

MOVAX,1

RETURN:

MOV[BX],AX

POPAX

POPBX

POPBP

RET4

FACTENDP

CODEENDS

ENDSTART

程序运行结果为:

然后可以计算N的阶乘。

实验总结:

汇编语言作为一种以处理器指令系统为基础的低级程序设计语言,可以直接有效的控制计算机硬件。

汇编语言主要是在处理器的寄存器内实现逻辑与算术运算,指令较为复杂,语句繁琐。

此次的程序设计主要是熟悉汇编的语法,语义及编程规则,题目不太复杂,涉及到了宏指令,伪指令,循环语句,递归调用等。

程序的执行过程中,可以实行单步调试过程,清晰的观察和分析寄存器,内存中地址和数据的变化,所产生的一些错误主要是由于定义的时候不规范产生的。

程序的执行结果之类的跟事先的流程图所显示的基本一样。

此次试验对于我们熟悉汇编语句,语法,和编程软件及调试过程都有很大帮助。

对于汇编语言,还是应该熟悉底层硬件结构,然后再实验中不断提高。

出师表

两汉:

诸葛亮

  先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。

然侍卫之臣不懈于内,忠志之士忘身于外者,盖追先帝之殊遇,欲报之于陛下也。

诚宜开张圣听,以光先帝遗德,恢弘志士之气,不宜妄自菲薄,引喻失义,以塞忠谏之路也。

  宫中府中,俱为一体;陟罚臧否,不宜异同。

若有作奸犯科及为忠善者,宜付有司论其刑赏,以昭陛下平明之理;不宜偏私,使内外异法也。

  侍中、侍郎郭攸之、费祎、董允等,此皆良实,志虑忠纯,是以先帝简拔以遗陛下:

愚以为宫中之事,事无大小,悉以咨之,然后施行,必能裨补阙漏,有所广益。

  将军向宠,性行淑均,晓畅军事,试用于昔日,先帝称之曰“能”,是以众议举宠为督:

愚以为营中之事,悉以咨之,必能使行阵和睦,优劣得所。

  亲贤臣,远小人,此先汉所以兴隆也;亲小人,远贤臣,此后汉所以倾颓也。

先帝在时,每与臣论此事,未尝不叹息痛恨于桓、灵也。

侍中、尚书、长史、参军,此悉贞良死节之臣,愿陛下亲之、信之,则汉室之隆,可计日而待也

  臣本布衣,躬耕于南阳,苟全性命于乱世,不求闻达于诸侯。

先帝不以臣卑鄙,猥自枉屈,三顾臣于草庐之中,咨臣以当世之事,由是感激,遂许先帝以驱驰。

后值倾覆,受任于败军之际,奉命于危难之间,尔来二十有一年矣。

  先帝知臣谨慎,故临崩寄臣以大事也。

受命以来,夙夜忧叹,恐托付不效,以伤先帝之明;故五月渡泸,深入不毛。

今南方已定,兵甲已足,当奖率三军,北定中原,庶竭驽钝,攘除奸凶,兴复汉室,还于旧都。

此臣所以报先帝而忠陛下之职分也。

至于斟酌损益,进尽忠言,则攸之、祎、允之任也。

  愿陛下托臣以讨贼兴复之效,不效,则治臣之罪,以告先帝之灵。

若无兴德之言,则责攸之、祎、允等之慢,以彰其咎;陛下亦宜自谋,以咨诹善道,察纳雅言,深追先帝遗诏。

臣不胜受恩感激。

  今当远离,临表涕零,不知所言。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1