微机原理与应用实验手册lzw.doc

上传人:文库蛋蛋多 文档编号:2881981 上传时间:2023-03-01 格式:DOC 页数:52 大小:2.11MB
返回 下载 相关 举报
微机原理与应用实验手册lzw.doc_第1页
第1页 / 共52页
微机原理与应用实验手册lzw.doc_第2页
第2页 / 共52页
微机原理与应用实验手册lzw.doc_第3页
第3页 / 共52页
微机原理与应用实验手册lzw.doc_第4页
第4页 / 共52页
微机原理与应用实验手册lzw.doc_第5页
第5页 / 共52页
点击查看更多>>
资源描述

《微机原理与应用实验手册lzw.doc》由会员分享,可在线阅读,更多相关《微机原理与应用实验手册lzw.doc(52页珍藏版)》请在三一办公上搜索。

1、微机原理与应用实验李章维 李敏 沈永增浙江工业大学信息工程学院2012年4月目 录实验一 熟悉汇编程序及调试21.1 汇编与宏汇编程序21.2 汇编过程31.2.1 程序汇编的基本步骤31.2.2 列表文件(.LST)41.2.3 交叉索引文件(.CRF)61.3 执行连接程序71.3.1 连接程序执行过程71.3.2 内存映象文件(.MAP)81.3.3 执行程序81.4 编写汇编语言源程序91.4.1 源程序的书写格式91.4.2 段寄存器段地址的装入101.4.3 程序中的数据与变量111.4.4 返回DOS状态的方法121.5 调试软件DEBUG131.6 汇编指令调试15实验二 加法

2、及判断程序调试实验18实验三 DOS中断调用实验22实验四 微机接口实验244.1 实验设备简介244.2 8253可编程定时器计数器实验264.3 8259中断控制实验304.4 8255 并行接口实验32附录I ASCII 码字符表35附录II 实验4.2参考程序36附录III 实验4.3参考程序44附录IV 实验4.4参考程序51实验一 熟悉汇编程序及调试1.1 汇编与宏汇编程序汇编就是把用汇编语言编写的源程序翻译(汇编)成机器语言的目标程序。汇编一个用汇编语言编写的源程序可以使用小汇编程序ASM.EXE,也可以使用宏汇编程序MASM.EXE。由于MASM.EXE不但可以代替ASM,而且

3、可以汇编具有宏定义的汇编语言源程序,因此我们在汇编程序时使用宏汇编程序MASM.EXE。运行汇编程序应具备下列文件:文本编辑程序:EDIT.COM 或 NOTEPAD.EXE宏汇编程序: MASM.EXE连接程序: LINK.EXE用户通过文本编辑程序键入汇编语言源程序,检查无误后,要将源程序以ASCII文本(纯文本)存盘,文件的扩展名为 .ASM 。下面就是用文本编辑程序EDIT.COM或NOTEPAD.EXE编辑的汇编语言源程序,该程序为在屏幕上显示一串英文字符Hello!。data segmentstr db Hello!,$data endsStacksegment stackdb 6

4、4 dup (?)Stack endscode segmentassume cs: code, ds: datastart: mov ax, datamov ds, axmov ah, 9hmov dx, offset strint 21hmov ah,4chint 21hcode endsend start然后将上面键入的汇编语言源程序保存为扩展名为 .ASM的文件,例如 XYZ.ASM 文件。1.2 汇编过程1.2.1 程序汇编的基本步骤1、将masm.exe、link.exe程序拷贝到E盘的根目录下2、进入dos系统:单击桌面上的“开始”运行command(cmd),dos系统下的屏幕提

