第一部分预备知识_第1页
第一部分预备知识_第2页
第一部分预备知识_第3页
第一部分预备知识_第4页
第一部分预备知识_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、PAGE PAGE 57第一部分 预备知识汇编语言程序设计的上机过程开发8086/8088汇编语言源程序的过程如下:myfile.asmmm编辑程序汇编程序连接程序myfile.crfotherfiles.objmyfile.lstmyfile.objmyfile.mapmyfile.exe 图1.1 上机过程及生成的文件 1、编辑源程序为了将源程序送入计算机并建立一个源程序名为*.ASM的源文件,可以使用任何流行的字处理程序或能编辑ASCII文字符号的编辑程序。例如调用DOS下的全屏幕编辑程序EDIT或Windows下的记事本,建立和修改源程序,生成扩展名为.ASM的文件。在Windows系

2、统中,用鼠标点击开始菜单,指向程序附件MS DOS方式(Windows XP 中为“命令提示符”),在MS DOS提示符下键入EDIT,启动编辑程序。例如C:EDIT MYFILE.ASM 通过以上操作, 建立了一个名为MYFILE.ASM的汇编语言源程序。汇编语言源程序的扩展名必须为.ASM;若在以后的几个步骤中发现源程序有错,还要回到编辑程序中加以修改,并重新存盘。2、将源程序文件汇编成目标程序文件一般情况下,MASM汇编程序的主要功能有: 检查源程序中的语法错误,并给出错误信息。 若源程序经汇编后没有错误,产生目标程序文件。即将用汇编语言编制的源程序转换为机器代码的目标程序的文件(扩展名

3、为.OBJ),并可给出列表文件(.LST)和交叉索引文件(.CRF)。 若程序中使用了宏指令,则汇编程序将展开宏指令。在DOS提示符下,键入MASM 命令行,命令行的格式为:MASM 源文件名,目标文件名,列表文件名,交叉索引文件名;注:命令行中的方括号内为可选项。例:设有文件名为TRY.ASM的汇编语言源文件,则调用MASM进行汇编的过程为:C:MASM TRY.ASM Microsoft (R) Macro Assembler Version 5.00Copyright (C) Microsoft Crop 1981 1985, 1987, All rights reserved.Obje

4、ct filename TRY.OBJ:TRY Source listing NUL.LST:TRY Crossreference NUL.CRF:TRY Warning ErrorsSevere Errors其中Object filename 为目标文件名,这是汇编的主要目的,该文件是我们需要的。若采用方括号内的默认文件名,直接按回车即可;也可以重新输入一个目标文件名。Source listing 为要求输入的列表文件名,系统默认不建立列表文件。所以,当不要求产生.LIS文件时,可用回车直接回答,表示不建立列表文件;若要建立列表文件,也可在冒号“:”后,输入一个列表文件名。Crossrefe

5、rence 为要求输入的索引文件名。回答方法类似于列表文件名的情况。命令行中的分号“;”作为命令行的终止符,未输入部分,将采用MASM的缺省设定值。注:MASM的缺省设定值为:生成目标文件且与源文件名相同,不生成列表文件和交叉索引文件。例如:C:MASM TRY; 仅生成TRY.OBJ文件,且MASM不再询问是否生成列表文件和交叉索引文件。 C:MASM TRY,TRY,TRY,TRY 三个文件全生成如果汇编过程中发现源程序有语法错误,则列出有错误的语句和错误信息。汇编过程的错误分警告错误(Warning Errors)和严重错误(Severe Errors)。警告错误指出汇编程序认为的一般性

6、错误;严重错误指出汇编程序认为已经使汇编程序无法进行正确汇编的错误,并给出错误的个数和错误信息。如果程序有错,则应重新调用编辑程序修改错误,并重新汇编直到汇编正确通过为止。 3、 用连接程序LINK产生可执行的EXE文件经汇编后产生的目标程序文件(.OBJ文件)并不是可执行程序文件,必须经过连接以后,才能成为可执行文件(.EXE文件)。LINK连接程序可以将汇编程序或高级语言编译程序生成的一个或多个.OBJ文件连接成一个可执行文件和一个内存映象文件;还可以在汇编系统和各种高级语言编译系统提供的库文件(.LIB)中检索目标块引用的标准库函数,并与目标模块组合在一起。命令行的格式为:LINK 目标

7、文件名表,可执行程序文件名,映象文件名,库文件名表;命令行中的方括号内为可选项。“目标文件名表”可以是一个目标文件,也可以是多个目标文件,若是多个目标文件,文件名之间用“+”号连接。 “可执行程序文件名”是可选项,若输入了可执行文件名,则以输入的文件名为可执行程序的文件名,若未输入可执行程序文件名,则以第一个目标文件名的基本名为可执行程序文件的基本名,扩展名为.EXE。“映象文件名”是可选项,若需要生成映象文件时,就键入文件名字。“库文件名表” 是可选项,用户应根据生成目标文件所用的程序设计语言编译系统确定要用的库文件并键入库文件名,若用一个以上的库文件,则库文件名之间用“+”号连接。命令行中

8、的分号“;”作为命令行的终止符,未输入部分,将采用LINK的缺省设定值。例如:C: LINK TRY Microsoft (R) Overlay Linker Version 3.60Copyright(C) Microsoft Crop 1983- 1987. All rights reserved.Run File TRY.EXE: TRY List File NUL.MAP: TRY Libraries .LIB: LINK :warning L4021: no stack segment其中,Run File 是生成的可执行文件的文件名 (.EXE)。List File 是生成MAP

9、LIST(清单列表)文件的文件名。如有省略,则不生成MAP LIST文件。MAP LIST文件可用TYPE命令显示出来。 注:上例表示生成TRY.EXE和TRY.MAP文件,程序运行时没有用到库文件。C: LINK TRY; 仅生成TRY.EXE文件4、利用DEBUG调试程序对可执行文件进行调试(扩展名为.EXE或.COM的可执行文件) C:DEBUG TRY.EXE 注:在汇编过程中,只能指出程序中的语法错误,至于程序的算法或编制程序中的其他错误应该在调试时解决。5、在DOS下运行可执行的文件对汇编连接后生成的.EXE文件,DOS把它当成外部命令对持, 在DOS提示符下,可以直接键入.EXE

10、文件的文件名,无须键入扩展名,然后按回车键,.EXE文件将被执行。C:TRY C:然而通常一个较复杂、较长的汇编语言源程序,期望一点错误也没有,一次运行通过的可能性是很小的,这样就需要调用DOS支持下的DEBUG程序调试目标程序。在DEBUG的管理下,可以单步执行程序,可以设置断点,出可以显示和修改CPU内部寄存器的内容等。这样就便于寻找程序中的错误。在发现了错误以后,通常还要重复上述的编辑、连接和调试程序的全过程,直至程序运行正确为止。 二、调试程序DEBUG的使用方法DEBUG简介调试程序DEBUG.COM也称纠错程序。它提供了对可执行程序(.EXE和.COM)或二进制文件的控制和检测手段

11、,使用户能利用DEBUG提供的命令监视和控制被调试程序的执行过程,跟踪程序的踪迹,了解程序中每条指令执行完毕后各个寄存器的内容,以便检查和修改可执行程序;也可用于装入、显示和修改某一文件。启动DEBUG的方法启动DEBUG可使用下述两种方法之一:直接启动DEBUG程序在DOS提示符下直接键入,如C: DEBUG DEBUG即被调入内存并启动运行。此时,屏幕上会出现 DEBUG的提示符“-”,等待键入DEBUG命令。启动DEBUG程序的同时装入被调试文件 命令格式如下:C: DEBUG d:pathfilename.extd:path是被调试文件所在盘符及其路径,filename是被调试文件的文

12、件名,.ext 是被调试文件的扩展名。DEBUG即被调入内存并启动运行,然后将指定的文件调入内存,并显示 DEBUG的提示符“-”,等待键入DEBUG命令。DEBUG的常用命令DEBUG命令都是单字母命令,除Q(退出DEBUG)命令外,都带有一个或多个参数,参数之间用空格分隔。键入命令字母和参数后,按回车键命令才开始执行,如果键入命令或参数不合法,则会在命令行的下一行的错误位置处显示“Error”信息,表示该命令出错。DEBUG下的数据均是十六进制数,且不以H结尾;DEBUG命令中使用的地址,有以下几种形式: 段寄存器名和偏移量,如:DS:0010段地址和偏移量,如:0221:0110仅有偏移

13、量(段地址取缺省值),如:0015用单引号扩起字符串,如:ABCD下面介绍DEBUG的主要命令 显示内存单元内容的命令D 格式1: -D 地址 功能:从指定地址开始, 显示128个字节单元的内容。 格式2: -D地址范围功能:将显示指定地址范围内的内存单元的内容。说明:若地址或地址范围中不指定段地址,则以DS为缺省值,若不指定地址或地址范围,从前一次显示的最后一个单元的下一个单元开始的128个字节的内容开始显示。显示格式为: 段地址:偏移量 16个字节的内容 各单元对应的ASCII码字符(不可见字符用.表示)2. 修改内存单元内容的命令E格式1: E 地址 内容表 功能:是用给定的内容表去代替

14、所指定的内存单元的内容。 例如: -E DS:0100 41 OPEN 41 该命令执行后, 将用列表中的 6 个字符填入从DS:0100 到DS:0105 的 6 个存储单元中。格式2: E 地址 功能:连续地逐个修改内存单元的内容。 当屏幕上显示指定单元的地址和内容之后, 可采取下列办法: 若指定单元的内容需要修改, 则将新的内容的十六进制数输入, 再按空格键, 修改便告完成, 然后显示下一个存储单元的地址及内容, 若需要修改, 可进行同样的操作。 若某一个单元的内容不需要修改, 而操作又要进行下去, 则可直接按空格键。 若需要显示前一个单元的地址和内容, 则输入连接号-; 若要修改, 则

