微机原理课程设计大小写字母转换.docx

上传人:b****5 文档编号:7685100 上传时间:2023-01-25 格式:DOCX 页数:14 大小:60.43KB
下载 相关 举报
微机原理课程设计大小写字母转换.docx_第1页
第1页 / 共14页
微机原理课程设计大小写字母转换.docx_第2页
第2页 / 共14页
微机原理课程设计大小写字母转换.docx_第3页
第3页 / 共14页
微机原理课程设计大小写字母转换.docx_第4页
第4页 / 共14页
微机原理课程设计大小写字母转换.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

微机原理课程设计大小写字母转换.docx

《微机原理课程设计大小写字母转换.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计大小写字母转换.docx(14页珍藏版)》请在冰豆网上搜索。

微机原理课程设计大小写字母转换.docx

微机原理课程设计大小写字母转换

目录

摘要I

AbstractII

1原理1

1.18086的内部结构1

1.28086的指令系统2

1.3汇编语言程序设计6

1.4报警声音生成7

2程序设计9

2.1程序设计流程图9

2.2程序代码10

2.3运行结果分析13

3心得体会14

参考文献15

摘要

在课程设计之前,具备微机原理的理论知识和实践能力;熟悉汇编语言编程技术;熟悉80X86的CPU结构和指令系统;熟悉相关常用接口电路的设计使用方法是必不可少的。

因此原理部分重新温习并整理了相关知识。

课程设计要求进行大小写字母的转换。

其实字母大小写的区别在于他们的ASCII码范围,它们之间的转换其实就是加减相应的ASCII码值。

在判断输入的字母是大写的还是小写的(即判断输入符号ASCII码在41H~5AH还是在61H~7AH内)之后,决定判断是加上还是减去ASCII码值。

另外如果输入的不是字母(输入字符对应ASCII码值不在41H~5AH或61H~7AH内),则需要报警提示,这不但涉及到用汇编语言实现发声的方法,而且对计算机硬件的了解也有要求,因此原理部分加入了部分有关声音产生的硬件知识。

Abstract

Priortothecoursedesign,computerprincipleswiththeoreticalknowledgeandpracticalability;familiarwithassemblylanguageprogrammingtechniques;familiarwiththe80X86theCPUarchitectureandinstruction;familiarwiththeuseofcommoninterfacecircuitdesignisessential.Therefore,somere-principlestudyandcollatetherelevantknowledge.

Curriculumdesign,uppercaseandlowercaselettersrequestedconversion.Infact,thedifferencebetweenthecaseoflettersliesintheirASCIIcoderange,theconversionbetweenthemisactuallyplusorminusthevalueofthecorrespondingASCIIcode.Indeterminingtheinputisuppercaseorlowercaseletters(thatistodetermineinputsymbolsintheASCIIcode41H~5AHor61H~7AHinside),thedecisiontodetermineaplusorminusthevalueofASCIIcode.Also,ifnottheletteroftheinput(inputcharacterscorrespondingtoASCIIcodevalueisnot41H~5AHor61H~7AHinside),youneedtoalarm,notonlyrelatedtousingassemblylanguagetoachievesoundapproach,Butalsohaveknowledgeofcomputerhardwarerequirements,thusaddingsomeoftheprinciplesofsomeofthesoundgeneratedbythehardwareknowledge.

 

1原理

1.18086的内部结构

80x86从功能上分执行单元EU(ExecutionUnit),和总线接口单元BIU(BusInterfaceUnit),执行单元由算术逻辑单元(ALU)、标志寄存器、通用寄存器组和EU控制器等部件组成。

指令执行部件EU由算术逻辑单元、标志寄存器、通用寄存器和EU控制器等部件组成。

主要功能是执行指令:

一般顺序执行,EU不断地从指令队列中取指令连续执行,而省去访问存储器取指令的时间。

需要访问存储器取操作数时,EU将访问地址送给BIU后,将要等待操作数到来后才能继续操作;

遇到转移类指令时,要将指令队列中的后续指令作废,等待BIU重新从存储器取出目标地址中的指令代码进入指令队列后,EU才能继续执行指令。

算术逻辑单元(ALU)完成16位或8位的二进制运算;16位暂存寄存器用来暂存参加运算的操作数。

运算结果通过内部总线送到通用寄存器组或BIU的内部寄存器中等待写入存储器。

经ALU运算后的结果特征置入标志寄存器中保存

EU控制器负责从BIU的指令队列中取指令,并对指令译码;根据指令要求向EU内部各部件发出控制命令以完成各条指令的功能。

总线接口单元由地址加法器、专用寄存器组、指令队列缓冲器和总线控制电路等部件组成;

主要功能是形成访问存储器的物理地址,负责与外部(存储器或I/O接口)打交道。

正常情况下,BIU通过地址加法器形成指令的物理地址,从给定存储器地址中取出指令代码送指令队列缓冲器中等待执行(指令队列缓冲器中出现一个空字节,BIU将自动进行读指令的操作填满队列)。

收到EU送来的操作数地址,BIU将立即形成操作数的物理地址,完成读/写操作数或运算结果功能。

遇到转移类指令,BIU将指令队列缓冲器中的尚存指令作废,重新从存储器目标地址中取指令送指令缓冲器中。

指令队列可存放6字节的指令代码。

一般情况下指令队列中总是填满指令,使EU可不断地得到执行的指令。

16位地址加法器专门用来完成由逻辑地址变换成物理地址的功能。

实际上是进行一次地址加法,将两个16位的逻辑地址转换为20位的物理地址,以达到可寻址1M字节的存储空间。

总线控制电路将8086CPU的内部总线与外部总线相连,是8086CPU与外部交换数据的必经之路。

包括16条数据总线、20条地址总线和若干条控制总线。

