《汇编语言》实验指导书目录实验一Debug命令的使用 (3)实验二基本汇编指令的使用 (9)实验三汇编语言程序的调试与运行 (13)实验四系统功能调用程序的调试与运行………………错误!未定义书签。
实验五分支程序设计……………………………………错误!未定义书签。
实验六循环程序设计……………………………………错误!未定义书签。
实验七子程序设计………………………………………错误!未定义书签。
实验八高级汇编语言程序设计…………………………错误!未定义书签。
实验九I/O程序设计……………………………………错误!未定义书签。
实验十中断程序设计……………………………………错误!未定义书签。
实验十一综合程序设计 (38)实验一Debug命令的使用一、知识点1、DEBUG简介DEBUG.EXE是DOS提供的用于调试可执行程序的一个工具软件。
在汇编语言程序调试中很常用。
DEBUG的提示符是“-”,所有DEBUG调试命令军在此提示符下输入。
DEBUG命令都是一个字母,后跟一个或多个参数,也可使用默认参数。
DEBUG命令的使用注意问题:(1)字母不分大小写(2)只使用十六进制数,但没有带后缀字母“H”(3)命令如果不符合DEBUG的规则,则将以“error”提示,并以“^”指示出错位置。
(4)每个命令只有按下回车键后才有效,可以用Ctrl+Break终止命令的执行。
2、Debug的调入和退出以WIN7环境为例,点击“开始/运行…”,在“运行”对话框中输入命令:cmd,然后点击“确定”,进入DOS命令行状态:C:\Documents and Settings\lfy>然后输入命令:>Debug进入Debug调试状态,出现Debug命令提示府“-”,在此提示符下可运行所需要的Debug 命令了。
退出Debug的命令:Q3、Debug常用命令(1)汇编命令A,格式为:- A [地址]功能:从指定地址开始允许输入汇编指令,并将该指令汇编成机器指令代码从指定地址开始存放。
若不指定地址,则系统从默认的地址开始存放。
按回车键退出汇编状态应用:用于调试一条指令或几条指令组成的一个程序段。
(2)显示和修改寄存器命令R,格式为:- R [寄存器名]功能:若指定寄存器,则显示指定的寄存器的内容,并可进行修改;若不要修改,则按Enter 健。
若未指定寄存器,则默认为显示所有寄存器的内容。
应用:常用于通过寄存器的值查看指令的执行结果。
(3)内存单元内容的命令E,格式为:- E 地址[内容表]功能:若指定内容表,则用内容表中的内容代替指定地址开始的存储单元的值;否则,从指定地址开始逐个单元显示其内容,并等待用户修改,按空格键则继续显示下一单元的值,按回车键结束。
例如:-E 100184E: 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 [=地址]功能:从指定地址执行一条指令后停下来,显示寄存器内容和状态值。
若未指定地址,则执行当前指令的下一条指令。
(6)反汇编命令 U ,格式为:-U [地址] 或 -U 范围功能:从制定地址开始,反汇编32个字节,或对指定范围内的主存内容进行反汇编。
若没有指定地址,则接着上一个U命令的最后一个单元开始;若还没有使用过U命令,则从当前CS:IP开始。
例如:-U 100,1061343:0100 B80302 MOV AX,02031343:0103 BB0540 MOV BX,40051343:0106 01D8 ADD AX,BX其中,屏幕最左边是主存逻辑地址(段地址:偏移地址),中间是该指令的机器代码,右边是对应指令的汇编语句格式。
(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指令、XCHG指令、XLAT指令的调试四、实验步骤说明:首先输入以下程序段,然后单步执行并查看结果;改变寄存器AX的初始值后再运行,并查看结果。
带下划线的部分为程序员输入的内容。
在DEBUG环境下,所有的数据均以十六进制输入和显示。
-A137B:0100 mov ax,20137B:0103 mov bx,ax137B:0105 add ax,bx137B:0107 mov [2000],ax137B:010A-T=0100AX=0020 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=137B ES=137B SS=137B CS=137B IP=0103 NV UP EI PL NZ NA PO NC137B:0103 89C3 MOV BX,AX-T=0103AX=0020 BX=0020 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=137B ES=137B SS=137B CS=137B IP=0105 NV UP EI PL NZ NA PO NC137B:0105 01D8 ADD AX,BX-TAX=0040 BX=0020 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=137B ES=137B SS=137B CS=137B IP=0107 NV UP EI PL NZ NA PO NC137B:0107 A30020 MOV [2000],AXDS:2000=000-TAX=0040 BX=0020 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=137B ES=137B SS=137B CS=137B IP=010A NV UP EI PL NZ NA PO NC137B:010A 0000 ADD [BX+SI],AL DS:0020=FF -D 2000 L2137B:2000 40 00.;修改0100处的指令mov ax,20 将AX的初始值改为10,并重新运行-A 0100137B:0100 mov ax, 10137B:0103;最后一条指令执行的结果如下:AX=0020 BX=0010 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=137B ES=137B SS=137B CS=137B IP=010A NV UP EI PL NZ NA PO NC137B:010A 0000 ADD [BX+SI],AL DS:0010=DF ;查看2000单元的值为0020H-D 2000 l2137B:2000 20 00.;修改2000单元的值,由20h改为30h 并重新显示-E 2000137B:2000 20.30-D 2000 l2137B:2000 30 00五、拓展题MOV、XCHG、XLAT指令的调试。
要求:用汇编命令A输入以下源程序段,用T命令单步执行,查看执行结果:寄存器或存储单元的值。
提示:在DEBUG环境下输入程序段时要省掉立即数后面的字符“H”1、MOV指令的调试程序段:MOV AL, 55HMOV AH, ALMOV BX, 1000HMOV BYTE PTR[BX], 66HMOV WORD PTR[BX+2], 77HMOV [BX+4], AX2、XCHG指令的调试程序段:MOV AX, 0203HMOV BX, 0405HXCHG AX, BXXCHG BL, BH3、XLAT指令的调试(1)用E命令从DS:200地址开始输入数据10H、20H、30H、40H、50H(2)用A命令输入以下程序段:MOV BX, 200 ;将数据的首地址送给BXMOV AL, 4用MOV ;将要查找的数据的偏移地址送给ALXLAT;查看结果寄存器AL中的值,以及从DS:200开始的存储单元的值。
六、实验报告写出在DEBUG状态下编写、运行程序段的过程以及调试所中遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。
实验二基本汇编指令的使用一、知识点1、最常用的传送指令MOV可以将立即数/内存单元的值/寄存器的值送给寄存器,或将立即数/寄存器的值送给内存单元,但不允许两个内存单元之间直接传送。
2、常用算术运算指令ADD/ADC/INC、SUB/SBB/DEC/CMP/NEG两个单字节/单字之间的加法用ADD指令、减法用SUB指令;多字节/多字之间的加/减,除最低字节/最低字用ADD/SUB指令外,其余字节/字之间的加/减都要用包含进位/借位的ADC/SBB指令。
INC和DEC指令常用于修改计数器或修改指针,常用与循环处理一批数据。
CMP指令常用于比较两个数的关系,为下一步的条件转移做准备(后跟条件转移指令)。
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、继续熟悉汇编语言调试环境Debug的使用,掌握常用调试命令。