文档库 最新最全的文档下载
当前位置:文档库 › 实验2_调试工具的使用

实验2_调试工具的使用

实验2_调试工具的使用
实验2_调试工具的使用

实验二 调试工具的使用

2.1 实验目的

(1)掌握调试工具DEBUG的使用

(2)了解调试工具CodeView的使用

(3)了解调试工具Turbo debugger的使用

2.2 预备知识

2.2.1 常用进制转换

在汇编语言的程序开发和调试工作中经常使用二进制、十六进制和十进制。八进制使用较少。表2-1列出了四种进制的数码对照表。

表2-1 四种进制的数码对照表

地址总线的宽度决定了CPU能够访问的存储器单元的数量。20位地址总线的8086/8088可以访问物理地址从00000~FFFFFF范围的1MB内存空间。为了使16位机器字长的CPU能够访问20位物理地址,分段技术解决的这一难题。

把存储空间划分成若干个段(segment),段的起始单元物理地址为16的整数倍(段基址),每段存储空间最大可达64KB。段内可用16位二进制数来表示其相对位置(以十六进制形式书写),称为偏移地址。

物理地址 = 段寄存器的内容 * 16 + 偏移地址

段地址与偏移地址组成逻辑地址,表示为段地址:偏移地址

2.2.3 80x86CPU寄存器组

寄存器是CPU内部的数据存储容器。在8088/8086CPU中,有14个16位寄存器。其中,数据寄存器4个(AX,BX,CX,DX),每个寄存器又可以分为2个8位寄存器(例如AX可以分为AH和AL);3个指针寄存器(堆栈指针寄存器SP,基址指针寄存器BP,指令指针寄存器IP);2个变址寄存器(SI,DI);1个标志寄存器;4个段寄存器(代码段寄存器CS,数据段寄存器DS,附加数据段寄存器ES,堆栈段寄存器SS)。

在32位CPU(80386,80486乃至Pentium系列处理器)中,除段寄存器外均被扩展为32位长度,分别使用EAX,EBX,ECX,EDX,ESP,EBP,ESI,EDI,EIP表示,并且增加两个附加数据段FS和GS。

标志寄存器(FLAGS)与其他的寄存器不同的是它采用单个位来存放条件标志、控制标志和系统标志。16位CPU使用其中的9个位表示溢出、中断、进位等状态,每个标志为有置位(=1)和复位(=0)两种状态。

(1)条件码标志有:

溢出标志OF(overflow flag):表示在算术运算中,操作数是否超出了机器能表示的范围。超出时被设置为1,否则设置为0。

符号标志SF(sign flag):用于记录运算结果的符号。结果为负数时置1,为正数时置0,与运算结果的最高位相同。

零标志ZF(zero flag):运算结果为零时置1,否则为0;

进位标志CF(carry flag):记录运算时从最该有效位产生的进位值,有进位置1,无进位置0。

辅助进位标志AF(auxiliary carry flag):记录运算时第3位(半字节)产生的进位值。有进位置1,无进位置0。

奇偶标志PF(parity flag):指明在操作产生的结果中为1的位的数量是奇数还是偶数。个数为偶数时置1,否则置0。

(2)控制标志

方向标志DF(direction flag):用于控制串处理指令处理信息的方向。当DF=1时,串从高地址向低地址方向处理;当DF=0时,则相反。

(3)系统标志

陷阱标志TF(trap flag):用于设置处理器的单步方式操作。当TF=1时,进入单步方式,每条指令执行后产生陷阱。

中断标志IF(interrupt flag):设置CPU是否相应可屏蔽中断。当IF=1时,CPU 允许相应;当IF=0时,禁止相应。

2.2.4 常用调试工具DEBUG

DEBUG是DOS和WINS32系统提供的基于命令行交互模式的16位模式程序调试工具。通过单步执行、设置断点等方式提供了小巧而又灵活有效的调试手段,是汇编语言程序员必须掌握的工具。

DEBUG可以在受控环境中测试程序,提供了程序装入、显示、比对、修改、执行等操作,提供磁盘读写操作,也可以建立或汇编小型汇编语言程序。Quantasm公司的DEBUG32是与DEBUG类似的工具,但是它支持32位和16位两种调试能力。

DEBUG命令格式:

DEBUG [d:][path][文件名] [参数列表]

其中,文件名是指被调试文件名,包含名称及后缀;参数列表是运行被调试文件时所需要的命令参数;[d:][path]表示被调试文件所在路径。

1.格式约定

(1)提示符:DEBUG以“-”作为提示符,以回车键执行命令。

(2)命令格式:所有命令为单个字符,且不区分大小写。

(3)分隔符:命令和参数中采用空格、逗号或制表符作为分隔符。

(4)错误提示:当命令中出现语法错误时在出错位置显示“^Error”提示信息。

(5)数制形式:DEBUG使用十六进制作为数的输入和输出形式。

(6)存储器地址:采用“段地址:偏移地址”的逻辑地址形式表示。可以用段寄存器名替代段值。地址范围表示形式有两种(1)起始地址<分隔符>结束地址,(2)起始地址<分隔符>L范围长度。其中,起始地址采用“段地址:偏移地址”的形式表示,结束地址用偏移量表示,范围长度为字节数。例如,表示数据段中从0100偏移地址开始的100字节范围可以表示为DS:0100 L100或者DS:0100 01FF

(7)编辑功能:编辑本行命令可以使用F1,F2,F3,Ins,Del和左右光标键。使用CTRL+C 或 CTRL+Break结束当前命令执行,使用CTRL+S 暂停屏幕滚动。

(8)端口地址:2位十六进制数值,例如3F8。

(9)字节值:2位十六进制数值。

(10)字节值表:由若干个字节值组成,也可以是用引号括起来的字符串

(11)驱动器号:0代表驱动器A,1代表驱动器B,2代表驱动器C,3代表驱动器D。 2.DEBUG命令

DEBUG的命令如表2-2所示。其中a、g、l、t、u 和 w命令的默认段为CS,其它命令的默认段是 DS。标志位状态含义如表2-3

表2-2 DEBUG常用命令

格式用途

A A[<地址>] 把符号指令汇编成机器指令

C C<源地址范围><目的地址范围> 比较存储器内容

D D[<地址>] 或

以十六进制格式显示一个存储区的内容D[<起始地址>][<目的地址>]

E E<地址>[<字节串>] 从指定的存储单元开始,把数据输入到存储器中

F F<地址><要填入的字节或字节串> 填充存储器内容

G G[=<起始地址>][<断点>……] 运行程序

H H数1,数2 计算十六进制的和与差

I I<端口地址> 从指定端口输入并显示

L L[<地址>][<盘号><逻辑扇区号><扇区数>] 装入文件或磁盘扇区

M M<源地址范围><目的地址> 移动存储器内容

N N<文件名>[<文件名>……] 定义文件和参数

O O<端口地址><字节> 向指定的端口输出字节

Q Q 结束DEBUG运行

R R[<寄存器号>] 显示和修改寄存器

S S<地址范围><要查找的字节和字节串> 搜索字符合字符串

T T[=<地址>][<跟踪条数>] 跟踪运行并显示

P 单步执行,不进入过程

U U[<地址范围>] 对指令进行反汇编

W W[<地址>[<盘号><逻辑扇区号><扇区数>]]] 写磁盘文件或磁盘扇区