15、输入新的内容, 再按-键, 本次修改完成; 若显示前一个单元的地址和内容仍要修改, 则可进行同样的操作; 若显示的内容不需要修改, 则可直接按-键, 使该操作由高地址向低地址单元连续不断地进行。 按键, 结束E命令3、 显示和修改寄存器内容的命令R格式1: R 功能:显示所有寄存器的内容及下一条要执行的指令。格式2: R 寄存器名 功能:显示指定寄存器的内容,并允许用户修改。 若不修改其内容, 可按键; 若需要修改其内容, 可以输入 1-4 个十六进制数, 再按键。 格式3: RF 功能:显示和修改标志位状态。 当系统给出标志位状态后, 可采取下列办法: 若不需要修改任一标志位, 可按键。 若

16、需要修改一个或多个标志位, 可输入其相反的值。 各标志位之间可以无空格且与顺序无关, 修改后按键。 由于标志位状态显示时, 是用下列特殊符号表示的, 因而修改时, 只要输入规定的符号即可。 下面是标志名和状态符号的对照表: 标志名 置位符号 复位符号 溢出标志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命令, 系统可能作出如下响应: OV

17、DN EI NG ZR AC PE CY- 若现在要修改奇偶、 零、 中断和溢出标志位, 可在光标处输入:PO NZ DI NV例:- RAX 03F5 ;AX的内容为03F5: ;系统显示“:”,并等待键入信息,若欲修改AX的内容则键入新值,否则按回车键只有追踪标志TF, 不能用指令直接修改。4. 运行程序命令G 格式: G =地址地址地址 功能:执行被调试的程序。 说明: 第一个参数=地址规定了程序执行的起始地址, 以CS内容作段地址, 等号后面的地址只需给出偏移地址。 此时, 命令G与地址之间的等号不能省略。 如果在G命令执行前, 已经正确设置了CS和IP的值, 也可以直接用G命令, 从

18、指定的CS:IP地址执行程序。如:- G 格式中后面给出的地址是指断点地址, 最多可设置 10 个断点。 当程序执行到一个断点时, 就停下来, 显示CPU各寄存器的内容和标志位的状态, 以及下一条待执行的指令, 被调试程序的所有断点全部被取消, 并返回DEBUG。 地址参数所指的单元, 必须包含有有效的 8086/8088 指令的第一个字节, 否则将产生不可预料的结果。 若断点地址只包括地址偏移量, 则G命令认为其段地址隐含在段寄存器CS中。例:-G 20 14F ;从当前CS:IP指出的指令执行,设置了两个断点-G =100 20 14F ;从CS:100指出的指令执行,设置了两个断点-G

19、=0B49:100 20 14F ;从0B49:100处开始执行,设置了两个断点5. 追踪命令T功能:执行一条或多条指令,然后停止并显示执行每条指令后各个寄存器的值。 格式1: T 功能:执行CS:IP指出的一条指令。 格式2:T VAL功能:执行CS:IP指出的VAL条指令。说明:VAL为一个数值,它指出了要执行的指令条数。 格式3: T =地址 功能:执行地址指出的一条指令,若地址未指出段地址,以CS为缺省值。 格式4:T =地址 VAL 功能:执行地址指出的VAL条指令例:-T 5 ;执行CS:IP指出的连续5条指令-T=105 ;执行CS:105指出一条指令-T=0B49:105 5

20、;执行0B49:105开始的连续5条指令T命令能跟踪进入CALL指令、 INT n指令或带重复前缀的串操作指令,并且能跟踪LOOP指令的每一次循环,若不想观察相应过程的详细执行过程,可以用P命令。6、执行过程命令P功能:执行一条指令或一个过程(子程序),然后显示各寄存器的状态。说明:该命令用于调试程序时,执行一条指令或一个过程(子程序)。它与跟踪命令T的作用类似,T命令是跟踪一条或多条指令,而P命令是执行一条指令(INT n指令、LOOP循环指令或带重复前缀的串操作指令)或一个完整的过程(子程序)。P命令在执行这些指令后将停在这些指令的下一条指令上,不会由于过程调用或软中断调用而跟踪进入被调用

21、程序,即一次执行完这些指令或一次执行完重复的串操作指令。7. 汇编命令A 若在调试目标程序的过程中, 要求改写或增添一段目标程序,或者进行简单的编程, 则可以用A命令直接在DEBUG下实现。 格式: A 地址 功能:从指定地址开始, 将用户输入的汇编语言语句立即汇编成机器代码,连续存放在内存单元中。 说明:命令中的“地址”为可选项,若不输入,则以CS:IP的当前值为当前地址。键入此命令后,将在下一行显示地址,并等待输入汇编语句。每一条语句输入完后,则在下一行显示下一指令的地址,并再等待输入汇编语句,在程序输入完毕后, 最后一行不输入内容, 直接按回车键, 即可返回DEBUG提示符, 还可用反汇