5、示符为:盘号:目录名3、进入E盘: E: ,此时的屏幕提示符为“E:”,4、建立源程序:用记事本输入源程序,并保存到E盘根目录,xyz.asm5、编译程序:源程序建立以后,就可以用汇编程序MASM.EXE 进行汇编。例如欲对保存在E 盘根目录下的源程序文件XYZ.ASM 进行汇编,在屏幕提示符E:下,可打入如下命令(带下划线的部分为键盘输入): masm xyz.asm 将汇编语言源程序用宏汇编程序翻译(汇编)后,可以形成三个文件:第一个文件是扩展名为.OBJ的目标文件,在该文件中,将源程序的操作码部分变为机器码,但地址操作数是可浮动的相对地址,而不是实际地址,因此需经LINK连接文件进行连接

6、才能形成可执行文件。第二个文件是列表文件,扩展名为.LST,它把源程序和目标程序列表,以供检查程序用。第三个文件是交叉索引文件,扩展名为.CRF,它是一个对源程序所用的各种符号进行前后对照的文件。目标文件(OBJ文件)是必须产生的,而其它两个文件在需要时给予命令就可产生,对连接和执行汇编程序无直接的关系。下面举例说明汇编过程。在DOS状态下,键入MASM,则调入宏汇编程序,屏幕显示与操作如下:E: masmMicrosoft (R) Macro AssembLe Version 5. 00Copyright (C) Microsoft Corp 19811985, 1987.Allrights

7、 reserved.Source filename . ASM : xyzObject filename xyz . OBJ: xyzSource listing NUL. LST: xyzCross-reference NUL. CRF: xyz48826 + 433414 Bytes symbol space free0 Warning Errors0 Severe Errors其中划线部分是用户键入的,xyz为源程序名(xyz.asm),方括号中是机器规定的默认文件名,如果用户认为方括号内的文件名就是要键入的文件名,则可只在划线部分键入回车。如果不想要列表文件和交叉索引文件,则可在NUL

8、.LST和NUL.CRF后不键入文件名只键入回车符。当回答完上述四个询问后,汇编程序就对源程序进行汇编。在汇编过程中,如果发现源序程中有语法错误,则提示出错信息,指出是什么性质的错误,错误类型,最后列出错误的总数。之后可重新进入文本编辑环境(EDIT.COM或NOTEPAD.EXE),调入源程序xyz.asm进行修改,修改完毕,再进行汇编,直到汇编通过为止。如果在汇编时不需要产生列表文件(.LST)和交叉索引文件(.CRF),调用汇编程序时可用分号结束。例如: ;E: masm xyz; Microsoft (R) Macro Assembler Version 5. 00Copyright

9、(C) Microsoft Corp 1981-1985, 1987. All rights reserved.49902+448722 Bytes symbol space free0 Warning Errors0 Severe Errors汇编后只产生一个.OBJ文件。如果需要产生.OBJ文件和.LST文件,不需要.CRF文件,则在分号前加两个逗号即可。例如:E: masm xyz,; 如果4个文件都需要,简便的操作方法是分号前用3个逗号:E: masm xyz,; Microsoft (R) Macro Assembler Version 5. 00Copyright (C) Micr

10、osoft Corp 1981-1985, 1987. All rights reserved.48830+433410 Bytes symbol space free0 Warning Errors0 Severe Errors1.2.2 列表文件(.LST)列表文件.LST是通过汇编程序(masm.exe)产生的,可用文本编辑程序(EDIT.COM或NOTEPAD.EXE)显示或打印该文件,以便分析调试源程序。例如xyz.lst文件的内容显示如下:Microsoft (R) Macro Assembler Version 5.00 3/3/3Page 1-11 0000 data segm

11、ent2 0000 48 65 6C 6C 6F 21 24 str db Hello!,$3 0007 data ends45 0000 stack segment stack6 0000 0040 db 64 dup(?)7 ?8 910 0040 stack ends1112 0000 code segment13 assume cs:code, ds:data14 0000 B8 - R start: mov ax, data15 0003 8E D8 mov ds, ax16 0005 B4 09 mov ah, 9h17 0007 BA 0000 R mov dx, offset