XA XA[#页面号] 分配扩展内存

XD XD[句柄] 释放扩展内存

XM XM[Lpage][Ppage][Handle] 影像扩展内存页

XS XS 显示扩展内存状态

表2-3 DEBUG中的标志位表示

标 志 名 置位(=1) 复位(=0)

溢出Overflow(是/否) OV NV

方向Direction(减量/增量) DN UP

中断Interrupt(允许/屏蔽) EI DI

符号Sign(负/正) NG PL

零Zero(是/否) ZR NZ

辅助进位Auxiliary Carry(是/否) AC NA

奇偶Parity(偶/奇) PE PO

进位Carry(是/否) CY NC

2.4 DEBUG的使用

2.4.1 DEBUG的启动和退出

1.启动DEBUG

“开始”菜单-〉“运行”,输入cmd(或者command),单击“确定”按钮进入Win32控制台(或虚拟DOS)工作模式(如图2-1)。

图2-1 启动win32控制台

在命令窗口中输入debug然后键入回车。启动成功后,将显示提示符“-”(如图2-2)。启动DEBUG时,如果给出文件名作为参数,则DEBUG程序将装载指定文件进入内存。

图2-2 启动DEBUG程序

2.退出DEBUG

在提示符“-”后,输入Q或者q,然后键入回车,将返回命令窗口状态。

2.4.2 显示命令D

功能:显示指定内存区域的内容。不带参数的D命令可用从前一个D命令指定的范围末尾开始,显示128个字节的内容。

格式:D [范围] 或 D [地址]

参数:“范围”指需要显示的内存区域的起始和结束地址,或起始地址和长度。

输出内容由3部分组成(如图2-3):地址区、内存数据、ASCII码。地址区:图示中左侧区域。以16进制形式显示的存储器逻辑地址内存数据:图示中间区域。信息以16进制格式显示,每行显示 16 字节,第8和第9字节之间用连字符分割。ASCII码:图示右侧区域。内存信息以ASCII字符形式输出,非打印字符由句点表示。

内存信息十六进制部分内存信息ASCII 地址区

图 2-3 D命令输出界面

操作1:显示输出附加数据段100H开始的20H个字节的内存信息。

在“-”提示符后输入:d es:100 11f 或者输入d es:100 L20命令。对比一下这两个命令执行结果是否一致?继续输入d然后回车执行,检查输出的起始地址是否与面的执行结果连续?

2.4.3 修改存储单元命令E(Enter)

功能:将数据输入到指定的存储单元。

格式:E 起始地址 [数据]

参数:起始地址,指定输入数据的第一个存储器地址。数据,指定要输入到存储器的数据值。数据可以是十六进制字节或字符串。使用空格、逗号或制表符来分隔值。对于字符串,要将它置于单引号 ('string') 或双引号之中 ("string")。

如果没有指定数据,DEBUG将显示地址和内容,在下一行重复地址,并等待输入。输入新值则更改该字节中的值,如果按空格键,进入下一个字节。返回到前一个字节,按减号键 (-),DEBUG开始新行并显示当前地址和字节值。按回车键停止执行E命令。如果指定数据,E命令将使用该列表的值替换现有的字节值。发生错误时,将不更改任何字节值。

操作2:修改代码段100H开始的三个字节单元内容为B8 00 90。

在提示符后键入:E CS:100,回车执行。在插入点输入B8空格00空格90。

注意:可以通过一个 e 子命令键入连续的字节值。每个字节之间用空格间隔。

操作3:在数据段110H处输入字符串 This is the text example。

在提示符后输入:e ds:100 "This is the text example"

使用D命令检查结果执行前后的内存区的变化。

2.4.4 填充存储单元命令F(Fill)

功能:使用指定的值填充指定内存区域,任何以前存储在指定位置的数据将会丢失。

格式:F 范围 数据

参数:范围,指定要填充存储器区域的起始和结束地址,或起始地址和长度。数据,指定要输入的数据。可以是十六进制或 ASCII 格式的数据。

操作4:使用五个数值42、45、52、54、41填充内存的ds:100 到ds:1FF 区间。

输入F ds:100 L100 42 45 52 54 41,回车执行,并检查执行结果。

思考一下,如何完成将附加数据段200开始处的16个字节初始化为空格的操作。

2.4.5 传送存储区命令M(move)

功能:将一个内存块中的内容复制到另一个内存块中。

格式:M范围 地址

参数:范围,指定要复制内容的内存区域的起始和结束地址,或起始地址和长度。 地址,指定要将内容复制到该位置的起始地址。

操作5:执行M cs:100 110 cs:500 并查看执行结果。

思考一下,如何将存储器00000 到 000FF处的数据复制到当前数据段0200开始处的存储区中。

2.4.6 存储区比较命令C(compare)

功能:比较内存的两个部分。

格式:C 范围 地址

参数:范围,指定要比较的内存第一个区域的起始和结束地址,或起始地址和长度。地址,指定要比较的第二个内存区域的起始地址。如果参数中指定的内存区域相同,C命令将不显示任何内容而直接返回提示符。如果不同,将按:地址1 字节1 字节2 地址2 格式显示。

操作6:执行下列命令说明结果

E 100 ‘0123456789abcdef’

E 200 ‘0123456789ABCDEF’

C 100 L10 200

2.4.7 存储区查找命令S(Search)

功能:在存储器中指定区域内搜索指定的字节值表。

格式:S 范围 字节值表

参数:范围,指定要查找的内存第一个区域的起始和结束地址,或起始地址和长度。如果找到,显示起始地址,否则,不显示任何内容。

操作7:在当前数据段偏移地址范围在0000-00FF之间查找字节值CD,并记录结果 执行S DS:0000 00FF CD。

2.4.8 汇编命令A(Assemble)

功能:从指定地址开始允许输入汇编语句,并汇编成机器代码相继存放在从指定地址开始的存储器中。

格式:A[地址]

操作8:在提示符后输入A100,然后键入回车。在光标后逐行输入图2-4中的汇编语言程序。输入结束时,键入两次回车键返回提示符状态。在提示符下输入A200,然后键入回车。在光标后输入DB ‘This is my first Assembly Language Programm!$’。

图2-4 汇编命令演示

2.4.9 反汇编命令U(unassemble)

功能:将指定范围的内容反汇编为符号指令。默认从指定地址开始反汇编32个字节。若地址省略,则从上一个U命令的最后一条指令的下一个单元开始显示32个字节,格式:U[地址] 或 U范围

操作9:执行U100命令,并对比与使用A命令输入程序时的异同。

2.4.10 运行命令G(go)

功能:从指定的位置开始执行汇编指令,到断点结束。

格式:G [=地址1][地址2]

参数:地址1,规定了运行起始地址。地址2,指定断点地址。

操作10:执行G =100,观察运行结果(如图2-5)。

图2-5 运行程序

2.4.11 跟踪命令T(Trace)

功能:跟踪调试,从起点(或当前点)执行若干条指令。

格式:T [=地址] [指令条数]

从指定地址起执行n条指令后停下来,显示寄存器内容和状态值。n由[指令条数]确定。省略指令条数则执行一条后停下来。

操作11:在100H偏移地址处汇编下列程序

MOV AX,CS

MOV DS,AX

MOV DX,0114

CALL 010F

MOV AX,4C00

INT 21

MOV AH,9

INT 21H

RET

在0114处存入字符串“(T)race and (P)rocess command test.”,00dh,0ah,24H。使用如下命令调试程序,仔细观察运行结果(参考图2-6)。

T =100 3

T

图2-6 调试命令T的使用

2.4.12 继续执行踪命令P

功能:执行循环、重复的字符串指令、软件中断或子程序调用与T命令的不同在于,不会跟踪进入子程序或者中断程序。

格式:P

操作12:将上一实验的T换为P重做,观察运行结果(参考图2-7)。

图2-7 调试命令P的使用

2.4.13 检查和修改寄存器内容命令R(register)

功能:显示或修改寄存器内容

格式:R[寄存器名]

操作13:显示CPU内部所有寄存器内容和标志位状态。修改寄存器AX内容为1B00。显示和修改标志位状态。

输入R命令,然后回车执行,观察执行结果,并记录个寄存器值。如图2-8所示,在提示符后输入RAX并执行。在冒号后输入1B00,回车写入新值。然后观察寄存器的变化情况。

图2-8 修改指定寄存器内容

输入命令RF并执行,观察输出结果,然后修改标志位DF=1,SF=1,CF=1,操作过程如图2-9所示。

图2-9 修改标志寄存器内容

2.4.14 命名命令N(named)

功能:将文件名格式化在CS:5CH的文件控制块内,以便使用L或W命令把文件装入内存进行调试或者存盘。

格式:N 文件名

操作14:将前面输入的程序命名为https://www.wendangku.net/doc/8a3604204.html,

N D:\https://www.wendangku.net/doc/8a3604204.html,

2.4.15 计算命令H(hex)

功能:计算两个十六进制数的和与差

格式:H 数值1 数值2

操作14:计算十六进制数 10 1 的和与差

思考一下:如何计算https://www.wendangku.net/doc/8a3604204.html,文件的长度。

2.4.16写入命令W(write)

功能:把数据写入磁盘的指定扇区或文件中

格式:

(1)把数据写入磁盘的指定扇区

-W 地址 驱动器 扇区号 扇区数

(2)把数据写入指定文件中

-W [地址]

此命令把指定内存区域中的数据写入由CS:5CH处的FCB所规定的文件中。在用W命令前,BX和CX中应包含要写入文件的字节数。

操作15:保存https://www.wendangku.net/doc/8a3604204.html,程序(如图2-10)

图2-10 写入https://www.wendangku.net/doc/8a3604204.html,程序

2.4.17装入命令L

功能:将指定文件或者磁盘扇区的内容装入指定内存单元

格式:

(1)把磁盘上指定扇区的内容装入到内存指定地址起始的单元中

L 地址 驱动器 扇区号 扇区数

(2)装入指定文件

L [地址]

此命令装入已在CS:5CH中格式化的文件控制块所指定的文件。在用L命令后,BX和CX中应包含所读文件的字节数。

2.4.18 读入数据命令I(In)

功能:从计算机输入端口读取数据并显示

格式:I 端口地址

2.4.19 送出数据命令O(Out)

功能:向计算机输出端口送出数据。

格式:O 端口地址 字节值

2.4.20 退出命令Q(quit)

功能:退出DEBUG返回系统。

格式:Q

执行Q命令实现退出DEBUG程序,返回DOS系统。该命令本身并不把在内存中的文件存盘,如需存盘,应在执行Q命令前先执行写命令W。

2.5 调试工具CodeView的使用

2.5.1 CodeView简介

CodeView(简称CV)是微软公司附带在MASM中的调试软件。CV为程序员提供了一个简单、直观的全屏幕调试环境(如图2-11),不仅可以调试可执行代码,还可以提供源程序级的调试(汇编和连接时附加参数,回想一下是什么参数?)。CV可以在命令提示符下运行,也可以在集成环境PWB中通过Run菜单的Debug选项启动。在命令提示符窗口下,执行CV <被调试可执行文件名>进行程序调试。使用CV /?获得帮助信息。

CV命令格式:CV [选项] 文件[参数]

2.5.2 CodeView窗口

Help 帮助窗口

Locals 显示当前作用域变量窗口

Watch 检查表达式值窗口

Source 显示源程序、执行代码或者同时现实两者

Memory 显示程序使用内存窗口

Register CPU寄存器窗口,用于显示16位和32位寄存器

8087 协处理器寄存器窗口

Command 用于输入和显示调试命令的命令窗口

图2-11 CodeView界面

2.5.3 CodeView菜单

(1)File菜单

Open source… 打开源文件装入到当前活动的资源窗口中;

Open Module 打开模块文件装入到当前活动的资源窗口中;

Print… 将当前窗口的部分或者全部内容写到某个文件中;

Dos Shell 暂时离开CodeView界面,切换到操作系统命令提示符中;

Exit 退出CodeView

(2)Edit菜单

Undo 撤销最后一次编辑操作;

Copy 将选中的文本存入CodeView剪贴板中;

Paste 将CodeView剪贴板中的内容占铁道当前光标处。

(3)Search菜单

Find… 在源程序窗口中搜索字符串;

Selected Text 选定文本;

Repeat Last Find 重复最后一次的搜索;

Label/Function… 在源程序中搜索标号或子程序;

(4)Run菜单

Restart 重新开始;

Animate 自动连续执行指令;

Set Runtime Arguments… 设置运行参数;

History on Undo 记录/停止记录当前调试动作;

Replay 恢复港撤销的调试动作;

(5)View菜单

Source 打开反汇编代码窗口,显示CS:IP;

Memory 打开内存数据窗口,显示DS:0

Register 打开/关闭寄存器窗口;

8087 打开/关闭8087符点处理器窗口;

Watch 打开/关闭监视窗口;

Command 打开/关闭命令窗口;

Help 打开/关闭帮助窗口;

Output 打开/关闭输出窗口;

(6)Data菜单

Add Watch … 增加检查点;

Delete watch… 删除检查点;

Set Breakpoint… 设置程序断点;

Edit Breakpoint 编辑程序断点;

Quick watch… 显示当前光标位置变量的值或选中的表达式的值。(7)Option菜单

Source window… 设置反汇编代码窗口属性;

Memory Window… 设置内存窗口属性;

Locals Option… 设置本地窗口属性

Trace Speed… 设置跟踪速度;

Language… 设置语言属性;

Horizontal Scrollbars 水平滚动条开关;

Vertical Scrollbars 垂直滚动条开关;

Status bar 状态栏开关;

Colors 设置屏幕颜色;

Screen Swap 屏幕切换开关;

Replay… 设置再运行输入数据参数;

Case Sensitivity 设置大小写有关参数;

32-bit Registers 16位/32位寄存器开关

Native P-code或机器码;

(8)Call菜单

显示程序调用堆栈

(9)Windows菜单

管理CodeView窗口

(10)Help菜单

联机帮助。

2.5.4 CodeView快捷键

F1 帮助;

F2 显示/关闭寄存器窗口;

F3 以不同的显示方式显示当前执行的程序;

F4 显示程序的输出屏幕;

F5 程序从CS:IP处开始执行,一直执行到下一个逻辑断点或程序尾;

F6 依次进入当前屏幕显示的窗口;

F8 单步执行指令,类似于DEBUG的T命令;

F9 在源程序中设置或取消断点;

F10 单步跟踪,但是不尽如被调用的子程序,类似于DEBUG的P命令;

ESC 终止当前操作;

Alt+F4 关闭CodeView;

Shift+9 显示当前光标位置变量或选中的表达式的值;

Ctrl+U 删除检查点;

Ctrl+W 增加检查点;

Ctrl+F4关闭当前窗口。

2.5.5 命令窗口中的命令

在命令窗口中输入的命令与DEBUG和DEBUG32的命令功能类似。下面给出命令的功能(表2-4),详细的使用方法参照帮助文件。

表2-4 命令行中的命令

命令格式用途

N N [基数]

N 设置命令中参数使用的基数N=8,10,16。默认为10。(不会修改显示基数)

MD MD <地址>

MD[<地址范围>]

显示指定存储单元的内容。与Debug的D相当

ME ME[<地址>]

ME<地址> [<字节串>] 用来初始化指定单元的内容。空格键跳到下一单元

\ 返回上一单元

回车结束ME命令

MF MF<地址> <要填入的字节或字节串> 填充存储器内容

R R

R <寄存器号>

R <寄存器号>=<值> 显示寄存器(含标志寄存器)内容,反汇编CS:IP 处程序

修改寄存器值。标志寄存器为FL或EFL。标志寄存器值同DEBUG

G G [地址] 运行程序到断点或程序结束

T T [指令条数] 单步跟踪运行,进入过程

P P [指令条数] 单步跟踪运行,不进入过程

L L 重新装入文件

Q Q 结束

MM MM [地址范围] [地址] 将数据从一个存储区复制到另一个存储区MC MC [地址范围] [地址] 比较两个存储区

U U[<地址范围>] 对指令进行反汇编

2.6 Turbo Debugger的使用

2.6.1 Turbo Debugger简介

Turbo Debugger简化写为TD,是Borland公司出品的源级调试器,可用于Turbo系列语言(含汇编语言)的调试工作。为Turbo C、Turbo Pascal的源代码到汇编语言指令、机器代码提供完整的控制。能够检查、监视、修改变量,运算表达式的值,设置条件和无条件断点,单步跟踪执行,能够进行双机调试,远程调试,也可以很好的调试采用微软的宏汇编编写并编译的汇编语言程序。

它的一个显著的特点是采用多层重叠窗口、下拉与弹出菜单相接合支持鼠标的快速、交

互的环境,上下文相关的联机帮助系统可以为使用者在每个操作阶段提供帮助,界面如图2-12所示。Turbo Debugger与微软汇编语言工具包中的CodeView相似,并且使用起来更方便。

图2-12 TD界面

TDCONVERT.EXE是完成从CodeView到Turbo Debugger调试格式转换的程序,以便可以调试采用微软的编译器编译的C程序和汇编语言程序。

TDSTRIP.EXE是符号表提取使用程序,使得用户无需重新连接就可以从程序中提取调试信息。

TDMAP.EXE可以把调试信息附加到MAP文件上。

TDUMP.EXE是一个通用目标模块和EXE文件的反汇编程序。

2.6.2 TD菜单

(1)File菜单

Open 装入准备调试的可执行文件

Codeguard info 显示和设置代码保护信息

Get I*nfo 显示被调试文件的有关信息

OS shell 运行DOS命令进程

Quit 退出TD

(2)Edit菜单

Copy 将选中的文本存入TD剪贴板

Paste 将TD剪贴板的内容粘贴到当前光标位置

(3)View菜单

Breakpoints 设置断点

Stack 打开堆栈段窗口

Watchs 打开监视窗口

Module… 打开模块窗口

Dump 打开数据窗口

Registers 打开寄存器窗口

Numeric processor 打开数字协处理器窗口

Windows messages 打开Windows消息窗口

Clipboard 打开剪贴板窗口

(4)Run菜单

Run 以正常速度运行程序

Go to cursor 运行到当前光标位置

Trace into 单步执行(进入调用内部,相当于debug T命令)

Step over 单步执行(不进入调用内部,相当于debug P命令)

Execute to … 执行到指定位置

Until return 执行到过程调用结束

Animate… 自动连续执行指令

Program reset 重新装入

(5)Breakpoints菜单

Toggle 在当前光标位置设置断点

At 在指定位置设置断点

Express true global… 在表达式为真的位置设置断点

Delete all 删除所以断点

(6)Data菜单

Inspect… 在检查窗口中增加一个变量或表达式

Evaluate/modify… 计算和显示变量或表达式的值,并输入新的值进行更改

Add Watch… 在监视窗口中增加一个新的表达式

(7)Options菜单

Display options … 显示选项

Set restart options 设置调试器的重新开始参数

2.6.3 调试

调试是发现并改正程序错误(bug)的过程。调试过程大致分为四个部分:察觉错误、错误定位、分析原因、改正错误。察觉错误是一个显而易见的过程,程序运行时悬起、屏幕上出现一大堆乱码而崩溃、输出结果与预期的不符等等。错误定位可能是最困难的一个阶段,最佳的策略是把一个程序分为几个部分,然后逐一加以跟踪调试。分析错误原因可能是第二困难的工作,往往需要做些实验才能完成。最后一个阶段是较为容易的一个阶段,很好地掌握语言知识是解决问题的根本。

Turbo Debuger的主要窗口和调试功能键与CV非常类似,也可以单步执行、设置断点、显示寄存器内容和查看内存内容等。具体操作由读者在实际的调试过程中掌握、体会。

2.7 实验内容

一、Debug用法

1. 基础操作

了解命令:R,H,D,E,F,M,C,S,A,U,N,W,L,T,P,Q的功能

1)进入Debug,用D命令查看数据段中0100H~0200H单元的内容。

