微机原理课程设报告.docx

上传人:b****3 文档编号:3697104 上传时间:2022-11-24 格式:DOCX 页数:18 大小:151.64KB
下载 相关 举报
微机原理课程设报告.docx_第1页
第1页 / 共18页
微机原理课程设报告.docx_第2页
第2页 / 共18页
微机原理课程设报告.docx_第3页
第3页 / 共18页
微机原理课程设报告.docx_第4页
第4页 / 共18页
微机原理课程设报告.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

微机原理课程设报告.docx

《微机原理课程设报告.docx》由会员分享,可在线阅读,更多相关《微机原理课程设报告.docx(18页珍藏版)》请在冰豆网上搜索。

微机原理课程设报告.docx

微机原理课程设报告

微机原理课程设计

设计报告

 

一、设计目的

1、对微机原理课程中所学的理论知识进行进一步巩固和加深。

2、学会查阅相关手册与资料,培养独立分析与解决问题的能力。

3、学会使用屏幕编辑程序—MASM对汇编程序的编写,调试和运行。

4、了解对系统中DOS和BIOS的使用,弄懂汇编程序的上机过程以及如何运用DEBUG软件进行汇编程序的调试。

 

二、设计内容

本次为期一周的课程设计,主要编写调试了5个程序,题目如下:

1、字符串匹配设计

为掌握提示信息的设置方法及读取键入信息的方法。

编写程序实现两个字符串比较。

相同,则显示“MATCH”,否则,则显示“NOMATCH”。

2、从键盘上输出数据并显示

为掌握接收键盘数据的方法,并了解将键盘数据显示时须转换为ASCII码的原理。

编写程序,将键盘接收到的四位十六进制数据转换为等值的二进制数,再显示在终端上。

3、字符和数据的显示设计

为掌握字符和数据的显示方法,编写程序,先显示信息:

INPUTSTRING,THEENDFLAGIS$,再接收字符。

如为0-9,则计数器加1,并显示数据;如为非数字,则直接显示,但不计数

4、学生成绩名次表设计

为进一步熟悉排序方法。

编写程序,将0-100之间的30个成绩存入首址为1000H的存储区中。

1000H+i表示学号为i的学生成绩。

编写程序使得在2000H开始的区域排除名次表。

2000H+i为学号i的学生的名次。

 

三、具体设计

程序设计一:

字符串匹配设计

为掌握提示信息的设置方法及读取键入信息的方法。

编写程序实现两个字符串比较。

如相同,则显示“MATCH”,否则,则显示“NOMATCH”。

流程图

 

 

程序

datasegment

dat1db'inputstring1:

','$';$保持当前地址

dat2db'inputstring2:

','$'

dat3db'MATCH!

',0ah,0dh,'$';0DH为回车ASCII码,0AH为换行ASCII码

dat4db'NOTMATCH!

',0ah,0dh,'$'

string1db50;最长长度

db?

;实际长度

db50dup(?

);存储空间

string2db50

db?

db50dup(?

dataends

codesegment

assumecs:

code,ds:

data,es:

data

start:

movax,data;数据段设置

movds,ax

moves,ax

movah,09h;字符串显示,显示dat1,显示DS:

DX

movdx,offsetdat1

int21h

movah,0ah;字符串缓冲输入,接收输入字符串

movdx,offsetstring1

int21h

MOVDL,0AH;输出换行

MOVAH,02H

INT21H

movah,09h

movdx,offsetdat2;显示DAT2

int21h

movah,0ah

movdx,offsetstring2

int21h

MOVDL,0AH;输出换行

MOVAH,02H

INT21H

leasi,string1;比较

leadi,string2

addsi,2;串1首字符[SI+2]

adddi,2;串2首字符[DI+2]

cld;df=0

movcx,50

repzcmpsb;CX≠0或ZF=1时重复,DS:

SI和ES:

DI所指的两个字节相同则继续比较,如果比较相等,ZF=1,则继续比较下一个字节,DI和SI分别加1(DF=0时),CX-1

jzmatch

nmatch:

movah,09h

movdx,offsetdat4;输出不匹配

int21h

jmpnext

match:

movah,09h

movdx,offsetdat3;输出匹配

int21h

next:

movah,4ch

int21h

codeends

endstarT

 

小结

在设计过程中,我把程序分成了宏定义显示回车,数据段定义,初始化,开始比较,匹配时再比较,不匹配时SI指向串1首字符,DI指向新字符重新开始比较等模块。

且运用指令REPZCMPSB进行字符串比较处理,设计的过程中要注意很多细节,如初始化时调用INT21H的0A号功能接收字符串,要注意缓冲区的第一个字节存放最大字符数,第二个字节存放实际字符数。

本次设计让我对DOS功能条用与字符串指令有了更深的了解与认识。

 

程序设计二:

从键盘上输出数据并显示

为掌握接收键盘数据的方法,并了解将键盘数据显示时须转换为ASCII码的原理。

编写程序,将键盘接收到的四位十六进制数据转换为等值的二进制数,再显示在终端上。

 

流程图:

 

 

程序

datasegment

string1db'Pleaseinputanumber(suchas:

1234):