22、编命令U 对刚输入的内容进行反汇编, 以验证输入的程序是否正确。若输入语句有错误,DEBUG将显示:Error并重新显示现行的汇编地址,等待新的输入。 使用A命令应遵守以下规则: 键入的汇编语句中的内存单元地址、转移的目标地址或调用的子程序入口地址,都不能用符号表示, 必须用十六进制数表示; 当用十六进制数表示存储单元的地址时, 用方括号将地址值括起来。 段超越助记符为CS:、 DS:、 ES:和 SS:。 远调用时的返回指令助记符用RETF。 当DEBUG不能确定某些操作数涉及的是字类型存储单元还是字节类型的存储单元时, 在这种情况下, 必须用前缀WORD PTR或BYTE PTR来加以说明

23、。 例如: NEG BYTE PTR 128 DEC WORD PTR SI8、 反汇编命令U 功能:将机器指令翻译成符号形式的汇编语言指令,同时显示地址、机器码及汇编语言语句。 格式1: U 格式2: U地址 格式3:U范围 说明:格式1,将当前CS:IP指出的连续16(或32)个字节反汇编为汇编语句,若连续使用则将前一次反汇编的最后一条指令的下一个单元开始的连续16(或32)个字节反汇编为汇编语句并显示出来。说明:反汇编字节数取决于系统显示格式,系统为40列显示格式时,反汇编为16个字节,为80列显示格式时,反汇编为32个字节。格式2,将地址指出的连续16(或32)个字节反汇编为汇编语句并

24、显示出来。若地址中未指定段地址,则以CS为缺省值。格式3,将格式中指定范围内的机器码反汇编为汇编语句并显示出来。若 范围中未指定段地址,则以CS为缺省值。例:将CS:IP指出的16(或32)个字节的机器码反汇编为汇编语句 - U将0216:200开始的16(或32)个字节的机器码反汇编为汇编语句- U 0216:200将0216:200至205单元的机器码反汇编为汇编语句- U 0216:200 205 9、 填充命令F格式:F 范围 单元内容表功能:将单元内容表中的内容写入范围指出的存储区。说明:若单元内容表中的数据个数少于范围指出的存储区的内存单元个数,则将单元内容表中的数据重复写入内存,

25、直到范围指出范围内的单元写满。若单元内容表中的数据个数多于范围指出的存储区的内存单元个数,则多余部分无效。例:用31H,32H,33H,34H,35H填满DS:100开始的16个单元。- F 100 L10 31 32 33 34 35 或 - F 100 L10 12345 或 F 100 10F 12345 用D命令检查F命令执行的结果:- D 100 L10 或 -D 100 10F0B38:0100 31 32 33 34 35 31 32 33 34 35 31 32 33 34 35 31 123451234512345110、 退出DEBUG命令Q 格式:Q 功能:该命令退出DE

26、BUG程序并返回DOS。 三、常用DOS命令(1) 查看目录命令,它列出指定盘上的文件目录,如:C:DIR D: 或 C:DIR D:/W它们将列出D盘上全部文件。(2) 显示命令TYPE,它将磁盘上所指(ASCII码)文件的内容显示在屏幕上或在打印机上输出(若打印机已联机)。 如:C:TYPE TEST.ASM此命令将当前目录下的文件TEST.ASM的内容显示出来。(3) 拷贝命令COPY,它把一个或多个文件拷贝成副本,如C: COPY TEST1.ASM A:此命令将把C盘的文件TEST1.ASM用同名复制到A盘上。C:COPY TEST1.ASM+TEST2.ASM此命令将把C盘上的TE

27、ST2.ASM文件连接到TEST1.ASM之后。(4) 改名命令REN或RENAME,如:C:REN A1.EXE A2.EXE 或 C:RENAME A1.EXE A2.EXE 此命令将把C盘上文件A1.EXE改名为A2.EXE。(5) 删除命令ERASE或DEL,它将从指定的驱动器上删除一个或多个文件。如:C:REASE A:EXER1.ASM 或 C:DEL A:EXER1.ASM 此命令将删除A盘上的文件EXER1.ASM。四、 常用目录操作命令(1)建立子目录命令MD或MKDIR,格式为:C:MD 子目录名 或 C:MKDIR 子目录名 例如:C:MD C:TEMP则在硬盘C的根目录

28、下建立了一个子目录TEMP。又如:C:MD C:TEMPWANG则在子目录TEMP下建立了一个名为WANG的子目录。(2) 删除子目录命令RD或RMDR,格式为: C:RD 子目录名 或 C:RMDIR 子目录名例如C:RD C:ETMPWANG则把子目录WANG删除,条件是子目录WANG是空的,且WANG不能是当前目录。(3)改变当前目录命令CD或CHDIR,格式为:C:CD目录名或C:CHDIR子目录名将目录名对应的子目录变为当前目录。(4)显示目录结构命令TREE,格式为:C:TREE屏幕上将显示C盘的整个目录结构。(5)退出子目录,格式为:C:CD.将退出当前子目录,退到上一层目录下。

