《余敦辉《汇编语言》实验指导书实验1实验3》由会员分享,可在线阅读,更多相关《余敦辉《汇编语言》实验指导书实验1实验3(19页珍藏版)》请在金锄头文库上搜索。
1、汇编语言实验指导书目目录录实验一Debug 命令的使用3实验二基本汇编指令的使用 9实验三汇编语言程序的调试与运行13实验四系统功能调用程序的调试与运行错误错误!未定未定义书签。义书签。实验五分支程序设计错误错误!未定未定义书签。义书签。实验六循环程序设计错误错误!未定未定义书签。义书签。实验七子程序设计错误错误!未定未定义书签。义书签。实验八高级汇编语言程序设计错误错误!未定未定义书签。义书签。实验九I/O 程序设计 错误错误! 未定未定义书签。义书签。实验十中断程序设计错误错误!未定未定义书签。义书签。实验十一综合程序设计38实验一实验一Debug 命令的使用命令的使用一、 知识点1、 D
2、EBUG 简介简介DEBUG.EXE 是 DOS 提供的用于调试可执行程序的一个工具软件。在汇编语言程序调试中很常用。DEBUG 的提示符是“-” ,所有 DEBUG 调试命令军在此提示符下输入。DEBUG 命令都是一个字母,后跟一个或多个参数,也可使用默认参数。DEBUG 命令的使用注意问题:(1)字母不分大小写(2)只使用十六进制数,但没有带后缀字母“H”(3)命令如果不符合 DEBUG 的规则,则将以“error”提示,并以“”指示出错位置。(4)每个命令只有按下回车键后才有效,可以用 Ctrl+Break 终止命令的执行。2、 Debug 的调入和退出的调入和退出以 WIN7 环境为例
3、,点击“开始/运行” ,在“运行”对话框中输入命令:cmd,然后点击“确定” ,进入 DOS 命令行状态:C:Documents and Settingslfy然后输入命令:Debug进入 Debug 调试状态, 出现 Debug 命令提示府 “-” , 在此提示符下可运行所需要的 Debug命令了。退出 Debug 的命令:Q3、 Debug 常用命令常用命令(1)汇编命令 A,格式为:-A地址功能: 从指定地址开始允许输入汇编指令, 并将该指令汇编成机器指令代码从指定地址开始存放。若不指定地址,则系统从默认的地址开始存放。按回车键退出汇编状态应用:用于调试一条指令或几条指令组成的一个程序段
4、。(2)显示和修改寄存器命令 R,格式为:- R寄存器名功能:若指定寄存器,则显示指定的寄存器的内容,并可进行修改;若不要修改,则按 Enter健。若未指定寄存器,则默认为显示所有寄存器的内容。应用:常用于通过寄存器的值查看指令的执行结果。(3)内存单元内容的命令 E,格式为:- E地址 内容表功能:若指定内容表,则用内容表中的内容代替指定地址开始的存储单元的值;否则,从指定地址开始逐个单元显示其内容,并等待用户修改,按空格键则继续显示下一单元的值,按回车键结束。例如:-E100184E: 010089,78其中,184E 时数据段的段地址,0100 是要修改的单元的偏移地址,89 为该单元的
5、值,78为程序员键入的值。结果 0100 单元的值由 89H 改变为 78H。应用:常用于在调试程序的过程中改变变量的初始值。(4)显示内存单元内容的命令 D,格式为:- D 地址或 D 范围功能: 前者为显示从指定地址开始的一段存储单元的值; 后者为显示指定范围内的存储单元的值。例如: - D 200;显示从 DS:200 单元开始的各单元的值- D 200L10 ; 显示从 DS:200 单元开始的 10 个字节单元的值。应用:常用于在调试过程中检查变量的值。(5)单步执行命令 T,格式为:- T =地址功能:从指定地址执行一条指令后停下来,显示寄存器内容和状态值。若未指定地址,则执行当前
6、指令的下一条指令。(6)反汇编命令 U ,格式为:-U地址或-U范围功能:从制定地址开始,反汇编 32 个字节,或对指定范围内的主存内容进行反汇编。若没有指定地址,则接着上一个 U 命令的最后一个单元开始;若还没有使用过 U 命令,则从当前 CS:IP 开始。例如:-U 100,1061343:0100 B80302MOVAX,02031343:0103 BB0540MOVBX,40051343:0106 01D8ADDAX,BX其中,屏幕最左边是主存逻辑地址(段地址:偏移地址) ,中间是该指令的机器代码,右边是对应指令的汇编语句格式。(7)运行命令 G, 格式为:-G = 起始地址 断点地址
7、 1,断点地址 2,断点地址 10功能:从等号后的起始地址开始运行,直到遇到断点或程序正常结束。例如:-G=100 106则程序执行从 100 开始的程序段,到断点 106 停止。此时指令 ADD AX,BX 并未执行。二、 实验目的及要求1、编语言调试环境 Debug 的使用,重点掌握常用命令(ARDET)的使用,其他指令在以后的学习中逐步掌握。2、利用 Debug 命令,调试采用不同寻址方式的指令的执行结果,从实践中加深对寻址方式和 MOV 指令的理解。三、 实验内容1、 Debug 程序的调入和退出2、 Debug 常用调试命令的使用3、 MOV 指令、XCHG 指令、XLAT 指令的调
8、试四、 实验步骤说明:首先输入以下程序段,然后单步执行并查看结果;改变寄存器 AX 的初始值后再运行,并查看结果。带下划线的部分为程序员输入的内容。在 DEBUG 环境下,所有的数据均以十六进制输入和显示。-A137B:0100 mov ax,20137B:0103 mov bx,ax137B:0105 add ax,bx137B:0107 mov 2000,ax137B:010A-T=0100AX=0020BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000DS=137BES=137BSS=137BCS=137BIP=0103NV UP EI P
9、L NZ NA PO NC137B:0103 89C3MOVBX,AX-T=0103AX=0020BX=0020CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000DS=137BES=137BSS=137BCS=137BIP=0105NV UP EI PL NZ NA PO NC137B:0105 01D8ADDAX,BX-TAX=0040BX=0020CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000DS=137BES=137BSS=137BCS=137BIP=0107NV UP EI PL NZ NA PO NC137B:0
10、107A30020MOV2000,AXDS:2000=000-TAX=0040BX=0020CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000DS=137BES=137BSS=137BCS=137BIP=010ANV UP EI PL NZ NAPO NC137B:010A0000ADDBX+SI,ALDS:0020=FF-D2000L2137B:200040 00.;修改 0100 处的指令 mov ax,20将 AX 的初始值改为 10,并重新运行-A0100137B:0100 mov ax, 10137B:0103;最后一条指令执行的结果如下:AX=00
11、20BX=0010CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000DS=137BES=137BSS=137BCS=137BIP=010ANV UP EI PL NZ NAPO NC137B:010A0000ADDBX+SI,ALDS:0010=DF;查看 2000 单元的值为 0020H-D 2000 l2137B:200020 00.;修改 2000 单元的值,由 20h 改为 30h 并重新显示-E 2000137B:200020.30-D 2000 l2137B:200030 00五、 拓展题MOV、XCHG、XLAT 指令的调试。要求:用汇编命令 A
12、 输入以下源程序段,用 T 命令单步执行,查看执行结果:寄存器或存储单元的值。 。提示:在 DEBUG 环境下输入程序段时要省掉立即数后面的字符“H”1、MOV 指令的调试指令的调试程序段:MOVAL, 55HMOVAH,ALMOVBX, 1000HMOVBYTE PTRBX, 66HMOVWORD PTRBX+2, 77HMOVBX+4,AX2、 XCHG 指令的调试指令的调试程序段:MOVAX, 0203HMOVBX, 0405HXCHG AX, BXXCHG BL, BH3、 XLAT 指令的调试指令的调试(1) 用 E 命令从 DS:200 地址开始输入数据 10H、20H、30H、4
13、0H、50H(2) 用 A 命令输入以下程序段:MOV BX, 200;将数据的首地址送给 BXMOVAL, 4 用 MOV ;将要查找的数据的偏移地址送给 ALXLAT;查看结果寄存器 AL 中的值,以及从 DS:200 开始的存储单元的值。六、 实验报告写出在 DEBUG 状态下编写、运行程序段的过程以及调试所中遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。实验二实验二基本汇编指令的使用基本汇编指令的使用一、知识点1、 最常用的传送指令最常用的传送指令 MOV可以将立即数/内存单元的值/寄存器的值送给寄存器,或将立即数/寄存器的值送给内存单元,但不允许两个内存单
14、元之间直接传送。2、 常用算术运算指令常用算术运算指令 ADD/ADC/INC、SUB/SBB/DEC/CMP/NEG两个单字节/单字之间的加法用 ADD 指令、减法用 SUB 指令;多字节/多字之间的加/减,除最低字节/最低字用 ADD/SUB 指令外,其余字节/字之间的加/减都要用包含进位/借位的 ADC/SBB 指令。INC 和 DEC 指令常用于修改计数器或修改指针,常用与循环处理一批数据。CMP 指令常用于比较两个数的关系, 为下一步的条件转移做准备 (后跟条件转移指令) 。3、 常用逻辑运算指令常用逻辑运算指令 AND/OR/NOT/XOR/TESTAND 指令常用于给一个数据的某
15、几位清零;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 的使用,掌握常用调试命令。2、用基本指令编
16、写的程序段,并在 Debug 环境中调试,从实践中加深对基本汇编语言指令的执行过程的理解。3、实验前要做好充分准备,包括汇编程序段清单、调试步骤、调试方法,以及对程序结果的分析等。三、实验内容1、 单步调试以下程序段,给出每条指令执行后 AL 的值,以及 CF、ZF、SF、OF 的状态。MOVAL, 89HADDAL,ALADDAL, 9DHCMPAL, 0BCHSUBAL,ALDECALINCAL2、 编写程序段,分别完成 11223344H 与 55667788H 的加/减计算,并调试、观察结果。3、 单步调试以下程序段,给出每条指令执行后 AL 的值,以及 CF、ZF、SF、OF 的状态。MOVAX,