微机原理与嵌入式系统第二次实验报告北京联合大学.doc
. . 联合大学微机原理与嵌入式系统实验报告Debug的使用(基础与验证型)1、 实验目的与任务目的:掌握汇编语言程序设计的基本方法和技能;熟练掌握使用全屏幕编辑程序EDIT编辑汇编语言源程序;熟练掌握宏汇编程序MASM的使用;熟练掌握连接程序LINK的使用。任务:1、实验容汇编语言程序设计上机过程如图1.1所示。图1.1汇编语言程序上机过程(一)用编辑程序EDIT建立汇编语言源程序文件(ASM文件)在Windows 2000或者在Windows XP环境下鼠标单击“开始”“运行”,在“运行”中输入“CMD”进入DOS模式,运行EDIT软件,例如:D> EDIT hello.ASM进入EDIT的程序编辑画面时,输入汇编语言源程序(二)用汇编程序MASM将ASM文件汇编成目标程序文件(OBJ文件)当源程序建立以后,仍以hello.asm程序为例,我们用汇编程序MASM对hello.asm源程序文件进行汇编,以便产生机器码的目标程序文件hello.obj(三) 用连接程序LINK生成可执行程序文件(EXE文件)经汇编后产生的二进制的目标程序文件(OBJ文件)并不是可执行程序文件(EXE文件),必须经连接以后,才能成为可执行文件。连接程序并不是专为汇编语言程序设计的。如果一个程序是由若干个模块组成的,也可通过连接程序LINK把它们连接在一起。这些模块可以是汇编程序产生的目标文件,也可以是高级语言编译程序产生的目标文件。(四) 程序的执行当我们建立了可执行文件hello.EXE后,就可直接在DOS下执行该程序: C>hello.exe2、 原理1、汇编语言源程序的汇编过程汇编语言源程序的汇编过程是是利用汇编程序(MASM)对已编辑好的源程序文件(.ASM)进行汇编,将源程序文件中以ASCII码表示的助记符指令逐条翻译成机器码指令,并完成源程序中的伪指令所指出的各种操作,最后可以建立3个文件:扩展名为 .OBJ的目标文件、扩展名为 .LST 的列表文件和扩展名为.CRF 的交叉索引文件。目标文件是必须建立的,它包含了程序中所有的机器码指令和伪指令指出的各种有关信息,但该文件中的操作数地址还不是存的绝对地址,只是一个可浮动的相对地址。列表文件(.LST)中包含了源程序的全部信息(包括注释)和汇编后的目标程序,列表文件可以打印输出,可供调试检查用。交叉索引文件(.CRF)是用来了解源程序中各符号的定义和引用情况的。.LST和.CRF两个文件不是必须建立的,可有有无,可以通过汇编时的命令加以选择。在对源程序文件(ASM文件)汇编时,汇编程序将对ASM文件进行两遍扫描,若程序文件中有语法错误,则结束汇编,汇编程序将指出源程序中存在的错误,这时应返回编辑环境修改源程序中的错误,再经过汇编,直到最后得到无错误的目标程序,即OBJ文件。因此,汇编程序的主要功能可以概括为以下三点:(1) 检查源程序中的语法错误,并给出错误信息;(2) 产生目标程序文件(OBJ文件),并可给出列表文件(.LST文件);(3) 展开宏指令。汇编程序是系统提供的用于汇编的系统软件,目前常用的汇编程序有Microsoft公司推出的宏汇编程MASM(MACRO ASSEMBLER)和BORLAND公司推出的TASM(TURBO ASSEMBLER)两种。Microsoft公司推出有宏汇编程序MASM和小汇编程序ASM两种,二者的区别在于:MASM有宏处理功能,而ASM没有宏处理功能,因此,MASM比ASM的功能强大,但MASM需要占据较大的存空间,当存空间较小时(如64 KB),只能使用ASM。2、目标程序的连接过程汇编后产生的目标程序(OBJ文件)并不是可执行程序文件(EXE文件),还不能直接运行,它必须通过连接程序(LINK)连接成一个可执行程序后才能运行。连接程序进行连接时,其输入有两个部分:一是目标文件(.OBJ),目标文件可以是一个也可以是多个,可以是汇编语言经汇编后产生的目标文件,也可以是高级语言(例如C语言)经编译后产生的目标文件;另一是库文件(.LIB),库文件是系统中已经建立的,主要是为高级语言提供的。连接后输出两个文件,一是扩展名为 .EXE的可执行文件,另一个是扩展名为 .MAP 的存分配文件,它是连接程序的列表文件,又称为连接映像(Link Map),它给出每个段在存储器中的分配情况,该文件可有可无。连接程序给出的“无堆栈段的警告性错误”并不影响程序的运行。所以,到此为止,连接过程已经结束,可以在操作系统下执行该.EXE程序了。3、 代码与截图分析1.程序一代码HELLO .model small .stack .databvar1 db 100,01100100b,64h,'d'minint = 5bvar2 db -1,minint,minint+5 db ?,2 dup(20h)wvar1 dw 2010h,4*4wvar2 dw ?dvar dd 12347777h,87651111h,?abc db 'a','b','c',?maxint equ 0ahstring db 'ABCDEFGHIJ'crlfs db 13,10,'$'array1 dw maxint dup(0)array db 2 dup(2,3,2 dup(4) .codestart: mov ax,data mov ds,ax mov dl,bvar1 dec bvar2+1mov abc3,dl mov ax,word ptr dvar0 mov dx,word ptr dvar2 add ax,word ptr dvar4 adc dx,word ptr dvar6 mov word ptr dvar8,ax mov word ptr dvar6,dx mov cx,maxint mov bx,0again: add stringbx,3 inc bx loop again lea dx,abc mov ah,09h int 21h mov ax,4c00h int 21h end start 2.程序二代码WORLD .model small .stack .datakeynum = 255keybuf db keynum db 0 db keynum dup(0) .codestart: mov ax,data mov ds,ax mov dx,offset keybuf mov ah,0ah int 21h mov dl,0ah mov ah,2 int 21h mov bx,offset keybuf+1 mov cl,bx mov ch,0again: inc bx mov dl,bx cmp dl,'a' disp cmp dl,'z' ja disp sub dl,20hdisp: mov ah,2 int 21h loop again mov ax,4c00h int 21h end start3.程序三代码ADD .model small .stack .datakeynum = 255keybuf db keynum db 0 db keynum dup(0) .codestart: mov ax,data mov ds,ax mov dx,offset keybuf mov ah,0ah int 21h mov dl,0ah mov ah,2 int 21h mov bx,offset keybuf+1 mov cl,bx mov ch,0again: inc bx mov dl,bx cmp dl,'A' disp cmp dl,'Z' ja disp ADD dl,20hdisp: mov ah,2 int 21h loop again mov ax,4c00h int 21h end start3.程序一结果4.程序二结果5.程序三结果四、思考与练习以与测评标准(1)汇编过程中 MASM hello和 MASM hello.ASM的结果是否一致。答:一致(2) 连接过程中 LINK hello和LINK hello.OBJ的结果是否一致。答:一致(3) 使用Word如何录入汇编语言源程序。答:复制到记事本即可。五、实验总结通过这次实验我学会了完整的形成过个可运行程序的过程。并且通过代码一了解到了在程序代码中,通过变量名引用其指向的第一个数据,通过变量名加减移位存取以第一个数据为基地址的前后数据。通过程序二知道了要实现小写字母转换为大写字母,首先需要判断字符是否为小写,然后转换为大写。并且可以采用DOS的0AH号功能获取字符串。在实验过程中也遇到了小的问题,但是通过老师和同学的帮助都一一解决了。7 / 7