版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、淮海工学院计算机科学系微机原理与接口技术课程设计指导书专 业:计算机科学与技术教研室:计算机应用教研室 实验中心 2005年3月第1章 课程设计概述 微机原理和接口技术是计算机及电子类专业重要的基础专业课之一,它不但要求有较高的理论水平,而且还要求有较强的实际动手能力。本课程的主要目的是提高实践能力,包括提高汇编等语言的编程能力及对接口等硬件的理解分析能力和设计接口电路的能力。 与其他课程(如语言类课程设计)不同的是,本课程设计对硬件有很高的依赖性。因此,课程设计的灵活性受到一定的限制,必要有相应的实验平台支持。国内很多高校和公司也开发了不同的实验平台,我院采用启东的实验系统,选择相应的课程设
2、计内容。1.1 课程设计的必要性长期以来,注重书本知识,轻视实际动手设计能力是教学中普遍存在的现象。进行课程设计的目的就是要改变这种状况,使学习者既具有完备的理论知识,也能够解决在实际学习、生活工作中遇到的问题。学生应该能够把学到的理论知识用到实际中去,将知识转变为实际的生产力,同时通过这些理论知识和实际的应用推动理论和时间的发展。课程设计能把课本中分布学习的知识,在设计中加以综合应用,进而得到巩固、加深和发展。同时,学习者通过学习查找、运用设计资料,完成工程设计必备的基本训练。通过课程设计,能够对所学的知识有更进一步的理解,能掌握学习理论时没有注意的细节。在实际工作中,只要有一个环节没有做好
3、,整个体系都不能正常运行。调试程序、排除故障有助于提高分析问题、解决问题的能力。课程设计中碰到的挫折,有助于养成良好的学习习惯、严谨的工作作风。1.2 课程设计目标一般来讲,课程设计比教学实验复杂一些,涉及的深度更广并更加接近实用。目的是通过课程设计的综合训练,培养学生实际分心问题、编程和动手能力,最终帮助学生系统掌握该门课程的主要内容,更好的完成教学任务。本课程设计的特点是:1) 本课程设计分为三个部分:·汇编语言联系部分通过这部分的联系,学生要熟悉汇编语言的寻址方式和指令系统,BIOS和DOS系统功能调用,程序设计方法并熟悉宏汇编的变成环境。这部分设计内容可供所有的课程使用。
4、183;微机自身接口部分此部分的项目和硬件相关,但使用的是微机自身的标准件和接口。这部分设计内容可供所有的课程使用。·实验系统接口部分因为本部分的内容要使用实验系统来完成,所以和实验系统有一定的联系,但本部分内容在各个系统上基本都可实现,只是具体方法上可能略有区别。2) 配合实际应用的要求,本课程设计既覆盖知识点,又接近工程实际需要。通过激发学习兴趣,调动学生主动学习的积极性,并引导他们根据实际编程要求,训练他们实际分析问题的能力及编程能力,并养成良好的编程习惯。3) 通过详细的实例,循序渐进地启发学生完成设计。课程设计将要求、算法和源程序分开,为学生创造独立思考的条件。学生在全面理
5、解要求和算法的前提下,完全可以不按书中提供的参考程序,设计自己的应用程序。4) 有些课程设计提出了一些改进措施或要求,有兴趣的学生可以用来扩充自己的设计。5) 在内容取舍上,强调掌握基本的接口技术,保留了一些基本的内容,同时将一些不常用的内容适当减少或取消,如低分析率的显示模式编程,但相应也增加了一些如鼠标控制等新内容。6) 后续的课程设计尽量引用前面的课程设计内容,以便增加印象并加深理解。7) 对于同一类型的实验,提出了不同的实验方法,供学习实践,以满足不同学校和不同学生的要求。另外,在实际编程中,为了提高编程质量,对空行、空隔和注释均有要求。本书也尽可能地根据实际编程要求给出空行、空隔和注
6、释,有时因为标题和页码等实际原因,也会适当减少空行、空隔和注释,但希望学上在书下代码时,还是应该严格要求处理,以便建立良好的编程风格。1.2 课程设计的总评价方式 由于本课程的设计内容不同,很难有一个固定的评价标准。根据所做的设计,评价体系的重点可有所改变。课程设计的第一部分主要考察学生对汇编语言的掌握,包括对编译,链接等编程操作的掌握。课程设计的第二部分主要考察对微机自身组成的了解程度,要求对中段知识有很好的理解并能熟练地应用。课程设计的第三部分主要考察对常用外部接口的掌握程度。这部分要求不仅对汇编语言,而且对接口硬件电路都必须很好的掌握。建议课程设计的结果按优、良、及格和不及格来评价打分。
7、第2章 汇编语言实验基础2.1 汇编语言的开发过程 汇编语言程序的开发过程入图2.1所示。这个过程主要由编辑、汇编、链接等几个步骤构成。1 源程序的编辑编辑就是调用编辑程序把源程序输入内存,生成一个扩展名为ASM的文本源文件并存入磁盘。如果是对原有的.ASM文件进行修改,还要生成一个扩展名为BAK的备份文件,它是修改前的.ASM文件自动改名生成的。DOS提供的EDIT,EXE或其他全屏幕编辑软件都能完成编辑任务。也可利用WINDOWS的友好界面,采用文本编译器,先编好源程序,再汇编。2 源程序的汇编汇编就是调用汇编程序(如MASM或TASM)对源程序进行翻译,生成扩展名为OBJ的目标文件。在汇
8、编过程中,若汇编器检查到源程序中有语法错误,则不生成目标文件,并给出错误信息。根据用户需要,汇编程序还可生成列表文件(.LST文件)和交叉引用文件(.CRF文件)。3 目标程序的链接链接的过程是:调用链接程序(如LINK或TLINK)将拥护目标程序和库文件进行链接、定位,生成扩展名为.EXE的可执行文件。链接时,如果在目标文件或库文件中找不到所需的链接信息,则连接程序给出错误信息,而不生成可执行文件。根据用户需要,链接程序还可以生成内存分配文件(.MAP文件)。4 .COM文件的生成按照.COM文件的汇编格式设计的源程序,再生成.EXE文件之后,还要转换成.COM文件,如果链接时使用TLINK
9、.EXE程序,在TLINK命令后加选项“/t”EXE2BIN 文件名.EXE 文件名.COM如果不能转换就给出错误信息5 调试可执行程序如果可执行程序运行之后没有得到预想的结果,就要重新审查源程序,找出算法或者逻辑错误,再重新编辑、汇编、链接和执行。在调试程序的时候,也可以借助调试软件来进行调试。2.2 汇编语言常用软件的使用方法 要用汇编语言产生在微机上可用性的可执行程序,如.EXE文件、.COM文件,先要建立源文件,然后对源文件进行汇编,汇编生成的.OBJ文件还不能在微机上直接运行,必须再通过链接程序将它转为可执行程序。目前汇编语言编译最常用的是宏汇编程序,主要有汇编程序MASM,链接程序
10、LINK,以及一些辅助程序如DEBUG调试程序等组成。 下面介绍他们的使用方法。1 源文件的建立和汇编1) 检查源程序中的语法错误,给出出错信息。2) 产生目标文件(.OBJ文件)、列表文件(.LST文件)和交叉引用文件(.ORF文件)。3) 展开宏指令。汇编过程及屏幕显示如下:C: >MASM EXAMPLE :源文件名Microsoft (R) Macro Assembler Version 5.00Copyright (C) Microsoft Corp 1981-1985,1987. All rights reservedSource Filename .ASM: EXAMPLE
11、NUL.LST Object FilenameEXAMPLE.OBJ:Source Listing NUL.LST: (可打入源文件名或省略)Crossreference CNUL.CRF (可打入源文件名或省略)0 Warning Errors0 Severe Errors汇编程序调入后,先显示版本号,然后提示用户输入源文件名,若拥护原来已输入过源文件名,则此行不显示。下面有三个提示行,相应输出三个文件,第一个为.OBJ文件,这是目标文件,是必须的,用户键入回车即可。第二个为.LST文件,是列表文件,若需要列表文件就输入文件名,否则就不产生此文件。第三个问.CRF文件,是建立交叉引用,若需要
12、.CRF文件就输入文件名,否则直接按回车,不产生此文件。然后汇编程序对源文件进行汇编,屏幕上显示出源程序中的错误信息,包括错误语句行号、错误代码和错误类型。最后列出警告错误和指明错误的总数。.LST文件是可打印文件,它同时列出源程序和机器语言清单,并给出行号和符号表,表中给出段名、段的大小及属性,用户定义的符号名、类型及属性等。.CRF文件用来产生交叉引用表,可以对符号进行前后对照,他给出了用户定义的所有符号,没个符号定义时所在的行号以及引用时所在行号。若要打印,就需要调用系统中的CREF程序,运行过程如下: C:> CREFCref Filename .CRF:<文件名>L
13、ist Filename文件名.REF: 建立了一个.REF文件后,在DOS下可用TYPE命令打印出来,不过.CRF文件一般不需要打印。2链接汇编程序产生的二进制目标文件(.OBJ文件)仍然不能执行,必须经过链接,将它转换成.EXE文件才可执行,链接程序为LINK.EXE,它可以把多个模块链接在一起,这些模块可以是库文件或汇编程序产生的目标文件。链接过程如下: C:> LINK EXAMPLE Microsoft (R) Personal Computer Linker Version 2.40 Copyright (C) Microsoft Corp 1983,1984,1985,Al
14、l right reserved Object Modules .OBJ: Run File EXAMPLE.EXE: List File NUL.MAP: Libraries .LTB: Warning :No Stack SeqmentThere Was 1 Error Detected在DOS下运行LINK命令后,先显示版本号,然后依次出现4个问题,首先询问链接的目标文件名,若在LINK命令后已打入目标文件名,则此行不出现。如果链接多个目标文件,那么可以将多个目标文件名一次输入,中间用加号“+”连接。LINK命令要求输入的LIB文件是程序中需要用到的库文件,若无特殊需要,可以在遇到.LI
15、B提出时直接回车。连接命令产生两个文件,一个为可执行的EXE文件,对此提问用户可直接输入回车。另一个为MAP文件,它是连接映象文件,给出了每个段在存储器中的分配情况,一般不需要此文件,需要是打入文件名。因为源程序没有堆栈段,所以链接结果给出无堆栈段的警告错误,但不影响程序执行。如果在链接中发现错误,那么屏幕上会显示出错误信息和错误类型,用户在修改错误后可重新进行汇编和链接。上述介绍的是通用的MASM5.0版本的操作方法,如果用MASM6.0或更高的版本,则汇编连接可一步完成,具体介绍可参见相关书籍。在汇编及链接过程中能够检查出汇编语言源程序的语法错误,但有些逻辑错误、结构错误只有在调试运行中才
16、能发现。调试工具有基于命令行方式的DEBUG和集成环境的TDEBUG和CODEVIEW等。基成环境的调试工具使用方便,功能齐全,界面友好,但限于篇幅,本书对此不作介绍。命令行方式的DEBUG的优点是汇编语言设计的,它给出了一些调试命令,也可以通过单步、断点、跟踪等方法有效地进行调试。1. DEBUG的调用DEBUG的命令格式都是一个字母,后跟一个或多个参数:字母参数使用该命令的注意事项:1) 字母不区分大小写。2) 只使用16禁止书,没有后缀字母。3) 分隔符(空格或逗号)只在两个数值之间是必须的,命令和参数可无分隔符。4) 没个命令只有在按下回车键后才有效,可以用Ctrl+Break终止命令
17、的执行。5) 命令如果不符合DEBUG的规则,则将以“error”提示,并用“”知识错误位置。 许多命令的参数是主存逻辑地址,形式是“段基地址:偏移地址”。其中,段基地址可以是段寄存器或数值;偏移地址是数值。如果不输入段基地址,则采用默认值,这个默认值可以是默认的段积存器值,如果没有提供偏移地址,则通常就是当前偏移地址。 在DOS提示符下,可键入命令: C:>DEBUG D: PathFilename.extParmlParm2说明:·D:驱动器名·Path:路径名·Filename.ext: 文件名.扩展名·Parm1,Parm2:命令参数在DE
18、BUG命令后用户键入文件名,DEBUG将指定的文件装入内存,若用户未键入文件名,则DEBUG对当前存储器中的内容进行操作,也可用N和L命令将需要的文件装入存储器。在DEBUG程序调入后,根据有无被调试程序及其类型相应地设置寄存器组的内容,发出DEBUG的提示符“”,此时就可用DEBUG命令来调试程序。 l 运行DEBUG程序时,如果不带被调试程序则所有段寄存器值相等,都指向当前可用的主存段。除SP之外的通用积存器都设置为0,则SP指向这个段的尾部指示当前堆栈顶。IP=0100H,状态标志都是清0状态。l 运行DEBUG程序时,如果带入的被调试程序扩展名不是.EXE,则BX和CX包括被调试文件大
19、小的字节数(BX为高16位),其他与不带被调试程序的情况相同。l 运行DEBUG程序时,如果带入的被调试程序扩展名是.EXE,则需要重新定位。此时,CS:IP和SS:SP根据被调试程序确定,分别指向代码段和堆栈段。DS:ES指向当前可用的主存段,BX和CX包含被调试文件大小的字节数(BX为高16位),其他通用寄存器为0,状态标志都是清0状态。DEBUG程序调入后,出现提示符“-”,此时系统已在DEBUG管理下,可以键入DEBUG的各种命令进行调试。命令输入不区分大小写,命令后带有参数时,两个16进制的参数间要有分界符。利用Ctrl+Break键可终止命令,返回DEBUG提示符。当一个命令产生多
20、行输入时,可用Ctrl+Lock键暂停上滚,按任一键继续显示下面内容。2DEBUG的主要命令(1)显示存储单元命令D(Dump)该命令有以下几种格式:·-D 地址:从指定地址起显示80个字节的内容。·-D 范围:显示所指定范围的内容,指定范围为起始地址和终止地址。·-D 显示从上一个D命令的最后一个单元起后面的80个字节的内容。在D未使用过的情况下,显示以DS:0100为起始地址的80个字节的内容。例:-D 220 2401CE2:0220 C7 06 04 02 38 01 C7 06 -06 02 00 02 C7 06 08 02 G8.GG1CE2: 02
21、30 02 02 BB 04 02 E8 02 00 CD 20 50 51 56 57 8B 37 ;hMPQVM. 71CE2: 0240 8B其中,02200240为显示的地址,中间为十六进制表示的自己内容,右边为用ASC字符表示的字节内容,“.”表示不可显示的ASC码。(2)修改存储单元内容的命令E(Edit)该命令有两种格式。·-E 地址 内容表:用指定的内容表修改从指定地址开始的存储器中的内容。例如:-E DS:120 F3 A5 XYZ 96表示用F3、A5、X、Y、Z、96共6个字节代替DS:120 DS:125中的内容。·-E 地址:逐个单元修改内容。例如
22、:-E CS:100屏幕显示为:18E4:0100 89._用户可键入“78”修改此内容,在键入空格键显示下一个内容,不修改时可用空格键跳过,从而逐个修改存储器内容,直到回车键结束。上例显示为:18E4:0100 89.78 18.56 37._ 36.35 (.后为用户键入内容)(3)填入命令F(File)-F 范围_(内容表):将内容表的内容填入指定的范围。范围有两种表示方法。-F 开始地址 结束地址 填充内容或-F开始地址 L填充长度填充内容例如:-F 18E4:0200 L10 00将0200H单元开始的16个字节全部填入,直到内容表中字节数超过指定范围,则忽略超过项。若内容表中字节数
23、小于指定范围,则反复填入,知道填满所有单元为止。例如:-F 210 229 Help用包含 “Help”的字节填充,循环填充从DS:210H到229H的存储器单元。(4)检查和修改寄存器命令R(Register)该命令有三种格式:·-R:显示CPU内所有寄存器的内容和标志位状态。例如:-RAX= 0000 BX 0000 CX = 0106 DX= 0000 SP FFFE BP= 0000 SI = 0000 DI = 0000DS=ICE2 ES=1CE2 SS=1CE2 CS=1CE2 IP=0100 NV UP DI PL NZ NA PO NC1CE2: 0100 C703
24、04023801 MOV WORD PTR0204, 0138·-R 寄存器名:显示和修改某一个寄存器内容。例如:-R AX屏幕显示:AX 1200 ; AX当前内容为1200若不修改则按回车键,否则键入要修改的内容。:1000 ;将AX内容修改为1000·-RF:显示和修改标志位内容(除标志位T以外)。例如:-RF屏幕显示:OV DN EI NG ZR AC PE CY PO NZ DI NV若不修改则按回车键,否则键入要修改的内容,键入次序任意。状态标志的表示符号如表2-1所示。 (5)运行命令G(GO)该命令的格式为:-G=地址1 地址2 地址3G命令开始运行被调试的
25、程序,运行中遇到断点时,则停止运行,并显示当前寄存器、标志位的内容和下一条将要执行的指令,按下回车键从断点处继续向下运行。地址1为程序运行的起始地址,如不指定,则从当前的CS:IP开始运行,地址2、地址3为设定的断点地址,断点最多可设10个。要注意的是,当执行G命令时,断点地址里的指令码被INT3(CCH)所代替,产生中断并显示各寄存器内容后,再恢复被CCH取代的指令码,但若程序执行不到某个中断点,原设断点的地址中的指令码被CCH代替后不能恢复。用G命令不带参数时,程序运行到结束为止。程序执行完成屏幕显示:Program Terminated Normally程序要重新装入后才能再次运行。6)
26、跟踪命令T(Trace)该命令有两种格式:·-T=地址: 单条指令追踪,执行指定地址的一条指令,并显示CPU所有寄存器内容、标志位的状态及下条指令的地址和内容。若命令中没有指定地址,则从当前CS:IP处开始执行。·-T=地址 N:多多指令追踪,从指定地址开始执行指令,共执行指定的N条后停止,每执行一条指令就显示CPU中所有寄存器内容,标志位的状态及下条指令的地址和内容。(7)汇编命令A(Assemble)该命令的格式为:-A 地址从指定地址开始,输入汇编语言的语句,DEBUG将其汇编成机器码,并存放在指定地址开始的存储区中。若没有指定地址,则从上一个汇编命令的最后一个单元开
27、始存放。若未用过A命令,则从CS:0100单元开始存放。另外,输入必须是十六进制数,如要输入十进制数,后面要加“D”说明。(8)反汇编命令U(Unassemble)该命令有两种格式:·-U 地址:从指定地址开始,反汇编32个字节。若没有指定地址,则从上一个U命令继续向下反汇编,若没有用过U命令,则从CS:100开始反汇编。·-U 范围:对指定范围的存储单元反汇编,可指定起始地址、结束地址,也可指定起始地址及长度。例如,执行:-U 1CE2:0110 011A或-U 1CE2:0110 L0B屏幕显示:1CE2: 0110 BB 0402 MOV BX,02041CE2: 0
28、115 E8 0200 CALL 01181CE2: 0116 CD20 INT 201CE2: 0118 50 PUSH AX1CE2:0119 56 PUSH SI1CE2:011A 8B37 MOV SI,BX(9)命名命令N(Name)该命令的格式为:-N D: PATH Filename.extN命令把两个文件标识符格式化在CS:5CH和CS:6CH的两个文件控制块中,使文件能用L命令装入或用W命令存盘。例如,将文件EXAMLE装入到存储器可使用以下命令:-N EXAMPLE-L-在DEBUG中可用-N,-L命令将另一个文件装入到存储器中调试。(10)装入命令L(LOAD)该命令有两
29、种格式:·-L 地址:装入已在CS:5CH中进行过格式化的文件控制块所指定的文件到指定的内存地址中,若指定地址,则装如到CS:0100开始的存储区中。·-L地址 驱动器 扇区1 扇区2:将磁盘上指定扇区范围的内容装入到从存储器指定的地址开始的区域中。(11)写命令W(Write)该命令有两种格式:·-W 地址:把存储器中指定地址的数据写入由CS:5CH处的文件控制块所指定的文件中。若未指定地址,则从CS:0100地址开始,要写入文件的字节数预先置入BX和CX中。·-W 地址 驱动器 扇区1 扇区2:把存储器中从指定地址开始的数据写入到磁盘的指定扇区中。例
30、如A>DEBUG-L 0100 0 0 1 ;读A盘0扇区到内存0100,读1个扇区-R CX ;将内存0100中的内容写到B盘0扇区,写1个扇区(12)输入命令I(Input)输入命令的格式为:I命令从指定端口输入一个字节数据并显示出来。例如:-I 34 5F ;从端口34输入一个字节为5FH(13)输入命令O(Output)输入命令的格式式为:-o 断口地址O命令向指定端口输入一个指定址值。例如:-o 34 6E ;从端口34输出值6EH(14)退出命令Q(Quit)此命令退出DEBUG,并返回到DOS,但无存盘功能。(15)其他命令DEBUG还有以下一些其他命令。 1)比较命令C(
31、Compare)c _ 范围地址 ;将指定范围的内容与指定地址内容比较:C的地址范围表示方式和F类似,两种方法:-c 源开始地址 源结束地址 目的开始地址或-c 源开始地址 L传送长度 目的开始地址例如:-c 050 070 200把从DS:050到DS:070的字节从DS:200开始的字节进行比较。该操作显示不相等的字节的地址和内容。2)16进制数计算命令H(Hex)H 数字1,数字2 ;同时计算两个16进制数字的和与差例如:-H OF 8 17 07结果所显示的17H是0FH和8H的和,07H是0FH和8H的差。3)传送命令M(Move)M 范围地址 ;将指定范围的内容传送到指定地址处M的
32、地址范围表示方式和F类似,有两种方法:-M 源开始地址 源结束地址 目的的开始地址或-M 源开始地址 L传送长度 目的开始地址例如:-M DS:50 150 DS: 400把从DS:50H到DS:150H的字节复制到从DS:400开始的地址。4)查找命令S(Seatch)S 范围数据 ;在指定范围内查找指定的数据 与前面命令类似,范围可用开始地址和结束地址或开始地址与查找区域长度两种方式表示。例如:-s 300 L2000 “VIRUS”从DS:300开始,在长度为2000H的范围内找“VIRUS”字符串。2.3 BIOS中断和DOS中断本节将介绍用户程序如何控制系统硬件。1) 使用高级语言提
33、供的功能控制硬件。高级语言一般提供一些I/O语句来控制硬件,优点是使用方便,但高级语言的I/O语句较少,执行速度慢。2) 使用DOS提供的程序控制硬件。优点是兼容性好,使用方便。3) 使用BIOS提供的程序控制硬件。优点是效率高,但使用复杂。4) 直接访问硬件。这种方法可以直接访问硬件,这就要求用户对外设非常熟悉。此种方式只适合于两种情况:为了获得高效率或为了获得DOS和BIOS不支持的功能。但直接访问硬件的程序可移植性很差,在一个厂商生产的机器上可以运行的程序在另一个厂商生产的兼容机上可能无法运行。上述方式各有所长,在本课程设计中主要应学习和掌握后三种硬件的控制方法。微型机的系统软件(如操作
34、系统)提供了很多可供用户调用的功能子程序,包括控制台输入/输出、基本硬件操作、文本管理、进程管理等。它们为用户的汇编语言程序设计提供了许多方便。用户可在自己的程序中直接调用这些功能,无须再自行编写。 系统软件中提供的功能调用有两种,一种称为DOS(Disk Opration System,磁盘操作系统)功能调用(也称高级调用),另一种称为BIOS(Basic Input and Output System,基本输入/输出系统)功能调用(也叫低级调用)。用户程序在调用这些系统服务程序时,不是用CALL命令,而是采用软中断指令INT n来实现。另外,用户程序也不必与这些服务程序的代码链接,因为这些
35、系统服务程序在系统启动时已被加载到内存中,程序入口也被放到了中断向量表中。用DOS和BIOS功能调用,会使编写的程序简单、清晰、可读性好,而且代码紧凑,调试方便。 BIOS是IBM PC及PC/XT的基本I/O系统。其中包括系统测试程序、初始化引导程序、一部分中断矢量装入程序及外部设备的服务程序,这些程序都固化在ROM中。显然,BIOS与系统硬件有直接的依赖关系,调用BIOS功能子程序的用户只能在与IBM PC/XT BIOS兼容的计算机上运行。BIOS服务程序的功能参见附录。 DOS是IBM PC系列微机的操作系统(现在的微机仍能运行DOS,而且新的操作系统也能继续几乎所有的DOS功能调用)
36、负责管理系统的所有资源,协调微机的操作,其中包括大量可供用户调用的服务程序。DOS的功能调用不依赖与具体的硬件系统。 所有的DOS系统功能调用都是利用软中断指令INT 21H来实现的。也就是说,在程序中需要调用DOS功能的时候,只要使用一条INT 21H指令即可。INT 21H是一个具有90所个子功能的中断服务程序,这些子功能大致可以分为四类:设备管理、目录管理、文件管理和其他。其功能一览表可参见附录。为了方便用户使用这些子功能,INT 21H对每一个子功能都进行了编号称为功能号。这样,用户就能通过指定功能号来调用INT21H的不同子功能。DOS系统功能调用的方法如下:1)AH功能号。2)在其
37、他寄存器中放入该功能所要求的入口参数。3)执行INT21H指令。4)分析出口参数。附录中列出了常用的DOS系统功能调用。用户程序与DOS、BIOS和硬件的关系见图2-22.4 课程设计环境完成课程设计,需要具备一定的软硬件条件。本书中的课程设计内容都已全部运行通过。其中,汇编语言和微机自身接口部分的设计,基本和微机硬件武官,在各种类型的微机上几乎都可实现,但和软件环境有一定的关系。标准的环境是在MS-DOS环境下用MASM5.0,在这种条件下,所有参考程序均测试通过。在实践中,大部分也可在Windows95,Windows98,Windows2000/NT和WindowsXP的DOS窗口实现。
38、课程设计的第二部分,用到了微机原理与接口课程中学习的各种芯片。在现在的微机系统板上,并没有发现这些芯片,但在做设计时,程序却都能正常运行,这里我们有必要说明一下课程设计中用到的各种功能芯片和芯片组的关系。在学习危机原理和接口课程时,一般教材都是使用单功能的芯片来教学。不过在实际应用中,由于计算机技术的发展,在硬件方面,集成电路的规模不断提升,原来由各个单一功能集成电路的接口以被更高集成规模的芯片组所取代,由数量很少的芯片组代替了传统的数量较多的接口芯片。但系统仍然保持有很好的向下兼容性,标准接口的传统端口地址基本保持未变,如串口地址,并口(打印口)地址等都没有改变。这样,我们在做设计时,可以理
39、解为现在的芯片组是原来各个单一功能接口集成电路组成在一起,可以继续使用学过的知识分析设计。如从功能上来说,它们仍然实现:8253的计数器/定时器功能,8255的并行接口功能,8259的中断控制功能,8237的DMA控制器功能和8250的串行通信功能。所以,这部分内容在微机上就可实现,而不需要外加设备。课程设计第三部分用的不是微机系统自身具备的接口,因此就和所用的实验台相关。实验台决定了可做的设计内容。本书中所做的课程设计在目前流行的几种实验台都可实现。第3章 简单项目的课程设计3.1 汇编语言部分 汇编语言是危机原路和接口技术的基础,微机主机和接口所要实现的功能都要通过汇编语言来实现.尽管汇编
40、语言设计程序有变成效率低的特点,但其运行效率高、速度快,并且特别社和很多特殊应用的场合,如加密解密、病毒分析和防治、软件破解等。这些在应用方面的优点是其他语言不可比拟的,而对硬件的直接控制更是其特长。因此,在很多高级语言(如C+)中都可嵌入用汇编语言编写的程序段,以实现优势互补,发挥各自的长处。 由此可见,掌握汇编语言是学好微机原理和接口设计的第一步。 本节有浅入深地安排了几个课程设计,用来学习和实现汇编语言的基本方法。 这是一个非常经典的问题,在学习各种语言时都会遇到这个问题,汇编语言的课程设计也从解决这个问题开始。【设计内容】 判断某年是否为闰年。【设计目的】1) 学习分支、中断和逻辑表达
41、。2) 熟悉汇编语言程序的编译、链接过程。【设计要求】从键盘输入年份,通过计算后,输出该年份是否为闰年的信息。【设计思路】利用DOS 21H中断类型的10号键盘功能调用,将从键盘接受的表示年份数值的字符串按字节存入缓冲区。将字符串中的每个字符转换为对应的十进制数值(利用09这10个数的ASC码值比其本身大30H的关系),利用判断某年是否为闰年的表达式,输出该年是否为闰年的信息。解决本问题的关键是找到判断闰年的方法。判断闰年的规则是:如果某一年能被4整除但不能被100整除或者该年能被400整除,则该年为闰年。判断某年是否为闰年的汇编语言表达式为:(AX) MOD 4 EQ 0)AND(AX) M
42、OD 100 NE 0) OR (AX) MOD 400 EQ 0)其中,(AX)中存放的是从键盘输入的年份值。图3-1为本程序的参考流程图。 设计内容设计一个驻留系统的时钟。设计目的1)学习系统驻留的方法。2)了解BIOS中时间参数的调用方法。设计要求在屏幕右上角显示时间。用“时: 分:秒”(都是两位)的形式连续显示系统时间。设计思路利用BIOS的INT 1AH的2号系统功能调用,将计算机系统的时间参数(BCD码)送入寄存器。其中CH和CL中保存的是小时数和分钟数,DH和DL中保存的是秒钟数和百分之一的秒钟数。将用BCD码表示的时、分、秒转换成ASCII码并送入CRT显示器。整个程序的结构如
43、图32所示。要结束一个户进程,有几种实现方法。用户程序通常采用4CH功能调用返回DOS,该项功能调用、终止一个程序的运行,并把控制权转交DOS,同时也把用户程序占用的内存空间交给DOS,由DOS另行分配。从程序员的角度来看,一个程序执行完毕,并返回DOS之后,程序在内存中就不复存在,若想再次运行该程序,就要再次把它调入内存。驻留程序(Terminate and Stay Resident Program,简称TSR程序)则和上述的一般方法不同。TSR程序是特殊的中断服务程序,TSR程序常驻内存,它占用的内存空间受 DOS的保护,不会被后来装入的程序覆盖。TSR程序平时“潜伏“在后台,处于休闲状
44、态,一旦激活,它将中断前台的应用程序。系统中的许多输入/输出驱动程序都是常驻内存的,用户也可以设计TSR程序。驻留程序增强了微机系统的功能,从宏观上讲,使得CPU可以“同时执行“许多程序,其中包括前台程序,以及其他驻留程序。设计TSR程序要考虑很多问题,下面仅就一些主要问题作简要的分析。驻留程序的设计方法如下。1.实现程序驻留 DOS为实现程序驻留提供了以下两种方法:(1) DOS中断INT 27H 功能: 实现程序驻留,返回到DOS。 入口参数:l CS: 被驻留程序的PSP基址,即程序被装入时的DS或ES值。l DX: 被驻留程序的字节数,包括被驻留程序的PSP段。出口参数: 无。使用IN
45、T 27H实现程序驻留比较简便,它特别适合按照COM格式编写的源程序,INT 27H可驻留的目标代码所占内存空间小于64KB 256B。(2)INT 24H的31H号功能 功能: 实现程序驻留,返回到DOS。 入口参数:l AH = 31Hl DX = 被驻留程序的长度(包括被驻留程序的PSP段),单位是“节”,一节等于16个字节。2.避免“DOS重入”简单的说,当程序正在执行INT 21H的某项功能时,该项功能调用还没有结束,又被另一个程序中断,中断第一个程序,又再次调用INT 21H,这种现象称为“DOS重入”。驻留程序是特殊的中断服务子程序,驻留程序的激活是随机的,在驻留程序激活后,它所
46、中断的前台程序是无法预料的。当前台程序正在执行“INT 21H”的某项功能时,驻留程序被激活,CPU暂停执行前台程序的“INT 21H”,则CPU又要“重新进入”DOS。由于DOS是单任务操作系统,INT 21H的大部分功能调用是不允许重入的。如果强行重入DOS,很可能使系统瘫痪,因此驻留程序要避免DOS重入。1) 避免DOS重入最简单的对策是:在驻留程序中避免使用DOS功能调用。如果驻留程序涉及到键盘输入、屏幕显示、字符打印等项操作,应当避免使用INT 21H的10CH功能调用,而改用相应的BIOS功能调用。例如,驻留程序需要向屏幕输出一串字符,如果用INT 21H的9号功能,很可能造成DO
47、S重入而死机。改用INT 10H,用它的13H号功能,或者直接对“视屏映像区”写入,就不会发生DOS重入的灾难了。2) 避免DOS重入的最稳妥的办法是: 在中断程序中查询“DOS忙闲标志”,在确保DOS空闲的条再调用DOS功能。DOS忙闲标志占用一个字节(称为INTDOS单元)该字节为0表示DOS空闲,非0表示忙。DOS有一个未公开的34H号功能调用,它提供了DOS忙闲标志的物理地址。该项功能调用格式如下。入口参数:AH = 34H出口参数:ES: BX = DOS忙闲标志所在单元的段地址: 偏移量在驻留程序的初始化部分(这一部分是不被驻留的)使用INT 21H的34H号功能,读取DOS忙闲标
48、志的物理地址,并存入驻留程序的数据单元。在驻留程序被激活后,进行DOS服务之前,再根据获取的地址信息,查询DOS忙闲标志,在确保DOS空闲的条件下,再调用DOS功能。本节只介绍驻留程序的设计方法,驻留程序通常还有解驻程序。大家可以自学解除驻留的机理,并在此基础上设计解驻程序。【思考题】1. 学习中断的基本原理和方法,将原设计改造成一个解驻的程序。2. 设计一个可以根据需要用热键开关的驻留程序。3.1.3 代码转换【设计内容】编程实现大小写字母、二进制数和十六进制数之间的转换以及十六进制数向十进制数的转换。【设计目的】1) 学习数值和非数值的相互转换方法。2) 多文件的链接方法。3) 过程间的相
49、互调用。【设计要求】按屏幕提示要求输入,从屏幕上获得正确结果。【设计思路】在计算机系统中有多种数制和编码,常用的数制有二进制、八进制以及十六进制,常用的代码有BCD码、ASCII码和七段显示码等。这些数制和编码根据其作用的不同,在存储形式上也有差异。在实际应用中,它们也因使用的要求不同而有所差异。在配备操作系统管理程序的计算机中,有些代码转换程序已在系统管理软件中编好。还有些代码转换需要根据使用要求通过变成完成。因此,代码转换是非数据处理中最常见的情况。本程序共由7个模块组成,其中ZCX为主模块,调用模块1和模块6,模块1又调用模块2、3、4和5四个模块。1.模块说明模块2实现小写字母向大写字
50、母的转换,主要利用小写字母比大写字母大20H的关系。模块3实现大写字母向小写字母的转换,与模块2类似,将大写字母的ASCII值加上20H就可以转换成小写字母。模块4实现二进制向十六进制的转换,用循环左移指令ROL每次移动4位,取出移到最低的4位,利用十六进制数所对应的ASCII码比其本身大30H(09)或37H(AZ)的关系,将低4位转换成对应的ASCII码,再调用DOS系统功能调用中的2号(显示字符)功能,将转换后的字符显示出来,如此循环4次。 模块5实现十六进制数向二进制数的转换,完成此功能需要两个步骤,第一步是十六进制数的输入和对应二进制数的转换。方法是利用DOS系统功能调用中的1号输入
51、字符的功能,接收键盘输入的十六进制数,将其转换成对应的二进制数(若是09之间的数,直接屏蔽高4位;若是每次将BX左移4位,然后与下一次转换后的数相加,如此循环4次,得到对应的二进制数。第二步是显示转换后的二进制数,方法是利用ROL和RCL指令,从最高位起循环取出每位二进制数,将其转换成对应的ASCII码,调用DOS系统功能调用中的2号(显示字符)功能显示。 模块6六进制数向十进制数的转换。十六进制向十进制的转换分成两个大步骤,一是从十六进制向二进制的转换,由于十六进制和二进制的特殊关系,它们之间的转换非常简单。二是从二进制转换为十进制,相对而言,这种转换复杂一些。所以该模块的核心是实现二进制数
52、向十进制数的转换。方法是将要转换的二进制数预先放到AX寄存器中,判断AX中数的符号,若为负数,则将负号送入输出缓冲区,并求X的绝对值;若AX中数的为正数,则不做其他处理,此时AX中即为无符号二进制数。然后将无符号二进制数转换为十进制数,可采用将AX除以10,得到第一个商和第一个余数,第一个余数就是所求十进制数的个位: 将第一个商除以10,得到第二个商和余数,第二个余数就是所求十进制数的十位数,重复以上过程,一直循环到商为0时,得到的余数就是所求十进制数的最高位数,这就是数制转换中常用的“除模留余倒排列”法则。整个程序采用远程过程调用的方法显示,程序结构如图3-3做示。1. 操作说明需要对各个模
53、块文件单独汇编,生成七个目标文件。1) 连编命令为: zcx+1+2+3+4+5+6,生成可执行文件zcx.exe。2) 双击可执行文件zcx.exe即可运行程序,在出现的主界面中,输入“b” 开始转换;输入“q”退出。【思考题】 改进程序,增加二、十进制之间的相互转换。输入输出显示【设计内容】 编写一个程序,要求从键盘上连续输入多个字符,当遇到“.” 时终止,然后以与输入相反的顺序将该字符串在屏幕上显示出来。【设计目的】 学习键盘输入和屏幕输出,并学习堆栈的使用。【设计要求】用“先进后出“的设计思路,使用堆栈技术,结合DOS的中断调用,实现输入字符串的倒叙显示。【设计思路】 本设计的关键在于
54、正确的使用堆栈。 首先将字符依次压入堆栈,等待结束字符“.”,当接收到结束字符时,从堆栈中依次弹出字符并显示。由于堆栈的特点是先入后出,正好实现了输入字母的倒叙显示。在编程过程中要设置一个计数器,统计输入的字符,以便从堆栈中弹出的字符和输入的字符相等,以免出错。 参考流程图见图3-4。【思考题】 编制一个程序,完成倒叙显示并将输入字符全部以大写字母形式输出。 BCD码相乘【设计内容】 编写两个单字节组合BCD数的乘法程序,在屏幕上显示两个乘数及计算结果。【设计目的】1) 掌握用组合BCD码表示数据及组合BCD数加(减)法的方法。2) 熟悉实现组合BCD数乘法运算的方法。【设计要求】给定两个单字
55、节组合BCD数,将两个数相乘,输出显示计算结果。【设计思路】由于没有组合BCD码乘法指令,因此在程序中可采用将乘数1作为计算器,累加另一个乘数的方法得到计算结果。程序流程图如图3-5所示【思考题】 若进行两字节甚至多字节组合BCD数乘法,将怎样进行编程呢?试提出两种以上的计算方法。【设计内容】编写计算N!的程序。数值N由键盘输入,结果在屏幕上输出。【设计目的】通过编制一个阶乘计算程序,了解怎样在汇编语言一级上实现高级语言中的数学函数。【设计要求】N的范围为065535,即不超过一个16位寄存器的容量。【设计思路】本课程设计的流程如图3-6所示。 1) 编制阶乘程序的难点 本课程设计的难点在于随
56、着N的增大,其结果远非寄存器所能容纳,这就必须把结果放在一个内存缓冲区中,然而乘法运算只限于两个字相乘,因此要确定好算法,依次从缓冲区中取数,进行两字相乘,并将DX中的高16位积作为产生的进位。2)算法 阶乘的定义为N!= N × (N-1) × (N-2) ×× 2 × 1,从左往右依次计算,结果保存在缓冲区BUF中。缓冲区BUF按结果由低到高依次排列。程序首先将BP初始化为N,N不等于0或1则将N送入BUF缓冲区最低字单元中。然后使BP为N-1,以后BP依次减1,直至变化到1为止。每次让BP与BUF中的字单元按由低到高的次序相乘。低位结果AX仍保存在相应的BUF字单元中,高位结果DX则送到进
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 阶段述职报告(7篇)
- 德邦物流个人心得体会
- 第二学期小班家长会发言稿(11篇)
- 煤矿个人警示教育心得体会5篇
- 总监年会获奖感言300字(3篇)
- 2024年二手奢品项目资金需求报告代可行性研究报告
- DB12 764-2018 铸锻工业大气污染物排放标准
- 2024-2025学年河南新高中创新联盟TOP二十名校高三上学期语文试题及答案
- 资产评估学教程-练习答案7
- 四年级数学(简便运算)计算题专项练习与答案
- 家长会教学课件
- 律师事务所律师事务所风险管理手册
- 广东省邮政公司招聘2024年应届高校毕业生(152人)高频难、易错点500题模拟试题附带答案详解
- 安徽省亳州市黉学英才中学2024-2025学年七年级上学期期中生物学试题(含答案)
- 四川省绵阳市高中2022级第一次诊断性考试数学试题(解析版)
- DB11∕T 353-2014 城市道路清扫保洁质量与作业要求
- 2024年代步车使用协议书模板
- 2024-2030年全球及中国IT服务管理(ITSM)软件行业市场现状供需分析及市场深度研究发展前景及规划可行性分析研究报告
- 沪粤版初中物理八上八年级上学期物理期中试卷(解析版)
- 江苏省苏州市苏州工业园区苏州工业园区景城学校2023-2024学年八年级上学期期中数学试题(解析版)
- 五年级上册数学试题试卷(8篇)
评论
0/150
提交评论