程序装载到内存中后通过16位数据线确定各个段地址,开始取出指令(内存中读字节),放到指令队列,队列出口通过EU控制器执行指令并同时影响IP(指令指针移动指令长度,或通过指令执行后影响IP。

1.28086的指令系统

8086全部指令按功能可分成六大类:

数据传送类

一般格式MOVOPRD1,OPRD2

MOV是操作码,OPRD1和OPRD2分别是目的操作数和源操作数。

功能完成数据传送。

堆栈指令

包括入栈(PUSH)和出栈(POP)指令两类。

仅能进行字运算。

(操作数不能是立即数)

(1)入栈指令PUSH

一般格式PUSHOPRD

功能将数据压入堆栈

(2)出栈指令POP

一般格式POPOPRD

功能将数据弹出堆栈

累加器专用传送指令

有三种,输入、输出和查表指令。

前两种又称为输入输出指令。

(1)IN指令

一般格式INAL,n;BAL←[n]

INAX,n;WAX←[n+1][n]

INAL,DX;BAL←[DX]

INAX,DX;WAX←[DX+1][DX]

功能从I/O端口输入数据至AL或AX。

(2)OUT指令

一般格式OUTn,AL;BAL→[n]

OUTn,AX;WAX→[n+1][n]

OUTDX,AL;BAL→[DX]

OUTDX,AX;WAX→[DX+1][DX]

功能将AL或AX的内容输出至I/O端口。

算术运算类

加法指令(Addition)

(1)一般形式ADDOPRD1,OPRD2;功能OPRD1←OPRD1+OPRD2

(2)一般形式ADCOPRD1,OPRD2;带进位的加法;功能OPRD1←OPRD1+OPRD2+CF

(3)一般形式INCOPRD;功能OPRD←OPRD+1

减法指令(Subtraction)

(1)一般形式SUBOPRD1,OPRD2;功能OPRD1←OPRD1-OPRD2

(2)一般形式SBBOPRD1,OPRD2;功能OPRD1←OPRD1-OPRD2-CF

(3)一般形式DECOPRD;功能OPRD←OPRD-1-CF

逻辑运算类

逻辑运算指令

(1)一般格式NOTOPRD

功能对操作数求反,然后送回原处,操作数可以是寄存器或存储器内容。

(2)一般格式:

ANDOPRD1,OPRD2

功能对两个操作数进行按位的逻辑“与”运算,结果送回目的操作数。

(3)一般格式TESTOPRD1,OPRD2

功能完成与AND指令相同的操作,结果反映在标志位上,但并不送回。

通常使用它进行测试,

(4)一般格式OROPRD1,OPRD2

功能对指定的两个操作数进行逻辑“或”运算。

结果送回目的操作数。

(5)一般格式XOROPRD1,OPRD2

功能对两个指定的操作数进行“异或”运算,结果送回目的操作数。

串操作类

重复指令前缀

串指令

程序转移类

无条件转移、调用和返回指令

(1)无条件转移指令JMP分直接转移和间接转移两种。

一般格式:

JMPOPRD;OPRD是转移的目的地址

直接转移的3种形式为:

短程转移JMPSHORTOPRD;IP=IP+8位位移量

目的地址与JMP指令所处地址的距离应在-128~127范围之内。

近程转移JMPNEARPTROPRD;IP=IP+16位位移量

或JMPOPRD;NEAR可省略

目的地址与JMP指令应处于同一地址段范围之内。

远程转移JMPFARPTROPRD;IP=OPRD的段内位移量,CS=OPRD所在段地址。

远程转移是段间的转移,目的地址与JMP指令所在地址不在同一段内。

执行该指令时要修改CS和IP的内容。

间接转移指令的目的地址可以由存储器或寄存器给出。

段内间接转移JMPWORDPTROPRD;IP=[EA](由OPRD的寻址方式确定)。

JMPWORDPTR[BX]IP=((DS)*16+(BX))

JMPWORDPTRBXIP=(BX)

段间间接转移JMPDOWRDPTROPRD;IP=[EA],CS=[EA+2]

该指令指定的双字节指针的第一个字单元内容送IP,第二个字单元内容送CS。

JMPDWORDPTR[BX+SI]

(2)调用和返回指令

CALL指令用来调用一个过程或子程序。

由于过程或子程序有段间(即远程FAR)和段内调用(即近程NEAR)之分。

所以CALL也有FAR和NEAR之分。

因此RET也分段间与段内返回两种。

调用指令一般格式为:

段内调用CALLNEARPTROPRD;

操作SP=SP-2,((SP)+1),(SP))=IP,IP=IP+16位位移量

CALL指令首先将当前IP内容压入堆栈。

当执行RET指令而返回时,从堆栈中取出一个字放入IP中。

段间调用CALLFARPTROPRD;

操作SP=SP-2,((SP)+1),(SP))=CS;SP=SP-2,((SP)+1),(SP))=IP;IP=[EA];CS=[EA+2]

CALL指令先把CS压入堆栈,再把IP压入堆栈。

当执行RET指令而返回时,从堆栈中取出一个字放入IP中,然后从堆栈中再取出第二个字放入CS中,作为段间返回地址。

返回指令格式有:

RET;SP=((SP+1),SP),SP=SP+2

RETn;SP=((SP+1),SP),SP=SP+2SP=SP+n

RETn指令要求n为偶数,当RET正常返回后,再做SP=SP+n操作。

控制类

循环控制指令loop

1.3汇编语言程序设计

汇编:

计算机不能直接识别和执行汇编语言程序,而要通过“翻译”把源程序译成机器语言程序(目标程序)才能执行,这一“翻译”工作称为汇编。

汇编有人工汇编和计算机汇编两种方法。

汇编语言是面向机器的,每一类计算机分别有自己的汇编语言。

汇编语言占用的内存单元少,执行效率高,广泛应用于工业过程控制与检测等场合。

汇编语言语句格式