29、第二部分 汇编语言程序设计实验实验一 汇编语言上机的基本操作实验实验目的 熟悉使用MSDOS的常用命令;熟悉在计算机上编辑、汇编、连接、调试和运行汇编语言程序的过程。实验要求初步学会建立源程序文件;掌握用MASM将汇编语言源程序生成为目标程序的方法;掌握用LINK将目标程序连接为可执行程序的方法;初步掌握DEBUG中的U、D、G、E、Q命令。实验内容及步骤例2.1 编辑、汇编、连接和执行下列程序。操作步骤如下:1、编辑汇编语言源程序。在Windows环境下可以使用“EDIT”来对汇编语言源程序进行编辑。用EDIT编辑汇编语言源程序用鼠标点击开始菜单,指向程序附件MS DOS方式,在MS DOS

30、提示符下键入EDIT,启动编辑程序。即 C:EDIT 在EDIT编辑状态下输入2.1 所示的汇编语言源程序,待程序输入完后,用鼠标单击File菜单下Save命令保存当前程序。当前程序取名为EXAM21. ASM。程序清单如下:;*EXAM21. ASM*DSEG SEGMENT DATA1 DB 35HDATA2 DB 29HDSEG ENDSCSEG SEGMENT ASSUME CS:CSEG,DS:DSEGSTART:MOV AX,DSEG MOV DS,AX MOV AL,DATA1 ADD AL,DATA2 PUSH AX MOV CL,4 SHR AL,CL ADD AL,30H

31、CMP AL,39H JBE OK1 ADD AL,07H OK1 MOV DL,AL MOV AH,2 INT 21H POP AX AND AL,0FH ADD AL,30H CMP AL,39H JBE OK2 ADD AL,07H OK2: MOV DL,AL MOV AH,2 INT 21H MOV AH,4CH INT 21HCSEG ENDS END START待程序输入完后,用鼠标单击文件菜单下保存命令保存当前程序。在对汇编语言源程序文件进行保存时必须给其取一个文件名字,且该文件的扩展名必须为“.ASM”,否则MASM不对其进行宏汇编操作。2、用宏汇编程序MASM对例2.1进行

32、汇编。操作如下:C:MASM EXAM21;屏幕显示:Microsoft(R)Macro Assembler Version 5.00 Copyright(C)Microsoft Crop 1981-1985, 1987, All rights reserved. EXAM21. ASM(17):error A2009:Symbol not defined: OK1EXAM21. ASM(19):error A2105:Expected:instruction or directive51744 + 287360 Bytes symbol space free 0 Warning Errors

33、 2 Severe ErrorsC:源程序输入有语法错误,MASM在将源程序宏汇编后,会将出错的语句的行号及错误类型显示出来,并在最后提示警告性错误和严重性错误的个数。本例中有两个严重错误,语句行号分别为17、19。这时重新启动“EDIT”返回到编辑状态,找出程序中有错误的语句行,修改并存盘之后重新对其进行宏汇编。本例中需修改源程序中第17、19行语句中的错误。第17行语句并未出错,仅因OK1是指令语句标号未加“:”,将第19行语句的标号OK1后面加上一个冒号“:” 即可。 再次对汇编语言源程序进行宏汇编,直到没有错误提示为止。屏幕显示:Microsoft(R)Macro Assembler

34、Version 5.00 Copyright(C)Microsoft Crop 1981-1985, 1987, All rights reserved. 51734 + 328810 Bytes symbol space free 0 Warning Errors 0 Severe ErrorsC:当汇编通过后,再进行下一步操作。3、用连接程序LINK对汇编后生成的EXAM21.OBJ文件进行连接,生成EXAM21.EXE文件。操作如下:C:LINK EXAM21;此时屏幕显示如下:Microsoft (R) Overlay Linker Version 3.60 Copyright (C)

35、 Microsoft Corp 1983-1987. All rights reserved. LINK : warning L4021: no stack segmentC:通常连接过程不会出现错误,但是,如果程序中没有设置堆栈段,LINK会提示警告,此无堆栈段的警告可以忽略,不会影响程序的执行。4、执行EXAM21.EXE可以通过下述两种方法执行.EXE文件。在DOS提示符下直接键入可执行程序(.EXE)的文件名,不用输入扩展名(.EXE),本例键入EXAM21即可。这时就会在屏幕上看到程序的执行结果,即DATA1 和DATA2两个数据相加的结果。C: EXAM215E(运算结果)C:在D

36、EBUG环境下,执行EXAM21.EXE,操作如下:C: DEBUG EXAM21.EXE- U 0 20(反汇编)0B49:0000 B8480B MOV AX,0B480B49:0003 8ED8 MOV DS,AX0B49:0005 A00000 MOV AL,00000B49:0008 02060100 ADD AL,00010B49:000C 50 PUSH AX0B49:000D B104 MOV CL,040B49:000F D2E8 SHR AL,CL0B49:0011 0430 ADD AL,300B49:0013 3C39 CMP AL,390B49:0015 7602 J

37、BE 00190B49:0017 0407 ADD AL,070B49:0019 8AD0 MOV DL,AL0B49:001B B402 MOV AH,020B49:001D CD21 INT 210B49:001F 58 POP AX0B49:0020 240F AND AL,0F- U 22 40(反汇编)0B49:0022 0430 ADD AL,300B49:0024 3C39 CMP AL,390B49:0026 7602 JBE 002A0B49:0028 0407 ADD AL,070B49:002A 8AD0 MOV DL,AL0B49:002C B402 MOV AH,02

38、0B49:002E CD21 INT 210B49:0030 B44C MOV AH,4C0B49:0032 CD21 INT 210B49:0034 40 INC AX0B49:0035 0422 ADD AL,220B49:0037 21DA AND DX,BX0B49:0039 40 INC AX0B49:003A 21DA AND DX,BX0B49:003C 2F DAS0B49:003D B8004C MOV AX,4C000B49:0040 CD21 INT 21- D 0B48:0 9(观察原始数据)0B48:0000 35 29 00 00 00 00 00 00 00 00

39、 5- G 305E (运算结果)- Q (退出)C:思考与练习在DEBUG环境下调试的程序属于那一种文件?第一条可执行指令的IP等于多少?在DEBUG环境下显示的程序和数字是什么形式?标号又是什么形式?修改实验举例源程序中DATA1和DATA2中的数据,重复上述操作过程。用DEBUG中的E命令修改原始数据,用G命令执行程序。实验报告按照操作顺序写出上机操作的步骤;写出用DEBUG中的E命令修改内存单元内容的两种方法;总结实验过程中遇到的问题及解决方法。实验二 调试程序DEBUG实验一、实验目的 熟练掌握DEBUG的使用方法;能够编写简单的汇编语言程序并上机调试。实验要求熟练掌握DEBUG中的

40、U、D、P、G、命令;掌握在DEBUG中如何找到数据段段基址的方法;掌握单步跟踪程序执行的方法;初步掌握键盘输入字符的系统调用使用方法。实验内容及步骤例2.2从键盘上接收两个一位十六进制数,求其和,并以十进制形式显示出来。编辑下述程序,并以EXAM22.ASM为文件名存盘。C:EDIT EXAM22.ASM程序清单如下:;*EXAM22. ASM*DSEG SEGMENT MESS DB Please input two number:,0ah,0dh,$RESULT DB ?DSEG ENDSCSEG SEGMENT ASSUME CS:CSEG,DS:DSEGSTART:MOV AX,DS

41、EGMOV DS,AXLEA DX,MESS ;显示提示信息MOV AH,09H INT 21HMOV AH,01H ;读入第一个十进制数字INT 21HSUB AL,30H ;转换成二进制数MOV BL,AL ;保存到BL中MOV AH,01H ;读入第二个十进制数字INT 21HSUB AL,30H ;转换成二进制数XCHG AL,BL ;第一个十进制数字与第二个交换MOV CL,10 MUL CL ;第一个十进制数字乘以10MOV BH,0ADD AX,BX ;AL*10+BLMOV RESULT,AL ;保存结果MOV AH,4CHINT 21HCSEG ENDS END START2

42、、用MASM对EXAM22. ASM进行宏汇编,生成EXAM22. OBJ文件。C:MASM EXAM22;屏幕显示:Microsoft(R)Macro Assembler Version 5.00 Copyright(C)Microsoft Crop 1981-1985, 1987, All rights reserved.51684 + 156620 Bytes symbol space free 0 Warning Errors 0 Severe ErrorsC:当汇编通过后,在进行下一步操作。3、用LINK连接EXAM22.OBJ,生成EXAM22.EXE文件。操作如下:C:LINK

43、EXAM22;此时屏幕显示如下:Microsoft (R) Overlay Linker Version 3.60 Copyright (C) Microsoft Corp 1983-1987. All rights reserved. LINK : warning L4021: no stack segmentC:4、用DEBUG调试EXAM22.EXE文件,操作如下:C: DEBUG EXAM22.EXE- U 0 2A(反汇编)0B49:0000 B8480B MOV AX,0B480B49:0003 8ED8 MOV DS,AX0B49:0005 8D160000 LEA DX,000

44、00B49:0009 B409 MOV AH,090B49:000B CD21 INT 210B49:000D B401 MOV AH,010B49:000F CD21 INT 210B49:0011 2C30 SUB AL,300B49:0013 8AD8 MOV BL,AL0B49:0015 B401 MOV AH,010B49:0017 CD21 INT 210B49:0019 2C30 SUB AL,300B49:001B 86C3 XCHG AL,BL0B49:001D B10A MOV CL,0A0B49:001F F6E1 MUL CL0B49:0021 B700 MOV BH,