2)用U命令查看代码段中0100H开始的程序,

3)用R命令查看并修改IP寄存器的值为0

4)用E命令修改数据段5号、6号单元的内容为12、34

5)输出代码段偏移地址200H开始的128字节信息,写出2种范围格式d子命令。

6)对比执行E 2000:0100 F3 “XYZ” 8D前后2000:0100处五个字节内容的变化。

7)使用E子命令逐个修改ES:0200处起始的5个单元的内容,然后按“-”键观察变化情况,说明原因。

2. 应用提高

1)保存中断向量表数据

查看物理地址0000开始的1024个字节单元的信息(中断向量表),并将其保存在文件VECTOR.DAT中。

2)检查BIOS数据区

在存储器低端,起点00400H单元开始的256字节空间是BIOS的数据区。当计算机接通电源后,BIOS初始化这个区域的值并在程序执行过程中修改他们。已知物理地址00400处的连续16字节单元包含着串行端口COM1到COM4、并行端口LPT1到LPT4的端口地址。请写出显示这16个字节内容的DEBUG命令,并分别写出个端口对应的端口地址。

3)检查ROM BIOS数据

ROM BIOS的制造日期是按照mm/dd/yy的格式记录的,起点在FFFF5H单元。请写出显示该内容的DEBUG命令,并记录结果。

