《微机原理与系统软件实验指导书教学内容.doc》由会员分享,可在线阅读,更多相关《微机原理与系统软件实验指导书教学内容.doc(51页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Good is good, but better carries it.精益求精,善益求善。微机原理与系统软件实验指导书-微机原理及接口技术实验指导书2010年9月信息学院实验中心微机实验室第一章 80X86微机原理及其程序设计(软件部分)实验一软件程序设计(1.熟悉PC机的使用和调试汇编程序的方法2.简单程序设计)一.实验目的:1.掌握汇编程序由编辑、编译、链接到调试的全过程。2.通过汇编调试工具加深对机器指令执行过程的了解。3.利用汇编调试工具加深对机器指令和伪指令的了解二.实验要求:1.了解PC机的系统类型和基本配置,熟悉PC机DOS和WINDOWS下的基本操作。2.掌握使用UltraE
2、dit等编辑器对汇编语言源程序(存储后扩展名为.ASM)的编辑操作。3.学会用宏汇编程序MASM(或TASM)对.ASM文件进行编译(编译后扩展名为.obj)。4.使用链接程序LINK(或TLINK)对.OBJ文件链接生成.EXE文件。5.学会用汇编调试工具软件TD(或DEBUG)对.EXE文件进行调试进一步深对机器指令的了解、执行程序、检查运行结果的方法。6.简单程序是构成复杂程序的基础。简单程序又称顺序程序,顾名思意,就是为完成一简单的目的,采用一串指令序列,按顺序逐条执行。在简单程序执行过程中,每条指令只执行一次,同时由于没有转移,一般不考虑对标志的影响。象所有汇编程序设计一样,编程前,
3、应考虑如何分配CPU中的寄存器和内存中单元等,要考虑到指令本身的特点和要求分配寄存器,例如,如果希望使用乘法指令进行乘法,根据指令的要求,必须要使用AL或AX作为被乘数,在这种情况下,AL或AX就必须考虑为存放被乘数,当然,乘积应该是放在AX或DX:AX中。1.掌握汇编程序的基本结构及设计方法,包括:A汇编语言源程序结构B基于汇编级的解题算法C寄存器和存储器的内容分配D简单汇编程序的设计E返回系统的方法2.掌握对自编程序的调试及出错修改的方法,包括:A汇编程序的编辑、编译、链接及调试B在调试程序过程中发现语法错误的处理方法C在调试程序过程中如何发现逻辑错误及处理方法3.利用调试工具软件对课堂中
4、讲授的机器指令、伪指令、操作符、运算符等内容加深了解三.实验仪器:PC机一台四.实验内容:汇编程序的编程环境有以下二种方式:1.Dos窗口下命令行方式2.UltraEdit方式其中第一种Dos方式,是指进入Dos窗口模式编辑源文件,用命令行方式直接调用Tasm,Masm等编译工具进行程序的编译、链接、调试,而后两种工作方式都是在Windows下进行源文件的编辑,而编译和链接仍然是通过调用Tasm,Masm等编译工具完成相应工作。为了方便我们现在一般采用后一种编程环境。下面我们分别介绍:UltraEdit方式UltraEdit是Windows下非常优秀的文本编辑软件,有很好的可配置性,支持语法高
5、亮等。通过配置UltraEdit,可实现在UltraEdit环境下编辑汇编源程序、汇编、连接、调用TDebug调试非常方便。配置完成后,可实现快捷键调用各编译、连接、调试功能。实验机器上已经预配置好了。使用说明:1.打开UltraEdit,编辑并保存汇编源文件。先新建一个文件,并保存为.asm为后缀的文件,此后,可以有语法高亮指示。输入汇编程序并保存。2.编译UltraEdit菜单栏高级masm编译(或Tasm编译)此菜单会调用masm.exe或tasm.exe,输出结果放在当前编辑屏幕的下方。3.链接UltraEdit菜单栏高级Link链接(或Tlink链接)此菜单会调用Link.exe(m
6、l.exe)或tlink.exe,输出结果也放在当前编辑屏幕的下方。4.调试UltraEdit菜单栏高级Td调试此菜单会新开一个dos窗口,在其中运行td.exe,可利用单步跟踪和设置断点等方式进行调试,调试完毕,ALT+X退出Td环境,exit返回即可。另:DOS窗口模式与全屏模式的切换键:Alt+Enter调试最好在全屏模式下。例1.输入以下程序,完成由编辑、编译、链接到调试的全过程。在调试过程中应使用单步跟踪、断点等方法调试,注意观察寄存器、标志位和有关存储器内容的变化。A.将S1(BYTE),S2(WORD)和S3(DWORD)中内容送至D1,D2,D3注意:以下程序有误,在调试过程中
7、加以修改使之正确DATASEGMENTSS1DB1234HSS2DWEA32HSS3DD12345678HDD1DB0DD2DW?DD3DW?DATEENDSCODESEGMEMTASUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAL,SS1MOVDD1,ALLEASI,SS2LEADI,DDMOVAX,SIMOVDI,AXMOVSI,OFFSETS3MOVDI,OFFSETD3MOVAX,SIMOVD3,AXINCSIINCDIMOVAX,SIMOVDI,AXMOVAX,4C00H;返回系统INT21HCODEENDSENDSSTRATB.完成两个
8、长整数相加的汇编程序要求:调试过程中应更改必要的参数值,以验证程序的正确性,例如本题可修改加数和被加数以判别最高位进位处理是否正确。并将该程序修改为减法操作重新调试。DATASEGMENTNUMBEREQU6BUFFER1DB12H,0E2H,33H,43H,12HBUFFER2DB22H,0A2H,55H,0F2H,3FHRESULTDBNUMBERDUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVCX,NUMBER-1MOVSI,OFFSETBUFFER1;被加数指针MOVDI,OFFSETBU
9、FFER2;加数指针LEABX,RESULT;和指针XORAX,AX;清CF标志NEXT:MOVAL,SIADCAL,DI;带进位相加MOVBYTEPTRBX,AL;保存部分和INCSI;变动指针INCDIINCBXLOOPNEXT;循环控制ADCAH,0;最高位进位MOVBYTEPTRBX,AHMOVAX,4C00H;返回系统INT21HCODEENDSENDSTARTC.完成数据块的移动,并利用TD观察内存中数据移动过程。DS_DATASEGMENTBUFFER1DB0,1,2,3,4,5,6,7,8,9DS_DATAENDSES_DATASEGMENTRESULTDB10DUP(?)ES
10、_DATAENDSMY_CODESEGMENTASSUMECS:MY_CODE,DS:DS_DATA,ES:ES_DATASTART:MOVAX,DS_DATAMOVDS,AXMOVAX,ES_DATAMOVES,AXMOVSI,OFFSETBUFFER1MOVDI,OFFSETRESULTMOVCX,10REPMOVSBMOVAX,4C00HINT21HMY_CODEENDSENDSTART例2.在汇编调试工具软件的环境下,完成下列指令的执行,注意选取有代表性的数据,并观察指令执行前后的数值变化:例如:观察MOVAX,BX指令在TD或DEBUG下将AX,BX分别置不同的值,写入MOVAX,B
11、X指令然后执行,再观察AX,BX寄存器的内容。A.XCHGB.XLATC.LDS和LESD.MUL和IMULE.CBW和CWD分正数和负的情况F.移位和循环指令例3在屏幕上输出字符串Hellotheworld!代码如下:DATASEGMENTBUFFERDBHellotheworld!,0DH,0AH,$DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEADX,BUFFERMOVAH,9INT21HMOVAX,4C00HINT21HCODEENDSENDSTART五.实验习题:1.用多种寻址方式将数据段中定义的A
12、1(字),A2(字),A3(双字)的数据分别送至附加段B1,B2,B3单元。2.将A中的大写英文字母转换成相应的小写字母。例:A:45H(E)65H(e)3.将A中数据(=9)的平方存至B中。例:A:6B:24H(36)4.将一个压缩的BCD数转换成相应的ASCII码。例:56H35H(5),36H(6)5.有一种加密方法是首先在被加密的所有符号中建立其一一对应的符号,例如:0-2,1-7,2-1,3-6,4-95-0,6-8,7-3,8-4,9-5然后将数据进行变换后存储,即当源数是6时,保存的数据是8,这样就可以达到保密的效果。试编一程序完成十六进制数的加密和解密程序。6.完成分别将两个压
13、缩BCD数据和非压缩BCD数据相加的程序(加数和被加数及和小于9999)。7.完成两个32位数的乘法程序。例:01234567H*89ABCDEFH=9CA39DC94E4629H(选做)8.利用串操作指令完成两串数据的比较,结果用RESULT单元为00H和0FFH表示相同或不相同。例:String1:ABC,String2:ABC则RESULT:00HString1:ABC,String2:ADC则RESULT:0FFH9.利用串操作指令统计以$(ASCII码为24H)为结束的字符串中字符的个数。例:String:STUDY$则RESULT:510.按本实验要求,自编一程序。实验二软件程序设
14、计(1.汇编分支程序设计2.汇编循环程序设计)一.实验目的:掌握分支程序设计和调试方法以及掌握循环程序的设计和调试方法二.实验要求:分支程序的基本设计方法包括:1.掌握利用条件转移指令方法2.了解利用跳转表方法3.了解利用逻辑尺方法4.掌握循环程序的基本结构及设计方法,包括:A循环程序的循环初始化、循环体及循环控制条件B多种循环控制条件C循环体中的指针变化了解多重循环程序的设计方法三.实验仪器:PC机一台四.实验内容:A.分支程序内容分支结构是程序设计的基本结构,它们在执行过程中,或直接更改或通过对标志的判别,实现更改程序按顺序执行的次序,这些更改是通过对IP(段内)或CS:IP(段间)的修改
15、完成的,而实现对这些寄存器的修改是通过无条件转移和有条件转移完成的。1.无条件转移无条件转移采用的是无条件转移指令,即JMP类指令,在8086汇编中,JMP类指令根据需要转移的目的不同,分成短JMP(SHORT),段内JMP(NEAR)和段间JMP(FAR),其基本格式如下:短跳转:JMPTTT;TTT在该跳转指令的127字节之内段内跳转:JMPTTT;TTT是段内NEAR型定义的标号JMPNEARPTRTTTJMPCX;利用寄存器中内容替换IPJMPWORDPTRBX;利用内存中某字单元内容替换IP段间跳转:JMPFARPTRTTT;TTT是FAR型标号JMPDWORDPTRBX;利用内存中
16、双字单元内容替换IP和CS严格地说,SHORT跳转不是当前JMP指令的127字节之内,计算机实际操作过程是将该指令读入后的IP,即JMP当前地址加2后的IP与指令中八位的偏移量相加,然后替换IP,所以,若以JMP指令的位置为准的话,则是-126至+129之间。SHORT和NEAR型一般由汇编时自动区分,应指出的是,条件转移采用的都是SHORT型,因此,当源和目的较远时(即超出SHORT范围),应在较近的位置设置一条JMP指令,以实现不同位置的跳转。2.条件转移条件判别指令是条件转移程序设计的基础,掌握指令如何对标志的影响及如何利用条件转移指令达到程序分支的目的。如前所述,条件转移的跳转距离都是
17、SHORT型。对跳转的条件判别根据判别的条件分两类,一种是单条件的判别,另一种是复合条件的判别,对单条件判别,主要对单一的标志位进行测试,如判CF标志,判SF标志等,而复合条件则是对多标志位进行判别,其标志的影响一般是由数值运算后决定的,如带符号数大于等于的条件判别等。尽管复合条件需多标志判别,但在8086指令助记符中与单条件转移指令没有区别。单条件判别指令如下:(1)JC或JNC根据进位标志CF进行转移(2)JE/JZ或JNE/JNZ根据零标志ZF进行转移(3)JS或JNS根据符号标志SF进行转移(4)JO或JNO根据溢出标志OF进行转移(5)JP/JPE或JNP/JPO根据奇偶标志PF进行
18、转移根据操作数的不同,分无符号数和带符号数的判别,对无符号数有A(高于)B(低于),带符号数有G(大于)L(小于)等判别。为了方便起见,其指令助记符对同一种条件可能有多种表示方法,如:JGE与JNL的条件判别条件是相同的,使用者根据习惯和需要选取其中的一种表示。无符号数判别指令如下:1.JA/JNBE高于(不低于等于)转移2.JAE/JNB高于等于(不低于)转移3.JB/JNAE低于(不高于等于)转移4.JBE/JNA低于等于(不高于)转移带符号数判别指令如下:1JG/JNLE大于(不小于等于)转移2JGE/JNL大于等于(不小于)转移3JL/JNGE小于(不大于等于)转移4JLE/JNG小于
19、等于(不大于)转移3.分支程序设计有条件转移程序是分支程序主要部分,这样的分支程序是根据当前运算的结果去判断选择不同的程序段执行,反之,如果要求是根据不同的情况,完成不同的任务,则需要使用分支程序结构来实现。如上述,程序的分支是根据标志决定的,所以,如何影响标志及如何利用标志是分支程序的重点,例如,判断AX中内容是否是负数,我们可用多种方法实现:方法1ANDAX,AX;影响SF标志JSMINCE;为负数转入负数处理.方法2CMPAX,0;影响SF标志JSMINCE;为负数转入负数处理.方法3TESTAX,8000H;影响ZF标志JNZMINCE;为负数转入负数处理.方法4ADDAX,AX;影响
20、CF标志JCMINCE;为负数转入负数处理.方法5SHLAX,1;影响CF标志JCMINCE;为负数转入负数处理.还可以举出其它方法由上例可以看出,同样的目的可用不同的方法去影响不同的标志,采用不同的跳转指令来实现,显然,要编好分支程序,首先应掌握指令对标志如何影响,这也是汇编程序设计的特点之一。本实验中有输入和显示。以下列出简单的字符输入和显示的程序,注意,它们都是以ASCII码方式体现的。1.由键盘读入字符的程序:MOVAH,01;功能号INT21H;系统调用读入字符MOVINPUT_CHAR,AL;AL为输入的字符的ASCII码值2.由屏幕显示字符的程序:MOVAH,02H;功能号MOV
21、DL,#;DL:显示字符的ASCII码INT21H;系统调用显示字符例1.设计一数据块间的搬移程序。设计思想:程序要求把内存中一数据区(称为源数据块)传送到另一存储区(成为目的数据块)。源数据块和目的数据块在存储中可能有三种情况,如图所示图1.3.1内存中源数据块和目的数据块的三种可能情况对于两个数据块分离的情况,如图1.3.1(a),数据的传送从数据块的首地址开始,或从数据块的末地址开始均可。但是对于有重叠的情况,则要加以分析,否则重叠部分会因“搬移”而遭到破坏,可有如下结论:当源数据块首地址目的块首地址时,从数据块末地址开始传送数据,如图1.3.1(b)所示。当源数据块首地址目的块首地址时
22、,从数据块首地址开始传送数据,如图1.3.1(c)所示。实验程序流程图如图所示实验程序清单:SSTACKSEGMENTSTACKDW64DUP(?)SSTACKENDSCODESEGMENTASSUMECS:CODESTART:MOVCX,0010HMOVSI,3100HMOVDI,3200HCMPSI,DIJAA2ADDSI,CXADDDI,CXDECSIDECDIA1:MOVAL,SIMOVDI,ALDECSIDECDIDECCXJNEA1JMPA3A2:MOVAL,SIMOVDI,ALINCSIINCDIDECCXJNEA2A3:JMPA3CODEENDSENDSTARTB.循环程序内容
23、在设计循环程序时,可用控制指令来控制循环是否继续,该指令可用来管理程序循环的重复过程。这些指令的特点是用CX寄存器作为循环控制计数器,与条件转移指令一样,都是短距离转移指令,循环控制指令所给出的目标地址与下一条指令的首地址的距离只能在-128127之间。例1.将AX中16进制数转换为10进制数输出如AX=47EH输出1150其流程图如下:程序如下:CODESEGMENTASSUMECS:CODESTART:MOVAX,47EHMOVCX,0MOVBX,10DISP1:MOVDX,0DIVBXPUSHDXINCCXORAX,AXJNEDISP1DISP2:POPDXMOVAH,2ADDDL,30
24、HINT21HLOOPDISP2MOVAX,4C00HINT21HCODEENDSENDSTART五.实验习题:1.将一个字节的十六进制数转换成对应的ASCII码。例:3EH33H(3),4EH(E)2.编写可接受10个键盘命令(A,B.J),完成分别转向P1,P2,.P10的程序。P1,P2,.P10程序用P1,P2,.P10显示表示。3.将10个十六位带符号数中正数相加。例:3543H,5943H,-3578H,-3432H,4523H,3323H,-5634H,54EFH,-5423H,7230H则1CDEBH4.编写在一串数据中统计正数,负数和零的个数并加以显示。例:34H,-3BH,
25、-5AH,72H,0,-2DH,0,66H则正数:3,负数:3,零:25.统计某十六位数中1的个数并加以显示。例:0101001100101110B则86.一种数值滤波的方法是将相邻的两数求平均值,试编程序实现。7.将字符串1插入字符串2的中间,其位置由键盘输入。8.在一已排序的数组中插入新的数据,插入新数据后的数组仍满足排序要求。9.编写一串在带符号数中找出最大数和最小数的程序。例:35H,32H,73H,10H,08H,0FH,2AH,3BH则:最大数73H最小数08H10.统计一组数据(BYTE)中D3D2D1位相同的个数并加以显示。11.编写一程序完成无符号数的排序程序(由大到小)。例
26、:34H,67H,0E2H,0A7H,89H,73H,51H,43H,0E2H,0A7H,89H,73H,67H,51H,43H,34H实验三软件程序设计(简单DOS和BIOS调用汇编程序设计)一.实验目的:掌握简单DOS系统功能和BIOS的调用方法二.实验要求:1.掌握DOS系统功能调用方法A.了解DOS系统调用所完成的功能B.掌握如何根据题目要求利用系统调用完成所需的功能C.掌握系统调用的方法,包括入口参数设置,功能号设置,系统调用和出口参数获得2.掌握BIOS调用方法三.实验仪器:PC机一台四.实验内容:BIOS和DOS是两组系统服务软件集合,它们使用户能够访问和使用PC机的硬件,也可以
27、这么说,对一个汇编程序编程者来说,如果要使用PC机硬件的话,一般是采用BIOS和DOS调用来实现。在使用MS-DOS的PC机上使用硬件的基本方法有以下三种:1.直接访问硬件使用PC机硬件资源最直接的方法是通过编写使用IN和OUT指令程序来实现,编写直接访问硬件的程序需要编程者对所使用硬件的控制非常熟悉,包括口地址,控制命令,硬件结构等,这些,对一般的编程者来说,要掌握是有一定难度的,同样,即使是编程者掌握了必要的硬件知识,但由于直接访问所要考虑的因素较多,也会使编写的程序相当繁杂,增加了调试程序的困难,另一方面,编程者按自己的要求设置硬件的工作方式,有可能会影响整个系统的运行,另外,采用直接访
28、问硬件的编程方法编制的程序,其可移植性相当差,在一个机器上运行的程序,换到另外一个厂家生产的机器上有可能无法运行,因此,如果不是为了获得更高的执行效率和获得DOS和BIOS不支持的功能,程序员应避免采用该方法。2.使用BIOS调用BIOS称为基本输入输出系统,由DOS-BIOS和ROM-BIOS两部分组成,它是计算机硬件和其它程序之间的第一道缓冲。BIOS直接和外设通讯,完成设备一级的控制,并附有其它的实用服务功能,它为编程者提供了一个简单的软件接口以避免和外设直接打交道,这样,可以降低编程者对硬件要求的了解程度,简化使用PC机硬件资源的程序,而BIOS是PC机的标准软件接口,具有兼容性,提高
29、了编制程序的可移植性。采用BIOS功能调用主要是为了得到较高的运行效率(与DOS功能调用相比),或者需要利用DOS不具备的某些功能.。BIOS调用最常见的是在显示器的控制程序中,不同的显示器会增加相应的BIOS功能。3.使用DOS调用DOS在更高层次上给出了与BIOS相同的功能,一般说来,DOS调用需要的入口,出口参数较BIOS简单,调用也容易,方便,不需要编程者对硬件有更多的了解,通过调用DOS,还可以充分利用操作系统提供的所有功能,编制的程序可移植性也较高。与BIOS相比,DOS完成的功能没有其丰富,即对于某些特殊的要求,DOS调用也许不能实现,此外,DOS调用的执行效率也比BIOS低。应
30、该使用哪种方法选择哪种方式应根据不同的需要来选择,首先必须是以完成任务为目的,一般按DOS,BIOS到硬件直接控制的顺序选择,另外,好的编程者还要根据程序应用的场合,权衡程序的可移植性,编程的复杂性和目标代码长短等因素选择相应的方式。此外,在选择DOS调用时,因注意操作系统的版本,一般的高版本的操作系统兼容低版本。DOS功能调用的一般步骤为:1.如有必要,装入入口参数到规定的寄存器;2.装入功能号到AH中;如有必要,装入子功能号到AL中;3.调用DOS相应功能的中断(这里一般指INT21H);4.如有必要,取出返回结果或出错信息.例1:利用Dos系统功能调用将输入的小写字母转换成大写输出如:键
31、盘输入abcdef在屏幕上换行输出ABCDEF程序清单:DATASEGMENTBUFDB10DB?DB10DUP(0)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEADX,BUFMOVAH,10INT21HMOVAH,2MOVDL,0DHINT21HMOVDL,0AHINT21HLEABX,BUFMOVCX,0MOVCL,BX+1ADDBX,2A1:MOVDL,BXSUBDL,20HMOVAH,2INT21HINCBXLOOPA1MOVAX,4C00HINT21HCODEENDSENDSTART例2:编写实验
32、程序,利用BIOS调用在显示器上的输出窗口显示AZ共26个大写英文字母。显示I/O功能调用使用说明如下:INT10H使用说明入口:AH00H,AL01H功能:清屏入口:AH01H,AL数据功能:写AL中的数据到显示屏上入口:AH06H,DS:BX字串首地址,且字符串尾用00H填充功能:显示一字串,直到遇到00H为止实验程序清单:SSTACKSEGMENTSTACKDW64DUP(?)SSTACKENDSCODESEGMENTASSUMECS:CODESTART:MOVCX,001AHMOVBL,41H;A的ASCII码值MOVAH,01HA1:MOVAL,BLINT10H;功能调用INCBLP
33、USHCXMOVCX,0FFFFHA2:LOOPA2POPCXDECCXJNZA1A3:JMPA3CODEENDSENDSTART五.实验习题:1.在键盘上输入十个一位的十进制数,相加后在屏幕上显示。参考系统调用:A.键盘输入并回显INT21H功能01HB.显示输出INT21H功能02H2.在屏幕上显示Whatisyourname?,输入自己姓名后显示MynameisXXX。参考系统调用:A.显示字符串INT21H功能09HB.键盘输入到缓冲区INT21H功能0AH3.在屏幕上显示ASCII字母表。4.将当前键盘状态在屏幕上显示,用ON/OFF表示。参考系统调用:A.读当前键盘状态INT16H
34、功能02H入口参数:无出口参数:AL:当前状态76543210.1RIGHTSHIFT键按下.1.LIFTSHIFT键按下.1.CTRL键按下.1.ALT键按下.1.SCROLLLOCK键按下.1.NUMLOCK键按下.1.CAPSLOCK键按下1.INS键触发5.在屏幕上显示系统日期和时间,用英文表示星期几。参考系统调用:A.取系统日期INT21H功能2AH(置系统日期2BH)入口参数AH=2AH出口参数CX=年(19802099)DH=月(112)DL=天(131)AL=星期几(0:星期天,1:星期一.)B.取系统时间INT21H功能2CH(置系统时间20H)入口参数AH=2CH出口参数C
35、H=小时(023)CL=分(059)DH=秒(059)DL=百分秒(099)6.在键盘上输入等待时间(毫秒)后,屏幕上显示BEGIN.,等待要求的时间后,再显示END。参考系统调用:A.标准时间等待(AT以上机器)INT15H功能86H入口参数AH=86HCX:DX=等待的微秒数7.显示当前MS-DOS版本(V5.0)。参考系统调用:A.取MS-DOS版本号,次版本号和版本标志INT21H功能33H子功能06H入口参数AH=33HAL=06H出口参数BL=版本号BH=次版本号DH=版本标志8.在屏幕上循环显示ASCII符号表(由21H开始到0FFH),直到键入回车键结束。9.在屏幕上画点并利用
36、方向键控制画线。实验四汇编子程序和宏汇编的程序设计一.实验目的:1.掌握子程序设计和调试方法2.掌握多模块汇编程序设计方法3.掌握宏汇编的程序设计方法二.实验要求:1.掌握子程序设计方法,包括:A.子程序间参数简单传递方法B.利用堆栈传递方法C.子程序的递归2.掌握多模块汇编程序的设计、调试,包括:A.PUBLIC和EXTRN伪指令的使用方法B.多模块的链接3.掌握宏汇编的程序设计方法三.实验仪器:PC机一台四.实验内容:例1:求无符号字节序列中的最大值和最小值。设有一字节序列,其存储首地址为3000H,字节数为08H。利用子程序的方法编程求出该序列中的最大值和最小值。程序流程图如下图所示:实
37、验程序清单:SSTACKSEGMENTSTACKDW64DUP(?)SSTACKENDSDATASEGMENT*;数据段中存放相应字节序列DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVSI,3000H;数据区首址MOVCX,0008HCALLBRANCH;调用子程序HERE:JMPHEREBRANCHPROCNEAR;子程序,返回参数在AX中JCXZA4PUSHSIPUSHCXPUSHBXMOVBH,SIMOVBL,BHCLDA1:LODSBCMPAL,BHJBEA2MOVBH,ALJMPA3A2:CMPA
38、L,BLJAEA3MOVBL,ALA3:LOOPA1MOVAX,BXPOPBXPOPCXPOPSIA4:RETBRANCHENDPCODEENDSENDSTART五.实验习题:1.将一串ASCII码中小写英文字母转换成大写,该串以$结束,要求判别和转换用子程序实现。2.将一串十六进制数转换成对应的ASCII码,其中转换过程用子程序实现。3.将DISPLAY单元(WORD)中的数据用二进制的方式显示,其中子程序完成将AX中数据显示的功能。4.主程序读入一串字符后,利用堆栈方式将该字符串的段址,偏移及串长传给子程序,在子程序中加以显示,返回主程序后显示OK。5.利用子程序调用方法实现N!的计算。6.A模块中有两组无符号数,B模块是加法程序,在A模块中两次调用B模块实现加法。其参数用PUBLIC和EXTRN方式进行传递。7.利用数据段以COMMAND方式完成第6题的要求。8.编写一可实现左右移多位的宏定义,并利用该宏定义实现A1左移3位,A2右移5位的程序。同时,利用显示子程序将移位前后的数据加以显示。9.编写用查表法求115平方的程序,其中平方表用宏定义实现。数据由键盘输入(00退出)结果在屏幕上显示。10.自编题。-