45、000B49:0023 03C3 ADD AX,BX0B49:0025 A20700 MOV 001B,AL0B49:0028 B44C MOV AH,4C0B49:002A CD21 INT 21-G 11 (输入第一个十进制数字)Please input two number:2AX=0132 BX=0000 CX=003C DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=0B48 ES=0B38 SS=0B48 CS=0B49 IP=0011 NV UP EI PL NZ NA PO NC0B49:0011 2C30 SUB AL,30 -G 19 (

46、输入第二个十进制数字)5AX=0135 BX=0002 CX=003C DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=0B48 ES=0B38 SS=0B48 CS=0B49 IP=0019 NV UP EI PL NZ NA PO NC0B49:0019 2C30 SUB AL,30-G 21 (AX的内容为第一个数字的二进制形式乘以10,BX的内容为第二个数字的二进制形式)AX=0014 BX=0005 CX=000A DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=0B48 ES=0B38 SS=0B48 CS=0

47、B49 IP=0021 NV UP EI PL NZ NA PE NC0B49:0021 B700 MOV BH,00-G 28(AX的内容为AL*10+BL,即二进制形式的两位十进制数)AX=0019 BX=0005 CX=000A DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=0B48 ES=0B38 SS=0B48 CS=0B49 IP=0028 NV UP EI PL NZ NA PO NC0B49:0028 B44C MOV AH,4C- D0 20(数据段001B单元的内容为19)0B48:0000 50 6C 65 61 73 65 20 6

48、9 6E 70 75 74 20 74 77 6F Please input two 0B48:0010 20 6E 75 6D 62 65 72 3A 0A 0D 24 19 00 00 00 00 number: 0B48:0020 B8 - P=0(或T=0)(用P或T命令单步执行,查看每步的执行结果,体会P和T命令的异同点,显示内容略) - P - Q (退出)C:5、执行EXAM22.EXEC: EXAM22Please input two number:25C:思考与练习在调试带有中断调用的程序时,用T命令和P命令有什么不同?用E命令和F命令修改数据段中地址为0000001B单元的

49、内容;进入DEBUG,用A命令写入如下程序段,接着用R命令显示状态,并用T命令单条执行,注意在执行命令的同时观察相应寄存器的状态。 MOV AH,3 MOV AL,2 ADD AL,AH INT 3实验报告总结DEBUG中U、D、P、G、命令的功能与用法;总结实验过程中遇到的问题及解决方法。实验三 简单分支结构程序实验一、实验目的掌握条件转移指令的使用方法;掌握指令对标志寄存器中各标志位的影响情况;掌握标志位和转移指令之间的关系;初步掌握利用设置断点调试程序的方法。二、实验要求 1、熟练掌握DEBUG中的G命令; 2、在DEBUG下执行程序,利用跟踪命令检查指令对标志位的影响情况; 3、掌握对

50、INT指令的跟踪方法。三、实验题目修改实验举例中的程序,使之显示小于平均值的数据。从键盘上接收三个一位十进制数,选出其中最小值显示出来。四、实验报告总结DEBUG中的P、G、T命令的功能;写出程序清单,并记录执行结果。五、实验举例 例2.3:从键盘上接收三个一位十进制数,选出其中大于平均值的数据显示出来。1、编辑下述源程序,并以EXAM23.ASM为文件名存盘。;* EXAM23* CSEG SEGMENT ASSUME CS:CSEG START:XOR BX,BX ;BX清零 MOV AH,01 INT 21HMOV CL,AL ;第一个数据放入CLSUB AL,30HADD BL,AL

51、;求和MOV AH,01 INT 21H MOV CH,AL ;第二个数据放入CH SUB AL,30H ADD BL,ALMOV AH,01 INT 21H MOV DH,AL ;第三个数据放入DH SUB AL,30H XCHG AL,BL ADD AL,BL ;累加求和XOR AH,AHMOV BH,3DIV BH ;求平均值ADD AL,30H CMP AL,CL ;与第一个数比较JAE NEXT1MOV DL,CL ;第一个数大于平均值MOV AH,02 ;显示第一个数INT 21H NEXT1:CMP AL,CH ;与第二个数比较 JAE NEXT2 MOV DL,CH ;显示第二

52、个数 MOV AH,02 INT 21H NEXT2:CMP AL,DH ;与第三个数比较 JAE DONE MOV DL,DH MOV AH,02 ;显示第三个数 INT 21H DONE: MOV AH,4CH INT 21H CSEG ENDS END START2、用MASM对EXAM23.ASM进行宏汇编,生成EXAM23.OBJ文件。C:MASM EXAM23;Microsoft(R)Macro Assembler Version 5.00 Copyright(C)Microsoft Crop 1981-1985, 1987, All rights reserved. 51708