二、综合训练

1.查看当前代码段、数据段、附加段、堆栈段寄存器内容,并写出结果。

(CS)= (DS)= (ES)= (SS)=

2.各个段的布置方式如下图所示,请修改相应寄存器值。数据段起点设置在当前数据段的0100H偏移地址为起始。写出操作步骤和新的CS、DS、ES、SS寄存器值。

数据段 64 byte 附加段 64 byte 堆栈段 16 byte 代码段 128 byte 步骤:(CS)=

(DS)=

(ES)=

(SS)=

3.以字符串STACK为内容填充堆栈段;

4.从数据段0010偏移地址开始输入如下字符串:“Debug is a simple and powerful debugging tool. $ ”并查看数据段的内容。

5.将该字符串从数据段传送到附加段0020偏移地址处。并在附加段中该字符串范围内搜索字符“.”,将它修改为“!”。

6.比较数据段和附加段中这两个字符串,写出内容不同单元的地址(物理地址及逻辑地址)7.在代码段中输入下列汇编语言程序段(下划线处填写正确数值),实现显示输出数据段和附加段中的两个字符串。对程序进行跟踪调试,确保正确运行。写出跟踪调试中的关键数据(寄存器变化)和调试步骤

MOV DX,____________

MOV AH,9

INT 21H

PUSH DS

MOV AX,ES

MOV DS,AX

MOV DX,____________

MOV AH,9

INT 21H

POP DS

INT 20H

8.在数据段的0偏移地址起始处开始输入自己的学号和姓名的汉语全拼。计算该程序的长度,以学号为文件名保存到磁盘中。写出操作步骤。

KEIL中如何用虚拟串口调试串口程序

KEIL中如何用虚拟串口调试串口程序 发表于2008/5/7 15:30:22 以前没接触过串口,一直都以为串口很复杂。最近在做一个新项目,用单片机控制GSM模块。单片机和GSM模块接口就是串口。调试完后觉得串口其实很简单。“不过如此”。这可能是工程师做完一个项目后的共同心态吧。下面详细介绍下如何用虚拟串口调试串口发送接收程序。 需要用到三个软件:KEIL,VSPD XP5(virtual serial ports driver xp5.1虚拟串口软件),串口调试助手。 1、首先在KEIL里编译写好的程序。 2、打开VSPD,界面如下图所示: 左边栏最上面的是电脑自带的物理串口。点右边的add pair,可以添加成对的串口。一对串口已经虚拟互联了,如果添加的是COM3、COM4,用COM3发送数据,COM4就可以接收数据,反过来也可以。 3、接下来的一步很关键。把KEIL和虚拟出来的串口绑定。现在把COM3和KEIL 绑定。在KEIL中进入DEBUG模式。在最下面的COMMAND命令行,输入MODE COM3 4800,0,8,1(设置串口3的波特率、奇偶校验位、数据位、停止位,打开COM3串口,注意设置的波特率和程序里设置的波特率应该一样)ASSIGN COM3 SOUT(把单片机的串口和COM3绑定到一起。因为我用的单片机是AT892051,只有一个串口,所以用SIN,SOUT,如果单片机有几个串口,可以选择S0IN,S0OUT,S1IN,S1OUT。)

4、打开串口调试助手 可以看到虚拟出来的串口COM3、COM4,选择COM4,设置为波特率4800,无校验位、8位数据位,1位停止位(和COM3、程序里的设置一样)。打开COM4。 现在就可以开始调试串口发送接收程序了。可以通过KEIL发送数据,在串口调试助手中就可以显示出来。也可以通过串口调试助手发送数据,在KEIL中接收。这种方法的好处是不用硬件就可以调试。这是网上一篇文章介绍的方法,联系我实际的使用做了整理。有用的着的人就不用继续摸索了

实验一 DEBUG的使用

实验一 DEBUG的使用 实验目的: 1.学习使用DEBUG程序的各种命令。 2.掌握8088/86指令系统---算数指令。 3.掌握用DEBUG调试自编程序的方法。 4.掌握8088/8086 CPU寄存器的用途和存储器组织及它们之间的关系。 5.掌握内存操作数及寻址方法。 6.掌握汇编语言伪操作:BYTE PTR,WORD PTR。 内容及步骤: 一、DEBUG 命令使用: 1、敲 DEBUG 进入 DEBUG 环境,显示提示符 '_ '。 2、用命令 D100 10F 观察内存中的16进制码及屏幕右边的ASCII字符。 3、用命令 E100 30 31 32 …… 3F 将30H~3FH写入地址为100H开始的内存单元中, 再用D命令观察结果,看键入的16进制数是什么字符的ASCII码? 4、用命令 F100 10F 'A' 将'A'的ASCII码填入内存,用D命令查看结果。 5、用命令 F110 11F 41 将41H 填入内存,用D命令观察结果并比较。 6、用R 命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF和AF的内 容。 7、用R命令将AX,BX内容改写为1234H及5678H。 8、用H命令检查下列各组16进制数加减结果并和你的手算结果比较: (1)34H,22H (2)56H,78H (3)A5,79H (4)1284H,5678H (5)A758,347FH 二、8088常用指令练习 1、传送指令 1)用A命令在内存100H处键入下列内容: MOV AX,1234 MOV BX,5678 XCHG AX,BX MOV AH,34 MOV AL,56 MOV CX,75AB XCHG AX,CX 2)用U命令检查键入的程序,特别注意左边的机器码。 3)用T命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况。并注意标志位有无变化。 2、加减法指令: 1)用A命令在内存200H处键入下列内容:

经典的串口调试工具源代码(一)

经典的串口调试助手源代码(一) Dim OutputAscii As Boolean Dim InputString As String Dim OutputString As String '============================================================================== ======= ' 变量定义 '============================================================================== ======= Option Explicit ' 强制显式声明 Dim ComSwitch As Boolean ' 串口开关状态判断 Dim FileData As String ' 要发送的文件暂存Dim SendCount As Long ' 发送数据字节计数器 Dim ReceiveCount As Long ' 接收数据字节计数器Dim InputSignal As String ' 接收缓冲暂存 Dim OutputSignal As String ' 发送数据暂存 Dim DisplaySwitch As Boolean ' 显示开关 Dim ModeSend As Boolean ' 发送方式判断

Dim Savetime As Single ' 时间数据暂存延时用Dim SaveTextPath As String ' 保存文本路径 ' 网页超链接申明 Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long Private Sub CloseCom() '关闭串口 On Error GoTo Err If MSComm.PortOpen = True Then MSComm.PortOpen = False ' 先判断串口是否打 开,如果打开则先关闭 txtstatus.Text = "STATUS:COM Port Cloced" ' 串口状态显示 mnuconnect.Caption = "断开串口" cmdswitch.Caption = "打开串口" 'ImgSwitch.Picture = LoadPicture("f:\我的VB\串口调试软件\图片\guan.jpg") ' 显示串口已经关闭 的图标 ImgSwitchoff.Visible = True ImgSwitchon.Visible = False Err: End Sub Private Sub UpdateStatus() If MSComm.PortOpen Then StatusBar1.Panels(1).Text = "Connected" mnuautosend.Caption = "自动发送" mnuconnect.Caption = "断开串口" Else StatusBar1.Panels(1).Text = "断开串口" mnuautosend.Caption = "disautosend" mnuconnect.Caption = "打开串口" End If StatusBar1.Panels(2).Text = "COM" & https://www.wendangku.net/doc/8a3604204.html,mPort StatusBar1.Panels(3).Text = MSComm.Settings If (OutputAscii) Then StatusBar1.Panels(4) = "ASCII" Else StatusBar1.Panels(4) = "HEX" End If ' On Error GoTo Err If ChkAutoSend.Value = 1 Then ' 如果有效则,自动发送

实验二

实验二C++基础实验目的 类定义;类对象使用;类成员变量、成员函数的定义和使用;观察类的组合使用;理解类的作用域;理解类的声明;理解类中 private 和 public 权限;掌握拷贝构造函数的定义和使用;掌握构造函数的重载;掌握析构函数的定义和使用;理解构造函数和析构函数的执行过程 实验过程设计.1.// 试设计一个复数类,该类有实部和虚部两个成员数据,成员数据采用私有访问权限,同时该类有两个共有成员函数,//分别用来设置成员数据和输出成员数据,//在主函数中分别采用对象方式,指针方式和引用方式来调用该类的公有函数设置和输出成员数据。 #include #include using namespace std; class Complex{ public: void Init(double x,double y ) { a=x; b=y; } double Real(){return a;}; double Image(){return b;}; private: int a; int b; }; void main() { Complex m; m.Init(3,1); cout<<"The complex is "<Init(3,1); cout<<"The complex is "<Real()<<"+"<Image()<<"i"<

串口调试助手使用方法

串口调试助手使用方法 你可以试试串口监控器,一个功能强大,非常易用的软件。 串口监控器是一个免费的多功能串口通讯监控软件,它能够多种方式显示,接收,分析通讯数据;能够以多种灵活方式发送数据;功能强大,操作简便,在串口通讯监控,设备通讯测试中,能够有效提高工作效率。 主要功能如下: 接收数据: 1. 以十六进制方式显示接收到的数据。 2. 以字符方式显示接收到的数据。 3. 数据帧自动识别,分行显示。 4. 接收数据自动换行设置。 5. 显示或隐藏数据帧的接收时间。 6. 自动清除,自动保存接收到的数据。 7. 接收数据个数计数。 发送数据: 1. 十六进制方式发送数据。 2. 字符串方式发送数据。 3. 发送“发报窗口”当前光标行的数据帧。 4. 循环发送“发报窗口”当前光标行的数据帧。 5. 循环发送“发报窗口”固定行的数据帧。 6. 循环依次发送“发报窗口”的多行数据帧。(设置起始行,行数) 7. 触发发送,接收到“发报窗口”某一行数据,触发发送“发报窗口”另一行数据。 8. 发送数据个数计数。 实用增强功能: 1. 强大易用的进制转换功能。 2. 智能识别当前光标处数据帧的行号,“字符”或“十六进制数”的个数。 3. 智能计算当前选择的“字符”或“十六进制数”的个数。 4. 强大的数据查找功能。 5. 定时保存,定时清除数据。 6. 根据自己的喜好,灵活变换操作界面。

应用场合: 1. 截取和分析设备之间通讯数据流。 2. 串行外围设备硬件开发。 3. 串行设备驱动程序开发。 4. 调试和测试设备和设备之间的串行通讯过程。 5. 记录和分析RS232/422/485通信过程。 6. 模拟某设备通讯过程,对另外设备进行通讯测试。

Debug使用说明

附录DEBUG调试程序的应用 1.直接启动DEBUG程序 如https://www.wendangku.net/doc/8a3604204.html,在C盘的根目录下,启动的方法是: C:\>DEBUG _ 这时屏幕上会出现“_”提示符,等待键入DEBUG命令。 2.启动DEBUG程序的同时装入被调试文件 命令格式如下: C:\>DEBUG [d:][PA TH]filename[.EXT] [d:][PATH]是被调试文件所在盘及其路径,filename是被调试文件的文件名,[.EXT]是被调试文件的扩展名。 例如:BCDSUM.EXE可执行文件在A盘,用DEBUG对其进行调试的操作命令如下。 C:\>DEBUG A:\BCDSUN.EXE↙ DOS在调用DEBUG程序后,再由DEBUG把被调试文件装入内存,当被调试文件的扩展名为COM时,装入偏移量为100H的位置,当扩展名为EXE时,装入偏移量为0的位置,并建立程序段前缀PSP,为CPU寄存器设置初始值。 3.退出DEBUG 在DEBUG命令提示符“_”下键入Q命令,即可结束DEBUG的运行,返回DOS操作系统。 4.在DEBUG环境下建立和汇编程序 在DEBUG环境下用户可以直接建立汇编语言源程序,并可以进行编辑修改,还可以进行汇编。 比如,在DEBUG下运行如下程序: MOV DL,33H ;字符3的ASCII码送DL MOV AH,2 ;使用DOS的2号功能调用 INT 21H ;进入功能调用,输出‘3’ INT 20H ;BIOS中断服务,程序正常结束。 该程序运行结果是在显示器上输出一个字符‘3’。如果要输出其它字符,请改变程序中‘33H’为相应字符的ASCII码。其中涉及DOS和BIOS功能调用。因为我们是在DOS的支持下运行汇编语言程序,所以一般情况下,不能轻易使用输入/输出指令直接通过端口输入/输出,而必须使用DOS内部提供的子程序完成输入/输出。 DOS功能调用就是为诸如此类的目的设置的。DOS功能调用要求在进入INT 21H调用前,首先将功能调用号送AH寄存器,并根据功能调用号准备初始数据。也就是说INT 21H 的2号功能调用是输出DL寄存器中的字符。INT 20H是BIOS中断服务,这一软中断用来正常结束程序。

实验二