12、str18 000A CD 21 int 21h19 000C B4 4C mov ah, 4ch20 000E CD 21 int 21h21 0010code ends22 end startMicrosoft (R) Macro Assembler Version 5.00 3/3/3Symbols-1Segments and Groups:N a m e Length Align Combine ClassCODE . . . . . . . . . . . . . . 0010 PARA NONEDATA . . . . . . . . . . . . . . 0007 PARA N

13、ONESTACK . . . . . . . . . . . . .0040 PARA STACKSymbols:N a m e Type Value AttrSTART . . . . . . . . . . . . . L NEAR 0000 CODESTR . . . . . . . . . . . . . . L BYTE 0000 DATAFILENAME . . . . . . . . . . . TEXT xyz19 Source Lines19 Total Lines7 Symbols48830 + 433410 Bytes symbol space free0 Warning

14、 Errors0 Severe Errors列表程序由三部分组成:(1) 源程序和目标程序清单从列表程序中可以看到:它同时列出源程序和对应的机器语言清单,第一列给出每条指令所在行号,第二列给出从段的首地址开始的每条指令存放的偏移地址,接着是数字列,给出对应每条语句的机器码和对应于存放在栈段和数据段的值,在机器码后加上R的指令表示:这条指令在连接时可能产生与列出来的偏移地址不同的地址,因为这些偏移地址可能与其它模块有关,例如列表清单中代码段中有两条指令与数据段有关: mov ax,data 和 mov dx,offset str,因此在这两条指令的机器码后面加上R的标识。最右边就是用汇编语言编写

15、的源程序。(2) 段信息汇总表在段信息汇总表中列出该程序用了哪几个段,如:代码段CODE、数据段DATA和堆栈STACK;每个段所占存储空间的长度(字节数);每个段的定位类型,包括PAGE(页)、PARA(节)、WORD(字)和BYTE(字节)它们表示此段的起始边界要求,即起始边界地址应分别可以被256、16、2和1除尽。该列表清单中是以PARA为CODE段、DATA段和START段的起始边界地址。最后一列为段的组合类型;段的组合类型是告诉连接程序,本段与其它段的关系,组合类型有NONE、PUBLIC、COMMOM、AT表达式、STACK和MEMORY。NONE:表示本段与其它段不发生逻辑关系

16、,即每段都有自己的基本地址。是隐含组合类型。本例中代码段(CODE)数据段(DATA)的组合类型以就为NONE,说明这两个段不与其它段发生任何关系。STACK:表明连接程序首先要把本段与同名同类别的其它段相邻地连接在一起,然后为所有定义为栈段的连接在一起的段,定义一个共同的段基地址,即连接成一个物理段。在列表程序的源程序中只有一个栈段,在栈段定义中给出了组合类型为Stack,因此在段信息汇总表中列出了该项,在本程序中它没有任何意义,因为没有其它栈段与它连接,只是为了说明这个问题而设置的。(3) 符号汇总表在列表程序中最后部分列出了符号汇总情况,是指在源程序中用户定义的符号名、类型、值和所在段。

17、在xyz.asm中有两个符号是由用户定义的,其中str是在数据段定义的,其值是指为str这个符号定义的偏移地址。另一个符号是标号stack,是在代码段定义的,stack的偏移地址和str偏移地址都是0000H,只是两个符号所在段不同。在上述列表文件中,指出了源程序无语法错误,如果在源程序中存在某些语法错误时,列表文件可提示某条语句有哪些错误,出错提示最示在出错指令行的下面,因此用户可借助列表文件很快地找到错误行,以便调试。另外由于列表文件给出了各条指令的偏移地址,对调试程序时设置断点很方便。1.2.3 交叉索引文件(.CRF)汇编后产生的交叉索引文件,扩展名为.CRF,它列出了源程序中定义的符