',13,10,'$'

bufferlabelbyte;定义一个buffer,接受字符串,LABEL定义变量类型

MAXdb5;在MAX中存入最多接受长度(以回车结束,包括回车),若超过长度,响铃提示,不再接受

acldb?

;acl中存入实际输入的字符串长度,以回车结束,包括回车.

buferdb5dup(?

);实际接受的字符串存在以bufer开始的地址中.

string2db'Theresultis:

',13,10,'$'

dataends

stackareasegment

db20dup(?

stackareaends

codesegment

mainprocfar

assumecs:

code,ds:

data,ss:

stackarea

start:

movax,data;输出string1

movds,ax

leadx,string1

movah,09H;输出DS:

DX的字符串

int21H;输出第一行字,回车(13)换行(10)

leadx,buffer

movah,0ah;字符串缓冲输入

int21h

movdl,0ah;输入换行,以免输入数据被string2覆盖

movah,02h

int21h;输出string2

leadx,string2

movah,09H

int21H;输出第二行字

movsi,0

loop1:

movcx,04h

movbl,bufer[si]

moval,bl

incsi

cmpal,40h;判断字符是否属于0-9对应的字符串为30~39H

jbnext;低于则转移

subal,27h;A~E转换到对应的10~15

next:

subal,30h;将ASCII码的值转换成对应的十六进制数

movbl,al

dplay:

movah,02h;开始显示一个字符,字符在DL里(0、1)

movdl,'0'

testal,00001000b;test指令:

结果不送到目的寄存器的与操作,用于判断高字节是否为0,>7?

jzzero

movdl,'1';第四位等于1输出1(>7)

zero:

int21h;第四位等于0输出0(<8)

moval,bl

shlal,1

movbl,al;BL内容循环左移一位

loopdplay;用循环显示一个字符,共循环四次,CX=0截止

movdl,20h;显示空格(20H)

movah,02h

int21h;显示空格结束

cmpsi,04

jneloop1;一共四个数

movdl,'b';单位”B”

movah,02h

int21h

movah,4ch;结束

int21h

ret

mainendp

codeends

endstart

 

小结

此次设计功能是实现十六进制转换为二进制,分为初始化,接受键入值,计数值16赋给CX,BX内容循环左移一位,屏蔽DL高七位,DL加30H,变为二进制对应的ASCII码,显示,CX减一,继续循环,返回DOS。

此次的核心执行是将BX内容循环左移1位,再进行比较,最后输出结果。

这次设计让我更深入认识了循环指令和移位指令,让我受益匪浅。

 

程序设计三、字符和数据的显示设计

为掌握字符和数据的显示方法,编写程序,先显示信息:

INPUTSTRING,THEENDFLAGIS$,再接收字符。

如为0-9,则计数器加1,并显示数据;如为非数字,则直接显示,但不计数。

 

流程图:

 

程序

DATASSEGMENT

DATA1DB40DUP(?

DISPP1DB'INPUTSTRING,THEENDFLAGIS$',0DH,0AH,'$'

DISPP2DB0DH,0AH,'$'

DISPP3DB'THEINPUTSTRINGIS','$';此处输入数据段代码

DATASENDS

STACKSSEGMENT;此处输入堆栈段代码

STACKSENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

MOVAX,DATAS

MOVDS,AX

MOVSI,00H

MOVCL,0

MOVBX,OFFSETDATA1

LEADX,DISPP1

MOVAH,9

INT21H;输出DISSP1

L1:

MOVAH,1

INT21H;带回显的键盘输出,检测ctrl+break

CMPAL,03H;ETX-正文结束,跳到L4

JZL4

CMPAL,0DH;回车键跳转L3

JZL3

MOV[BX+SI],AL

INCSI

CMPAL,30H;高于’0’跳转KK

JNBKK

JMPL1

KK:

CMPAL,39H;低于’9’跳转L2

JNAL2

JMPL1

L2:

INCCL;是数字0~9则CX加一

JMPL1

L3:

LEADX,DISPP2

MOVAH,9

INT21H;输出DISSP2,回车换行

LEADX,DISPP3

MOVAH,9

INT21H;输出DISSP3

ADDCL,30H

MOV[BX+SI+1],CL;输出CL(字符形式)

MOVAL,0AH

MOV[BX+SI+2],AL;输出换行

MOVAL,'$'

MOV[BX+SI+3],AL

MOVDX,BX

MOVAH,9

INT21H;此处输入代码段代码

L4:

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

 

小结

此次设计为字符和数据显示设计,将其分为初始化,计数器清零,显示提示信息,INT21H的01H功能接受键入字符,判断字符,进行循环,显示结果,调用DISP显示计数结果,返回DOS。

此次设计用到了INT21H的01H功能,是带回显的键盘输入,程序的核心为检测字符并循环操作。

通过本次设计,让我更深入了解了DOS功能调用与祖父数据显示功能的具体设计,是我受益颇深。

 

程序设计四:

学生成绩名次表设计

为进一步熟悉排序方法。

编写程序,将0-100之间的30个成绩存入首址为1000H的存储区中。

1000H+i表示学号为i的学生成绩。

编写程序使得在2000H开始的区域排除名次表。

2000H+i为学号i的学生的名次。

 

流程图:

成绩名次表主程序流程图SCAN子程序流程图

程序:

CRLFMACRO;宏定义,回车换行

MOVAH,02H

MOVDL,0DH

INT21H

MOVAH,02H

MOVDL,0AH

INT21H

ENDM

DATASEGMENT

STUNUMEQU30;学生数

MESS1DB'Pleaseinput30score:

',0DH,0AH,'$';提示信息

ERRORDB'Inputerror,tryagain',0DH,0AH,'$';报错信息

MESS2DB'Theorderis:

',0DH,0AH,'$'

EMARKDB?

;报错标志

ORG1000H;存放成绩地址

SCOREDB30DUP(?

);成绩表

ORG2000H;存放名次地址

SEQUDB30DUP(?

);名次表

DATAENDS

STACKSEGMENT;堆栈段定义

STADW32DUP(?

TOPDW?

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,ES:

DATA,SS:

STACK

START:

MOVAX,DATA

MOVDS,AX

MOVES,AX

MOVSP,TOP

MOVAH,09H;显示提示信息

MOVDX,OFFSETMESS1

INT21H

MOVSI,OFFSETSCORE;成绩表首址

MOVCX,STUNUM;30人

MOVEMARK,0;报错标志清0

UUU:

CALLGETNUM;调用子函数读取成绩

CMPEMARK,01H;判断是否出错

JESTART;出错则重新开始

MOV[SI],DL;没出错则存入成绩

INCSI;指向下一个成绩单元地址

LOOPUUU;判断30个成绩是否读取完

MOVCX,STUNUM

MOVDI,OFFSETSEQU;名次表首址

VVV:

CALLSCAN;调用扫描子程序

MOVAL,STUNUM;学生总数

SUBAL,CL;计算名次

INCAL

MOVBX,DX;学号

PUSHAX;将名次转换成压缩BCD码方便显示

PUSHBX

PUSHCX

XORAH,AH;AH清零

MOVBH,0AH

DIVBH;被除数是AX

MOVCL,4

SHLAL,CL;AL左移四位

ADDAL,AH

MOVDH,AL

POPCX

POPBX

POPAX

MOV[DI+BX],DH;存入名次

LOOPVVV;判断是否存完

MOVAH,09H;显示名次提示信息

LEADX,MESS2

INT21H

MOVCX,STUNUM

MOVSI,OFFSETSEQU

WWW:

MOVAL,[SI]

CALLDISPI;调用子函数显示名次

PUSHDX

PUSHAX

MOVAH,02;显示空格

MOVDL,20H

INT21H

POPAX

POPDX

INCSI;指向名次表的下一个地址

LOOPWWW;判断是否输出所有名次

MOVAH,4CH;返回DOS

INT21H

SCANPROCNEAR;扫面子函数,每调用一遍,找出成绩表

;中最高成绩,记录其学号,并将此成绩

;清0

PUSHCX

MOVCX,STUNUM

MOVAL,00H

MOVBX,OFFSETSCORE

MOVSI,BX

CCC:

CMPAL,[SI];实现选出最高成绩

JAEJJJ;≥0则跳转

MOVAL,[SI];最高成绩存入AL

MOVDX,SI

SUBDX,BX

JJJ:

INCSI

LOOPCCC

ADDBX,DX

MOVBYTEPTR[BX],00H;成绩清零

POPCX

RET

SCANENDP

DISPIPROCNEAR;显示子程序

PUSHCX

MOVBL,AL;显示高4位

MOVDL,BL

MOVCL,04

ROLDL,CL

ANDDL,0FH

CALLDISPL

MOVDL,BL;显示低4位

ANDDL,0FH

CALLDISPL

POPCX

RET

DISPIENDP

DISPLPROCNEAR;将名次转换成对应的ASCII码值并显示

ADDDL,30H

MOVAH,02H

INT21H

RET

DISPLENDP

GETNUMPROCNEAR;读取成绩子函数

PUSHCX

XORDX,DX;清0,用于存放成绩

GGG:

MOVAH,01H

INT21H;键盘字符输入

CMPAL,0DH

JZRRR;如果是回车则结束

SUBAL,30H

JBERR;小于0则报错

CMPAL,09H

JBEGETS;如果在0—9之间则存成绩至DX

JMPERR;否则报错

GETS:

MOVCL,04

SHLDX,CL;将DX中已有数值左移四位

XORAH,AH

ADDDX,AX;紧接着将数据存在DX中低四位

JMPGGG;跳转继续读取数据

ERR:

MOVAH,09H;显示报错信息

MOVDX,OFFSETERROR

INT21H

MOVEMARK,01H;报错标志置1

RRR:

PUSHDX

CRLF;回车换行

POPDX

POPCX

RET

GETNUMENDP

CODEENDS

ENDSTART

 

小结

本次设计的是学生成绩名次表,首先将其分为主程序和子程序,主程序分为初始化,显示输出,SI指向成绩表首址,调程序度学生成绩送[SI]中,CX为0判断循环,DI指向名次表首址,调子程序扫描成绩表,计算名次,填入DX学号对应名次表单元,返回DOS。

子程序则分为CX入栈保存,AL中放最低成绩00H,BX,SI指向成绩表首址,AL≥[SI]?

,指向下一个单元,CX减一判断循环,将成绩最高者清零,CX出栈,返回。

这次循环用了子程序调用CALL指令,其核心在于调用子程序进行循环计算名次。

这次设计让我对调用指令及程序间的应用有了更深入的了解和认识,相信在今后的学习中会应用到。

 

四、心得体会

为期一周的微机课程设计让我学到了很多,感触也很多。

这门课程,需要我们深入的去思考,去学习查资料,我在这一周的时间里收获也是很大的,对汇编语言由略知皮毛到能运用它独立做一些小程序。

这种技能都是课堂上学不到的,但对未来却有很大的帮助。

当我面对一个难题,从一筹莫展到逐渐清晰明朗,调试调试再调试,而后最终完成任务。

只有亲身经历过,才能感受其中的艰辛与快乐。

更重要的是我们对汇编有了更进一步的理解。

有了实际应用的体会,知识更加的融会贯通了。

不管是从知识上还是从思维方式上,我们都得到了很大的进步,得到了充分的锻炼。

第一天的任务便是熟悉编程环境,掌握编程的步骤,学习怎样正确运用DOS的各个功能调用,以及初步开始设计编程,刚开始得到题目的时候,都不明白应该怎么切入核心,于是开始上网或是翻阅相关的书籍,最后才能把程序完整写下来,但是要将它变成自己的东西就需呀再花一定的功夫,通过书本查阅以及老师细致耐心的指导,终于可以将程序完整的编程出来,心中涌现极大的成就感,对微机的相关程序设计也产生了浓厚的兴趣。

课程设计结束后,我总有种意犹未尽的感觉,感觉学的知识还是不足,汇编语言的博大精深,我还是无法很清楚的把握,但我相信本次课程设计会给我带来更大的学习动力。

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

当前位置:首页 > 工程科技 > 能源化工

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

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