debug常用命令
sap debug的方式
sap debug的方式
SAP Debug的方式
SAP Debug是一种常用的调试工具,它可以帮助开发人员在SAP系统中查找和解决程序错误。本文将介绍SAP Debug的基本概念、使用方法以及一些常见的调试技巧。
在SAP系统中,调试是一种用于定位和修复程序错误的重要技术。当我们遇到一个程序出现异常或不符合预期时,通过使用SAP
Debug可以进入程序的执行过程中,逐行查看程序运行的状态和变量的取值,从而帮助我们找到问题所在。
我们需要了解如何启用SAP Debug模式。在SAP系统中,我们可以通过在事务码(Transaction Code)前添加“/h”或“/n”来启用Debug模式。例如,如果我们要调试事务码“ME21N”,我们可以在SAP Easy Access界面的命令行输入“/hME21N”或“/nME21N”来启动Debug模式。
一旦进入Debug模式,我们可以使用一系列的调试命令来控制程序的执行。其中,最常用的命令之一是“断点”(Breakpoint)。通过在程序中设置断点,我们可以在指定的代码行上暂停程序的执行,以便我们能够逐行分析程序的执行过程。在SAP系统中,我们可以通过单击程序行号的左侧或使用“/h”和“/n”命令来设置断点。当程序执行到断点时,它将暂停,并显示当前变量的取值和其他相关信息。
SAP Debug还提供了一些其他有用的功能,例如“监视点”(Watchpoint)和“变量显示”(Variable Display)。通过设置监视点,我们可以监视特定变量的值,并在其发生变化时暂停程序的执行。变量显示功能可以帮助我们查看程序中的变量和它们的取值,以便更好地理解程序的执行过程。
在进行调试时,我们还可以使用一些技巧来提高调试的效率。例如,我们可以使用“单步执行”(Step Over)命令来逐行执行程序,而不必进入每个子程序中。此外,我们还可以使用“调用堆栈”(Call Stack)功能来查看程序的调用关系,从而更好地理解程序的执行流程。
所有实验电子版报告
实 验 报 告
课程: 汇编语言上机实验
专业: 电子信息科学与技术
班级: 11电子1班
学号: 119050244098
姓名: 徐睿昀
物理与电子信息学院
I
目 录
实验一 DEBUG常用命令及8086指令使用 ............................................. 1
实验二 内存操作数及寻址方法 .............................................................. 5
实验三 汇编语言程序上机过程 ............................................................ 10
实验四 数据串传送和查表程序 ............................................................ 13
实验五 屏幕字符显示程序 .................................................................... 19
实验六 屏幕字符显示程序 .................................................................... 23
实验七 分枝程序 .................................................................................... 27
实验八 多重循环程序 ............................................................................ 33
实验九 子程序 ........................................................................................ 37
汇编--BinarySearch(二分查找)
-1- 一、实验目的
1. 熟悉汇编语言程序设计的开发环境、格式以及汇编过程;
2. 熟练掌握Debug命令的U命令、D命令、R命令、G命令、T命令、Q命令等;
3. 掌握分支程序的设计方法。
二、实验原理及基本技术路线图(方框原理图)
1. Debug常用命令简介:
D命令:格式:D [range]或 D [address],显示部分存储区的内容;
U命令:格式:U [address],将内存某一区的机器码,用此命令反汇编为源程序;
R命令:格式:R[Register name],显示和修改各寄存器的内容;
G命令:格式:G[=address][address[address..],执行需运行的程序,并对调试的程序进行断点测试跟踪;
T命令:格式:T[=address][Value],执行以 CS:IP 中指定开始的一个或几个指令,并显示出执行每条指令后所有寄存器的内容;
Q命令:格式:Q,退出 DEBUG状态,说明:Q命令不保留正在内存中运行的文件,若保留需用 "W" 命令, DEBUG返回到命令处理程序,然后显示出正常的命令提示。
2. 折半查找流程图
具有分支结构的程序叫做分支程序。设计分支程序时最好先用流程图画出程序流向,这样思路清晰,也利于编码实现,实现分支时要用到转移指令。以下为折半查找的流程图: -2-
三、所用仪器、材料(设备名称、型号、规格等)
1. 操作系统平台:Windows Server 2003
2. 汇编环境:Microsoft MASM 5.0
3. 文本编辑器:记事本
四、实验方法、步骤
1. 将MASM5.0的文件置于C:\assembly\目录下;
2. 将masm.exe和link.exe所在目录(C:\assembly\MASM5)添加到Path环境变量中;
3. 用记事本在C:\assembly\下新建一个BS.asm文件,打开BS.asm,输入汇编程序代码;
实验一 DEBUG的用法
[实验名称] 实验一 DEBUG的用法
[实验目的]
1、熟练掌握DEBUG常用命令;
2、能使用DEBUG编辑、调试简单程序;
3、掌握与实验有关的常用DOS命令。
[实验内容&要求]
1、练习常用的DOS命令
2、逐个练习并学会要求掌握的常用DEBUG命令;
(1) 用R命令显示和修改通用寄存器内容
(2) 用R命令显示和修改段寄存器内容
(3) 用R命令显示和修改标志寄存器内容
(4) 用D命令显示指定地址存储单元内容
(5) 用E命令修改存储单元内容
(6) 用A命令编辑指令
(7) 用U命令查看指令
(8) 用T命令执行指令(或程序)
(9) 用G命令执行指令(或程序)
注:上述(6) ~(9)步请用DEBUG输入一小段顺序程序,分别使用T命令和G命令运行程序,并记录每一步执行后的相关结果。(注:程序不必太长,可以自编或在课本中选一小段)
[实验报告要求]
1、报告内容包括:实验目的、实验内容、思考题
实验内容:记下实验步骤及过程,写出每一步所用的DEBUG命令及相关结果(只记相关结果,不相关的结果不要记)。不用记DOS命令)
2、思考题:小结在DEBUG中如何显示和修改标志寄存器F中的标志位。 附1:要求掌握的DEBUG命令如下:
1、启动与退出DEBUG的命令。
启动用DEBUG命令(在DOS下),退出用Q命令(在DEBUG下)
2、R命令
显示所有寄存器内容、显示指定寄存器内容、修改某个寄存器内容
3、A命令
在指定地址处编写小段程序、改写某指令;
4、U命令
查看某指定地址处程序
5、D命令
显示某地址处内存单元内容
6、E命令
修改内存单元内容
7、T命令
指定步数运行程序
8、G命令
连续运行程序
----------------------------------------------------------------------------
DEBUG代码
.
1 / 14 DEBUG代码
下面代码是总汇`~~从主机启动到系统正常加载成功debug代码是00~~01,这里的01是进入系统后进入初始化状态的~~并不是硬件失败的~~请注意~~
从开机到进入系统经过3个阶段,用debug代码表示就是:00~~7F主板启动运作OK7F~~FF主机上硬件与功能和驱动监测OKFF~~01系统启动成功其中00~~7F之间有一个2d代码`~大家通常刚开机大概在5秒时会听到电脑的“笛”的一声,然后显示器显示,这一声就是跑过2d的声音~~最常见的不良代码:00,C1,25,E0,C4,41,75,7F,FF。1、特殊代码“00”和“FF”及其它起始码有三种情况出现:
①已由一系列其它代码之后再出现:“00”或“FF”,则主板OK。
②如果将CMOS中设置无错误,则不严重的故障不会影响BIOS自检的继续,而最终出现“00”或“FF”。
③一开机就出现“00”或“FF”或其它起始代码并且不变化则为板没有运行起来。
2、本表是按代码值从小到大排序,卡中出码顺序不定。
3、未定义的代码表中未列出。
4、对于不同BIOS(常用的AMI、Award、Phoenix)用同一代码所代表的意义有所不同,因此应弄清您所检测的电脑是属于哪一种类型的BIOS,您可查问你的电脑使用手册,或从主板上的BIOS芯片上直接查看,也可以在启动屏幕时直接看到。
5、有少数主板的PCI槽只有前一部分代码出现,但ISA槽则有完整自检代码输出。且目前已发现有极个别原装机主板的ISA槽无代码输出,而PCI槽则有完整代码输出,故建议您在查看代码不成功时,将本双槽卡换到另一种插槽试一下。另外,同一块主板的不同PCI槽,有的槽有完整代码送出,如DELL810主板只有靠近CPU的一个PCI槽有完整的代码显示,一直变化到“00”或“FF”,而其它槽走到“38”则不继续变化。
6、复位信号所需时间ISA与PCI不一定同步,故有可能ISA开始出代码,但PCI的复位灯.
实验一MASMForWindows的使用及顺序程序设
实验一 MASM For Windows 的使用及顺序程序设计
一 、实验目的
1、 熟悉在PC机上建立、汇编、连接、调试和运行8086汇编语言程序的过程。 2、熟悉masm for windows调试环境及DEBUG常用命令的使用
二、实验内容
1.DEBUG常用命令(U、R、D、E、F、T、G、Q)的操作使用
2.编程实现两个16位无符号数的加、减、乘、除运算。
有两个两字节无符号数分别放在存储单元A、B起始的缓冲器中,求其和,结果放在A起始的缓冲区并在屏幕上显示。相加若有进位不存入存储单元。
三、实验设备
PC机一台 、masm for windows 汇编语言集成环境
四、实验准备
1) 分析题目,将程序中的原始数据和最终结果的存取方法确定好。
2) 画出流程图。
3) 写出源程序。
4) 对程序中的结果进行分析,并准备好上机调试与用汇编程序及汇编调试的过程。
五、实验步骤
1) 输入源程序。
2) 汇编、连接程序,生成 .EXE文件,执行文件,检查结果。
六、学生实验报告的要求
1) 列出源程序,说明程序的基本结构,包括程序中各部分的功能。
2) 说明程序中各部分所用的算法。
3) 说明主要符号和所用到寄存器的功能。
4) 上机调试过程中遇到的问题是如何解决的。
5) 对调试源程序的结果进行分析。
4) 说明标志位CF、SF和OF的意义。
DEBUG的常用命令 1、 R 显示或修改寄存器的内容 命令格式:-R 2、 D 显示存储单元的内容 命令格式:-D[地址1, 地址2] 3、 E 修改存储单元的内容 命令格式:-E[地址1, 地址2] 4、 U 反汇编 命令格式:-U[地址1, 地址2] 5、 T 单步执行 命令格式:-T 6、 G 连续执行 命令格式:-G[=起始地址, 结束地址] A 小汇编 命令格式:-A 7、 Q 退出DEBUG,返回DOS 实验一源程序 EXAM1-2 .ASM DATA SEGMENT A DB 34H,18H,2 DUP(0),’$’ B DB 56H,83H
1DEBUG命令的功能及使用
实验一 DEBUG命令的功能及使用
一 实验目的
掌握汇编语言基本运行环境和熟悉DEBUG调试程序的命令。包括:学习使用指令,掌握常用的指令功能和简单程序设计;掌握DEBUG调试程序的命令,熟悉程序输入、存储器和CPU寄存器及标志位的检查方法,单步、断点、连续等运行程序的调试方法。
二 实验内容
DEBUG的主要命令功能与格式
1.汇编命令A
格式:A [[/:] ]
上式等价于:
(1)A :
(2)A :
(3)A
(4)A
功能:键入该命令后显示段地址和段内偏移并等待用户从键盘逐条键入汇编命令,逐条汇编成代码指令,顺序存放到段地址和段内偏移所指定的内存区域,直到显示下一地址时用户直接键入回车键返回到提示符“-”。
注:其中(1)用指定段寄存器的内容作段地址,(3)用CS的内容作段地址,(4)以CS:100作地址。以后命令中提及的各种‘地址’形式,均指(1)、(2)、(3)中A后的地址形式。
2.显示内存命令D
格式:D [/]
上式等价于:
(1)D
(2)D
(3)D
功能:以两种形式显示指定范围的内存内容。一种形式为十六进制内容,一种形式为以相应字节的内容作为ASCII码的字符,对不可见字符以‘.’代替。
注:其中(1)以CS为段寄存器。(3)显示CS:100起始的一片内容。
3.修改内存命令E
格式:E []
上式等价于:
(1)E
(2)E
其中是以逗号分隔的十六进制数,或用’或”括起来的字符串,或者是二者的组合。
功能:(1)不断显示地址,可连续键入修改内容,直至新地址出现后键入回车Enter为止。(2)将逐一写入由开始的一片单元。
4.填充内存命令F
格式:F
功能:将单元内容表中的值逐个填入指定范围,单元内容表中内容用完后重复使用。
例如:-F 5BC:200 L 10 B2,‘XYZ’,3C
debug参数详解
进入后显示’-’,CS、DS、ES、SS四个段寄存器值相等(每次进入不一定相等,取决于系统及内存驻
留程序的多少),除IP=0100H、SP=FFEEH,其它通用寄存器值均为0,PSW的初值为NV、UP、E
I、PL、NA、PO、NC。特别要注意CS:IP代表下一条待执行的指令的默认起始,SS:SP为栈顶地址
,涉及串操作时DS:SI代表源串的起始地址,ES:DI代表目的串的起始地址,涉及文件操作时BX、C
X代表文件长度(BX为高16位,CX为低16位),内存变量在DEBUG中必须用其他寻址方式替代
(一般用直接偏移量表示)。练习各条常用DEBUG命令的使用,要求熟悉英文缩写及单词。
1、 -? ; 显示如下(命令英文全称,命令,参数表)(中括号代表可省略,下同)
assemble A [address]
compare C range address
dump D [range]
enter E address
fill F range list
go G [=address] [addresses]
hex H value1 value2
input I port
load L [address] [drive] [firstsector] [number]
move M range address
name N [pathname] [arglist]
output O port byte
proceed P [=address] [number]
quit Q
register R [register]
search S range list
trace T [=address] [value]
unassemble U [range]
write W [address] [drive] [firstsector] [number]
allocate expanded memory XA [#pages]
deallocate expanded memory XD [handle]
CodeView及Debug常用操作
CodeView常用操作
1、功能键
F2:显示/隐含的寄存器组窗口
F3:以不同的显示方式显示当前执行的程序
F4:以不同的显示方式显示当前执行的程序
F5/F7:执行到下一个逻辑断点,或到程序尾
F6:依次进入当前屏幕所显示的窗口
F8:单步(跟踪)执行指令,并进入被调用的子程序
F9:在源程序行中设置/取消断点,用鼠标左键双击之也可
F10:单步执行指令,但不进入被调用的子程序
Alt+F9:进入命令行
2、命令窗口
在该窗口中,可输入前面介绍的DEBUG命令。
3、寄存器组窗口
可以直接在寄存器组窗口内修改各寄存器的内容和各标志位,还可以用Options菜单中的“32-Bit
Registers”菜单项来切换16位和32位寄存器。
DEBUG常用命令
1、启动DEBUG的一般命令如下:
DEBUG 文件名 [参数表]
其中:文件名指定被调试的文件,其包括名和后缀,参数表是被调试文件运行时所需要的参数。
被调试的文件可以是系统中的任何文件,但通常它们的后缀为EXE或COM。当DEBUG启动成功后,将显示连接符“-”,这时,可输入各种命令。
表1 DEBUG中标志位的符号表示
标志名称 溢出OF 方向DF 中断IF 负号SF 零ZF 辅助进位AF 奇偶PF 进位CF
置位状态 OV DN EI NG ZR AC PE CY
复位状态 NV UP DI PL NZ NA PO
NC
表2 DEBUG命令及其含义
命令格式 功能说明
A [地址] 输入汇编指令
C [范围] 起始地址 对由“范围”指定的区域与“起始地址”指定的同大小区域进行比较,显示不相同的单元
D [范围] 显示指定范围内的内存单元内容
E 地址 字节值表 用值表中的值替换从“地址”开始的内存单元内容
F 范围 字节值表 用指定的字节值表来填充内存区域
G [=起始地址] [断点地址] 从起点(或当前地点)开始执行,到终点结束
实验一汇编语言上机及Debug调试
1 实验一 汇编语言程序上机过程以及调试(1) 一、预习内容 1. 工具软件MASM、LINK的使用 2. 常用DEBUG命令的使用: G,D,R,T,U,Q 3. 完整程序设计方法的格式。 二、目的要求 1. 掌握常用工具软件MASM、LINK的使用 2. 掌握常用DEBUG命令: G,D,R,T,U,Q 能灵活使用这些命令调试程序 3. 掌握完整程序设计方法的格式,能正确书写数据段,代码段等。 三、实验内容 比较两个字符串string1和string2所含的字符是否相同,如果相同则显示’Match'否则显示’No match’.请读程序,并将程序补充完整。 DSEG SEGMENT string1 db 'Move the cursor backward.' string2 db 'Move the cursor backward.' mess1 db 'Match.',13,10,'$' mess2 db 'No match.',13,10,'$' DSEG ENDS CSEG SEGMENT assume cs:CSEG, ds:DSEG, es:DSEG, MAIN PROC FAR start: mov ax, dseg mov ds, ax mov es, ax 2 lea si ,string1 ① cld ② repz cmpsb jz match lea dx,mess2 jmp short disp match: lea dx,mess1 disp: mov ah,09h int 21h mov ax, 4c00h int 21h MAIN ENDP CSEG ENDS end start 实验步骤: 1)用文字编辑工具(记事本或EDIT)将源程序输入完整后保存在d:\masm下,注意保存时将文件扩展名改为.asm(如test1.asm)。 2)屏幕左下角”开始” –“运行”输入 cmd ,进入dos命令操作,先用 d: 和cd masm 命令改变路经,接着用 ”masm + 文件名” (如 masm test1,这里文件名可以不带扩展名) 对源文件进行汇编,产生.obj文件和.LST文件。若汇编时提示有错,用文字编辑工具修改源程序后重新汇编,直至通过。 3 3)用 ”link + 文件名” (如 link test1) 将.obj文件连接成可执行的.exe文件(test1.exe)。 4)在DOS状态下直接运行该.exe文件(如 test1),即在屏幕上显示Match. 5)用debug调试程序,熟悉debug命令的使用: (1)打 debug test1.exe 进入debug 控制,显示提示符 '_ '。 (2)用命令g(运行命令)执行程序,可得与步骤4相同的结果,也可用T(追踪命令)命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况,并注意标志位有无变化。 (3)用命令u(反汇编命令)检查键入的程序并记录,特别注意左边的机器码和指令地址。如果一条u命令没有显示完全,可以再次输入u命令,该命令会紧接着上一个命令的输出继续显示。 (4)用命令’g+地址’设置断点,如g06,表示将断点设置在代码段的偏移地址为06h的指令前,并执行到该断点前。其中,命令中的地址项可以从上条命令u的运行结果获得。 (5)用命令r(显示和修改某个指定寄存器内容)查看各寄存器的情况。 (6)用命令d(显示内存单元内容的命令),d0查看数据段的情况,0表示从偏移地址0开始,也可以指定其他偏移地址值。 (7)用命令e(修改内存单元内容的命令) ‘e+地址’的方式修改数据区的字符串,其中’地址’指需要修改的数据段内存单元偏移地址,可根据上条d0命令获得。如e29 表示从偏移地址29h开始修改数据。试用此命令将数据段变量string1的内容修改为’Move the cursor forward.’ (8)再次用命令g执行程序,查看执行结果。 (9)用命令q退出debug,如果在上述步骤中碰到异常,可以先用q命令退出后再进入调试。 四、实验报告 1.分析程序,画出程序流程图 2.汇编,连接及调试时产生的错误,其原因及解决办法。 3.思考: 1) 上述实验中用e修改数据段的内容,是否改变原文件lab1.asm的内容? 4 2) 用单步执行命令t运行程序, 运行到mov ax, 4c00h, int 21h指令后,cs和ip寄存器内容前后有何变化,产生变化的原因是什么? 附:DEBUG 使用: 1.打 DEBUG 进入 DEBUG,显示提示符 '_ '。 2.退出DEBUG命令:Q 3.显示内存命令:D 起始地址 结束地址 4.修改内存命令:E 起始地址,连续修改打空格键。打回车键退出E命令。 5.检查寄存器命令:R 标志位显示 1 0 CF CY NC ZF ZR NZ SF NG PL AF AC NA OF OV NV PF PE PO DF DN UP IF EI DI 6.修改寄存器命令:R 寄存器名 7.小汇编命令:A 起始地址,不输入指令打回车键退出A命令。 8.反汇编命令:U 起始地址 结束地址 9.文件命名命令:N 盘号:文件名 10.读文件命令:L 内存地址 11.写文件命令:W 内存地址 5 10.读扇区命令:L 内存地址 盘号(0--A:,1--B:) 扇区号扇区数 11.写扇区命令:W 内存地址 盘号 扇区号 扇区数 12.运行命令:G=起始地址 结束(断点)地址 13.单步命令:T=起始地址 运行指令数,进入子程序内部。 14.单步命令:P=起始地址 运行指令数,不进入子程序内部。 15.内存搬家命令:M 起始地址 结束地址 目的地址 6 实验一 汇编语言程序上机过程以及Debug调试(2) 1、实验内容 (1) 进入和退出Debug程序 (2) 学会Debug中的D命令、E命令、R命令、T命令、A命令、G命令、U命令、N命令、W命令等的使用。 (3) 使用Debug调试程序。 2、实验步骤 (1) 在DOS提示符下,进入Debug程序。 (2) 详细记录每一步所用的命令,以及查看结果的方法和具体结果。 (3)现有一个双字加法源程序如下,其中存在错误。现假设已汇编、连结生成了可执行文件HB.EXE,存放在d:\MASM目录下。请使用Debug对其进行调试。 Code SEGMENT ASSUME CS:code,DS:code ORG 100H ;从100H处开始存放下列指令 Start:MOV AX,code ;将DS置成code段的首地址 MOV DS,AX MOV SI,200H ;取第一个数的首地址 MOV AX,[SI] ;将第一个数的低16位取到AX MOV DI,204H ;取第二个数的首地址 ADD AX,[DI] ;第一个数和第二个数的低16应相加 MOV [SI+8],AX ;低16位相加的结果送到208H和209H单元 MOV AX,[SI+2] ;取第一个数的高16位送到AX中 ADD AX,[DI+2] ;两个数的高16位相加 MOV [SI+0AH],AX ;高16位相加的结果送到20AH,20BH单元 MOV AX,4C00H ;使用DOS的4CH号功能调用 INT 21H ;进入功能调用,返回DOS ORG 200H ;从200H处开始存放下列数据 DD 12345678h,654387A9h,0h ;被加数、加数、和 Code ENDS END start 调试过程: ① 进入Debug并装入可执行文件HB.EXE D:\MASM>Debug HB.EXE - ② 观察寄存器初始状态 7 -R ③ 以单步工作方式开始运行程序 首先用T命令顺序执行用户程序的前l两条指令,将段寄存器DS预置为用户的数据段。 -T ④ 观察用户程序数据段初始内容 -D 200 20F ⑤ 连续工作方式运行程序至返回DOS前(设断点),查看运行结果。为此,现使用U命令反汇编。 -U 100 。。。。。。 然后 -G=100,011B -D 200 20F 查看结果是否正确。 ⑥ 再取一组数据,查看运行结果。为此,首先用E命令修改数据。 -E 200 CD,AB,78,56,90,EF,34,12 -D 200 20F -G=100,11B -D 200 20F 查看结果是否正确。 ⑦ 再将断点设在完成低位字加法后,查看运行结果。 -G=100,112 -D 200 20F 查看结果是否正确。 ⑧ 使用T命令从刚才的断点处向后单步调试,查看运行结果。 -T=112 -T 8 查看结果是否正确。 ⑨ 使用A命令装入正确指令后再次运行,察看结果。 -A 115 -G=100,11B -D 200 20F 查看结果是否正确 ⑩ 退出 -Q D:\> 需要说明的是此程序很简单,只需使用T命令逐条单步调试即可。本例采用的调试方法似乎过于繁琐,但这是为了说明程序调试的一般方法,以便读者调试复杂程序时借鉴。 3.实验报告 按照实验步骤记录实验过程及结果,分析每一步的结果,并将正确的程序补充完整。