标号:

     操作符      操作数       ;注释

   START:

       MOV        A,30H        ;A←(30H)

标号用来标明语句地址,它代表该语句指令机器码的第一个字节的存储单元地址。

标号一般规定由1~8个英文字母或数字组成,但第一个符号必须是英文字母。

注释只是对语句或程序段的含义进行解释说明,以方便程序的编写、阅读和交流,简化软件的维护,一般只在关键处加注释。

伪指令:

伪指令只用于汇编语言源程序中,对汇编过程起控制和指导的作用,不生成机器码。

汇编结束,自动消失。

汇编语言程序设计步骤

(1)分析问题

(2)确定算法

(3)设计程序流程

(4)分配内存单元:

分配内存工作单元,确定程序和数据区的起始地址。

(5)编写汇编语言程序

(6)调试程序:

1.4报警声音生成

早期的PC系列机中有一个专门用于定时的集成电路,型号是8253/8254。

它有三个通道,第一个通道用于控制系统时钟正常运转;第二个通道用于存储器刷新;这两个通道与我们现在讨论的问题无关。

第三个通道通过一组电路与喇叭相联。

定时器通道3的G端与61H端口的bit0位相联,如果将61H端口的bit0位置成1,那么定时器通道3就被启动,此时将有一组信号从OUT端输出,信号的频率可以用程序控制;若61H端口bit0位为0,则定时器被关闭,OUT端就会恒定为1

此电路用在这里相当一个"可控开关",如果将61H端口的bit0、bit1位都置成1,则相当于既打开了定时器又打开了开关,这时候定时器产生的声音信号就会送到放大器推动喇叭发声;若将bit0位置0,则定时器关闭,此时OUT端为1,这时候如果连续改变bit1位的状态,也可以从喇叭中听到声音若将bit1位置0,则开关关闭,此时即使打开定时器也不能听到声音。

PC中的定时电路有三个通道,通道3用于发声,通道1用于控制系统内部的时钟。

大家都十分清楚用DOS的"TIME"命令可以观察并修改系统内部的一个时钟,这个时钟之所以能连续运转主要依靠定时器的通道1。

通道1的工作方式和通道3一样,但是系统启动时设定其发出一个频率固定为18.2Hz的信号,这个信号直接送到系统中的"中断控制器"。

每一个"Hz"都产生一个硬件中断,一般称这个硬中断为"IRQ0",对应的中断号是08H。

也就是说,当计算机启动后,我们的机器看上去十分平静,但实际上CPU非常忙碌。

在定时器的控制下每隔55毫秒就要执行一个08H号中断,这个中断的主要工作就是连续地计数。

在内存"0040H:

006CH"处有四字节的存储空间专门用于保存计数值,CPU每执行一次08H中断,这四字节的计数值就被加1,不难算出这个计数值每增加1091后时间恰好过了1分钟,每增加65454后时间恰好过了1小时。

系统内部的时钟之所以能准确走时,靠得就是08H中断和这四字节的计数值。

因此我们要想精确的定时,必须依靠时钟计数值才行。

2程序设计

2.1程序设计流程图

图2.1

N

Y

2.2程序代码

从从键盘输入一串英文字符,若是小写字符则转换成大写字符在下一行输出,若是大写字符则转换成小写字符在下一行输出,若不是英文字符则显声响报警

;--------------------------------------------------------------------

;实现英文字母的大小写转换

;--------------------------------------------------------------------

codesegment;代码段

assumecs:

code,ds:

code

org100h;从100h开始

start:

jmpbegin;跳到begin

p1db100

p2db0

arraydb100hdup(?

);置100个字节的缓冲区存放数据

begin:

leabx,array;将array的首地址给bx

movax,cs;置cs-->ds

movds,ax

movdx,offsetp1;将p1的偏移量给dx

movah,0ah;调用中断21的0a号功能从键盘接收字符

int21h

xorbx,bx;将bx清零

movbl,p2;p2-->bl