实验二类定义、构造函数、静态成员编程实验 实验目的 掌握类的定义方法,构造函数、析构函数、拷贝构造函数,静态成员的使用方法。 进一步熟悉Visual C++的编程环境 实验内容 1.定义一个描述通讯录的类,数据成员包括通信录名称(类静态数据成员),姓 名、单位、电话号码、邮编,成员函数有输出各项数据、分别置各项数据、分别获取各项数据,同时包括构造函数、拷贝构造函数、析构函数,以及获取和修改通信录名称的静态成员函数。 实验要求: (1)通讯录类的定义如下:  class COM{ static char COMName[100]; //通讯录名称 char *pname; //姓名 char *punit; //单位 char *pnum; //电话号码 char box[6]; //邮编 public: COM(); COM(char *name,char *unit,char *num,char *b); COM(const COM &p); ~COM(); void print(); void setname(char *name); void setuint(char *unit); void setnum(char *num); void setbox(char *b); char *getname(); char *getuint(); char *getnum(); char *getbox(); static char *getCOMName(); static void setCOMName(char *CName); }; (2)在缺省构造函数中,姓名、单位、电话号码、邮编初始化为空。  (3)在构造函数和拷贝构造函数中都要为pname、punit和pnum动态申请空间,即通过new运算申请空间。  (4)在析构函数中要根据pname、punit和pnum是否占有空间确定是否需要删除空间,如果需要则要用delete运算回收空间。

常用通讯测试工具使用

常用通讯测试工具 鉴于很多MCGS用户和技术人员对通讯测试工具并不很熟悉,本文档将针对实际的测试情况,对串口、以太网通讯调试过程中所涉及到的常用的测试软件进行相关的讲解。 1. 串口测试工具: 串口调试工具:用来模拟上下位机收发数据的串口工具,占用串口资源。如:串口调试助手,串口精灵,Comm等。 串口监听工具:用来监听上下位机串口相关操作,并截获收发数据的串口工具。不占用串口资源。如:PortMon,ComSky等。 串口模拟工具:用来模拟物理串口的操作,其模拟生成的串口为成对出现,并可被大多数串口调试和监听软件正常识别,是串口测试的绝好工具。如:Visual Serial Port等。 下面将分别介绍串口调试助手、Comm、PortMon和Visual Serial Port的使用。

1.1. 串口调试助手: 为最常用的串口收发测试工具,其各区域说明及操作过程如下: 串口状态 打开/关闭串口 十六进制/ASCII 切换 串口数据 接收区 串口参数 设置区 串口数据 发送区 串口收发计数区 发送数据功能区 保存数据功能区 操作流程如下: ? 设置串口参数(之前先关闭串口)。 ? 设置接收字符类型(十六进制/ASCII 码) ? 设置保存数据的目录路径。 ? 打开串口。 ? 输入发送数据(类型应与接收相同)。 ? 手动或自动发送数据。 ? 点击“保存显示数据”保存接收数据区数据到文件RecXX.txt。 ? 关闭串口。 注:如果没有相应串口或串口被占用时,软件会弹出“没有发现此串口”的提示。

1.2. PortMon 串口监听工具: 用来监听上下位机串口相关操作,并截获收发数据的串口工具。不占用串口资源, 但在进行监听前,要保证相应串口不被占用,否则无法正常监听数据。 连接状态 菜单栏 工具栏 截获数据显示区 PortMon 设置及使用: 1). 确保要监听的串口未被占用。 如果串口被占用,请关闭相应串口的应用程序。比如:要监视MCGS 软件与串口1设备通讯,应该先关闭MCGS 软件。 说明:PortMon 虽不占用串口资源,但在使用前必须确保要监听的串口未被占用,否则无法进行监视。 2). 运行PortMon,并进行相应设置。 ? 连接设置: 在菜单栏选择“计算机(M)”->“连接本地(L)”。如果连接成功,则连接状态显示为“PortMon 于\\计算机名(本地)”。如下图:

DEBUG的使用方法

DEBUG程序的使用 一、在DOS的提示符下,可如下键入Debug启动调试程序: DEBUG [路径\文件名] [参数1] [参数2] Debug后可以不带文件名,仅运行Debug程序;需要时,再用N和L命令调入被调试程序。命令中可以带有被调试程序的文件名,则运行Debug的同时,还将指定的程序调入主存;参数1/2是被调试程序所需要的参数。 在Debug程序调入后,根据有无被调试程序及其类型相应设置寄存器组的内容,发出Debug的提示符“-”,此时就可用Debug命令来调试程序。 运行Debug程序时,如果不带被调试程序,则所有段寄存器值相等,都指向当前可用的主存段;除SP之外的通用寄存器都设置为0,而SP指示当前堆栈顶在这个段的尾部;IP=0100h;状态标志都是清0状态。 运行Debug程序时,如果带入的被调试程序扩展名不是.EXE,则BX.CX 包含被调试文件大小的字节数(BX为高16位),其他同不带被调试程序的情况。 运行Debug程序时,如果带入的被调试程序扩展名是.EXE,则需要重新定位。此时,CS : IP和SS : SP根据被调试程序确定,分别指向代码段和堆栈段。DS=ES指向当前可用的主存段,BX.CX包含被调试文件大小的字节数(BX为高16位),其他通用寄存器为0,状态标志都是清0状态。 二、DEBUG命令的格式 Debug的命令都是一个字母,后跟一个或多个参数:字母[参数] 命令的使用中注意: ①字母不分大小写; ②只使用16进制数,没有后缀字母; ③分隔符(空格或逗号)只在两个数值之间是必须的,命令和参数间可无分隔符; ④每个命令只有按了回车键后才有效,可以用Ctrl+Break中止命令的执行; ⑤命令如果不符合Debug的规则,则将以“error”提示,并用“^”指示错误位置。 许多命令的参数是主存逻辑地址,形式是“段基地址: 偏移地址”。其中,段基地址可以是段寄存器或数值;偏移地址是数值。如果不输入段地址,则采用默认值,可以是缺省段寄存器值。如果没有提供偏移地址,则通常就是当前偏移地址。 对主存操作的命令还支持地址范围这种参数,它的形式是:“开始地址结束地址”(结束地址不能具有段地址),或者是:“开始地址L字节长度”。 三、DEBUG子命令 1、显示命令D D(Dump)命令显示主存单元的内容,它的格式如下(注意分号后的部分用于解释命令功能,不是命令本身): D [地址];显示当前或指定开始地址的主存内容 D [范围];显示指定范围的主存内容 例如,显示当前(接着上一个D命令显示的最后一个地址)主存内容: 左边部分是主存逻辑地址,中间是连续16个字节的主存内容(16进制数,以字节为单位),右边部分是这16个字节内容的ASCII字符显示,不可显示字符用点“.”表示。一个D命令仅显示“8行×16个字节”(80列显示模式)内容。 再如: -d 100 ;显示数据段100h开始的主存单元

串口调试助手VC++6.0程序

串口调试助手源程序 及编程详细过程 作者:龚建伟 2001.6.20 可以任意转载,但必须注明作者和说明来自https://www.wendangku.net/doc/8a3604204.html,,不得作为商用 目次: 1.建立项目 2.在项目中插入MSComm控件 3.利用ClassWizard定义CMSComm类控制变量 4.在对话框中添加控件 5.添加串口事件消息处理函数OnComm() 6.打开和设置串口参数 7.发送数据 在众多网友的支持下,串口调试助手从2001年5月21日发布至今,短短一个月,在全国各地累计下载量近5000人次,在近200多个电子邮件中,20多人提供了使用测试意见,更有50多位朋友提出要串口调试助手的源代码,为了答谢谢朋友们的支持,公开推出我最初用VC控件MSComm编写串口通信程序的源代码,并写出详细的编程过程,姑且叫串口调试助手源程序V1.0或VC串口通讯源程序吧,我相信,如果你用VC编程,那么有了这个代码,就可以轻而易举地完成串口编程任务了。(也许本文过于详细,高手就不用看) 开始吧: 1.建立项目:打开VC++6.0,建立一个基于对话框的MFC应用程序SCommTest(与我源代码一致,等会你会方便一点); 2.在项目中插入MSComm控件选择Project菜单下Add To Project子菜单中的 Components and Controls…选项,在弹出的对话框中双击Registered ActiveX Controls项(稍等一会,这个过程较慢),则所有注册过的ActiveX控件出现在列表框中。选择Microsoft Communications Control, version 6.0,,单击Insert按钮将它插入到我们的Project中来,接受缺省的选项。(如果你在控件列表中看不到Microsoft Communications Control, version 6.0,

实验2 类的定义与应用

实验2 类的定义与应用 1、实验目的和要求: 掌握类定义的方法,理解类类型,实例的含义,体会面向对象程序设计中数据隐藏的概念。理解构造函数和析构函数的作用和运行实际,掌握拷贝构造函数的作用。并熟练掌握复杂对象类型的运用。 2、实验内容: (1)定义一个时间类Time,它能提供由时分秒组成的时间。要求能够修改时间和打印出时间。 数据成员:时、分、秒 成员函数: 各种构造函数 析构函数 可以通过函数分别设置时间的各个组成部分 也可以整体设置时间 有一个tick函数,负责给当前时间加1秒钟,然后输出新的时间 要保证测试下列情况: a)递增到下一分钟。 b)递增到下一小时。 c)递增到下一天(即11:59:59PM到12:00:00AM)。 (2)定义并测试日期类Date ,包括私有数据成员year, month, day; 公有成员函数实现以下功能: 各种构造函数 设置时间,并对该时间的有效性进行检测 输出时间,按mm/ dd / yyyy方式打印 判断该日期是一年的第几天 (3) 设计并测试complex类,进行复数的四则运算。包括私有数据成员:real, imag;公有成员函数:

Show方法:打印形如(real,imag)的complex值 Set方法: 设置负数的实部和虚部值 get方法:分别获取实部和虚部值 编写一个驱动程序,测试这个类。 class Complex { public: //默认构造函数 //有参构造函数 //复制构造函数 // 析构函数 // 输出复数-5+3i,4 - i 形式的show // 实现四则运算的成员函数 private: double real; //实部 double imag; //虚部 }; (4)定义一个分数类如下,要求实现各个成员函数,并在主函数中测试两个分数的加减乘除等运算。 class Rational{ public: Rational(int nn=1,int mm=1); //构造 Rational R_add(Rational & A); //加 Rational R_sub(Rational & A); //减 void R_mul(Rational & A); //乘 void R_div(Rational & A, Rational &B); //除 void simple( ); //约分 void print(); //以分数形式显示,注意约分 private:

串口调试助手使用规范V15.01(试用)

串口调试助手使用规范(试用) ——截取指令方法
版本:V15.01 日期:2015.0128 类别:APP 使用规范
1
串口调试助手使用规范(试用) 截取指令方法
广州市英沙电子系统有限公司 2015-01-28 发布

串口调试助手使用规范(试用) ——截取指令方法
版本:V15.01 日期:2015.0128 类别:APP 使用规范
2
目 录
1 引言 ................................................................................................................................................................................... 3 2 使用前准备........................................................................................................................................................................ 3 3 串口调试助手及其安装 ................................................................................................................................................... 3 4 串口线与设备的物理连接 ............................................................................................................................................... 4 5 串口调试助手截取指令步骤 ............................................................................................................................................ 4 6 分析截取的指令............................................................................................................................................................... 6?

debug常见命令使用说明

五、DEBUG调试程序 DEBUG.EXE程序是专门为分析、研制和开发汇编语言程序而设计的一种调试工具,具有跟踪程序执行、观察中间运行结果、显示和修改寄存器或存储单元内容等多种功能。它能使程序设计人员或用户触及到机器内部,因此可以说它是80X86CPU的心灵窗口,也是我们学习汇编语言必须掌握的调试工具。 1)DEBUG程序使用 在DOS提示符下键入命令: C>DEBUG [盘符:][路径][文件名.EXE][参数1][参数2] 这时屏幕上出现DEBUG的提示符“-”,表示系统在DEBUG管理之下,此时可以用DEBUG 进行程序调试。若所有选项省略,仅把DEBUG装入内存,可对当前内存中的内容进行调试,或者再用N和L命令,从指定盘上装入要调试的程序;若命令行中有文件名,则DOS把DEBUG 程序调入内存后,再由DEBUG将指定的文件名装入内存。 2)DEBUG的常用命令 (1)汇编命令A 格式:A[起始地址] 功能:将输入源程序的指令汇编成目标代码并从指定地址单元开始存放。若缺省起始地址,则从当前CS:100地址开始存放。A命令按行汇编,主要是用于小段程序的汇编或对目标程序的修改。 (2)反汇编命令U 格式1:U[起始地址] 格式2:U[起始地址][结束地址|字节数] 功能:格式1从指定起始地址处开始将32个字节的目标代码转换成汇编指令形式,缺省起始地址,则从当前地址CS:IP开始。 格式2将指定范围的内存单元中的目标代码转换成汇编指令。 (3)显示、修改寄存器命令R 格式:R[寄存器名] 功能:若给出寄存器名,则显示该寄存器的内容并可进行修改。缺省寄存器名,则按以下格式显示所有寄存器的内容及当前值(不能修改)。 AX=0000 BX=0004 CX=0020 DX=0000 SP=0080 BP=0000 SI=0000 DI=0000 DS=3000 ES=23A0 CS=138E IP=0000 NV UP DI PL NZ NA PO NC 138E:0000 MOV AX,1234 -R AX ;输入命令 AX 0014 ;显示AX的内容 :;供修改,不修改按回车。 若对标志寄存器进行修改,输入:-RF 屏幕显示如下信息,分别表示OF、DF、IF、SF、ZF、AF、PF、CF的状态。 NV UP DI PL NZ NA PO NC 不修改按回车键。要修改需个别输入一个或多个此标志的相反值,再按回车键。R命令只能显示、修改16位寄存器。 (4)显示存储单元命令D 格式1:D[起始地址]

很好的串口调试工具--ComTools

一个很好的串口调试工具,可以根据自己的需求设置参数。界面也很美观。ComTools是功能齐全,操作方便的串口调试工具,是单片机通讯开发的最佳助 手! 本软件完全免费,无任何功能时间限制。 主要功能如下: 1.可设置各种通讯速率、奇偶校验、数据位和停止位; 2.可分别设置ASCII码(包括中文)或十六进制数据格式的发送模式或接收模式; 3.能将接收数据保存成文本文件,便于观察分析; 4.自动保存设置参数,无需每次重新设置; 5.可以设置16条定时自动发送的数据,以及每条数据发送后的延时时间; 6.可以同时监控2个串口,利用特制电缆可监听2个串口设备之间的通讯过程; 7.发送数据时,可自动计算并添加和校验发送; 8.DTR自动控制是为了方便RS485通讯测试而添加的功能; 9.方便的查找功能,使你可以轻松搜索接收文本框中的字符; 10.使用快捷键可快速调用最近五次发送的不同数据。 使用帮助 1.主窗口上12个指示灯分别代表两个串口以及DTR,RTS,CTS,DSR,CD各信号当前状态。 绿色代表“有效”状态,红色代表“无效”状态。 点击左边的一个'端口状态'指示灯,可以打开和关闭相应串口。 点击'DTR'或'RTS'状态指示灯,可以切换'DTR'线或'RTS'线的当前有效或无效状态。 2.选定'数据记录'功能后,通讯过程中两个串口接收的数据都将按HEX格式写入指定的文本文件中。 您可以修改默认的文件名称。

3.在发送文本框输入你要发送的数据,点击按钮"发送[PortA]"数据将从端口PortA发送, 点击按钮"发送[PortB]"数据将从端口PortB发送。 本软件启动时,串口状态默认为关闭,点击发送按钮将自动打开相应串口。 发送数据前,可以选择发送模式为"ASC"或"HEX"。 另外,也可以单独设置接收模式为"ASC"或"HEX"。 4.打开"串口设置"对话框,可以分别设置PortA 和 PortB 的串口参数。 格式如下: "BBBB,P,D,S" BBBB 为波特率,P 为奇偶校验,D 为数据位数,S 为停止位数。 本软件的缺省值是:"9600,N,8,1" 合法的波特 率:110,300,600,1200,2400,9600,14400,19200,28800,38400,56000,128000,25 6000 合法的奇偶校验值: "E" 偶数 (Even) ; "M" 标记 (Mark) ; "N" 无校验(None) ; "O" 奇数 (Odd) ; "S" 空格 (Space) 合法的数据位值: 4,5,6,7,8 合法的停止位值: 1, 1.5, 2 PortA 和 PortB 的串口设置分别显示在主窗口状态栏左右两侧。 5.如果将'DTR控制'设为"YES",发送数据时DTR线将保持'有效'状态, 数据发送完毕DTR线将立即设为'无效"状态。 12个状态指示灯,每隔0.5秒刷新一次状态。 6.插入空格功能是为方便观察接收数据,打开'插入空格'功能后, 每接收一个字节数据将在接收文本框插入一个空格。

《面向对象程序设计》实验指导书(实验二)