18、号(包括:标号、变量等)和程序中引用这些符号的情况。如果要查看这个符号表,必须使用CREF.EXE文件,它根据.CRF文件建立一个扩展名为.REF的文件,而后再用文本编辑程序(EDIT.COM或NOTEPAD.EXE)显示,就可以看到这个符号使用情况表。具体操作方法如下:E: crefcref filename.CRF: xyzlist filenamexyz.REF:就建立了一个扩展名为.REF的文件xyz.ref,文件xyz.ref中的内容如下:Microsoft Cross-Reference Version 5.00 Mon Mar 02 13:41:17 2003Symbol Cro

19、ss-Reference (# definition, + modification) Cref-1CODE . . . . . . . . . . . . . . 12# 13 21DATA . . . . . . . . . . . . . . 1# 3 13 14STACK. . . . . . . . . . . . . .5# 10START. . . . . . . . . . . . . .14# 22STR. . . . . . . . . . . . . . . 2# 175 Symbols1.3 执行连接程序用汇编语言编写的源程序经过汇编程序(MASM)汇编后产生了目标程序

20、(.OBJ),该文件是将源程序操作码部分变成了机器码,但地址是可浮动的相对地址(逻辑地址),因此必须经过连接程序LINK连接后才能运行。连接程序LINK是把一个或多个独立的目标程序模块装配成一个可重定位的可执行文件,扩展名为.EXE文件。此外还可以产生一个内存映象文件,扩展名为.MAP。1.3.1 连接程序执行过程在DOS状态下,键入LINK(或LINK XYZ)则系统调入LINK程序,屏幕显示操作如下:E: linkIBM personal Computer linkerVersion 2. 00 (C) Copyright IBM Corp 1981, 1982, 1983Object M

21、odules . OBJ: xyzRun File XYZ. EXE: xyzList FileNUL. MAP: xyzLibraries . LIB:其中下划线表示这部分是户键入的,xyz为源程序名,方括号内为机器默认文件名,当用户认为方括号中的文件名就是要键入的文件名时,可在冒号后面只键入回车。其中MAP文件是否需要建立,由用户决定,需要则键入文件名,不需要则直接送入一个回车键。最后一个询问是问是否在连接时用到库文件,对于连接汇编语言源程序的目标文件,通常是不需要的,因此直接键入回车键。与汇编程序一样,可以在连接时用分号结束后续询问。例如:E: link xyz;IBM Personal

22、 Computer LinkerVersion 2.00 (C) Copyright IBM Corp 1981, 1982, 1983连接后只产生XYZ.EXE文件。如果除XYZ.EXE文件外还要产生XYZ.MAP文件,则在分号前加两个逗号。例如:E: link xyz,; IBM Personal Computer LinkerVersion 2.00 (C) Copyright IBM Corp 1981, 1982, 19831.3.2 内存映象文件(.MAP)由连接程序LINK产生的扩展名为.MAP文件,它实际上是连接程序的列表文件,它给出了每个段的地址分配情况及长度。例如xyz.m

23、ap的内容如下所示:Start Stop Length Name Class00000H 00006H 00007H DATA00010H 0004FH 00040H STACK00050H 0005FH 00010H CODEProgram entry point at 0005:0000从表中可以看到,源程序EX2中定义了三个段:数据段(DATA)起始地址为00000H,终止地址为00006H,长度为00007H个字节;堆栈段(STACK)起始地址000lOH,终止地址为0004FH,长度为0040H个字节,代码段(CODE),起始地址为0005OHH,终止地址00O5FH,长度为00lO

24、H个字节。1.3.3 执行程序当用连接程序LINK将目标程序(.OBJ)连接定位后,产生可执行文件(.EXE),可以在DOS状态下执行该程序。执行操作如下:E: xyzHello !也可以键入xyz.exeE: xyz.exeHello !在执行程序后可以看到执行结果,因为源程序中有显示结果的指令,如果程序中没有显示结果的指令,要想看到结果,只有通过DEBUG调试程序来达到目的。如果执行结果没有达到预先设计目的,也是通过DEBUG来进行调试、运行。因此DEBUG是汇编语言编程的最有利的调试工具。1.4 编写汇编语言源程序用汇编语言编写的源程序必须符合一定的格式,才能经过宏汇编程序MASM的汇编

25、,生成一个目标程序。为了完成汇编任务,汇编程序一般采用两遍扫描的方法,第一遍扫描源程序产生符号表、处理伪指令等,第二遍扫描产生机器指令代码、确定数据等。1.4.1 源程序的书写格式当CPU访问内存时,是把存储器分成若干个段,通过4个段寄存器中存放的地址对内存储器进行访问的,因此在编源程序时必须按段的结构来编制程序。由于每个段的物理空间为64KB,所以程序中各段可以分别为一个或几个。源程序的书写一般有如下形式: 堆栈段名 SEGMENT STACK逻辑堆栈段 用变量定义预置的堆栈空间 堆栈段名 ENDS数据段名 SEGMENT逻辑数据段 用变量定义预置的数据空间数据段名 ENDS代码段名 SEG

26、MENT ASSUME 定义各段寻址关系起始标号 PROC程序逻辑代码段代码段名 ENDS END 起始标号其中:SEGMENT、ASSUME、PROCENDP是伪指令。伪指令只是把源程序中各段的设置情况告诉汇编程序,在汇编时不产生目标代码。在源程序中最少要有一个代码段,数据段根据需要可有可无,也可以增设附加段。对于堆栈段也可以根据需要可有可无,但如果没有堆栈段,在连接(LINK)时计算机将显示下列警告性的错误:Warning L4021:no stack segment在程序中如果没有用到堆栈时,该错误提示不影响程序的运行,如果程序中用到堆栈时必须设置堆栈段。1.4.2 段寄存器段地址的装入

27、Assume伪指令语句只是建立了当前段与段寄存器的联系,但不能把各段的段地址装入相应的段寄存器中,段寄存器段地址的装入是在程序中完成的。(1)DS、ES、SS的装入由于段寄存器不能用立即数寻址方式直接传送,所以段地址装入可通过通用寄存器传送给段寄存器。MOV AX,逻辑段名MOV 段寄存器,AX其中逻辑段名为程序中定义各逻辑段的名字,(不包括代码段),段寄存器是指与各逻辑段相对应的各段寄存器(DS、ES、SS)。(2)CS的装入代码段寄存器是装当前执行目标代码的段地址,IP是提供下一条要执行的目标代码的偏移量,为了保证程序的正确执行,CS和IP装入新值时是一起完成的。对CS和IP的装入有如下几

28、种情况:(1) 根据用户程序中的伪指令END后的标号为CS和IP提供代码段的段地址和目标代码的偏移地址。例如:CODE SEGMENTASSUME CS : CODE,START : CODE ENDSEND START例中的起始地址是标号START, START是在程序装入内存后开始执行的起始点。源程序最后一个END是伪指令操作符,它的作用有两个: 其一为标志源程序的结束,其二为指定程序运行时的起始地址。也就是在源程序汇编和连接后的可执行程序自动将CS和IP在执行时指START标号处。(2) 在程序运行过程中,当执行某些指令和操作时,CPU自动修改CS和IP的值,使它们指向新的代码段。例如:

29、执行段间过程调用CALL指令和返回指令RET。执行段间的无条件转移指令JMP FAR。当使用INT nH或产生硬件中断时,将利用n4形成物理地址,其中低字装入IP,高字装入CS。在中断返回时由IRET恢复断点处的CS和IP的值。硬件复位时,自动将IP置0,CS置为0FFFFH,指向ROM中的初始化程序。1.4.3 程序中的数据与变量在汇编源程序中的数据除了立即数,由指令产生的数和通过键盘输入的数以外,还有大量的数据是通过伪指令语句进行预置和分配的,也就是将所需的数据以某种形式存放在某逻辑段中(除代码段),在程序中可任意调用。在数据定义的同时还可以定义变量,将变量与数据结合在一起。可以为某个变量

30、分配存储空间以便在程序执行过程中存放中间结果和最终结果,使用起来极为方便。(1)变量与数据的定义变量与数据的定义可以通过符号定义伪指令EQU、=和数据定义伪指令DB或DW或D来实现。例如:XX EQU l00 ;为XX变量定义一个常数100;YY EQU BP十8 ;定义一个变址寻址单元;ZZ EQU CX ;定义ZZ为CX寄存器的替换名字;EMP = 100 ;为变量EMP定义一个常数100;A DB 200 ;定义A为一字节变量,初值为100;B DB ABC;B值为41H,B十l值为42H、B+2值为43H;C DB 3DUP(0) ;定义3个0,每个0占一个字节,起始地址C;D DW

31、l00DUP(?);定义100个字的存储空间,起始地址为D;E DD ? ;定义一个双字的变量E。其中=除了可以重新赋值以外,其它功能同EQU。而EQU定义的变量则不能再重新定义。例如:CONST = 60 ;与 CONST EQU 60 等价,接着还可以对CONST再赋值;CONST = 8 ;对CONST重新赋值。如果在CONST=8之前是用EQU对CONST赋值,就不能再赋值。EQU和=可以出现在程序的逻辑段内,也可出现在逻辑段外。(2)汇编程序中数据的提供方法用数据定义伪指令提供数据如果程序要求原始数据为一批数据时,用数据定义伪指令DB、DW和DD来提供较为方便。用立即数的形式提供数据

32、当原始数据只有几个时,一般用立即数的方法来提供,例如:MOV AX,l00当然用立即数的方法只是将一个数据传送到通用寄存器中,它只是通过通用寄存器传送数据。用编程序的方法提供数据假如原始数据是一组有规律的数据项,则用编程序的方法形成这一组数据,不用专门为这组数据分配存储单元,节省了存储空间。例如: S=2+4+6+100MOV AX,0 ;将累加器AX清0。MOVBX,2 ;将初始数据2送入BX。MOV CX,50 ;将循环计数值送入CX。LP: ADD AX,BX ;进行累加,结果在AX中。ADD BX,2 ;在BX中形成原始数据4、6、8、100。LOOP LP ;循环操作,直到Cx=0为

33、止。MOV S,AX ;将最后累加结果送变量S中。 用键盘提供数据当原始数据为任意数据时,一般用键盘输入方法,这可用DOS 2lH中断01H号功能实现,如:MOV AH,0lHINT 2lH当CPU执行到这两条语句后就等待键盘输入字符,通过键盘送入的字符是以ASCII码的形式送入AL寄存器中,如果键入字符3,送入AL寄存器中是33H。(3) 数据的输出方式 在显示器上显示一个字符将要显示的字符的ASCII码送入DL,再调用DOS 21H中断02H号功能,就可在显示器上显示该字符。MOV DL,3 ;将3的ASCII码送入DL。MOV AH,02H ;调用02H功能。INT 2lH ;发中断请求

34、。 在打印机上输出一个字符将要打印字符的ASCII码送入DL,再调用DOS 21H中断02H号功能,就可在打印机上打印出DL中的字符。MOV DL,3MOV AH,05HINT 2lH1.4.4 返回DOS状态的方法当在DOS状态下执行.EXE文件时,如果希望在执行完.EXE文件后正常返回DOS状态,一般用如下两种方法;(1) 采用DOS 21H中断4CH号功能调用MOV AH,4CHINT 2lH(2) 采用返回(RET)断点的方法程序名 PROC FARPUSH DSSUB AX, AXPUSH AXRET程序名 ENDP1.5 调试软件DEBUG实际上,大部分程序必须经过调试才能纠正程序

35、设计中的错误,从面得到正确的结果。汇编语言程序调试,就是用调试程序(DEBUG 程序)发现错误,再经过编辑,汇编,链接纠正错误。下面以调试xyz.exe 程序为例给出DEBUG 程序中最常用的几个命令。1、进入debug,并调入xyz.exe程序先用DEBUG 程序装入要调试的汇编语言程序程xyz.exe,操作命令如下:Ddebug xyz.exe 此时,屏幕上出现一个短划线,即为DEBUG 环境下的提示符。2、反汇编命令U:u ;从当前地址反汇编。u120 ;从CS:120H 处开始反汇编。3、汇编命令A: a100 ;从CS:100H 开始输入汇编指令。4、显示存储单元内容命令D: d d

36、s:0000 ;从数据段的0 单元开始显示128 个字节。5、修改存储单元命令E: e address ;修改存储单元内容。 e cs:100 ;则用户可以直接键入要修改的内容,再按“空格”键;可修改下一单元内容,直到用回车键结束该命令。6、存文件命令W:在存文件之前,首先要把文件 的长度(字节数)填写在BX 和CX 寄存器中。例如:r bxBX xxxx:0000r cxCX xxxx:nnnn ;文件字节长度。n 文件名.ASMw7、读文件命令L:n 文件名.ASM ;在读文件前必须先输入文件名L ;读入文件。8、单步执行命令T:t;从当前CS:IP地址执行一条指令t3 ;从当前地址往下执

37、行三条指令9、执行程序命令G:g =100 ;(若不输入起始地址,则以CS:IP 为起始地址。;注意:G 有起始地址时,切不可忘掉 “=”号。)􀁺 设断点运行G =起始地址 断点地址1 断点地址2 (断点地址最多不超过十个)。10、退出DEBUG:使用如下命令Q可退出debug软件 q1.6 汇编指令调试一、实验目的1. 了解DEBUG的常用命令,学会用DEBUG调试程序。2. 了解数据在存储器中的存取方法,及堆栈中数据的压入与弹出。3. 掌握各种寻址方法以及简单指令的执行过程。二、实验内容1.设堆栈指针SP=2000H,AX=3000H,BX=5000H,编写一段程序,将A

38、X的内容和BX的内容进行交换,用堆栈作为两寄存器交换内容的中间存储单元,用DEBUG调试程序进行汇编与调试。2.设DS=当前段地址,BX=0300H,SI=0002H,用DEBUG的命令将十六进制数据0AH、0BH、0CH、0DH、0EH顺序装入偏移地址为300H304H的连续存储单元。在DEBUG状态下送入下面程序,并用单步执行的方法,分析每条指令源地址的形成过程?当数据传送完毕时,AX中的内容是什么?程序清单如下:MOV AX,BXMOV AX,0304HMOV AX,0304HMOV AX,BXMOV AX,0001 BXMOV AX,BXSIMOV AX,0001 BX SIINT 3

39、3.设AX=0002H,编一个程序段用移位的方法将AX的内容乘10。三、实验要求1.实验前要作好充分准备,包括汇编程序清单、调试步骤、调试方法,对程序结果的分析等。2.本实验在PC机上进行。3.本实验只在DEBUG调试程序状态下进行,包括汇编程序,调试程序,执行程序。四、编程提示1. 实验内容1将两个寄存器的内容进行交换时,必须有一个中间寄存器才能进行内容的交换。如果用堆栈作为中间存储单元,必须遵循先进后出的原则。2. 实验内容2(1) 其中数据段寄存器中的段地址为进入DEBUG状态后系统自动分配的段地址。(2) SI和BX的初值可在DEBUG状态下,用R命令装入,也可以在程序中用指令来完成。

40、(3) 用T命令程序执行,可进行单步跟踪执行,每执行一条指令就可以看到各寄存器的状态。也可用R命令直接调出寄存器,来检验各寄存器内容是否正确。(4) 在执行程序前,可用E命令将偏移地址300H304H送入0AH,0BH,0CH,0DH。3. 实验内容3(1) 用移位的方法完成某些乘法运算,是较为常见的方法,操作数左移一位为操作数乘2运算。(2) 算式2XlO的程序流程图如下:AX、BX 装入操作数2AX 左移两位AXAX+BXAXAX 左移一位AX开 始结 束(3) 程序的执行可用DEBUG的G命令,也可用T命令单步跟踪执行。在程序送入后,用DEBUG命令将它存入磁盘,以免程序丢失时需重新调入

41、。五、实验报告1.程序说明说明程序的功能、结构。包括:程序名、功能、算法说明、主要符号,并对所用到的寄存器进行说明。2.调试说明上机调试的情况:上机调试步骤,调试过程中所遇到的问题是如何解决的。对调试过程中的问题进行分析,对执行结果进行分析。3.画出程序框图;4.写出程序和执行过程清单。实验二 加法及判断程序调试实验一、实验目的1. 掌握编写汇编语言源程序的基本方法和基本框架。2. 学会编写顺序结构、分支结构和循环结构的汇编程序,掌握宏定义与宏调用的方法。3.掌握程序中数据的产生与输入输出的方法。二、实验内容1. 用汇编语言编写一个加法程序: 1325十9839,用ASCII码的形式将加数与被

42、加数存放在数据区DATA1和DATA2中,并将相加结果显示输出。2. 设有一组数据: 5,-4,0,3,100,-51,编程判断:每个数是0、=0、还是0 ?并输出其判断结果。即:三、实验要求1. 实验前准备(1) 分析题目,将程序中的原始数据、中间结果和最终结果的存取方式确定好。(2) 写出算法或画出流程图。(3) 写出源程序。(4) 对程序中结果进行分析,并准备好上机调试步骤。2. 本实验在PC机上进行。3. 汇编过程中出现问题,用DEBUG进行调试。四、编程提示1. 实验内容1(1) 两个数据可用相反的顺序以ASCII码的形式存放在数据段的DATA1和DATA2中,相加时可从DATA1和

43、DATA2的起始字节开始相加,即从数的个位数开始相加。相加结果可存放在DATA2开始的存储单元中。将DATA1 的偏移地址SI将DATA2 的偏移地址DI计算位数DI取DATA1一位数AL开 始结 束带进位加法,并调整将每一位运算结果拼成ASCII码保存到DATA2 中(CX)-1=0?(CX)-1=0?显示结果位数5CXDATA2中计算结果DL调INT21H将DATA2 的地址指针减一指向下一位要显示的数NNYY(2) 程序中的加法运算是ASCII码运算,采用带进位的加法运算指令ADC,后面应加一条ASCII码加法调整指令AAA,经AAA调整的加法指令,将ASCII码的数据高4位清“0”,因

44、此要将结果每位数高4位拼成3,变成ASCII码存到DATA2中,则可方便的取出输出。图4-1 参考程序流程图一(3) 程序中应有输出显示功能,采用DOS中断2lH的02H号功能将要输出字符的ASCII码送入DL中。(4) 参考程序流程图一。2. 实验内容2(1) 首先将原始数据(5,-4,0,3,100,-51)装入起始地址为XX的字节存储单元中。(2) 将判断结果以字符串的形式存放在数据区中,以便在显示输出时调用。(3) 其中判断部分可采用CMP指令,得到一个分支结构,分别输出“Y=0”、“Y=+1”和“Y=-1”。(4) 程序中存在一个循环结构,循环6次,调用6次分支结构后结束。将原始数据存入数据区中数据个数CX从数据区中取一个数AL开 始结 束显示输出Y 值AL0?AL=0返回DOSNNYY

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号