movarray[bx],'$';送'$'至字符串尾

movdi,0ffffh;-1-->di

next:

incdi;di自加

cmparray[di],'$';比较

jeexit;相等,则跳到exit执行

cmparray[di],41h;(A~Z-->41h-5aha~z-->61h-7ah)与A比较

jlexit1;小于,则跳

cmparray[di],5ah;与Z比较

jgnext1;大于,则跳

addarray[di],20h;加20h,大写转小写

jmpnext

next1:

cmparray[di],'$';比较

jeexit;相等,则跳到exit执行

cmparray[di],61h;(A~Z-->41h-5aha~z-->61h-7ah)与a比较

jlnext;小于,则跳

cmparray[di],7ah;与z比较

jgexit1;大于,则跳

subarray[di],20h;减20h,小写转大写

jmpnext

disp:

loopnext

exit:

movp1,0dh;回车换行

movp2,0ah

movah,09h

int21h

jmpbegin

exit1:

movp1,0dh

movp2,0ah

callsound;调用发声子程序

callsound

callsound

callsound

jmpbegin

movah,4ch;程序结束

int21h

soundproc

pushax

pushdx

movdx,cx

inal,61h

andal,11111100b;使第0,1位为0

trig:

xoral,2;使第1位翻转PB的低两位为3,即使输出有效

out61h,al

movcx,bx

delay:

loopdelay

decdx

jnetrig

popdx

popax

ret

soundendp

codeends

endbegin

2.3运行结果分析:

当输入字母串ABCDEFabcdef后,按回车键转换为abcdefABCDEF,结果如下图2.2所示

图2.2

 

当输入非英文字母时,按下回车键后发出滴滴的报警声,实现程序功能。

 

3心得体会

一直以为自己微机原理的水平不错了,直到着手做课程设计才不得不承认,自己的理论知识并不扎实,对于许多指令和一些基本的编程方法都掌握不清晰。

于是,为了顺利完成课程设计,我又拿起课本,用心的阅读,重新掌握了相关的知识。

由此看来,知识只有在实践中才能真正掌握。

难怪人们说汇编语言编程必须在使用中慢慢理解。

因为本学期做了许多微机原理的实验,这次要用汇编语言来实现大小写字母的转换,所以自己一开始感觉这会非常的简单。

直到真正的理解相关原理,要编写程序实现的时候,才发现,自己对汇编程序的了解确实还不够,尤其是编程方面的能力有待提高。

在不断地再次学习和理解过程中,我慢慢掌握了更多汇编语言的应用知识,更为值得骄傲的是,自己在参考程序的辅助下顺利编写出了大小写字母转换的程序。

总结起来,自己发现,编程必须在应用过程中才会更加牢固。

想想自己大三上学期做过的上机实验也不少,个把月不用,就一下子生疏了,因此我感觉对于重要的知识,偶尔复习下还是很有必要的,正所谓温故而知新。

把编写好的程序输入软件时候,出现了许多小问题,比如句子没有加逗号,没有定义变量等等。

归纳起来都是因为编程掌握不牢固,写程序没有条理,加上自己粗心大意的恶习依旧没改正造成的,以后需要努力改正。

总的来说,这次课程设计,自己受益匪浅。

不但加固了微机原理部分知识的理解,而且加强了对汇编语言的应用能力。

参考文献

[1]姚燕南,薛钧义主编.微型计算机原理.第四版.西安:

西安电子科技大学出版社,2003

[2]潘峰主编.微型计算机原理与汇编语言.第三版.西安:

电子工业出版社,2003

[3]雏逢兴编著.计算机硬件技术基础.北京:

高等教育出版社,1998

[4]王永山等编著.微型计算机原理与应用.西安:

西安电子科技大学出版社,1999

[5]舒贞权等编著.Intel8086/8088系列微型计算机原理.西安:

西安交通大学出版社,1993

 

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

当前位置:首页 > 法律文书 > 判决书

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

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