53、+ 156596 Bytes symbol space free 0 Warning Errors 0 Severe ErrorsC:3、用LINK对EXAM23.OBJ文件进行连接,生成EXAM23.EXE文件。C:LINK EXAM23;Microsoft (R) Overlay Linker Version 3.60 Copyright (C) Microsoft Corp 1983-1987. All rights reserved. LINK : warning L4021: no stack segmentC:4、在DOS提示符下执行程序C: EXAM2326868 (2,6,8为

54、输入的十进制数,6,8为输出结果) C: 5、在DEBUG环境下调试程序,执行EXAM23.EXE文件。 C:DEBUG EXAM23.EXE 实验四 多分支结构程序实验一、实验目的掌握多分支结构程序设计的方法;掌握无条件转移指令JMP的目的地址的表示形式及使用方法。二、实验要求1、对每个实验题目用多分支结构编制程序;2、在DEBUG环境下执行程序,掌握多分支程序的调试方法。三、实验题目 1、实现把一位十六进制数所对应的ASCII码转换为十六进制数的程序。如果要转换的ASCII码没有对应的十六进制数码,则转换为特殊值-1。 考虑到AF也能用小写字母表示,转换关系可用如下函数描述: -1 (X0

55、) X-0 (0=X=9) -1 (9XA)Y= X-A+10 (A=X=F) -1 (FXa) X-a+10 (a=xf)2、已知X和Y单元各存放一个字节数据,从键盘输入一个03之间的数字。当输入数字为0,计算F=2*X当输入数字为1,计算F=Y-X/2当输入数字为2,计算F=2*Y当输入数字为3,计算F=Y/2 最后将结果存到RESULT单元中。四、实验报告 1、总结调试多分支程序的方法; 2、写出程序清单。五、实验举例 例2.4已知DATAX和DATAY单元各存放一个带符号字节数据,从键盘上接收加(+)、减(-)、乘(*)或除(/)符号,然后完成相应运算,结果存入RLT单元。1、编辑下述

56、源程序,并生成EXAM24.ASM文件。;* EXAM24* DSEG SEGMENT DATAX DB 45 DATAY DB -8 RLT DW 0 ADRTAB DW OFFSET MULT ;地址表DW OFFSET ADDRDW OFFSET GET DW OFFSET SUBSDW OFFSET GETDW OFFSET DIVI DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG START:MOV AX,DSEG MOV DS,AX GET: MOV AH,01H ;接收运算符 INT 21H CMP AL,2AH JB GET CMP

57、AL,2FH JA GET SUB AL,2AH XOR AH,AH ADD AX,AX MOV SI,OFFSET ADRTAB ADD SI,AX ;计算目标地址所在单元 MOV AL,DATAX ;取X值 MOV BL,DATAY ;取Y值 JMP WORD PTR SI ;转向相应计算程序段 MULT:IMUL BL ;X*Y JMP SAVE ADDR:CBW ;扩展为字数据 XCHG AX,BX CBW ADD AX,BX ;X+Y JMP SAVE SUBS:SUB AL,BL ;X-Y CBW JMP SAVE DIVI:CBW ;扩展X为字数据 IDIV BL ;X/Y CB

58、W SAVE:MOV RLT,AX ;保存结果 MOV AH,4CH INT 21HCSEG ENDS END START 2、用MASM对EXAM24.ASM进行宏汇编,生成EXAM24.OBJ文件。C:MASM EXAM24;Microsoft(R)Macro Assembler Version 5.00 Copyright(C)Microsoft Crop 1981-1985, 1987, All rights reserved. 51666 + 156638 Bytes symbol space free 0 Warning Errors 0 Severe ErrorsC:3、用LIN

59、K对EXAM24.OBJ文件进行连接,生成EXAM24.EXE文件。C:LINK EXAM24;Microsoft (R) Overlay Linker Version 3.60 Copyright (C) Microsoft Corp 1983-1987. All rights reserved. LINK : warning L4021: no stack segmentC:4、在DOS提示符下执行程序C: EXAM24 C: 5、在DEBUG环境下调试程序,执行EXAM24.EXE文件。 C:DEBUG EXAM24.EXE 实验五 单重循环结构程序实验一、实验目的掌握单重循环程序的结构

60、及执行过程;掌握循环控制指令的功能;掌握循环程序的设计方法与调试方法。二、实验要求 1、阅读教材中循环程序的组成及控制方法部分; 2、对循环控制指令和重复前缀分别用T命令和P命令跟踪执行,观察其执行结果,理解T命令和P命令的异同点。三、实验题目 1、对实验举例中的程序改用数据串操作指令CMPS实现;2、从键盘输入一系列字符,以回车符结束,编程统计其中非数字字符的个数,并显示出计数结果。3、编一程序,求S=12+22+32+的前N项和,使和S刚刚大于1000。四、实验报告画出程序流程图;写出程序清单,并记录执行结果。五、实验举例例2.5已知当前数据段中DATA1和DATA2开始分别存放若干个字节

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论