《电信微机原理与汇编语言实验指导书-.pdf》由会员分享,可在线阅读,更多相关《电信微机原理与汇编语言实验指导书-.pdf(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1实验一 显示程序实验目的1掌握汇编语言程序上机的实验过程2掌握显示程序的基本设计方法。实验原理汇编语言上机过程1、建立汇编源程序(建立文件名.asm)(1)通过 MD-DOS 自带的 EDIT.EXE 文本编辑器进行输入和其它的文本编辑器进行录入、编辑,如可用c 语言和 pascal 语言的文本编辑器来编辑,最后将文件存为filename.asm的形式即可。2、编译目标文件(即:编译为.obj.lst.crf文件)将正确的源代码编译为机器语言、程序清单及交叉引用表的目标文件。如果此时程序有语句错误,系统将报错,并指出在第几行,什么类型的错误,可根据提示去逐一修改。3、连接为可执行文件(即:连
2、接为.exe或.com 文件)在 DOS 提示符下:LINK filename回车4、运行编译好的可执行文件当 4通过后,会产生一个可执行文件,这时只需运行这个程序,看它是否按你所想象那样得出结果。在试运行期间,要尽量试一些临界状态,看程序是否运行稳定、结果是否正确,进行5。5、用调试工具调试,重新修改(逻辑错误)用 DOS 中自带的调试程序DEBUG.EXE 来进行程序调试、检查错误。6有关显示DOS基本命令1)单个字符显示命令将要显示的字符的ASCII 码送给 DL寄存器中断功能号2 送 AH寄存器,中断类型21H.如显示“3”MOVDL,33H或MOVDL,3如显示 AMOVAH,AMO
3、VAH,2MOVAH,2MOVAH,2INT 21HINT 21HINT 21H2)字符串显示命令将要显示的字符串所在存储区的首地址送给DX寄存器中断功能号9 送 AH寄存器,中断类型21H.如显示字符串“HELLO”存储区定义为T DB“HELLO”,10,13,24HLEA DX,TMOVAH,9 实验方法及步骤INT 21H1、编写实验程序。2、编译。3、运行(单步,跟踪),检查结果。4、关主机。实验题目编写一个汇编语言程序,要求对键盘输入的一个小写字母用大写字母显示出来。CODESEGMENTASSUMECS:CODEMAIN PROC FARPUSHDSINT 21HMOVDL,AL
4、MAIN ENDPMOVAX,0CMPAL,0DHMOVAH,2CODEENDSPUSHAXJZ END0INT 21HENDMAINCON:MOVAH,1SUB AL,20HEND0:RET2预习内容1、熟悉汇编语言编辑、编译环境,熟悉DEBUG 调试命令(见讲义附录)2、熟悉有关显示DOS 基本命令思考与练习1、显示一个字符串“ABC123”。2、编一显示“HOWARE YOU!”的程序。【实验报告内容】1、实验目的、仪器、原理和内容2、要求写出算法和算法流程图。3、程序必须在微机上编辑和汇编。4、调试程序并进行分析并给出实验结果。实验二 数据排序实验目的1掌握循环、分支程序的设计方法。2
5、了解数据排序的简单算法。实验原理“冒泡排序”算法是从第一个数开始依次将相邻的两个数比较,如果前面的数比后面的数大,则交换,如此将所有的数比较一遍后,最大的数就会在数列的最后面。再进行下一轮比较,找出第二大数据,直到全部数据有序。实验方法及步骤1、编写实验程序。2、编译。3、运行(单步,跟踪),检查结果。4、关主机。实验题目把从 MEM 单元开始的10 个 16 位有符号数按从大到小的顺序排列。DATASEGMENTMEMDW-1,0,24,-32,100,345,-39,1000,2345,-18DATAENDSCODESEGMENTASSUME CS:CODE,DS:DATAMAIN PRO
6、CFARMOVAX,DATAADD SI,2DECBLMOVDS,AXCMPAX,SIJNZ NEXT1LEA DI,MEMJL NEXT3MOVAH,4CHMOVBL,9XCH AX,SIINT 21HNEXT1:MOVSI,DIMOVSI-2,AXMAINENDPMOVCL,BLNEXT3:DECCLCODEENDSNEXT2:MOVAX,SIJNZ NEXT2END MAIN预习内容1、熟悉冒泡排序原理。2、熟悉程序结构(循环和分支)及程序设计方法思考与练习31、比较 BX,CX,DX 中带符号数的大小,将最大的数放在DX中。2、两个字符串比较,若相同,把0 存入 RESULT 单元,若
7、不同,把-1存入 RESULT 单元。3、从 FIRST 开始的 10 个单元中存放着一个字符串,结束符为$。编写一个程序,统计该字符串中字母 a的个数。【实验报告内容】1、实验目的、仪器、原理和内容2、要求写出算法和算法流程图。3、程序必须在微机上编辑和汇编。4、调试程序并进行分析并给出实验结果。实验三 码制转换实验目的1 掌握简单的数值转换算法及数值的各种表达方法。2 掌握码制转换的基本方法。实验原理1.BCD码的基本表示方法压缩的 BCD码和非压缩的BCD码两种格式。压缩的BCD码用 4 位二进制数表示一个十进制数位,如 9502d 表示为:1001 0101 0000 0010,非压缩
8、的BCD码以 8 位为一组表示一个十进制数位,8为中的低 4 位表示 8421 的 BCD码,而高 4 位没有意义,如 9502d 则表示为:uuuu1001uuuu0101uuuu0000uuuu00102二进制到BCD码转换的基本方法其中,用到除法指令DIV OPD;AL=AX OPD(字节)的商,AH=余数。DIV OPD;AL=DX AX OPD(字)的商,AH=余数。3BCD码转换到二进制的基本方法,是前者的逆变换。用到乘法指令:MULOPD;AX=AL OPD(字节)MULOPD;DX AX 9减 7 后,“与”0FH 实验方法及步骤1、编写实验程序。2、编译。3、运行(单步,跟踪
9、),检查结果。44、关主机。实验题目编写程序将AL和 BL 中的非压缩BCD码合并成一个压缩的BCD码,存在AL中。CODESEGMENTASSUME CS:CODEMAINPROC FARSHL AL,CLMAIN ENDPMOVAL,04HORAL,BLCODEENDSMOVBL,05HMOVAH,4CHEND MAINMOVCL,4INT 21H预习内容熟悉微机原理中第一章有关数制及相互转换的基础知识思考与练习1、编写一个程序,将变量ABC中的 16 位无符号数,用除十取余 的方法转换成十进制数,要求结果用压缩 BCD码保存在RESULT 单元中。2、若在内存的输入缓冲区ASCBUF 中
10、,已有若干个用ASCII 码表示的十进制数码.要求把它们转换为相应的BCD码,且把两个相邻存储单元的十进制数码的BCD码合并在一个存储单元中,且地址高的放在前四位,存放在BCDBUF 区域.。3、将AX 拆为二个ASCII 码,并存入Result开始的二个单元。【实验报告内容】1、实验目的、仪器、原理和内容2、要求写出算法和算法流程图。3、程序必须在微机上编辑和汇编。4、调试程序并进行分析并给出实验结果。实验四 实时显示日期和时间(综合)一、实验目的1、掌握子程序设计基本方法,包括子程序定义、调用、返回、参数传递。2、学习如何进行数据转换和DOS 功能调用(系统时间提取、预置等)3、学习和掌握
11、如何通过查表法提取所需数据。二、实验环境1、硬件:微机2、软件:EDIT、MASM和 LINK三、实验原理系统功能调用是DOS 为系统程序员及用户提供的一组常用子程序。DOS规定用中断指令INT21H进入各功能调用子程序的总入口,再为每个功能调用规定一个功能号以便进入相应各个子程序的入口。子程序的入口参数及出口参数在每个功能调用的说明中可以查到。DOS 系统功能调用的使用方法如下:(1)在 AH寄存器中存入所要调用功能的功能号;(2)根据所调用功能的规定设置入口参数;(3)用 INT21H指令转入子程序入口;(4)相应的子程序运行完后,可以按规定取得出口参数。DOS 共提供了80 个功能调用。
12、大致分为设备管理、文件管理和目录管理等几类。在 DOS 功能中,通过对中断INT 21H 功能号(2AH-2DH)调用可实现系统时间提取、预置,在5屏幕上实时显示日期和时间。功能号2AH:取日期返回参数DH:DL=月:日(二进制)功能号2BH:设置日期调用参数CX:DH:DL=年:月:日返回参数AL=0 成功否则失败功能号2CH:取时间返回参数CH:CL=时:分DH:DL=秒:1/100 秒功能号2DH:设置时间调用参数CH:CL=时:分返回参数AL=0 成功否则失败DH:DL=秒:1/100 秒四、实验题目利用 DOS 功能,实现系统时间提取、预置,要求在屏幕上实时显示日期和时间,按任意键停
13、止。五、思考题1、编写 16 进制转换成10 进制的程序。2、编写 10 进制转换成16 进制的程序。六、预习要求1、熟悉和掌握实验目的。2、复习相关知识,初步完成实验内容的源程序和操作步骤。七、实验报告要求1、要求写出算法和算法流程图。2、记录实验中的源程序。3、记录实验中的执行结果。4、对照预习时的源程序是否与实验记录相同,分析原因。DATASEGMENTBUF DB 4 DUP(?),24Hmes1 db 请输入年如2007:mes2 db 请输入月和日如0523:mes3 db 请输入小时和分钟如1125:mes4 db 请输入秒如30:crlfdb 10,13,24hDATAENDS
14、code segmentassume cs:code,ds:codemain procfarmov ax,datamov ds,axcalldispxt;显示系统日期和时间leadx,mes1mov ah,9int21hcalldecibin;设置系统日期2007:5:8mov cx,bxleadx,mes2mov ah,9int21hcalldecibinmov dx,bxmov ah,2bh6int21hmov ch,11h;设置系统时间17:16:30mov cl,10hmov dh,1ehmov ah,2dhint21hcalldispxt;显示系统日期和时间quit:mov ah,4
15、chint21hretmain endp;-dispxtprocmov ah,2ah;取系统日期int21hpush dx;显示年mov ax,cxcallh16bcdmov dl,:mov ah,2int21hpop dx;显示月和日mov al,dhcallhexbcdpush dxmov dl,:mov ah,2int21hpop dxmov al,dlcallhexbcdmov dl,10mov ah,2int21hmov dl,13int21hmov ah,2ch;取系统时间int21h7mov al,ch;显示时callhexbcdpush dxmov dl,:mov ah,2in
16、t21hpop dxmov al,cl;显示分callhexbcdpush dxmov dl,:mov ah,2int21hpop dxmov al,dh;显示秒callhexbcdmov dl,10mov ah,2int21hmov dl,13int21hretdispxtendp;-hexbcd procpush cxpush dxmov bl,10mov ah,0divblmov cl,ahadd al,30hmov dl,almov ah,2int21hadd cl,30hmov dl,clint21hpop dxpop cxrethexbcd endp;-h16bcd proc8pu
17、sh dxpush cxMOVSI,OFFSET BUFMOVCX,4MOVBX,1000LP:CALL SUB1ADDAL,30HMOVSI,ALINC SIMOVDI,DXMOVAX,BXMOVBX,10CALL SUB1MOVBX,AXMOVAX,DIDECCXJNZ LPleadx,bufmov ah,9int21hpop cxpop dxRETh16bcd ENDP;-SUB1PROC NEARMOVDX,0DIV BXRETSUB1ENDP;-decibinprocnearmov bx,0newchar:mov ah,1int21hsub al,30hjlexitcmp al,9d
18、jgexitcbwxchg ax,bxmovcx,10dmulcxxchg ax,bxaddbx,ax9jmpnewcharexit:retdecibinendp;-codeendsendmain10附录 1 DEBUG 主要命令DEBUG 是为汇编语言设计的一种高级工具,它通过单步、设置断点等方式为汇编语言程序员提供非常有效的调试手段。DEBUG 程序的调用在 DOS 的提示符下,键入命令:c:debugd:pathfilename.extparm1parm2其中,文件名是被调试文件的名字。如用户键入文件,则DEBUG 将指定的文件装入存储器中,用户便可对其进行调试。如果未键入文件名,则用户
19、可用当前存储器的内容工作,或者用DEBUG 命令 N和 L把需要的文件装入存储器后再进行调试。命令中的D指定驱动器PATH为路径,PARM1 和 PARM2 则为运行被调试文件时所需要的命令参数。注意:文件的扩展名不能省略。在 DEBUG 程序调入后,将出现提示符,此时就可用DEBUG 命令来调试程序。1显示存储单元的命令D显示存储单元的命令的格式为:-Daddress 或_Drang例如,按指定范围显示存储单元内容的方法为:-d10012018E4:0100c7 06 04 02 38 01 c7 06-06 02 00 02 c7 06 08 02 G 8.G.G 18E4:011002
20、02 bb 04 02 e8 02 00-CD 20 50 51 56 57 8B 37.;.h.MPQVW.718E4:0120bB其中,0100 至 0120 是 DEBUG 显示的单元内容,左边用十六进制表示每个字节,右边的ASCII 字符表示每个字节,表示不可显示的字符。这里没有指定段地址,D命令自动显示DS段的内容。如果只指定首地址,则显示从首地址开始的80 个字节的内容。如果完全没有指定地址,则显示上一个D命令显示的最后一个单元后的内容。2修改存储单元内容的命令E修改存储单元内容的命令有2 种。第一种格式可用给定的内容替代指定范围的存储单元内容。命令格式为:-E addressli
21、st例如,-EDS:100F3 XYZ 8D。其中 F3,X,Y,Z和8D各占一个字节。该命令可用这5 个字节来替代存储单元DS:0100 到 0104 的原先的内容。第二种格式采用逐个单元相继修改的方法。命令格式为:-E address例如,-EDS:100。则可能显示为:18E4:0100 89.-如果需要把该单元的内容修改为78,则用户可以直接键入78,再按“空格”键,完成修改,并显示下一个单元的内容:18E4:0100 89.781B.-这样,用户可以不断修改相继单元的内容,直到用ENTER 键结束该命令为止。3填写命令F(FILL)其格式为:-F rangelist例如:-F4BA:
22、0100 5F3XYZ 8D。使 04BA:0100-0104 单元包含指定的5 个字节的内容。如果list中的字节数超过指定的范围,则忽略超过的项;如果list的字节数小于指定的范围,则重复使用list填入,直到填满指定的所有单元为11止。4检查和修改寄存器内容的命令R(register)三种格式:1)显示 CPU 内所有寄存器内容和标志位状态,格式为:-R例如,-r。AX=0000 BX=0000 CX=010A DX=0000 SP=FFFEBP=0000 SI=0000 DI=0000DS=18E4 ES=18E4 SS=18E4 CS=18E4 IP=0100 NV UP DI PL
23、 NZ NA PO NC18E4:0100c70604023801 MOVWORD PTR 0204,0138DS:0204=00002)显示和修改某个寄存器内容,格式为:-R registername例如,键入-R AX系统将响应如下:AX F1F4即 AX寄存器的当前内容为F1F4,若不修改则按ENTER 键;否则,可键入欲修改的内容,如:-R bxBX 0369:059F则把 BX寄存器的内容修改为059F。3)显示和修改标志位状态,命令格式为:-RF系统将响应,显示信息的含义如下表所示,如:OYDN EI NGZR AC PE CY标志位符号表标志位名称置位复位溢出OverflowOV
24、NV方向 DirectionDNUP中断 InterruptEIDI符号 SignNGPL零 ZeroZRNZ辅助进位AnxigiaryCarryACNA奇偶 ParityPEPO进位 CarryCYNC此时,如果不修改其内容可按ENTER 键,否则,键入欲修改的内容,如:OVDN EI NGZR AC PE CY-PONZDINV即可。可见,键入的顺序可以是任意的。5运行命令G为了检查程序运行是否正确,希望在运行中能设置断点以便逐段调试程序。运行命令的格式为:-G=address1address2address3其中地址1 指定运行的起始地址,如果不指定则从当前的CS:IP 开始运行。后面的
25、地址均为断点地址,当指令执行到断点时,停止执行并且显示当前所有寄存器即标志位的内容和下一条将要执行的指令。6跟踪命令T跟踪命令有两种格式:(1)逐条指令跟踪12-T=address从指定地址起执行一条指令后停下来,显示所有寄存器内容及标志位的值。如果未指定地址则从当前的 CS:IP 开始执行。(2)多条指令跟踪-T=addressvalue从指定地址起执行n 条指令后停下来,n由 value 指定。7汇编命令A汇编命令的格式为:-Aaddress该命令允许键入汇编语言语句,并且能把它们汇编成机器代码,相继地存放在从指定地址开始的存储区中。必须注意:DEBUG把键入的数字均看成十六进制数,若要键
26、入十进制数,则其后应加以说明,如 100D。8反汇编命令U(1)从指定地址开始,反汇编32 个字节,其格式为:-uaddress例如:-u10018E4:0100c70604023801 mov word ptr0204,013818E4:0106c70606020002 mov word ptr0206,020018E4:010cc70606020202 mov word ptr0208,020218E4:0112BB0402mov bx,020418E4:0115E80200call011A18E4:0118CD20int2018E4:011A 50push ax18E4:011B 51p
27、ush cx18E4:011C 56push si18E4:011D 57push di18E4:011E 8B37mov si,Bx如果地址被省略,则从上一个U命令的最后一条指令的下一个单元开始显示32 个字节。(2)对指定范围内的存储单元进行反汇编,其格式为:-Urange例如:-u10010c18E4:0100c70604023801 mov word ptr0204,013818E4:0106c70606020002 mov word ptr0206,020018E4:010cc70606020202 mov word ptr0208,0102或-u10011218E4:0100c70
28、604023801 mov word ptr0204,013818E4:0106c70606020002 mov word ptr0206,020018E4:010cc70606020202 mov word ptr0208,0202可见,这两种格式是等效的。9命名命令N命名命令的格式为:-N filespecsfilespecs命令把两个文件标识符格式化在CS:5CH和 CS:6CH的两个文件控制快中,以便在其后用L 或 W命令把13文件装入存盘。filespecs的格式可以是:d:pathfilename.ext例如:-N myprog-L-可把文件myprog 装入存储器。10装入命令L
29、把磁盘上指定扇区范围的内容装入存储器从指定地址开始的区域中其格式为:-Laddressdrivesectorsector装入指定文件其格式为:-Laddress此命令装入已在CS:5CH中格式化的文件控制块所指定的文件。若未指定地址,则装入 CS:0100 开始的存储区中。11写命令W(1)把数据写入磁盘的指定扇区其格式为:-W addressdrivesectorsector(2)把数据写入指定的文件中其格式为:-Waddress此命令把指定的存储区中的数据写入由CS:5CH处的文件控制块所指定的文件中。若未指定地址,则数据从 CS:0100 开始。写入文件的字节数应先放入BX和 CX中。1
30、2.退出 DEBUG 命令 Q退出 DEBUG 命令的格式为:-Q它退出 DEBUG,返回DOS。本命令并无存盘功能,如果需要存盘应先使用W命令。14附录 2编译过程常见出错信息1、Registeralreadydefined汇编内部出现逻辑错误2、Unknown symboltype在符号语句的类型中,有些不能识别的东西3、Symbol ismulti-defined重复定义一个符号4、Symbol notdefined符号没有定义5、Syntaxerror语句的语法与任何可识别的语法不匹配6、Symbol isreservedword 企图非法使用一个汇编程序的保留字(例:定义add 为一
31、变量)7、Not properalign/combinetypeSEGMENT 参数不正确8、One operandmust be const这是加法指令的非法使用9、Operands must be same or 1 abs 这是减法指令的非法使用10、Alreadyhave base register试图重复基地址11、Illegalsizeforitem引用的项的长度是非法的,(如:双字移位)12、Illegalregistervalue指定的寄存器值不能放入“reg”字段13、Must be AX orAL 某些指令只能用AX或 AL14、Improperuse ofsegment reg段寄存器使用不合法(如:movds,0)15、Divisionby 0 or overflow给出一个用0 作除数的表达式16、Valueisoutofrange数值大于需要使用的17、CS registerillealusage 试图非法使用CS寄存器18、DUP istoolargeforlinkerDUP嵌套太长,以至于从连接程序不能得到所要的记录