实验二类与对象㈡——对象初始化、对象数据与指针 一、实验目的 1.理解构造函数、析构函数的意义及作用,掌握构造函数、析构函数的定义及调用时间,熟悉构造函数的种类; 2.理解this指针及使用方法,熟悉对象数组、对象指针、对象引用的定义及使用方法,熟悉对象作为函数参数的使用方法; 3.熟悉类与对象的应用及编程。 二、实验学时 课内实验:2课时课外练习:2课时 三本实验涉及的新知识 ㈠构造函数与析构函数 在C++中,提供了两个特殊的成员函数,即构造函数和析构函数。 构造函数用于对象的初始化,即在定义一个类对象时,计算机在给对象分配相应的存储单元的同时,为对象的数据成员赋初值。 析构执行的是与构造函数相反的操作,用于撤销对象的同时释放对象所占用的内存空间。 1.构造函数 ⑴构造函数的定义 格式: 类名(形参表) { 构造函数体} ⑵构造函数的调用 构造函数的调用是在定义对象时调用的。 格式:类名对象名(实参表); 类名对象名=构造函数名(实参表); ⑶说明 ①构造函数必须与类同名。 ②构造函数没有返回值,但不能在构造函数前加void类型符(其他没有返回值的成员函数必须加类型符void)。 ③在实际应用中,在定义类时通常应定义一至多个构造函数(重载),以对各数据成员进行初始化;如果不给出构造函数,系统将自定义一个构造函数。 ④构造函数可以可以带参数,也可不带任何参数(称无参构选函数),还可以使用缺省参数。 ⑤不能象普通成员函数一样单独调用。 2.析构函数 ⑴析构函数的定义 格式: ~类名(void) { 析构函数体} ⑵析构函数的调用 析构函数是在撤销对象时自动调用的。 ⑶说明

利用DEBUG调试汇编语言程序段

利用DEBUG调试汇编语言程序段一.实验目的 1.熟悉DEBUG有关命令的使用方法; 2.利用DEBUG掌握有关指令的功能; 3.利用DEBUG运行简单的程序段。 二.实验容 1.进入和退出DEBUG程序; 1)开始—运行,输入cmd,点确定进入命令窗口 2)在命令窗口中输入dubug进入debug程序

3)进入debug窗口后,输入q命令退出debug 2.学会DEBUG中的 1)D命令(显示存数据D 段地址:偏移地址) 例1:-D100 ;显示DS段, 0100开始的128个字节容 说明:指定要显示其容的存区域的起始和结束地址,或起始地址和长度。 ①DSEGREG[起始地址] [L 长度] ;显示SEGREG段中(缺省默认为DS), 以[起始地址] (缺省为当前的偏移地址),开始的[L 长度] (缺省默认为128)个字节的容. ② D SEGREG[段地址:偏移地址]

;显示SEGREG段中(缺省默认为DS), [段地址:偏移地址] 开始的[L 长度] (缺省默认为128)个字节容 -D ;默认段寄存器为DS,当前偏移地址(刚进入debug程序偏移地址为0100H) -D DS:100 ;显示DS段, 0100H开始的128个字节容 -D CS:200 ;显示CS段, 0200H开始的128个字节容 -D 200:100 ;显示DS段, 0200:0100H开始的128个字节容 -D 200;显示DS段, 0200H开始的128个字节容 -D 100 L 10 ;显示DS段, 100H开始的100H个字节容 2)E命令(修改指定存) 例1:-E100 41 42 43 44 48 47 46 45 -D 100,L08

win7下串口调试工具超级终端和secureCRT

1.win7下使用超级终端 我们知道在XP系统中,超级终端是系统自带的工具,但是在win7中,这一工具系统不再附带。但是这款工具在win7中确实是可以使用 的。使用方法如下: 1.在XP系统中C:ProgramFiles->Windows NT复制文件 hypertrm.exe到win7系统中的C:Windows->system中 2.在XP系统中C:Windows->System32赋值文件hypertrm.dll到 win7系统中的C:Windows->system中 3.在XP系统中C:Windows->System32赋值文件hticons.dll到win7 系统中的C:Windows->system中 其实完成第一步和第二步就可以使用了,第三步的文件只是图标文件,但是有了使用起来更好。可能很多人手边上没有XP系统,我将在 附件中上传这几个文件,供大家下载使用。 赋值完成之后的C:Windows->system文件夹截图如下:

完成上述步骤后,打开开始菜单,找到附件选项,我们就能看见超级终端了: 点击上图标记地方的文件,我们就可以在win7下使用超级终端了。 2.使用secureCRT调试串口的步骤: 1.打开secureCRT之后

点击上图标记处,开始进行连接。 2.点击下图中标记处,新建一个连接

3.在下图的协议选择框里,选择serial,串行协议,然后下一步

4.在下图对串口进行串口号,波特率等的设置,然后下一步 5.给所建的串口连接起一个名字,然后下一步 点击完成,至此我们就新建了一个串口连接。 我们可以看见我们刚才新建的串口的连接:

C++ 实验二 类与对象(附答案)

实验二类与对象 实验目的和要求 1.掌握类、类的数据成员、类的成员函数的定义方式。 2.理解类成员的访问控制方式。 3.掌握对象的定义和操作对象的方法。 4.理解构造函数和析构函数的定义与执行过程。 5.掌握重载构造函数的方法。 6.了解拷贝构造函数的定义方法。 实验内容 1.下面程序中有错,在不删除和增加代码行的情况下,改正错误语句,使其正确运行。#include class Aa { public: Aa(int i=0) { a=i; cout<<"Constructor "<

(1) #include class Date { void set_date(); void show_date(); int year; int month; int day; }; Date d; int main() { set_date(); show_date(); } void set_date() { cin>>d.year; cin>>d.month; cin>>d.day; } void show_date() { cout< class A { public: void A(int i=0) { m=i; } void show() { cout<

大傻串口调试软件2.0 使用手册

ComMonitor大傻串口调试软件 使用说明书 (2.0) 编写:大傻 Email: david_parkins@https://www.wendangku.net/doc/8a3604204.html, 大傻工作室 二零零六年三月

目录 一、介绍 (2) 二、软件界面 (3) 2.1 软件主界面 (3) 2.2 最大化界面 (4) 2.3窗口置顶 (4) 2.4关于程序 (5) 三、显示区控制 (7) 3.1显示发送 (7) 3.2帧换行 (7) 3.3显示保存发送和接收时间 (8) 3.4关键字过滤 (9) 3.5 保存显示区内容 (9) 四、发送区数据发送控制 (11) 4.1 发送区数据格式说明 (11) 4.2手动控制 (11) 4.3自动发送 (12) 4.4 校验码计算 (12) 五、轮发功能 (14) 5.1 发送区轮发 (14) 5.2文件轮发 (14) 5.3定时轮发 (16) 5.4 帧回应轮发 (17) 六、常见问题索引 (19) 6.1 串口不能打开 (19) 6.2 接收到的数据不对 (19) 6.3 接收区没有显示 (19) 6.4 自动发送为什么没有发送数据 (19) 6.5 谁是大傻 (19) 6.6 如何联系大傻 (19) 6.7 如何获得最新的ComMonitor软件 (19) 6.8 关于ComMonitor软件源代码 (20)

一、介绍 ComMonitor是大傻两年前写的一个软件,当初由于工作的原因,常常需要调试串口通讯,又没有找到合适的串口调试软件,就在两年前的十一放假期间自己写了一个。之后一直都是自己和同事使用。后来很多同事反映很好用,建议我放到网上共享。再后来又根据同事和网友的建议,进行了一些修改,就形成了今天的版本。 ComMonitor追求的是方便易用,能调试大多数的串口通讯应用。所以,在界面上都没有做什么处理。当初写这个软件的时候,参考了串口调试助手,但又根据自己工作中的需求,添加了更多的功能。具体来讲,它除了具备一般的串口调试工具的功能以外,还具有以下特别之处: 1、支持多达20个串口,对于使用多串口卡或虚拟串口的用户是很必要的; 2、加入了接收显示与保存的关键字过滤功能; 3、具备接收显示与保存时帧换行功能,40ms未受到数据,认为一帧结束; 4、具有记录发送和接收时间的功能; 5、支持3个独立的发送区; 6、3个发送区可以以定时或响应等两种方式进行轮发; 7、具有计算CRC16、CRC8等校验码的功能; 8、自动保存上一次使用的端口配置; 9、自动保存上一次发送区的数据; 10、具有文件按行发送轮发功能,发送方式也可以采用定时和响应两种方式; 11、轮发响应方式中,加入了超时判断,和自定义多次重发功能; 12、所有参数和数据支持运行时改变,不需要重新启动; ComMonitor设计伊始就是针对调试串口设备通讯的。所以,上面的很多特点为调试各种带串口通讯的智能设备提供了极大的方便。ComMonitor也可以用来模拟带串口通讯的智能设备,与您的上位机监控系统进行通讯。ComMonitor 虽然还只是一个小的工具软件,但他是大傻工作经验、一些想法和辛勤劳动的结晶。希望能给大家的工作带来方便。如果您对ComMonitor有什么建议,也请不吝赐教。 在ComMonitor以后的版本中,大傻还打算做一些升级,包括提供一些更实用的功能,界面美化等等。为了保证大家能及时拿到最新版的ComMonitor软件,请大家发email给大傻告诉大傻你的email。

相关文档
相关文档 最新文档