1、汇编语言程序设计实习指导书编者 田晶西北农林科技大学信息工程学院2015年 11月汇编语言程序设计 实习指导书共 20 页 第 1 页前 言汇编语言程序设计是高校计算机专业的一门重要的必修课,而且是非计算机专业学生学习微机原理与应用的必要先修课,它是计算机能提供给用户的执行速度最快而又最有效的编程语言,也是能够利用计算机所有硬件特性并能直接控制硬件设备的唯一语言,是进入硬件领域进行计算机控制的一块铺路石。在汇编语言的教学实践中,学生普遍感到该课比较难学,主要与该课程的下列特点有关:汇编语言与计算机硬件有关(主要是 CPU 中寄存器和存储器) 。汇编指令系统指令较多,语法规则多且严格,难学难记。
2、汇编语言输入/输出功能弱,不直观,程序难以调试。汇编指令中操作数来源广(寄存器、内存、I/O 端口) ,且不好理解。因此,要学好汇编语言,必须注意一下几点:掌握汇编语言中与计算机硬件有关的部分内容(主要是 CPU 中的寄存器和 I/O 端口寄存器) ,特别注意“状态标志寄存器”各个状态位的设置与应用。掌握好 CPU 的内存管理方法(主要是内存物理地址的形成方法) 。掌握好寻址方式(寻找指令中操作数的方法) 。掌握汇编程序的结构组成(分段结构)熟练掌握 DEBUG 调试程序的应用。加强上机实习。汇编语言与其它高级语言一样,实践性很强,只有通过上机实习,才能理解这门课的内容,掌握好这门课程序设计方
3、法和技术,为了配合这们课的学习,我们编写了这本实习指导书,希望通过这门课的实践,对掌握汇编语言程序设计方法,提高实验技能,起到抛砖引玉的作用。编者2015 年 10 月汇编语言程序设计 实习指导书共 20 页 第 2 页目 录实验一 汇编语言程序设计上机步骤-3实验二 DOS 子功能调用-14实验三 顺序程序设计-15实验四 分支程序设计-16实验五 循环程序设计-17实验六 子程序设计-18实验七 中断处理子程序设计-19实验八 综合程序设计-20附录 动态调试程序 DEBUG-21汇编语言程序设计 实习指导书共 20 页 第 3 页实验一、汇编语言程序设计上机步骤一、 实习目的 熟悉汇编程
4、序的上机实习过程。 了解汇编程序的基本构成。二、实验环境硬件环境微型计算机(Intel x86 系列 CPU)1 台。软件环境Windows98/2000/xp 操作系统任一种文本编辑器(EDIT、NOTEPAD(记事本) 、写字版、WORD 等)宏汇编程序(MASM.EXE)连接程序(LINK.EXE)调试程序(DEBUG.EXE 或 TD.EXE)三、实习内容在计算机上运行汇编语言程序的步骤是:(1) 用编辑程序建立汇编语言源程序(.ASM 源文件)首先用编辑程序(可用任一种文本编辑程序,如 EDIT 等)产生汇编语言的源程序(类型为.ASM 的源文件) 。(2) 用 MASM 程序把汇编
5、语言源程序( .ASM 文件)转汇编成汇编目标文件( .OBJ 文件)源程序就是用汇编语言的语句编写的程序,它是不能为机器直接识别的,所以要经过汇编程序(MASM)进行翻译。汇编程序的作用就是把源文件转换成二进制代码形式的目标文件 (.OBJ文件)。在转换的过程中,汇编程序将对源程序进行扫描,如果源程序中有语法错误,则汇编结束后,汇编程序将指出源程序中的错误,要求用户再次使用编辑程序来修改源程序中的错误后继续汇编,直至得到无语法错误的汇编目标文件( .OBJ 文件) ,表示汇编通过。汇编程序的主要功能是: 检查源程序语法是否正确。 测出源程序中的语法错误,并给出出错信息。 产生源程序的目标程序
6、,并可给出列表文件( 同时列出汇编语言和机器语言的文件,称为 .LST 文件)。 展开宏指令。(3) 用 LINK 程序把汇编目标文件( .OBJ 文件)转连接成可执行文件( .EXE 文件)经过汇编产生的汇编目标文件(.OBJ 文件)虽然已经是二进制文件,但它还不能直接上机运行,必须经过连接程序 LINK 把目标文件与库文件或其他目标文件连接在一起形成可执行文件(.EXE 文件),才能在计算机上直接执行。汇编语言程序设计 实习指导书共 20 页 第 4 页(4) 用 DOS 命令直接键入文件名就可执行该程序经过连接产生的可执行文件(.EXE 文件)已经是可以直接上机运行的二进制文件,运行这个
7、文件可以由 DOS 装入存储器,并在机器上运行。(5) 用 DEBUG 调试该程序运行后如果发现运行结果不对,则程序有逻辑错误,这时候可用动态调试程序 DEBUG 调试该可执行程序(.EXE 文件) ,找出程序的错误之处,再重新进行源程序的编辑、汇编和连接等工作。具体 Debug 调试命令见附录(动态调试程序 Debug) 。四、上机步骤制作汇编语言系统盘盘上应包括下列程序宏汇编程序(MASM.EXE)连接程序(LINK.EXE)调试程序(DEBUG.EXE 或 TD.EXE)编辑软件(EDIT.EXE)也可以在硬盘上建立汇编语言文件夹。如下例子均在硬盘 D 区建立文件夹 ASM,文件夹下包括
8、宏汇编程序(MASM.EXE)和连接程序(LINK.EXE)即可,编辑软件 EDIT.EXE 和调试程序 DEBUG.EXE 系统已有。在 DOS 系统下进入文件夹 ASM启动开始程序附件命令提示符CD:DCD ASM用编辑程序建立汇编源程序文件(.ASM 源文件)通过编辑软件 EDIT.EXE 建立。DEDIT OUTCHAR.ASM图 2 EDIT.EXE 编辑软件主界面汇编语言程序设计 实习指导书共 20 页 第 5 页注意:I、进入各菜单“Alt 键+各菜单名打头字符” (如进入 File 菜单 Alt+F)II、程序输入完毕保存在软盘 A(作业盘)上。III、汇编源程序文件名扩展名为
9、.ASM。通过编辑软件 NOTEPAD(记事本)建立。开始程序附件记事本图 3 NOTEPAD(记事本)编辑软件主界面在编辑软件中录入要输入汇编语言源程序,并予以保存(文件扩展名为 ASM) 。例 1:若在屏幕上连续显示字符 0123456789 的源程序如下:NAME EX061 ;OUTP UT CHARACTER 0-9STACK SEGMENT PARA STACK STACKSTAPN DB 100 DUP(?)TOP EQU LENGTH STAPNSTACK ENDSCOSEG SEGMENTASSUME CS:COSEG, SS:STACKSTART: MOV AX, STAC
10、KMOV SS, AXMOV AX, TOPMOV SP, AXMOV BL, 0PUSH BXGOON: MOV DL, 20HMOV AH, 2INT 21HPOP BXMOV AL, BLINC AL DAAAND AL, 0FHMOV BL, ALPUSH BXOR AL, 30HMOV DL, AL汇编语言程序设计 实习指导书共 20 页 第 6 页MOV AH, 2INT 21HMOV CX, 0FFFFHAGAIN: DEC CXJNE AGAINJMP GOONCOSEG ENDSEND START录入以上程序,并以文件名 OUTCHAR.ASM 予以保存在文件夹 ASM 下。
11、用宏汇编程序 MASM.EXE 程序将刚建立汇编源程序 OUTCHAR.ASM 汇编成 汇编目标文件(OUTCHAROBJ)调用宏汇编程序 MASM 对源程序进行汇编D MASM OUTCHAR (不用键入扩展名.ASM)Microsoft(R)Macro Assembler Version 5.00Copyright(C)Microsoft Crop 1981-1985, 1987, All rights reserved.Object filenameoutchar.OBJ : Source lislingNUL.LST: Cross-referenceNUL.CRF: 0 Warning
12、 Errors0 Severe Errors注意:Object filename 为目标文件名 , 可以采用方括号内的文件名 , 也可以重新输入一个文件名。Source listing 要求输入源列表文件名, 当不要求产生.LST 文件时, 可用回车回答, 也可输入一个列表文件名。 (本例假设输入 OUTCHAR 文件名,在汇编后产生 OUTCHAR.LST)Cross-Reference 要求输入索引文件名。 回答方法类似于源列表文件名情况。 但.CRF 文件不是文本文件, 不能用 TYPE 命令列出。 若要求能阅读, 必须将索引文件(二进制形式的文件)变换为索引列表文件(文本文件 )。 方
13、法是执行程序 CREF.EXE, 将索引文件变换为索引列表文件(.REF)。 操作步骤是:D CREFCref Filename.CRF : OUTCHARList Filenameoutchar.REF: OUTCHARD利用 LINK 程序将汇编目标文件 OUTCHAR.OBJ 连接生成可执行的文件(OUTCHAR.EXE)D LINK OUTCHAR.OBJIBM Personal Computer Linker汇编语言程序设计 实习指导书共 20 页 第 7 页Version 2.10(C)Copyright IBM Corp 1981, 1982, 1983Run Fileoutch
14、ar.EXE: List FileNUL.MAP: Libraries.LIB: D其中:Run File 是生成可执行的文件名(.EXE)。 List File 是生成 MAP LIST(清单列表)文件的文件名。 如有省略, 则不生成 MAP LIST 文件。MAP LIST 文件可用 TYPE 命令显示出来,通过此文件,可以了解程序中各个段的内存分布情况。DTYPE OUTCHAR.MAPStart Stop Length Name Class 0000H 0002DH 0002EH COSEG00030H 00093H 00064H STACK STACKOrigin GroupD由.M
15、AP 文件可以看到各逻辑段存放在内存中的位置, 其中 , COSEG 段, 从 00000H 开始, 至 0002DH 单元结束; 而 STACK 段, 则从 00030H 开始至 00093H 结束. 因为是 PARA, 所以, 从被 16 整除的边界(最后一位十六进制数地址是 0)开始。 利用 DEBUG 程序调试 OUTCHAR.EXE 程序一般情况下, 经过一次汇编就能顺利通过的应用程序往往是较少的,对一个大的程序, 往往被划分为若干个模块, 并对它们分别进行编写、 汇编和连接, 然后利用 DEBUG 程序分别对各个模块进行调试。 调试成功后 , 再进行最后的连接、 调试, 直至程序能
16、正常运行为止。 因此, 利用 DEBUG 程序对汇编连接后的程序进行调试是重要的手段之一。 DEBUG 的调试命令如下:DDEBUG OUTCHAR.EXE -其中-为进入 DEBUG 程序的提示符(在调用 DEBUG 程序时, DEBUG 程序应在 A 盘中)。在调试一个程序时:用 U 命令, 可把.EXE 文件反汇编为源文件, 检查输入的程序是否正确; 用 G 命令, 可设置断点运行可执行的文件; 用 A 命令, 可直接输入一段源程序并将其汇编为目标程序; 如用 R 命令,则可显示断点处的各寄存器的当前值和下一条将要执行的命令;如用 D 命令, 可以显示数据段中各存储单元的内容及代码段中的
17、指令代码;如用 E 命令可对以上的数据和代码进行修改。 对调试成功的程序还可以通过命令 N 和写盘命令 W, 将文件存入磁盘。 在 DOS 下运行可执行文件 OUTCHAR.EXE 文件对汇编连接后生成的可执行文件 OUTCHAR.EXE, DOS 把它当成外部命令对待, 在 DOS 提示符下, 可直接键入 OUTCHAR.EXE 文件的文件名 OUTCHAR, 不键入扩展名, 然后按回车键后,OUTCHAR .EXE 文件将被执行。 DOUTCHAR汇编语言程序设计 实习指导书共 20 页 第 8 页1 2 3 4 5 6 7 8 9 0 1 2+D以上程序执行后, 将连续地在屏幕上显示 1
18、, 2, 3, 4等数字, 每个字符间保留一个空格, 可用+复合键中断该程序的执行并返回 DOS。 实验 1. 顺序程序设计一、 实验目的掌握算术运算指令的使用方法。学会顺序结构程序的编程方法。掌握 DOS 子功能调用方法。 掌握汇编程序中变量的定义方法及变量值的查看方法。掌握 DEBUG 调试程序中 D、T、P、R 等调试命令的使用方法。掌握利用 DEBUG 调试程序查看 F 标志寄存器值方法。二、实验内容编写程序并上机调试完成:从键盘上输入两个 1 位数,求出其乘积,并以十进制形式在显示屏上显示该成绩。编程提示:两个 1 位十进制数的输入可通过 DOS 的 1 号子功能调用两次输入 2 个
19、数字字符实现(将输入的 2 个数字字符的 ASCII 码减去 30 再相乘。成绩显示可通过 2 次调用 DOS 的 2 号子功能实现(注意乘积各位的分离可分别用除以10 实现。显示的数值要加 30H 变成字符。 )2 已知变量 X、Y、Z、V 中存放的是有符号字型数据,编写程序,计算(V-(X*Y-540) )/X,并把结果存放到 DX 和 AX 寄存器中。编程提示:变量 X、Y、Z、V 在数据段中可定义成字型,并赋予具体初始数值。三、实验要求提前完成 2 个程序的编制,并通过上机运行及调试,正确完成程序的编制。实验中注意 DEBUG 调试程序中 T 命令和 P 命令的使用,注意观察并记录程序
20、中各个段的内存中的分配情况及各个中断处理子程序在内存中的起始存放地址。注意观察程序 2 和 3 中数据段中各数据的内存存放情况和程序执行中其值变化情况。用 DEBUG 调试程序调试所编程序,查看并记录每条指令内存占用情况及执行结果(包括F 标志寄存各位值。注意观察并记录每条指令执行后 CS 和 IP 寄存器值变化情况,以加深对顺序程序的概念的理解。四、实验报告实习报告格式实习名称实习设备汇编语言程序设计 实习指导书共 20 页 第 9 页实习目的及要求 实习内容程序清单实习中出现问题及解决方法实习小结实验 2. 分支程序设计一、 实验目的掌握条件跳转指令的使用方法。学会分支结构程序的编程方法。
21、利用 DEBUG 调试程序查看 F 标志寄存器值并分析条件跳转指令的跳转和 F 标志寄存器值间的关系。二、实验内容编写程序并调试运行。要求:从键盘上接收一个按键,如果按键是小写字母,则显示输出 L;是大写字母,则显示输出 U;如果是数字,则显示输出 N;都不是,则显示输出*。设变量 K 中存放了 20 个有符号整数组成的字节型数组,编写程序,找出其中最大的数和最小的数,并显示输出。三、实验要求编写程序并上机调试,记录运行结果。用 DEBUG 调试程序调试所编程序,查看并记录每条指令内存单元地址及执行结果(包括 F标志寄存各位值。 )注意观察并记录每条指令执行后 CS 和 IP 寄存器值变化情况
22、,以加深对分支程序的概念的理解。四、实验报告实习报告格式实习名称实习设备实习目的及要求 实习内容程序流程图程序清单及实验数据实习中出现问题及解决方法实习小结汇编语言程序设计 实习指导书共 20 页 第 10 页实验 3. 循环程序设计一、 实验目的掌握移位指令的使用方法。学会循环结构程序的编程方法。利用 DEBUG 调试程序查看循环程序循环过程中 CS 和 IP 的变化情况。二、实验内容内存中连续存放了 100 个字节型带符号数据,编写程序,统计出:大于 0 的数据个数;小于 0 的数据个数;等于 0 的数据个数;奇数数据的个数;偶数数据的个数;编写统计 15 个学生数学学习成绩程序。要求:分
23、别统计出低于 60 分,60-69 分,70-79 分,80-89 分,90-100 分的人数,并存放到 S5,S6,S7,S8,S9,S10 对应内存单元中。三、实验要求编写程序并上机调试,记录运行结果。用 DEBUG 调试程序调试所编程序,查看并记录每条指令内存单元地址及执行结果(包括 F标志寄存各位值。 )注意观察并记录每条指令执行后 CS 和 IP 寄存器值变化情况,以加深对分支程序的概念的理解。四、实验报告实习报告格式实习名称实习设备实习目的及要求 实习内容程序流程图程序清单及实验数据实习中出现问题及解决方法实习小结汇编语言程序设计 实习指导书共 20 页 第 11 页实验 4. 子
24、程序设计一、 实验目的掌握子程序的编程方法。掌握主程序调用子程序方法。掌握汇编程序中堆栈段的建立方法。掌握汇编程序中堆栈段的建立方法。二、实验内容编写并调试完成程序:键盘输入一行字符串,在下一行反序显示输出该字符串。要求:下行显示时光标通过调用“回车换行子程序 CR.ASM”实现。三、实验要求编写程序并上机调试,记录运行结果。用 DEBUG 调试程序调试所编程序,查看并记录子程序调用前后和子程序返回前后堆栈段内容的变化情况以及 SP 寄存器值变化情况。注意观察并记录每条指令执行后 CS 和 IP 寄存器值变化情况,以加深对子程序概念的理解。四、实验报告实习报告格式实习名称实习设备实习目的及要求
25、 实习内容程序流程图程序清单及实验数据(子程序要求书写子程序说明)实习中出现问题及解决方法实习小结汇编语言程序设计 实习指导书共 20 页 第 12 页附录:动态调试程序 DEBUG一、 DEBUG 的启动与退出DEBUG.COM 是 DOS 的外部命令,也是一个非常方便的汇编程序分析工具。1DEBUG 的启动DEBUG 的启动格式如下:DEBUG其中, “文件说明”指被调试的程序的全名, “参数”是该程序所涉及的参数。下面是几个启动 DEBUG 的例子。DDEBUG TT.EXEDDEBUG第一句是调试 TT.EXE 程序。第二句是启动 DEBUG,不装入文件。DEBUG 装入内存后,接着就
26、从磁盘上查找被调试的程序,找到后将其装入内存(对于后缀为 .EXE 的文件,DEBUG 将它装入到最低可用的区段中,并从 100H 开始装入),然后显示出提示符“-”。等待用户进一步输入命令。DEBUG 命令中使用的地址格式约定如下::其中,可以是段寄存器名,或者是十六进制数,也可以默认。例如: CS:0100 2212:0100而地址范围的格式为::或:L例如:下列地址范围。 CS: 100 1002123:100L102退出 DEBUG当完成动态调试任务时,可使用 Q 命令退出并返回操作系统。格式:-Q二、 汇编、执行、跟踪和反汇编汇编、执行、跟踪和反汇编是 DEBUG 的一组最基本操作。
27、在 DEBUG 下汇编一小段程序后,就可以进入执行或跟踪执行过程,然后将该程序反汇编出来。1A 命令(汇编)汇编语言程序设计 实习指导书共 20 页 第 13 页A 是 1 条逐行汇编命令,主要用于小段程序的汇编和修改目标程序。若在调试目标程序的过程中, 要求改写或增添一段目标程序, 则可以用 A 命令直接在 DEBUG 下实现。 使用逐行汇编命令汇编程序时,一般不允许使用标号和伪指令。但在 MS-DEBUG 中允许使用 DB 和 DW 这两条伪指令。汇编命令的格式如下:A 该命令可以从指定地址开始, 将输入的汇编语言语句立即汇编成机器代码 , 连续存放在内存单元中。 其中, “地址”为开始汇
28、编的地址,若没有“地址” ,则从当前地址开始汇编。在程序输入完毕后, 最后一行不输入内容, 直接按回车键, 即可返回 DEBUG 程序, 还可用反汇编命令 U 对刚输入的内容进行反汇编, 以验证输入的程序是否正确。 A 命令用 Ctrl+C 或按回车键退出汇编。汇编过程中发现错误时,显示出 1 个“?”并要求重新输入。使用 A 命令来汇编小段程序往往比使用汇编和连接程序方便。汇编好的程序也可以用写盘命令存在磁盘上。【例 1】 汇编一小段程序(读软盘 BOOT 扇区内容)。-A 2A7D:0100 MOV AX,0201;地址自动给出,逐行输入语句2A7D:0103 MOV BX,02002A7
29、D:0106 MOV CX,00012A7D:0109 MOV DX,00002A7D:010C INT 132A7D:010E INT 32A7D:010F ;结束输入使用 A 命令应遵守以下规则: 所有输入数值, 均为十六进制数。 前缀助记符, 必须在相关指令的前面输入, 可以在同一行, 也可以在不同行输入。 段超越助记符为 CS:、 DS:、 ES:、 SS:。 远调用时的返回指令助记符用 RETF。 使用串操作指令时, 助记符中必须注明是字节还是字传送。 汇编语言能自动汇编短、近和远的转移及近和远的调用,也能由 NEAR 和 FAR 前缀来超越。 例如:0100:0500 JMP 50
30、2;短转移0100:0502 JMP NEAR 505;近转移0100:0505 JMP FAR 50A;远转移第一条 JMP 指令中含有一个字节偏移量。 第二条 JMP 指令中含有两个字节偏移量。 第三条 JMP 指令中含有两个字节的偏移量及两个字节的段地址。2. G 命令(执行)G 命令用来启动运行一个程序或程序的一段,它是 DEBUG 程序进行程序调试的主要命令汇编语言程序设计 实习指导书共 20 页 第 14 页之一。它的格式如下:G =其中,断点最多允许设置 10 个。如果 G 命令不带参数,则从头运行装入的程序,运行后仍返回 DEBUG。如 G 命令后有断点地址,则程序执行到断点地
31、址时暂停并显示出各寄存器状态。注意: 第一个参数 =地址规定了程序执行的起始地址 , 以 CS 内容作段地址, 等号后面的地址只需给出地址偏移量。 此时, 命令 G 与地址之间的等号不能省去。 如果在 G 命令执行前, 已经设置了 CS 值和 IP 值, 则也可以直接用 G 命令, 从指定地址执行程序。 格式中后面给出的地址是指断点地址, 最多可设置 10 个断点。 当程序执行到一个断点时,就停下来, 显示 CPU 各寄存器的内容和标志位的状态 , 以及下一条待执行的指令, 被调试程序的所有断点全部被取消, 并返回 DEBUG。 地址参数所指的单元, 必须包含有有效的 8088 指令的第一个字
32、节 , 否则将产生不可预料的结果。 堆栈必须至少包含有 6 个可用字节, 否则也将产生不可预料的结果。 若断点地址只包括地址偏移量, 则认为段地址在 CS 寄存器中。 【例 2】 例如,执行例 1 的小程序。-G=100 (从地址 100H 处开始执行)AX=8000 BX=0200 CX=0001 DX=0001 SP=FFEE BP=0000SL=0000 D1=0000DS=2A7D ES=2A7D SS=2A7D CS=2A7D IP=010ENV UP EI PL NZ NA PO CY2A7D:010E CC INT 33. T 命令(跟踪执行)T 命令用来逐条跟踪程序的执行,它的
33、格式是:T=每条指令执行后,都要暂停并显示各寄存器的内容。跟踪执行实际上是单步执行。在分析程序时希望不断跟踪程序执行路径,从而分析出程序执行过程的细节。例如:-T=0100 3 格式(1): T =地址该命令可以在指令执行中进行追踪, 若略去地址, 则从 CS:IP 现行值执行。 每一次 T 命令都执行一条指令,都要暂停并显示各寄存器的内容。 格式(2): T =地址 跟踪命令条数值此时,它可对多条指令进行追踪, 即在执行了由跟踪命令条数值所指定的若干条指令之后, 停止执行并显示各寄存器的内容和各标志位, 还指出下一条待执行的指令。4. U 命令(反汇编)U 命令可以对二进制代码程序作出反汇编
34、,常用于分析和调试目标程序。U 命令格式为:-U格式(1): U 地址该命令从指定的地址开始, 反汇编 16 个字节或 32 个字节。 若略去指定地址, 则以上汇编语言程序设计 实习指导书共 20 页 第 15 页一个 U 命令反汇编的最后一条指令地址的下一条指令地址作为起始地址; 若没有用过 U 命令, 则以由 DEBUG 初始化的段寄存器的值作段地址, 以 100 作为地址偏移量。 例如:反汇编前面汇编的程序:-U 100 (从地址 100H 处开始执行)2A7D:0100 B80102 MOV AX,0201 ;自动给出反汇编结果2A7D:0103 BB0002 MOV BX,02002
35、A7D:0106 B90100 MOV CX,00012A7D:0109 BA0000 MOV DX,00002A7D:010C CDL3 INT 132A7D:010E CC INT 32A7D:010F 020A ADD CL,BP+SI上述反汇编程序,在汇编程序和地址中间增加有 B80102 等内容,表示是二进制的机器码。注意,在反汇编过程中,如果源程序中有一段数据,则也被反汇编成“程序” ,但读不懂,这时应越过这一段。此外,U 命令不识别程序结束,因此必须给定结束位置的地址。格式(2): U 范围这种格式的命令, 可以对指定范围的内存单元进行反汇编, 范围可以由起始地址、 结束地址(只
36、能包含地址偏移量)或起始地址及长度来指定。 其命令格式如:U 04BA:100 0108或 U 04BA:0100 L7两者是等效的。 三、显示、修改内存和寄存器命令程序中反汇编出来的数据不易读懂,必要时需用显示命令显示。此外,当需要修改内存中一些数据时,可以用修改内存命令进行操作。修改寄存器参数时,要使用寄存器命令。1D 命令(显示内存)D 命令是将调入内存的程序以十六进制形式以及对应的 ASCII 字符形式显示出来。格式如下:D或 D其中, “地址”表示从该地址开始显示,若没有地址,则从当前地址显示;“范围”表示显示内存指定范围的内容,这里所说的范围包含起始地址和结束地址。起始地址可由段基
37、址及段内偏移量两个部分组成, 中间用冒号 :隔开, 也可以只指出段内偏移量 , 而此时的段基址在DS 中。此命令执行后,将从指定地址开始, 显示 40H 个或 80H 个字节的内容, 每一行的左边显示段内偏移地址, 接着显示 16 个单元的内容, 最右边区域则显示这一行的 16 个单元所对应的可显示的字符。 若无可显示的字符, 则用圆点(小数点)填充。 D 命令中的地址可为段内偏移量, 也可为段基址和段内偏移量两部分, 中间用冒号隔开, 如 1660:0100, 即指段基址为 1660H, 段内偏移量为 0100H。 DEBUG 中所显示的数据均为十六进制数, 且省去了后面的 H 标志。 例如
38、:-D 100,200表示显示内存地址 100-200 这一段的内容。注意:DEBUG 操作数一般是十六进制数。2E 命令(将内容写入内存)汇编语言程序设计 实习指导书共 20 页 第 16 页将内容写到指定地址处,命令格式如下:E其中, “地址”为写入内容的地址, “字节串”为写入的内容,没有字节串的格式,是一种交互式写入内容。格式(1): E 地址 内容表它的功能是用给定的内容表去代替所指定的内存单元的内容。 例如:-E DS:0100 41 OPEN 41该命令执行后, 将用列表中的 6 个字符填入从 DS:0100 到 DS:0105 的 6 个存储单元中。格式(2): E 地址它的功
39、能是可以连续地逐个修改内存单元的内容。 当屏幕上显示指定单元的地址和内容之后, 可采取下列办法: 若指定单元的内容需要修改, 则将新的内容的十六进制数输入, 再按空格键, 修改便告完成, 然后显示下一个存储单元的地址及内容, 若需要修改, 可进行同样的操作。 若某一个单元的内容不需要修改, 而操作又要进行下去, 则可直接按空格键 若需要显示前一个单元的地址和内容, 则输入连接号-; 若要修改, 则输入新的内容, 再按- 键, 本次修改完成; 若显示前一个单元的地址和内容仍要修改, 则可进行同样的操作; 若显示的内容不需要修改, 则可直接按- 键, 使该操作由高地址向低地址单元连续不断地进行。
40、按键, 结束 E 命令。 3R 命令(修改寄存器)显示寄存器的内容,然后修改其值。命令格式如下:R (显示所有寄存器和标志)R 寄存器 (显示指定寄存器)RF (显示所有标志)格式(1): R显示寄存器内容时,首先显示 13 个 16 位寄存器的内容,随后是标志寄存器的内容,最后一行是下一条要执行的指令地址和指令内容。格式(2): R 寄存器名该格式可用于检查和修改指定寄存器的内容。 若不修改其内容 , 可按键; 若需要修改其内容, 可以输入 1-4 个十六进制数, 再按键。例如:显示 CX 寄存器中的内容,并修改为 0F:-R CX CX 0001: 0F 格式(3): RF该格式可用于显示
41、标志和修改标志位状态。 当系统给出标志位状态后, 可采取下列办法: 若不需要修改任一标志位, 可按键。 若需要修改一个或多个标志位, 可输入其相反的值 . 各标志位之间可以无空格且与顺汇编语言程序设计 实习指导书共 20 页 第 17 页序无关, 修改后按键。 由于标志位状态显示时, 是用下列特殊符号表示的 , 因而修改时 , 只要输入规定的符号即可。 下面是标志名和状态符号的对照表:标志名置 位符号复 位符号溢出标志 OF(是/否) OV NV方向标志 DF(减/增) DN UP中断标志 IF(允许/禁止) EI DI符号标志 SF(负/正) NG PL零标志 ZF(是/否) ZR NZ辅助
42、进位标志 AF(是/否) AC NA奇偶校验标志 PF(偶/奇) PE PO进位标志 CF(是/否) CY NC只有追踪标志 TF, 不能用指令直接修改。 例如: 输入 RF 命令, 系统可能作出如下响应:OV DN EI NG ZR AC PE CY-若现在要修改奇偶、 零、 中断和溢出标志位, 可在光标处输入:PO NZ DI NV四、磁盘文件操作利用 DEBUG 命令编写的小程序段运行无误之后,就可以将其存盘。1N 命令(命名)命名命令可用来设置文件名,以便于进行读写。格式如下:N其中, “文件名”为用户指定的文件名。2W 命令(写盘)写盘命令是将当前内存指定长度的内容按 N 命令给出的
43、文件名存入磁盘。格式如下:W其中, “地址”是写盘内容在内存中的首地址(如果有磁盘参数,则按指定磁盘参数进行写盘操作);“盘号”为 0 表示 A 盘,为 1 表示 B 盘,为 2 表示硬盘 C;“扇区个数”是写入的扇区总数。使用 W 写一个文件时,要先用 N 命令指定文件名,再用 R 命令将文件长度送到寄存器 BX和 CX 中。【例 3】 将程序段命名并写入文件中。-U 100 ;反汇编2A7D:0100 B80102 MOV AX,02012A7D:0103 NU0002 MOV BX,02002A7D:0106 B90100 MOV CX,00012A7D:0109 BA0000 MOV
44、DX,00002A7D:010C CDL3 INT 132A7D,010E CC INT 3-R CX 汇编语言程序设计 实习指导书共 20 页 第 18 页CX 0001: 0F ;设置文件长度-N READD.COM ;命名-W ;写盘WRITING 000F BYLES-Q ;结束退出再如,将内存 0200 处的内容(1 个扇区)写入 A 盘第 20 扇区中。-W 0200 0 20 1 3L 命令(读盘) 该命令可将磁盘指定扇区的内容读到内存,或将指定文件读到内存。格式如下:L其中, “地址”为装入内容的内存首地址;“相对扇区号”为开始装载的扇区号;“扇区数”为要读入的扇区数(最大 80H)。注意: