1、例如: -E 100 184E: 0100 89,78其中,184E时数据段的段地址,0100是要修改的单元的偏移地址,89为该单元的值,78为程序员键入的值。结果0100单元的值由89H改变为78H。常用于在调试程序的过程中改变变量的初始值。(4) 显示内存单元内容的命令D,格式为:- D 地址 或 D 范围前者为显示从指定地址开始的一段存储单元的值;后者为显示指定范围内的存储单元的值。 - D 200 ;显示从DS:200单元开始的各单元的值- D 200 L10 ; 显示从DS:200单元开始的10个字节单元的值。常用于在调试过程中检查变量的值。(5) 单步执行命令T,格式为:- T =
2、地址从指定地址执行一条指令后停下来,显示寄存器内容和状态值。若未指定地址,则执行当前指令的下一条指令。(6) 反汇编命令 U ,格式为:-U 地址 或 -U 范围 功能:从制定地址开始,反汇编32个字节,或对指定范围内的主存内容进行反汇编。若没有指定地址,则接着上一个U命令的最后一个单元开始;若还没有使用过U命令,则从当前CS:IP开始。 -U 100,1061343:0100 B80302 MOV AX,02030103 BB0540 MOV BX,40050106 01D8 ADD AX,BX 其中,屏幕最左边是主存逻辑地址(段地址:偏移地址),中间是该指令的机器代码,右边是对应指令的汇编
3、语句格式。(7) 运行命令G, 格式为:-G = 起始地址 断点地址1,断点地址2,断点地址10从等号后的起始地址开始运行,直到遇到断点或程序正常结束。 -G=100 106则程序执行从100开始的程序段,到断点106停止。此时指令ADD AX,BX并未执行。二、 实验目的及要求1、编语言调试环境Debug的使用,重点掌握常用命令(A R D E T)的使用,其他指令在以后的学习中逐步掌握。2、利用Debug命令,调试采用不同寻址方式的指令的执行结果,从实践中加深对寻址方式和MOV指令的理解。三、 实验内容1、 Debug程序的调入和退出2、 Debug常用调试命令的使用3、 MOV指令、XC
4、HG指令、XLAT指令的调试四、 实验步骤说明:首先输入以下程序段,然后单步执行并查看结果;改变寄存器AX的初始值后再运行,并查看结果。带下划线的部分为程序员输入的内容。在DEBUG环境下,所有的数据均以十六进制输入和显示。-A137B:0100 mov ax,200103 mov bx,ax0105 add ax,bx0107 mov 2000,ax010A-T=0100AX=0020 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=137B ES=137B SS=137B CS=137B IP=0103 NV UP EI
5、PL NZ NA PO NC0103 89C3 MOV BX,AX-T=0103AX=0020 BX=0020 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=137B ES=137B SS=137B CS=137B IP=0105 NV UP EI PL NZ NA PO NC0105 01D8 ADD AX,BX-TAX=0040 BX=0020 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=137B ES=137B SS=137B CS=137B IP=0107 NV UP EI P
6、L NZ NA PO NC0107 A30020 MOV 2000,AX DS:2000=000DS=137B ES=137B SS=137B CS=137B IP=010A NV UP EI PL NZ NA PO NC010A 0000 ADD BX+SI,AL DS:0020=FF-D 2000 L22000 40 00 .;修改0100处的指令mov ax,20 将AX的初始值改为10,并重新运行-A 01000100 mov ax, 100103最后一条指令执行的结果如下:AX=0020 BX=0010 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000
7、DI=00000010=DF查看2000单元的值为0020H-D 2000 l22000 20 00 修改2000单元的值,由20h改为30h 并重新显示-E 20002000 20.302000 30 00 五、 拓展题MOV、XCHG、XLAT指令的调试。要求:用汇编命令A输入以下源程序段,用T命令单步执行,查看执行结果:寄存器或存储单元的值。提示:在DEBUG环境下输入程序段时要省掉立即数后面的字符“H”1、MOV指令的调试程序段:MOV AL, 55H MOV AH, AL MOV BX, 1000H MOV BYTE PTRBX, 66H MOV WORD PTRBX+2, 77H
8、MOV BX+4, AX2、 XCHG指令的调试MOV AX, 0203H MOV BX, 0405H XCHG AX, BX XCHG BL, BH 3、 XLAT指令的调试(1) 用E命令从DS:200地址开始输入数据10H、20H、30H、40H、50H(2) 用A命令输入以下程序段:MOV BX, 200 ;将数据的首地址送给BXMOV AL, 4用MOV ;将要查找的数据的偏移地址送给ALXLAT;查看结果寄存器AL中的值,以及从DS:200开始的存储单元的值。六、 实验报告写出在DEBUG状态下编写、运行程序段的过程以及调试所中遇到的问题是如何解决的,并对调试过程中的问题进行分析,
9、对执行结果进行分析。实验二 基本汇编指令的使用一、知识点1、 最常用的传送指令 MOV 可以将立即数/内存单元的值/寄存器的值送给寄存器,或将立即数/寄存器的值送给内存单元,但不允许两个内存单元之间直接传送。2、 常用算术运算指令 ADD/ADC/INC、SUB/SBB/DEC/CMP/NEG两个单字节/单字之间的加法用ADD指令、减法用SUB指令;多字节/多字之间的加/减,除最低字节/最低字用ADD/SUB指令外,其余字节/字之间的加/减都要用包含进位/借位的ADC/SBB指令。INC和DEC指令常用于修改计数器或修改指针,常用与循环处理一批数据。CMP指令常用于比较两个数的关系,为下一步的
10、条件转移做准备(后跟条件转移指令)。3、 常用逻辑运算指令 AND/OR/NOT/XOR/TESTAND指令常用于给一个数据的某几位清零;OR指令常用于给一个数据的某几位置1;XOR指令常用于将一个数据某几位翻转;NOT指令常用于将一个数据所有位取反;TEST指令常用于测试一各数据的某一位或某几位的值,后跟条件转移指令。4、 常用移位指令 SHL/SHR/SAR/ROL/ROR/RCL/RCRSHL和SAL功能相同,都是将操作数左移一位或几位,移出的空位补0;SHR和SAR功能不同,虽都是将操作数右移一位或几位,但左边移出的空位分别补0和1(SHR要补0,SAR补1)。二、实验目的及要求1、继
11、续熟悉汇编语言调试环境Debug的使用,掌握常用调试命令。2、用基本指令编写的程序段,并在Debug环境中调试,从实践中加深对基本汇编语言指令的执行过程的理解。3、实验前要做好充分准备,包括汇编程序段清单、调试步骤、调试方法,以及对程序结果的分析等。三、实验内容1、 单步调试以下程序段,给出每条指令执行后AL的值,以及CF、ZF、SF、OF的状态。MOV AL, 89HADD AL, ALADD AL, 9DHCMP AL, 0BCHSUB AL,ALDEC ALINC AL2、 编写程序段,分别完成11223344H与55667788H的加/减计算,并调试、观察结果。3、 单步调试以下程序段
12、,给出每条指令执行后AL的值,以及CF、ZF、SF、OF的状态。MOV AX, 1470HMOV BX, 3060HAND AX, BXOR AX, BXXOR AX, AXNOT AXTEST AX,0F0F0H4、 设(AX)=1234H,写出执行下列每条指令后AX寄存器的内容,并观察CF的变化。SHL AX, 1MOV CL, 2SHL AX, CLSHR AX, 1ROL AX, 1MOV CL, 3ROL AX, CLRCR AX,1RCR AX, CL四、实验步骤1、利用DEBUG的A命令输入待调试的程序段。2、利用单步执行命令T逐条执行指令,观察寄存器及相关状态位的值。以实验内容
13、2中的加法为例,实现加法运算:注:下划线部分为程序员输入的内容。(1)-A1373:0100 MOV AX, 3344 ;DX.AXDX.AX 0109 ADC DX, 5566010D-T=100AX=3344 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=1373 ES=1373 SS=1373 CS=1373 IP=0103 NV UP EI PL NZ NA PO NC0103 BA2211 MOV DX,1122AX=3344 BX=0000 CX=0000 DX=1122 SP=FFEE BP=0000 SI=0
14、000 DI=0000DS=1373 ES=1373 SS=1373 CS=1373 IP=0106 NV UP EI PL NZ NA PO NC0106 058877 ADD AX,7788AX=AACC BX=0000 CX=0000 DX=1122 SP=FFEE BP=0000 SI=0000 DI=0000DS=1373 ES=1373 SS=1373 CS=1373 IP=0109 OV UP EI NG NZ NA PE NC0109 81D26655 ADC DX,5566AX=AACC BX=0000 CX=0000 DX=6688 SP=FFEE BP=0000 SI=0
15、000 DI=0000DS=1373 ES=1373 SS=1373 CS=1373 IP=010D NV UP EI PL NZ NA PE NC010D 0000 ADD BX+SI,AL DS:结果:DX.AX=6688AACCH五、拓展题:1、 编写程序段:将DX.AX中的双字右移一位。2、 编写程序段:将AX寄存器的最低4位置1,最高3位清0,第7、8、9位取反,其余位不变。设AX中原来的值为0AAH。3、 设AX=2AH,BX=30H,编写程序段计算:AX/BX,并将结果送BX.CX。六、实验报告:1、写出源程序段清单、程序说明、执行结果。2、调试说明。包括上机调试的情况、上机调试
16、步骤、调试所遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。实验三 汇编语言程序的调试与运行一 知识点1、 汇编语言源程序的格式完整的汇编语言源程序由段组成,即代码段、数据段、附加段和堆栈段。其中,需要独立运行的程序必须包含一个代码段,并指示程序执行的起始点,一个程序只有一个起始点。例如,输出一个字符串的源程序:.model small ;定义程序的存储模式(小型程序一般采用小模式).stack ;定义堆栈段 .data ;定义数据段 string db An example.,0ah,0dh,$ ;在数据段中定义要显示的字符串 .code ;定义代码段 .start
17、up ;程序的起始点 lea dx, string ;将字符串的起始地址送dx,即设置入口参数 mov ah, 09h ;设置输出字符串的功能调用号 int 21h ; 功能调用:显示 .exit 0 ;程序结束点,返回dos end ;汇编结束这是简化段定义的程序格式2、 汇编语言程序的开发过程一般步骤:编辑、编译、连接、调试运行(1) 源程序的编辑源程序文件可以利用任一文本编辑器进行编辑,通常我们用“记事本”。源程序文件保存时,一般以 .asm为文件的后缀名。具体实现:如图在win2000环境下,在“另存为”界面中输入文件全名(example.asm),并且将“保存类型“选择为“所有文件”
18、。也可以使用.txt后缀名,不过在汇编时要写源文件的全名,否则系统默认的为.asm。(2) 源程序的汇编、连接汇编是将源程序翻译成由机器代码组成的目标模块文件的过程。连接程序将一个或多个目标文件和库文件合成一个可执行文件。MASM6.X提供的ML.EXE可以实现:先汇编,若没有错误则自动调用LINK.EXE连接程序进行编译;若有错,则提示错误信息,可利用列表文件查看错误所在位置,并改正错误,重新汇编和连接。例如,设上面的例题程序文件为EXAMPLE.ASM,并且该文件与ML.EXE等文件都在同一目录(设该目录为当前目录)下,则汇编、连接的命令为:ML EXAMPLE.ASM运行结果见实验步骤2
19、。产生:EXAMPLE.OBJ和 EXAMPLE.EXE文件特别说明:ML允许汇编和连接多个程序形成一个可执行文件,而且还可以带参数,格式:ML /参数选项 文件列表常用参数选项有: /c 只汇编源程序,不进行自动连接(注意用小写字母c) /Fl 文件名创建一个汇编列表文件(扩展名LST),用于查找错误。 Sg 在省城的列表文件中,列出由汇编程序产生的指令若将字符串的引号改为中文的“”后重新用下面命令汇编连接,则结果见实验步骤3。ML /Fl EXAMPLE.ASM(3) 可执行程序的调试在操作系统提示符下直接输入柯执行文件名即可运行:EXAMPLE当出现运行错误时,通常用DEBUG进行调试:
20、DEBUG EXAMPLE.EXE然后采用U命令进行反汇编,用T或G命令运行并观察,找出错误所在。二实验目的及要求1掌握数据定义、段定义的方法2熟悉在PC机上编辑、汇编、连接、调试和运行汇编语言程序的过程。3、熟悉常见Jcc指令、loop指令的使用。三实验内容编程实现:1、 求数组array中的20个字元素的和,并存入变量total中。其中,数组元素在定义数组时以初值的形式给出。2、 给DX送一个初值,然后判断:若DX的高4位全为0,则使AX=0;否则使AX=-1。3、 定义一个字符串string,包含若干字符并且以$结尾,用程序统计字符的个数。以实验内容1为例,介绍实验步骤:1、 编辑源程序
21、:在记事本中输入如下程序,并存在E:MASM6BINEXAM1.ASM中。2、 汇编、编译:情况1:没有错误ml example.asmObject Modules .obj: example.objRun File example.exe: example.exeList File nul.map: NULLibraries .lib:Definitions File nul.def:情况2:源程序中有错误,比如将字符串的引号改为中文的“”后重新用下面命令汇编连接。Microsoft (R) Macro Assembler Version 6.11Copyright (C) Microsof
22、t Corp 1981-1993. All rights reserved. Assembling: example.asmexample.asm(5): error A2044: invalid character in fileexample.asm(8): error A2006: undefined symbol : string则给出2条错误信息提示,并产生错误列表文件 EXAMPLE.LST在记事本中打开该文件,内容如下: ;输出一个字符串的源程序: .model small .stack .data string db An example.,0ah,0dh,$ .code ;
23、.startup ; lea dx, string mov ah, 09h int 21h ; .exit 0 ; end ;特别提示:两处错误明显的标在源程序中。实际上,只有一处错误,后面的错误是由于前面的错误引起的,所以改正错误时要从前往后逐个修改,并且每改完一处就重新存盘、汇编,以提高调试效率。3、 调试:C:masmdebug example.exe-u ;反汇编1395:0000 BA9713 MOV DX,13970003 8EDA MOV DS,DX0005 8CD3 MOV BX,SS0007 2BDA SUB BX,DX0009 D1E3 SHL BX,1000B D1E3
24、SHL BX,1000D D1E3 SHL BX,1000F D1E3 SHL BX,10011 FA CLI0012 8ED2 MOV SS,DX0014 03E3 ADD SP,BX0016 FB STI0017 8D160400 LEA DX,0004 ;源程序中的第一条指令001B B409 MOV AH,09001D CD21 INT 21001F B8004C MOV AX,4C00 ;对应.exit 0 指令-u0022 CD21 INT 21此时可用debug命令调试该程序了。4、 关于变量名对应的偏移地址源程序的第一条指令是:lea dx, string汇编后对应的指令是:L
25、EA DX,0004因此,可看出变量string所对应的偏移地址是:0004h如果要查看从string开始的字符串的内容,可用如下命令:-D 04 Lc即查看从04H开始的12个单元的内容。五、拓展题1、有两个64位数值,按“小端方式“存放在两个缓冲区buffer1和buffer2种,计算buffer1-buffer2,并将结果存放到变量result中。2、将DX.AX中的双字右移4位。六、实验报告1、写出源程序清单、程序说明、执行结果。实验四 系统功能调用程序的调试与运行1、常用字符/字符串输入/出系统功能调用(1) 输出一个字符:DOS功能调用INT 21H的02号功能调用使用格式:MOV AH, 02H ;设置功能调用号 AH-02HMOV DL
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1