汇编语言上机操作及程序调试的方法
- 格式:doc
- 大小:60.00 KB
- 文档页数:8
实验一上机操作一、实验目的掌握汇编语言程序编辑、汇编、连接、运行以及利用DEBUG调试程序的方法。
二、实验设备PC机及相应的软件。
三、实验内容及步骤1、编辑一个指定的汇编语言源程序,并对其进行汇编、连接和运行。
2、利用DEBUG进行程序调试,掌握常用命令的使用方法,观察运行结果。
3、汇编语言上机操作,见图1-1 汇编语言上机操作流程。
上机操作过程:开始输入cmd 确认后显示:C:\Documents and setting\Administrator>-输入 cd c:\masm 后显示:c:\masm>-c:\masm>EDIT ABC.asmc:\masm>MASM ABC;若有语法错,回EDIT下改该程序c:\masm>LINK ABC;若有错,回EDIT下改程序c:\masm>ABC若运行结果错,回EDIT下改程序或在DEBUG下调试,找原因。
c:\masm>DEBUG ABC.exe手写源程序图 1-1 汇编语言上机操作流程汇编语言程序举例例1:将BL寄存器的内容按二进制形式显示出来。
设:(BL)=01010011B分析:采用2号功能调用,分别输出30 31 30 31 30 30 31 31显示:01010011参考程序:CODE SEGMENTASSUME CS: CODESTART:MOV CX ,8 ;显示字符个数为8MOV BL ,53HNEXT:SHL BL ,1 ;将显示位移至CF中JC ONE ;CF=1?MOV DL ,30H ;CF=0,将0的ASCII放在DL中JMP EXITONE:MOV DL ,31H ;CF=1,将1的ASCII放在DL中EXIT:MOV AH ,2INT 21H ;调用DOS功能显示DEC CX ;循环次数减1JNZ NEXT ;判断是否结束MOV AH,4CH ;返回DOSINT 21HCODE ENDSEND START上机操作:c:\masm>EDIT ShowBL.asm ;编辑源程序c:\masm>MASM ShowBL ;汇编成ShowBL.objMicrosoft (R) Macro Assembler Version 5.10Copyright (C) Microsoft Corp 1981,1988. All rights reserved.48912 + 447243 Bytes symbol space free0 Warning Errors0 Severe Errorsc:\masm>LINK ShowBL ;连接成ShowBL.exeMicrosoft (R) Overlay Linker Version 3.61Copyright (C) Microsoft Corp 1983-1987. All rights reserved.LINK : warning L4021: no stack segmentc:\masm>ShowBL ;装载并执行ShowBL.exe 01010011 ;屏幕显示c:\masm>-在DEBUG下查看ShowBL.exe的装入情况:c:\masm>DEBUG ShowBL.exe- R ;查看当前寄存器内容AX=0000 BX=0000 CX=001B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=0B51 ES=0B51 SS=0B61 CS=0B61 IP=0000 NV UP EI PL NZ NA PO NC B353 MOV BL,53- U CS:0 ;查看程序0B61:0000 B353 MOV BL,530B61:0002 B90800 MOV CX,00080B61:0005 D0E3 SHL BL,10B61:0007 7205 JB 000E…….0B61:0017 B44C MOV AH,4C0B61:0019 CD21 INT 21…….-G ;执行程序01010011Program terminated normally-例2:将某段中的字符串“Hello!”传送到另一段中。
软件实验一汇编语言程序的调试与运行一.实验目的1.学习数据传送和算术运算指令的用法2.熟悉在PC机上编辑、汇编、连接、调试和运行汇编语言程序的过程。
二.实验内容将两个多位十进制数相加,要求被加数和加数均以ASCII码形式各自顺序存放在DATA1和DA TA2为首的5个内存单元中,结果送回DATA1处。
三.程序框图图1.1 两个多位十进制相加程序流程图四.程序清单DISP MACRO XMOV DL,X ;要显示的字符送DL寄存器MOV AH,02H ;DOS功能调用号是02HINT 21H ;21H中断程序是DOS功能调用ENDMDATA SEGMENTDATA1 DB '12732'DATA2 DB '06815'N EQU $-DA TA2DATA ENDSSTACK SEGMENT STACKSTA DB 20 DUP (?)TOP EQU $-STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA,SS:STACK,ES:DA TA START:MOV AX,DA TAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXLEA SI,DATA1 ;☆MOV BX,0MOV CX,NCALL DISPL ;显示被加数DISP '+'LEA SI,DATA2MOV BX,0MOV CX,NCALL DISPL ;显示加数DISP '='LEA DI,DA TA1MOV CX,NCALL ADDA ;调用加法子程序LEA SI,DATA1MOV BX,0MOV CX,NCALL DISPL ;显示运算结果DISP 0DHDISP 0AHMOV AX,4C00HINT 21HDISPL PROC ;显示子程序DS1: MOV AH,02HMOV DL,[SI+BX]INT 21HINC BXLOOP DS1RETDISPL ENDPADDA PROC ;加法子程序PUSH CXMOV BX,0AD1: SUB BYTE PTR [SI+BX],30HSUB BYTE PTR [DI+BX],30HINC BXLOOP AD1POP CXPUSH CXMOV BX,N-1 ;☆☆CLCAD2: MOV AL,[SI+BX]ADC AL,[DI+BX]AAAMOV [DI+BX],ALDEC BXLOOP AD2POP CXPUSH CXMOV BX,0 ;☆☆☆AD3: ADD BYTE PTR [DI+BX],30HINC BXLOOP AD3POP CXRET ;☆☆☆☆ADDA ENDPCODE ENDSEND START五.调试步骤1.编辑源程序,建立一个以后缀为.ASM的文件.2.汇编源程序,检查程序有否错误,有错时回到编辑状态,修改程序中错误行。
汇编语言源程序运行步骤和DEBUG的使用一、实验目的1.熟悉汇编语言源程序书写格式。
2.熟悉汇编语言源程序编辑、汇编、连接、执行步骤。
3.练习DEBUG常用命令的使用。
4.熟悉8086的寄存器。
5.了解程序的执行过程。
二、实验预习要求1、认真阅读预备知识中汇编语言的上机步骤的说明,熟悉汇编程序的建立、汇编、连接、执行、调试的全过程。
2.预习使用DEBUG 检查/修改寄存器内容、查询存储器内容的命令。
3.预习使用DEBUG单步、断点及连续执行程序的命令。
三、实验内容1.编辑以下程序,汇编连接后运行,将输出'HOW ARE YOU?’。
本习题主要目的:熟悉汇编语言源程序的书写格式;熟悉汇编语言源程序的编辑、汇编、连接、运行。
DA TA SEGMENTBUF DB 'HOW ARE YOU?$'DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART: MOV AX,DA TAMOV DS,AXMOV DX,OFFSET BUFMOV AH,09HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START2.DEBUG 调试以下程序,查看DATA段中定义的数据在内存中的存放方式,并单步执行查看每一语句执行后相关寄存器的内容,并解释为何取该值:DA TA SEGMENT ;(1)DB 34H,12H ;(2)B DW 1234H ;(3)C DD 0 ;(4)D DB -1,15/3 ;(5)E DB '012' ;(6)F DW 'AB','C' ;(7)G DW ? ;(8)H DB 5 DUP(0) ;(9)I DW $-OFFSET H ;(10)DA TA ENDS ;(11)CODE SEGMENT ;(12)ASSUME CS:CODE,DS:DA TA ;(13)START: MOV AX,CODE ;(14)MOV DS,AX ;(15)MOV BX,SEG A ;(16)MOV CX,OFFSET B ;(17)MOV DX,TYPE C ;(18)MOV AH,4CH ;(19)INT 21H ;(20)CODE ENDS ;(21)END START ;(22)3.下面是第1题采用将主程序定义为远程的程序返回DOS的结束方式,将其编辑、连接、运行,熟悉汇编源程序不同的结束方式。
汇编语言得编程步骤与调试方法一、汇编源程序得建立1、使用工具sm文件;(2)ASM,MASM汇编程序,对源程序进行汇编,生成、obj文件-目标文件,以及调试用、LST-列表文件与、CRF-交叉引用表;(3)Link连接程序,对使用得目标文件与库文件进行连接,生成、exe文件,同时调试用、map-地址映像文件;如果源程序无语法错误,上述三步将生成可运行得、exe文件,如果运行结果无误,则完成对汇编程序得编程,如果运行后结果存在错误,需要进行调试。
(4)Debug调试程序,对、exe文件进行调试,修改,直到程序正确。
图3目标程序生成步骤图2、编程过程(1)用文本编辑软件,编写扩展名为、asm得源文程序文件。
(2)用汇编程序对编好得源文件进行汇编。
命令行:masm[*、asm]↙如果源文件中存在语法错误,则汇编程序将指出错误类型及位置,可根据这些信息重新编辑源文件,直至无语法错误,汇编后,将生成指定名称得目标文件、obj。
使用MASM50汇编程序进行汇编,输入命令行masm或者masm *、asm 后,根据提示,输入文件名,在汇编没有错误得情况下,如屏幕所示:汇编程序可生成三个文件,*、obj,*、lst与*、crf。
*、obj-目标文件,用于连接生成可执行文件;*、lst-列表文件(可选),汇编语言汇编得机器语言与汇编语言对照表,可用于调试;*、crf-交叉引用文件(可选),给出了用户定义得所有符号与对每个符号定义、引用得行号。
(3)目标文件得连接命令行:link[*、obj][*、obj] [*、lib] ↙连接程序,将多个目标程序及库文件,连接生成可执行得*、exe文件,同时可选择生成*、map文件。
*、map-地址映像文件,给出内存地址分配得有关信息。
下图所示屏幕,为Link连接两个目标文件,没有错误得情况下,生成*、e xe文件。
(4)执行程序执行*、exe文件,观察程序运行结果,如果存在错误,需要进行调试。
汇编语言的编程步骤与调试方法汇编语言的编程步骤与调试方法一、汇编源程序的建立1、使用工具(1)EDIT,记事本等文本编辑软件,编辑源程序,保存为、asm文件;(2)ASM,MASM汇编程序,对源程序进行汇编,生成、obj文件-目标文件,以及调试用、LST-列表文件与、CRF-交叉引用表; (3)Link连接程序,对使用的目标文件与库文件进行连接,生成、exe文件,同时调试用、map-地址映像文件;如果源程序无语法错误,上述三步将生成可运行的、exe文件,如果运行结果无误,则完成对汇编程序的编程,如果运行后结果存在错误,需要进行调试。
(4)Debug调试程序,对、exe文件进行调试,修改,直到程序正确。
图3 目标程序生成步骤图2、编程过程(1)用文本编辑软件,编写扩展名为、asm的源文程序文件。
(2)用汇编程序对编好的源文件进行汇编。
命令行: masm [*、asm] ↙如果源文件中存在语法错误,则汇编程序将指出错误类型及位置,可根据这些信息重新编辑源文件,直至无语法错误,汇编后,将生成指定名称的目标文件、obj。
使用MASM50汇编程序进行汇编,输入命令行masm或者masm *、asm后,根据提示,输入文件名,在汇编没有错误的情况下,如屏幕所示:汇编程序可生成三个文件,*、obj,*、lst与*、crf。
*、obj-目标文件,用于连接生成可执行文件;*、lst-列表文件(可选),汇编语言汇编的机器语言与汇编语言对照表,可用于调试;*、crf-交叉引用文件(可选),给出了用户定义的所有符号与对每个符号定义、引用的行号。
(3)目标文件的连接命令行:link [*、obj] [*、obj] [*、lib] ↙连接程序,将多个目标程序及库文件,连接生成可执行的*、exe文件,同时可选择生成*、map文件。
*、map-地址映像文件,给出内存地址分配的有关信息。
下图所示屏幕,为Link连接两个目标文件,没有错误的情况下,生成*、exe文件。
要在计算机上执行汇编语言程序,其操作步骤如下:1. 编辑源程序使用编辑软件将汇编源程序输入到计算机中,建立*.ASM文件。
2.汇编源程序使用汇编程序将汇编源程序汇编成目标代码文件,即生成*.OBJ 文件。
目前使用较多的汇编程序是宏汇编程序MASM。
C>MASM A1↙3. 连接目标程序文件生成可执行文件生成OBJ文件后,必须用LINK程序连接目标代码程序和库函数代码生成可执行文件,生成的文件的扩展名为EXE。
C>LINK A1↙4.程序的执行建立了EXE文件后,就可以在DOS下直接执行程序了。
C>A1↙汇编程序调试工具debug命令:DEBUG调试命令介绍1.主要调试命令:(1)反汇编命令U:将存储器中的二进制数据翻译成较有意义的助记符形式,以帮助理解,如图1.5所示。
一般常用以下三种格式:a)-U↙:从当前IP处开始,对连续约32字节内容反汇编。
如对TEST.EXE,刚装入DEBUG时的IP=0000,则在输入U命令后有如下显示:-U↙13C2:0000 B402 MOV AH,0213C2:0002 B241 MOV DL,4113C2:0004 CD21 INT 2113C2:0006 B44C MOV AH,4C13C2:0008 CD21 INT 2113C2:000A 8B4606 MOV AX,[BP+06]………………13C2:0020 8B07 MOV AX,[BX]-图1.5 反汇编命令的执行结果在上例中,13C2:0000表示CS:IP的内容(其中CS的值是动态值);B402代表该处存放的二进制数据,亦即指令MOV AH,02H的机器代码;当连续约32字节的数据反汇编完后,重新回到DEBUG提示符“-”下,如果再键入U命令,则将继续对后面的内存区反汇编。
特别应该注意的是,由于反汇编命令针对内存区的二进制数据,而被调试程序仅占内存区的某一部分,故反汇编出来的内容并非全是被调试程序的代码,如上例中13C2:000A单元以后的部分,显然不是TEST.EXE的内容。
汇编语言上机指导实验一DEBUG常用命令及8086指令使用实验目的:通过实验掌握下列知识:1、8086指令: MOV,ADD,ADC,SUB,SBB,DAA,XCHG2、DEBUG命令: A,D,E,F,H,R,T,U。
3、ASCII码及用16进制数表示二进制码的方法。
4、8086寄存器: AX,BX,CX,DX,F,IP。
内容及步骤:一、DEBUG 命令使用:1、打 DEBUG 进入 DEBUG 控制,显示提示符 '_ '。
2、用命令 F100 10F 'A' 将'A'的ASCII码填入内存。
3、用命令 D100 10F 观察内存中的16进制码及屏幕右边的ASCII 字符。
4、用命令 F110 11F 41 重复上二项实验,观察结果并比较。
5、用命令E100 30 31 32 …… 3F将30H-3FH写入地址为100开始的内存单元中,再用D命令观察结果,看键入的16进制数是什么字符的ASCII码?6、用H命令检查下列各组16进制数加减结果并和你的手算结果比较:(1)34H,22H (2)56H,78H (3)A5,79H (4)1284H,5678H (5)A758,347FH7、用R 命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF和AF的内容。
8、用R命令将AX,BX内容改写为1050H及23A8H。
二、8086常用指令练习1、传送指令1)用A命令在内存100H处键入下列内容:MOV AX,1234MOV BX,5678XCHG AX,BXMOV AH,35MOV AL,48MOV DX,75ABXCHG AX,DX2)用U命令检查键入的程序并记录,特别注意左边的机器码。
3)用T命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况。
并注意标志位有无变化。
2、加减法指令:1)用A命令在内存100H处键入下列内容:MOV AH,34MOV AL,22ADD AL,AHSUB AL,78MOV CX,1284MOV DX,5678ADD CX,DXSUB CX,AXSUB CX,CX2)用U命令检查键入的程序及对应的机器码。
汇编语言程序设计上机指导一、debug的使用Debug是为汇编语言设计的一种8086实模式的调试工具,它通过单步执行、设置断点等方式为汇编语言程序员提供了非常有效的程序调试手段。
Debug可以直接用来检查和修改内存单元内容、装入、运行程序、检查及修改寄存器的值,也就是说Debug可深入到计算机的内部,可使用户更紧密地与计算机中真正进行的工作相联系。
通过Debug能更好的理解代码。
(一)启动Debug方法1:在运行对话框中输入“cmd”启动DOS命令窗口后输入“Debug”回车;方法2:在程序/附件/命令提示符,启动DOS命令窗口后输入“Debug”回车。
Debug的提示符是符号“-”。
即出现提示符“-”就表示可以接受DEBUG命令了。
按Alt+Enter 键可在全屏与窗口之间切换。
(二)Debug命令格式DEBUG的每个命令都是一个字母,后跟一个或多个参数,参数与参数之间,用空格或逗号隔开,参数与命令符之间可用空格隔开,命令的结束符是回车键Enter。
下面对DEBUG命令作几点说明:●字母不分大小写。
●只使用16进制数,且不能带后缀H。
●以空格或逗号作为命令各项之间的分隔符。
分隔符只在两个数值之间是必须的。
●可以用Ctrl+C终止命令的执行。
●若输入的命令有语法错误,则提示“Error”,并用“^”指出错误位置。
(三)Debug常用命令1、R命令格式: R [<寄存器名>](1) R功能:显示当前所有寄存器内容,状态标志及将要执行的下一指令的地址、代码及汇编语句形式(反汇编CS:IP所指的指令),其中对状态标志FLAG以每位的形式显示。
(2) R <寄存器名>功能:显示指定寄存器内容,例如:-R AX <Enter> 等待用户键入新的值,按回车键结束。
当进入DEBUG时,寄存器和标志设成以下数值:DS,ES指向最低可用段处的程序区前缀。
BX和CX为被装入文件的长度值。
汇编语言上机实践1、在“资源管理器”中把汇编源程序的模板文件重命名,但后缀不能修改,必须是.asm;2、用“记事本”打开上一步的汇编源程序文件,编辑、修改好后保存,注意:除注释可以中文外,其它内容一定要在英文状态下输入;(假设汇编、链接、调试及汇编源程序等文件都放在D盘的MASM50目录下。
)3、如果计算机的操作系统是32位系统,则按如下步骤进行汇编、链接、运行及调试;(1)、开始→ 程序 → 附件 → 命令提示符,进入DOS系统;(2)、输入“d:”,回车,进入“d盘”;(3)、输入“cd空格masm50”,进入MASM50目录,然后按下图所示进行汇编、链接及调试;(4)、汇编、链接及调试完毕,输入“exit”,回车,则返回Windows系统。
4、如果计算机的操作系统是64位系统,则按如下步骤进行汇编、链接、运行及调试;(1)、安装DosBox-0.74,安装完后会在桌面创建DosBox-0.74快捷图标;(2)、开始→ 所有程序 → DOSBox-0.74 → Options,如下图所示;(3)、单击DOSBox 0.74 Options,出现记事本编辑器,把记事本编辑器右边的垂直滚动条拖到最后,然后在记事本编辑器的最后面添加“mount d d:\”和“d:”两行,如下图所示,最后保存并退出记事本编辑器;(4)、双击桌面的DosBox-0.74快捷图标,如下图所示,注意两个窗体要同时出现,不能关闭其中的一个;(5)、输入“cd空格masm50”,进入MASM50目录,然后按下图所示进行汇编、链接及调试;(6)、汇编、链接及调试完毕,输入“exit”,回车,则返回Windows系统。
华南师范大学物理与电信工程学院杨志勇2015/4/11。
汇编语言上机指导及例示、习题从如何建立源文件到进行调试作下简要的介绍,并配例题说明。
由于本人水平有限,在下文在如有错误及可以进一步修改的地方请大家指出汇编语言上机过程:一、上机前的软件准备:MS-DOS操作系统(如:MSDOS6.22 , MSDOS7.0 等)文本编辑器(如: , TURBO.EXE , TC.EXE , C.EXE 等)汇编程序(如:MASM.EXE , ASM.EXE 等)连接程序(如:LINK.EXE 等)调试程序(如:DEBUG.EXE 等)二、汇编程序建立过程:a.建立汇编源程序─通过───→b.编译为目标文件─↓┬─→d.连接为可执行文件↑│ c.不通过,重新修改(语句错误)↓├──────────────────────┘↓↑ f.不正确,用调试工具调试,重新修改(逻辑错误)↓└────────────────────────────←e运行↓正确g.完成三、现在对(二)的每一个标有字母的过程(PROCEDURE)进行详细说明PROCEDURE a:建立汇编源程序(即:建立文件名.asm)这个过程就相当于我们在纸上编写源程序代码一样,只不过是将纸变为了计算机,这个过程也称源代码录入。
将源程序代码录入计算机的方法很多,下面将介绍具体方法。
1.通过MD-DOS自带的EDIT.EXE文本编辑器进行输入,在DOS提示符下键入:EDIT回车,这时如果你系统内可调用时,EDIT的操作画面便会出现在屏幕上,你就可在提示下进行录入了,当录入完毕后,选择存盘并给你输入的文件起一个文件名,形式:filename.asm ;(其中filename为你起的文件名,由1-8个字符组成),asm 是为汇编程序识别而必须加上去的,不可更改。
存盘后在DOS下可用DOS命令DIR来查看,如果看到了所存的文件存在,就可以进行进程b。
2.如果你的系统中没有EDIT,也可用你所熟悉的文本编辑器进行录入、编辑,如可用c语言和pascal语言的文本编辑器来编辑,最后将文件存为filename.asm的形式即可。
汇编语言调试及运行汇编语言程序设计实验实验一汇编语言的调试和运行班级:姓名:学号:日期:实验一汇编语言的调试和运行一、实验目的1、熟悉DEBUG程序和命令,并用它运行基本指令和察看运行结果。
○1怎样调用Debug②如何显示和修改内存单元③如何显示和修改CPU的寄存器④各标志位的状态是如何表示的,怎样修改标志寄存器⑤怎样汇编与反汇编⑥怎样执行程序⑦怎样跟踪程序⑧怎样命名和读写文件⑨怎样退出Debug2、熟悉汇编中通用传送指令。
3、理解指令不同的寻址方式,注意规定或限制使用的寄存器如:双操作数指令中,源操作数和目的操作数的地址不能同时为存储器地址,段跨越前缀不能使用CS,操作对象是地址还是地址中的内容,指令隐含使用的寄存器。
二、实验内容1、键入 DEBUG 进入 DEBUG 控制状态,显示提示符 '- '2、用命令 F100 10F 'A' 将'A'的ASCII码填入内存。
3、用命令D100 10F 观察内存中的十六进制码及屏幕右边的ASCII字符。
4、用命令 F110 11F 41 重复上二项实验,观察结果并比较。
5、用命令E100 30 31 32 …… 3F将30H-3FH写入地址为100开始的内存单元中,再用D命令观察结果,看键入的十六进制数是什么字符的ASCII 码?6、用DEBUG调试和运行下列程序,记录所用的DEBUG命令和运行结果。
MOV WORD PTR [1100],3445MOV WORD PTR [1102],5678MOV WORD PTR [1106],6732MOV AX,[1100]SUB AX,[1102]ADD AX,[1106]MOV [1104],AXHLT其中粗斜体的数字可以修改。
7、内存操作数及各种寻址方式使用 程序内容:MOV AX,1234MOV [1000],AXMOV BX,1002MOV BYTE PTR[BX],20MOV DL,39INC BXMOV [BX],DLDEC DLMOV SI,3MOV [BX+SI],DLMOV [BX+SI+1],DLMOV WORD PTR[BX+SI+2],2846操作步骤1) 用A命令键入上述程序,并用T命令逐条运行。
实验一汇编语言上机基本步骤一、实验目的:熟悉汇编语言的上机过程,掌握各项工具软件的使用方法二、实验环境:1.硬件:PC微机2.软件:DOS系统、EDIT.EXE、MASM.EXE、LINK.EXE、DEBUG.EXE三、实验内容:1.前期准备:在开始进行汇编语言上机练习之前,建立并进入自己的工作子目录,准备好相关工具软件如MASM.EXE、LINK.EXE等,其后所有工作均在自己的子目录中进行,以避免因路径概念不清而导致的文件存取错误,以及对系统其它部分造成影响。
1)建立自己的工作子目录(例如MYTEST):C:\>MD MYTEST2)进入自己的工作子目录:C:\>CD MYTEST3)将所需工具软件从其它地方(如C:\MASM)拷贝进自己的工作子目录:C:\MYTEST>COPY C:\MASM\MASM.EXEC:\MYTEST>COPY C:\MASM\LINK.EXE2.编写源程序:原则上可以用任何文字处理软件(如EDIT、写字板、甚至WORD)编写源程序,但必须注意,源程序应为ASCII码文件(或称纯文本文件),扩展名一般为.ASM。
因此,建议使用DOS环境下的EDIT软件。
1)在DOS系统操作提示符下键入EDIT并回车,即可进入EDIT文本编辑环境。
如果没有进入,检查当前路径下是否存在EDIT.EXE文件,以及文件是否完整等。
2)从键盘输入下列程序(不必输入注释部分):CODE SEGMENT;定义一个CODE段ASSUME CS:CODE;定义CODE段为代码段START:;可执行语句起始处MOV AH,02H ;以下三条语句将显示字母aMOV DL,’a’INT 21HMOV AH,4CH ;以下二条语句将返回DOSINT 21HCODE ENDS;CODE段结束END START;整个程序结束该程序的功能是仅在CRT屏上显示一个字母a,完成功能的只有其中的三条语句,但其它部分则是一个完整的汇编语言源程序必不可少的部分。
《微型计算机原理及应用》 8 汇编语言上机操作及程序调试的方法
第一节 在IBM-PC机上运行汇编源程序所必备的软件 为了在IBM-PC机上运行汇编源程序,机器上必须有DOS操作系统环境,DOS系统盘上应有下列文件: EDIT 文件编辑程序 MASM 宏汇编程序 LINK 链接程序 DEBUG 调试程序
第二节 在IBM-PC机上运行汇编源程序的步骤
当用户编制好汇编语言源程序之后,要在机器上运行,必须经过以下几个步骤: 1. 用EDIT命令建立与修改汇编源程序文件(ASM文件) 源程序就是用汇编语言的语句编写的程序,必须以ASM为附加文件名。 2. 用MASM命令汇编源文件以产生相应的目标文件(OBJ文件) 3. 用LINK命令连接目标文件以产生可执行文件(EXE文件) 4. 调试、运行可执行文件 《微型计算机原理及应用》
9 上机过程示意图如下: 汇编语言程序
编辑程序汇编程序连接程序调试程序有错吗?运行程序
Y
N
图2-1 汇编语言程序上机过程流程 第三节 DEBUG程序调用及汇编语言程序调试方法
调试程序DEBUG是DOS支持的又一种系统软件,主要用于汇编语言程序的调试。汇编和连接过程只能查出源程序的语法错误,不能查出功能上的错误和程序不完善的地方。
一、DEBUG程序的启动 DEBUG程序有两种启动方法。 第一种启动方法:只要打入DEBUG和回车键,就可以把它装入内存。但是这样启动只把DEBUG程序本身装入内存并进入等待DEBUG命令状态,还没有把要调试的程序装入内存。 第二种启动DEBUG的程序的方法是一次相继装入DEBUG程序和要调试的程序。打入的命令格式如下: DEBUG[d:][path]filename[.ext][parml]Lparm2] 其中的Filename是要调试程序的文件名,可选项[d:][path]和[.ext]分别是要调试程序的所在盘符、路径和扩展名。可选项[parml]和[parm2]是DEBUG程序为要调试程序准备的参数(一般不用)。 例 进入DEBUG程序并装入要调试程序,要调试程序在A驱动器中。其操《微型计算机原理及应用》 10 作如下: C>DEBUG A:ABC.EXE (进入DEBUG,并装配ABC.EXE) 此时屏幕上出现一个短线,这表示可以使用DEBUG命令了。 二、调试命令 在说明每个命令之前,先说明一些共同信息: ■ DEBUG命令都是以一个英文字母开头,后面跟一个或多个参数。 ■ 命令字母和参数可用大写或小写或混合形式。 ■ 命令字母和参数中,相邻两个十六进制之间必须用逗号或空格分开.其它各部分之间有无空格或逗号都可以。 ■ 执行任何命令期间都可用Ctrl+Break键方法结束命令的执行。 ■ 打入命令字母和参数后必须打入回车键才能使命令有效。 ■ 如果执行某种命令期间在显示器或打印机上的很长的输出,可以按Ctrl+Numlock键暂停继续显示,使显示屏幕停下来供观察。再按任何其它键,则继续显示输出。 ■ 在DEBUG程序状态下,控制键和DOS支持的编辑键继续有效。
■ DEBUG程序状态光标提示符为“-”。 下面按命令功能相近关系分组说明几个主要命令功能和使用的方法: (一)显示和修改寄存器或存贮单元的有关命令 1. R(Register)命令 R命令有三种功能: 显示单个寄存器内容并等待修改这个寄存器内容; 显示CPU内部的所有寄存器的内容和全部标志位的状态; 显示和修改所有标志位的状态。 ⑴ 显示和修改单个寄存器内容命令 命令格式:R [寄存器名] 说明:显示单个寄存器内容。R之后输入寄存器名符。例如命令 - RAX↙ 将显示出AX的内容和在下一行显示出冒号。 AXF1E4 :- 上面的F1E4是AX的当前内容。如果在冒号后打入要修改的内容,然后打回车键,这时AX即修改为新值;如果不输入新值只打回车键,则不改变原值。 ⑵ 显示CPU内部的所有寄存器的内容和全部标志位的状态命令 命令格式:R 说明:显示所有寄存器和标志位值。例如: 《微型计算机原理及应用》 11 -R↙ 系统响应给出格式如(值是假设的): AX=0E00 BX=00FF CX=0007 DX=01FF SP=0390 BP=0000 SI=0050 DI=0000 DS=04BA ES=04BA SS=04BA CS=04BA IP=01lA NV UP DI NG NZ AC PE NC 04BA:0HA CD21 1NT21 前几行显示的是寄存器内容和8个状态标志位的状态,最后一行显示是下面将要执行的指令地址,它对应的机器码和汇编语句形式。8位状态标志位的状态不是以0或1的形式显示的,而是用两个字母显示的。字母和状态对应关系如表所示:
标志位名 为1对应符 为0对应符 OF(溢出标志) OV NV DF(方向标志) DN UP IF(中断标志) EI DI SF(符号标志) NG PL ZF(零标志) ZR NZ AF(辅助进位) AC NA PF(奇偶标志) PE PO CF(进位标志) CY NC
⑶ 显示和修改标志位状态的命令 命令格式: RF 系统响应是显示8个状态位。例如: OV DN EI NG ZR AC PE CY_(最后为光标位置)如果打入回车键,将不改变标志位的状态;也可以打入一个或多个新的状态符,重新设置其状态。输入时各标志的次序无关,输入的各个标志之间可以没有空格。如从光标位置开始打入: PONZDINV 将改变第一、三、五、七个状态位的值。 2.D(Dump)命令 用途:显示某个存储区的内容。 格式:D[address]或D[range] 存储单元的内容用两种方式显示:—种是每一个存储单元的内容(每一字节)用两位16进制数显示;另一种是用相应的ASCII字符显示,句号(.。?)表示不可显示的字符。 如果取命令格式:D 后面无地址或范围参数,将从前次命令显示后的下一个单元开始《微型计算机原理及应用》 12 显示40H字节或80H字节的内容。 如果取命令格式:D [range] 则显示指定地址范围各单元的内容。 3.E(Enter)命令 ’ 用途:显示和修改存贮单元的内容。 格式1:E [address] [list] 将内容表包括的数值和字符串的ASCII码依次置入从指定地址开始的存贮单元。例如: E DS:100 F3“XYZ”8D 从内存单元DS:100H至DS:104H的5个单元中依次置入F3H(1个单元),XYZ的ASCII码(3个单元)和8DH(1个单元)。 格式2:E [address] 显示指定地址单元的内容,并等待输入新的值。 输入新的值过程如下: 输入一个字节的十六进制数,以替换原单元中的内容,然后采取下列三种操作的一种。 (1)按空格键,则上一个替换要求完成,且显示出下一个单元的地址和原有的内容。如果想改变它,可直接输入要修改的值,再按空格键,„„,这样,就可以连续地进行修改。若某一单元的内容不需要修改,可直接按空格键。 (2)按“—”号键,将在下一行显示前一单元的地址和内容。如果想改变它,可直接输入要修改的值,然后再按“—”,则又显示前一单元的地址和内容,„„,这样就可连续地进行反向修改。若所示的前一单元的内容不需要修改,可直接按“—”键。 (3) 按回车键将结束E命令。 命令参数中[地址]如果不指明段地址,则默认段地址为DS。 4.F(File)命令 用途:在指定的存贮地址范围内置入内容表给出的数值或字符代码。 格式:F [range] [list] 说明:如果list包含的字节少于range包括的单元数,则把list的字节重复置入指定的地址区,直到指定的范围都置入新值为止。如果list包含的字节数多于range包括的单元数,则多出的字节被忽略。 如果range参数中不指明段地址,则默认段地址为DS。例如: F4BA:100L5 F3'XYZ'8D 则从04BA:100至04BA:104的5个单元依次装入F3 58 59 5A 8D。
(二)汇编与反汇编命令 1. A(Assemed) 命令 《微型计算机原理及应用》 13 用途:先显示汇编的内存地址,等待用户输入一条助记符指令。用户输入指令并按回车后,DEBUG将把这条指令对应的机器码顺序存放在指定的内存单元中,并提示下一地址,等待用户继续输入下一条指令。若直接按回车,则退出A命令;若在输入指令时语句有错误,则显示出错信息,仍然提示当前的汇编地址,用户可重新输入指令。 格式:A [address] 说明:若没有指定地址,则从“CS:100”单元开始存放。
2.U(Unassemed)命令 用途:对于存贮器内的指令机器码进行反汇编,结果显示的语句和源程序语句会大部分相同,由于不能反汇编出标号、标识符等信息,所以与源程序语句有些差别。但在调试程序时,这个命令常常用于对照机器码指令与源程序是否一致。 格式:U[address]或U[range] 说明:反汇编过程产生的输出包括指令的开始地址,指令的机器码和指令的源语句。 例:-U:从当前地址开始反汇编 也可以从某个地址处开始反汇编 例:-U 200:从CS:200处开始反汇编
(三)运行命令 1.G(Go)命令 用途:执行正在调试的程序。 格式:G[=address][address[address„]] 说明:等号及第一个address参数指明程序执行的起点。后面的一个或多个address参数是设定的断点。这个命令可取以下三种格式: (1)G不打入任何参数。这时从当前指令,即从CS:IP指定的地址开始执行,并一直执行下去。 (2)G=address打入等号和程序执行的起始地址。程序开始执行后一直执行下去。 (3)G[=address]address[address„]。这种格式意味着起始地址可取(1)或(2)的规定,可设一个或多个断点地址。DEBUG程序中允许最多可设置10个断点,这些断点地址的次序是任意的。所谓断点是指程序执行到这个地址时立即停止,并显示CPU内部所有寄存器的内容以及全部标志位的状态和一条将执行的指令。主程序有两个或多个分支时,可以在每个分支上设置一个断点。这样可以观察每个分支执行的情况。为此可以在G命令中设置多个断点。当然在一次运行时,只能停在其中的一个断点上。程序员心中确定了断点地址后,就