当前位置:文档之家› 实验1 利用DEBUG调试汇编语言程序段

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

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

实验1 利用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

结果:08F1:0100 41 42 43 44 48 47 46 45

例2:-E 100:

08F1:0100 76 42 :42是操作员键入

此命令是将原100号内存内容76修改为42,用D命令可察看。

①E 地址;从指定地址开始,修改(或连续修改)存储单元内容。DEBUG首先显示指定单元内容,如要修改,可输入新数据;空格键显示下一个单元内容并可修改,减号键显示上一个单元内容并可修改;如不修改,可直接按空格键或减号键;回车键结束命令。

②E 地址数据表;从指定的地址开始用数据表给定的数据修改存储单元。

-E DS:100 F3 ‘AB’ 8D ; 把DS段中0100H开始的四个字节修改为F3 ‘AB’(A和B的ASCII码) 8D

也可以按下面的方式实现

3)R命令(显示当前寄存器的内容)

显示修改寄存器命令R

R;★显示所有寄存器和标志位状态;

★显示当前CS:IP指向的指令。

显示标志时使用的符号:

标志标志=1 标志=0

OF OV NV

DF DN UP

IF EI DI

SF NG PL

ZF ZR NZ

AF AC NA

PF PE PO

CF CY NC

4)T命令(设置陷井,单步执行)

①T;从当前IP开始执行一条指令。

②T 数值;从当前IP开始执行多条指令, 数值:执行的指令条数。

②T =地址;从给定的地址执行一条指令

③T =地址数值;从给定的地址执行多条指令, 数值:执行的指令条数.

-T ; 从当前IP开始执行一条指令

-T5 ; 从当前IP开始执行5条指令

-T=100 5 ; 从当前0100H开始执行5条指令

5)A命令(将指令直接汇编成机器码输入到内存中。)

汇编命令A

A [地址];从指定的地址开始输入符号指令;如省略地址,则接着上一个A命令的最后一个单元开始;若第一次使用A命令省略地址,则从当前CS:IP开始(通常是CS:100)。

注释:

①在DEBUG下编写简单程序即使用A命令。

②每条指令后要按回车。

③不输入指令按回车,或按Ctrl+C结束汇编。

④支持所有8086符号硬指令,伪指令只支持DB、DW,不支持各类符号名。

使用A命令在0100H开始输入指令mov ax, 10 inc cx mov bl, al

单步执行上述指令

6)G命令等的使用(执行A命中输入的汇编指令)

运行程序命令G

①G;从CS:IP指向的指令开始执行程序,直到程序结束或遇到INT 3。

②G=地址;从指定地址开始执行程序,直到程序结束或遇到INT 3。

③G 断点1[,断点2,…断点10];从CS:IP指向的指令开始执行程序,直到遇到断点。

④G=地址断点1[,断点2,…断点10]

-G ;从CS:IP指向的指令开始执行程序。

-G=100 ;从指定地址开始执行程序。

-G=100 105 110 120

使用A命令在0100H开始输入指令mov ax, 10 inc cx mov bl, al int 3

然后使用g命令执行

上面的例子设断点在100H处然后用T命令单步执行

3.用DEBUG,验证乘法、除法、加法、减法、带进位加、带借位减、堆栈操作指令、串操作指令的功能。

三.实验要求

1.仔细阅读有关DEBUG命令的内容,对有关命令,要求事先准备好使用的例子;四.实验环境

PC微机

DOS操作系统或Windows 操作系统

MASM.EXE,LINK.EXE,https://www.doczj.com/doc/809267603.html,或宏汇编集成环境

五.实验步骤

1.在DOS提示符下,进入DEBUG程序;

2.在DOS目录下启动DEBUG;

3.详细记录每一步所用的命令,以及查看结果的方法和具体结果。

六.实验内容

1.内存操作数及各种寻址方式使用

MOV AX,1234

MOV [1000],AX

MOV BX,1002

MOV BYTE PTR[BX],20

MOV DL,39

INC BX

MOV [BX],DL

DEC DL

MOV SI,3

MOV [BX+SI],DL

MOV [BX+SI+1],DL

MOV WORD PTR[BX+SI+2],2846

步骤:

(1) 用A命令键入上述程序,并用T命令逐条运行。

(2) 每运行一条有关内存操作数的指令,要用D命令检查并记录有关内存单元的内容并注明是什么寻址方式。

注意D命令显示结果中右边的ASCII字符及双字节数存放法。

2.利用INT 21 0AH号功能调用显示字符串。

(1)用A命令在100H处键入下列程序:

MOV AH,9

MOV DX,110

INT 21

INT 20

(2)用A命令在110H处键入下列字符串的ASCII码:

DB 'This is a sample!$'

(3)用N命令和W命令将此程序(包括数据区)存入文件名为AA.OM的磁盘文件中。(存入前BX:CX必须置为文件长度值)。

(4)用Q命令退出DEBUG。

(5)在DOS命令下打AA,运行此程序,即在屏幕上显示'This is a sample!'字符串,若不出现,用DEBUG检查程序有无错误。

3.求累加和程序:

程序:

MOV BX,1000

MOV CX,10

SUB AX,AX

LOP:ADD AL,[BX]

ADC AH,0

INC BX

J:LOOP LOP

INT3

步骤:

(1)用A命令将程序键入到100H开始的内存中,在键入时记下标号LOP和J的实际地址,在键入LOOP指令时LOP用实际地址值代替;

(2)用命令N AA 将此程序命名为文件AA(文件名可任取);

(3)用R命令将BX:CX改为程序长度值(即最后一条指令后面的地址减去开始地址;

(4)用命令W 100将此程序存到AA命名的磁盘文件中;

(5)用命令Q退出DEBUG;

(6)用命令DEBUG AA再次调入DEBUG和文件AA,可用U命令检查调入程序;

若调入DEBUG时忘了加AA文件名,可用N命令和L命令将文件调入;

(7)用E命令在内存地址1000H处键入16个数字;

(8)用命令G=100 J(J用实际地址代替),使程序运行并停在断点J上,检查AX,BX的值是否符合你的预计值;

(9)用T命令运行一步,观察程序方向(IP值)和CX值是否与你的估计一样,若不一样,检查程序是否有错;

(10)重复G、J与T,再检查AX是否正确;

(11)用G命令使程序运行到结束,检查AX值是否正确。

程序设计基础实验内容

实验指导 实验一 Visual C++开发环境使用 1.实验目的 (1)熟悉Visual C++集成开发环境。 (2)掌握C语言程序的书写格式和C语言程序的结构。 (3)掌握C语言上机步骤,了解C程序的运行方法。 (4)能够熟练地掌握C语言程序的调试方法和步骤 2. 实验内容 输入如下程序,实现两个数的乘积。 #include ; int main() { x=10,y=20 p=prodct(x,t) printf("The product is : ",p) int prodct(int a ,int b ) int c c=a*b return c } (1)在编辑状态下照原样键入上述程序。 (2)编译并运行上述程序,记下所给出的出错信息。 (3)再编译执行纠错后的程序。如还有错误,再编辑改正,直到不出现语法错误为止。3.分析与讨论 (1)记下在调试过程中所发现的错误、系统给出的出错信息和对策。分析讨论成功或失败的原因。 (2)总结C程序的结构和书写规则。 实验二数据类型、运算符和表达式 1.实验目的 (1)理解常用运行符的功能、优先级和结合性。 (2)熟练掌握算术表达式的求值规则。 (3)熟练使用赋值表达式。 (4)理解自加、自减运算符和逗号运算符 (5)掌握关系表达式和逻辑表达式的求值 2.实验内容 (1)整数相除 #include<> int main() {

int a=5,b=7,c=100,d,e,f; d=a/b*c; e=a*c/b; f=c/b*a; printf("d=%d , e=%d ,f=%d\n",d,e,f); return 0; } (2)自加、自减运算 #include<> int main() { int a=5,b=8; printf("a++=%d\n",a++); printf("a=%d\n",a); printf("++b=%d\n",++b); printf("b=%d\n",b); return 0; } (3)关系运算和逻辑运算 #include<> int main() { int a=5,b=8,c=8; printf("%d,%d,%d,%d\n",a==b&&a==c,a!=b&&a!=c,a>=b&&a>=c,a<=b&&a<=c); printf("%d,%d\n",a<=b||a>=c,a==b||b==c); printf("%d,%d,%d,%d\n",!(a==b),!(a>=b),!(a>=c),!(a<=b)); return 0; } (1)在编辑状态下输入上述程序。 (2)编译并运行上述程序。 3.分析与讨论 (1)整数相除有什么危险?应如何避免这种危险? (2)分析a++和++a的区别。 (3)条件表达式和逻辑表达式的意义是什么,它们取值如何? (4)如何比较两个浮点数相等?为什么? 实验三格式化输入输出函数的使用 1.实验目的 (1)掌握格式字符使用的方法。 (2)掌握printf()进行格式化输出的方法。 (3)掌握scanf()进行格式化输入的方法。 2.实验内容 (1)输入如下程序,观察运行结果 #include<>

汇编语言调试DEBUG命令详解

汇编语言调试DEBUG命令详解 1、显示命令D ① D [地址] ② D [范围] 如不指定范围,一次显示8行×16个字节。 -D ;默认段寄存器为DS,当前偏移地址 -D DS:100 / -D CS:200 -D 200:100 -D 200;200为偏移地址,默认段寄存器DS -D DS:100 110/ -D 100 L 10 2.修改命令E ① E 地址;从指定地址开始,修改(或连续修改)存储单元内容。DEBUG首先显示指定单元内容,如要修改,可输入新数据;空格键显示下一个单元内容并可修改,减号键显示上一个单元内容并可修改;如不修改,可直接按空格键或减号键;回车键结束命令。 ② E 地址数据表;从指定的地址开始用数据表给定的数据修改存储单元。 -E DS:100 F3 ‘AB’ 8D。 3.添充命令F F 范围数据表; 将数据表写入指定范围的存储单元;数据个数多,忽略多出的数据,个数少,则重复使用数据表。 -F DS:0 L5 01,02,03,04,05 -F DS:0 L5 01 02 03 04 05(空格分隔) -F DS:0 L5 FF ;5个字节重复使用FF 4.显示修改寄存器命令R R;★显示所有寄存器和标志位状态; ★显示当前CS:IP指向的指令。 显示标志时使用的符号: 标志标志=1 标志=0 OF OV NV DF DN UP IF EI DI SF NG PL ZF ZR NZ AF AC NA PF PE PO CF CY NC

5.汇编命令A A [地址];从指定的地址开始输入符号指令;如省略地址,则接着上一个A命令的最后一个单元开始;若第一次使用A命令省略地址,则从当前CS:IP 开始(通常是CS:100)。 注释:①在DEBUG下编写简单程序即使用A命令。 ②每条指令后要按回车。 ③不输入指令按回车,或按Ctrl+C结束汇编。 ④支持所有8086符号硬指令,伪指令只支持DB、DW,不支持各类符号名。 6.反汇编命令U ① U [地址];从指定地址开始反汇编32个字节的机器指令;省略地址时,则接着上一个U命令的最后一个单元开始;若第一次使用U命令省略地址,则从当前CS:IP开始(通常是CS:100)。 ② U 范围;对指定范围的单元进行反汇编。 -U -U100 -U100L10 7.运行程序命令G ① G;从CS:IP指向的指令开始执行程序,直到程序结束或遇到INT 3。 ② G=地址;从指定地址开始执行程序,直到程序结束或遇到INT 3。 ③ G 断点1[,断点2,…断点10];从CS:IP指向的指令开始执行程序,直到遇到断点。 ④G=地址断点1[,断点2,…断点10] -G ;从CS:IP指向的指令开始执行程序。 -G=100 ;从指定地址开始执行程序。 -G=100 105 110 120 8.跟踪命令(单步执行命令)T ① T;从当前IP开始执行一条指令。 ② T 数值;从当前IP开始执行多条指令。 ② T =地址; ③ T =地址数值; -T -T5 / -T=100 5 9.跟踪执行并跳过子程序命令P P [=地址] [数值];类似T命令,但跳过子程序和中断服务程序。 10.退出DEBUG命令Q Q;返回DOS环境。 -Q 11.命名命令N N 文件标示符;指定文件,以便用W命令在磁盘上生成该文件,或者用L命令从磁盘装入该文件。 -N MY_https://www.doczj.com/doc/809267603.html,

DEBUG调试程序的应用实验的报告.doc

电子电气工程学院学生实验报告 专业级 1 班 2 组姓名学号 课程名DEBUG 调试程序的应用指导教师成绩 一,实验预习 实验序号1实验题目DEBUG调试程序的应用预习日期 要求: 1.实验目的; 2,实验原理; 3,画出实验原理图; 4 实验设备; 5,预习内容(该实验完成的内容);6,记录表格设计 一实验目的 1、了解 DEBUG调试程序常用命令的基本格式、主要功能和使用方法。 2、熟悉进入或退出DEBUG调试程序运行界面的步骤。 3、掌握用DEBUG调试程序进行程序编辑、调试、运行、结果检查的基本方法。 4、进一步汇编语言上机环境及基本操作 二实验原理 1,启动 DEBUG程序,在 DEBUG环境下建立和汇编程序2,输入程序并汇编 A 2,_A 100 169C(CS):0100(ip) MOV DL, 33 ;DEBUG默认 16 进制数 169C: 0102 MOV AH,2 ;dos 的 2 号功能调用 169C: 0104 INT 2l ;功能调用 169C: 0106 INT(中断)20 ;中断 169C: 0108 ;回车结束程序的输入 3.运行程序_G=0100(全速运行)得到 3 4,用反汇编命令_U。然后分析该程序的指令:33 的 ascll 的值为 3, MOV 是将原操 作数送到DL 中( DL 为目标操作数)。 5,将机器指令程序送到起始地址为200H 的若干单元 6,执行机器指令程序_G=0200得到 3 7,执行 T 命令,实现单步运行。 8,执行 D 命令查看存储单元的原值。 E 是修改内存, R 显示修改内存命令。 四实验设备 微型计算机一台

实验一 顺序程序设计

实验一顺序程序设计 一、实验目的: 1、学习顺序程序的设计方法 2、熟悉在PC机上建立、汇编、连接、调试和运行汇编语言程序的过程 3、学习和掌握字符及字符串的输入输出方法 二、实验环境: 硬件环境IBM/PC 及其兼容机 软件环境操作系统DOS 编辑程序EDIT或其他编辑程序 汇编程序MASM.EXE 连接程序LINK.EXE 调试程序DEBUG.EXE 可视化编程环境emu8086 三、实验内容: 1、已知X和Y是数据段中的两个无符号字节单元,用程序完成表达式Z=(X2+Y2)/2的计算。 2、从键盘读入两个一位数(按键时保证按下的是数字键),显示它们的积。 四、实验要求: 1、画出实验程序流程图,独立完成源代码的编写。 开始 X中的内容 送AL 计算X*X X*X乘积 送BX Y中的内 容送AL 计算Y*Y 计算X*X+Y*Y 计算(X*X+Y*Y)/2结果送Z单元 结束 开始 读入第1个数字 并保存在BL中 读入第2个数字 将两个数字都转换成十进制数 两个数相乘, 积在AX中 积除以10取商送AL,余数在AH中 转换成相应的 ASCII码,并 保存在BX中 输出十位数 输出个位数 结束

2、在DOS环境下使用MASM完成对源代码的编译、连接,有必要的情况下使用debug.exe 进行调试。 3、WINDOS环境下使用EMU8086完成上第2步的工作。 4、与程序流程图比较,验证是否完成规定的功能,若未达要求,返回第1步。 5、提交完成的源代码,要求对关键语句进行注释。 ①源代码如下: DA TA SEGMENT X DB 5 Y DB 4 Z DW ? DA TA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX ;初始化数据段 MOV AL,X ;X中的内容送AL MUL AL ;计算X*X MOV BX,AX ;X*X乘积送BX MOV AL,Y ;Y中的内容送AL MUL AL ;计算Y*Y ADD AX,BX ;计算X2+Y2 SHR AX,1 ;计算(X2+Y2)/2 MOV Z,AX ;结果送Z单元 MOV AH,4CH INT 21H ;返回DOS CODE ENDS END START ;汇编结束 ②源代码如下: CODE SEGMENT ASSUME CS:CODE MAIN: MOV AH,1 INT 21H ;读入第1个数字 MOV BL,AL ;保存在BL中 MOV AH,2 MOV DL,13 INT 21H ;回车 MOV DL,10 INT 21H ;换行 MOV AH,1 INT 21H ;读入第2个数字 SUB AL,30H ;第2个数字转换成十进制数 SUB BL,30H ;第1个数字转换成十进制数 MUL BL ;两个数相乘,积在AX中

汇编语言实验_Debug命令的使用

实验一Debug命令的使用 一、知识点 1、DEBUG简介 DEBUG.EXE是DOS提供的用于调试可执行程序的一个工具软件。在汇编语言程序调试中很常用。 DEBUG的提示符是“-”,所有DEBUG调试命令军在此提示符下输入。 DEBUG命令都是一个字母,后跟一个或多个参数,也可使用默认参数。 DEBUG命令的使用注意问题: (1)字母不分大小写 (2)只使用十六进制数,但没有带后缀字母“H” (3)命令如果不符合DEBUG的规则,则将以“error”提示,并以“^”指示出错位置。 (4)每个命令只有按下回车键后才有效,可以用Ctrl+Break终止命令的执行。 2、Debug的调入和退出 以WIN2000环境为例,点击“开始/运行…”,在“运行”对话框中输入命令:cmd,然后点击“确定”,进入DOS命令行状态: C:\Documents and Settings\lfy> 然后输入命令: >Debug 进入Debug调试状态,出现Debug命令提示府“-”,在此提示符下可运行所需要的Debug 命令了。 退出Debug的命令:Q 3、Debug常用命令 (1)汇编命令A,格式为: - A [地址] 功能:从指定地址开始允许输入汇编指令,并将该指令汇编成机器指令代码从指定地址开始存放。若不指定地址,则系统从默认的地址开始存放。按回车键退出汇编状态 应用:用于调试一条指令或几条指令组成的一个程序段。 (2)显示和修改寄存器命令R,格式为: - R [寄存器名] 功能:若指定寄存器,则显示指定的寄存器的内容,并可进行修改;若不要修改,则按Enter 健。若未指定寄存器,则默认为显示所有寄存器的内容。 应用:常用于通过寄存器的值查看指令的执行结果。 (3)内存单元内容的命令E,格式为: - E 地址[内容表] 功能:若指定内容表,则用内容表中的内容代替指定地址开始的存储单元的值;否则,从指定地址开始逐个单元显示其内容,并等待用户修改,按空格键则继续显示下一单元的值,按回车键结束。例如: -E 100 184E: 0100 89,78

有图示的用DEBUG调试程序过程示例

用DEBUG调试程序示例 例如:编程实现两个字类型的数相加,把和存在存储单元中,并且用debug查看程序的运行结果,检查程序运行结果的正确性。 参考源程序如下: DATA SEGMENT NUM1 DW 1234H NUM2 DW 5678H SUM DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AX,NUM1 ADD AX,NUM2 MOV SUM,AX MOV AH,4CH INT 21H CODE ENDS END START 假设把源程序命名为jiafa.asm,输入源程序后,完成汇编、连接的过程,则生成了可执行文件jiafa.exe。运行此可执行文件时在屏幕上无显示结果。在debug下调试程序的步骤示例如下: 一、进入debug,同时把被调试程序调入内存。 回车后即进入了debug程序,结果如下图所示: 注意:被调试的是可执行文件,而且文件必须写全名,不能只写主文件名。 二、用u命令反汇编(输入u后回车),以便查找需要设置断点的地址。

三、设置断点运行 断点可以设置在程序中的任意一条指令的首地址处,但为了能够查看到程序的运行结果,一般把断点设置在主程序运行完并且程序退出之前,例如程序的最后两条指令是 MOV AH, 4CH INT 21H 则把断点设置在MOV AH, 4CH处,(如果程序较长,一次反汇编没有找到上述指令,再次输入u命令后回车,直到显示上述指令为止,),对于本例,显示如下图所示的结果。 如上图示例中的指令mov ah,4ch的偏移地址是0000F,指令int 21h(debug下默认为16进制,不显示h)的偏移地址是0011,则用G命令设置断点运行时输入g0F(g是debug下的程序运行命令,后面的数字0F是刚才选定的断点地址)回车后结果如下图: 为了能够查看你的程序在内存单元中存放的数据,必须设置断点运行不能只用G命令,并且断点必须是你程序中的某条指令,一般设置在MOV AH, 4CH处。 四、查看内存单元中的数据 查看内存单元的内容用D命令,格式之一如下: D段地址:偏移地址

实验二选择结构程序设计实验报告

实验二选择结构程序设计 一、实验目的和要求 1.掌握关系表达式和逻辑表达式的使用。 2.熟悉选择结构程序设计。 3.熟练使用if语句进行程序设计。 4.使用switch语句实现多分支选择结构 二、实验设备 PC 机Visual C++6.0 三、实验内容 (一)实验准备 1.从程序流程的角度来看,程序可以分为三种基本结构,即顺序结构、分支(选择)结构、循环 结构。 2.lf-else 语句: 一般形式为:if (表达式) 语句1 ; else 语句2 ; 该语句用于实现分支结构,根据表达式的值选择语句1或语句2中的一条执行。首先求解表达式,如果表达式的值为“真”,则执行语句1;如果表达式的值为“假”,则执行语句 2. 2.switch 语句 switch语句可以处理多分支选择问题,根据其中break语句的使用方法,一般分为三种情况。 (二)实验项目 1.计算a+|b| #in clude int main (void) { int a,b, z; prin tf("Please en ter a,b:\n"); sca nf("%d,%d",&a,&b); if (b>=0)t b=b; prin tf("%d+%d=%d\n",a,b,z); return 0 ; } 2判断一个整数是否可以被3和5整除

#in clude int main (void) { int a ; printf("Please enter a:\n"); scanf("%d",&a); if (a%3==0){ printf("a 可以被 3 整除:\n"); } else{ if (a%5==0){ printf("a 可以被 5 整除:\n"); } else { printf("a 不可以被5整除,也不可以被3整除:\n"); } } 3.从键盘输入一个字符型数据,若输入一个数字字符( '0'-'9' ),则将其转换成相应的整数显示出来;若输入其它字符,则显示出错信息。 #include int main(void) { int a ; printf("please enter a char:\n"); scanf("%d",&a); if((0<=a)&&(a<=9)) { printf("This char is %d:\n",a); } else { printf(" 这个字符不是个整数:\n"); } return 0 ; } 4.编写一个程序,其功能为:从键盘输入三个数x、y、z ,判断x+y=z 是否成立,若成立输出 “x+y=z” 的信息,否则输出“ x+y!=z ”的信息。 #include int main(void) { int x,y,z; printf (" 请输入x,y,z:\n"); scanf ("%d,%d,%d",&x,&y,&z); if (x+y==z) { printf ("x+y=z\n"); } else { printf ("x+y!=z\n"); } return 0; } 5.编写一个程序,其功能为:输入三个整数,输出最大数和最小数#include int main(void) { int a,b,c,x,y; printf (" 请输入三个数字:\n"); scanf ("%d,%d,%d",&a,&b,&c);

利用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

实验一简单程序设计实验

实验一:简单程序设计实验 (1)编写一个 32 位无符号数除法的程序,要求将存放在 NUM1 中的 32 位无符号数与存放 在 NUM2 中的 16 位无符号数相除,结果存放在 NUM3 和 NUM4 中。 程序流程图略。 参考源程序: DATA SEGMENT NUM1 DD 2A8B7654H NUM2 DW 5ABCH NUM3 DW ? NUM4 DW ? DATA ENDS CODE SEGMENT ASSUME DS:DATA, CS:CODE START: MOV AX,DATA ;数据段寄存器初始化 MOV DS,AX MOV AX, WORD PTR NUM1 MOV DX, WORD PTR NUM1+2 DIV NUM2 MOV NUM3,AX MOV NUM4,DX MOV AH,4CH ;正常返回DOS 系统 INT 21H CODE ENDS END START (2)编写一个拆字程序。要求将存放在 ARY 单元的 2 位十六进制数 X 1X 2 拆为 X 1 和 X 2 两 部分,并以 0X 1 和 0X 2 的形式分别存入 ARY+1 和 ARY+2 单元中。 程序流程图略。 参考源程序: DATA SEGMENT ARY DB 2AH,?,? DATA ENDS CODE SEGMENT ASSUME DS:DATA, CS:CODE START: MOV AX,DATA MOV DS,AX MOV SI,OFFSET ARY ;取ARY 的偏移地址 MOV AL,[SI] ;取16进制数至AL

MOV BL,AL AND AL,0F0H ;取16进制数的高四位,即X1 SHR AL,4 MOV [SI+1],AL ;存0X1 MOV AL,BL AND AL,0FH ;取16进制数的低四位,即X2 MOV [SI+2],AL ;存0X2 MOV AH,4CH INT 21H CODE ENDS END START

汇编语言调试及运行

汇编语言程序设计实验 实验一 汇编语言的调试和运行 班级: 姓名: 学号: 日期:

实验一汇编语言的调试和运行 一、实验目的 1、熟悉DEBUG程序和命令,并用它运行基本指令和察看运行结果。 ○1怎样调用Debug ②如何显示和修改内存单元 ③如何显示和修改CPU的寄存器 ④各标志位的状态是如何表示的,怎样修改标志寄存器 ⑤怎样汇编与反汇编 ⑥怎样执行程序 ⑦怎样跟踪程序 ⑧怎样命名和读写文件 ⑨怎样退出Debug 2、熟悉汇编中通用传送指令。 3、理解指令不同的寻址方式,注意规定或限制使用的寄存器如:双操作数 指令中,源操作数和目的操作数的地址不能同时为存储器地址,段跨越 前缀不能使用CS,操作对象是地址还是地址中的内容,指令隐含使用 的寄存器。 二、实验内容 1、键入 DEBUG 进入 DEBUG 控制状态,显示提示符 '- '

2、用命令 F100 10F 'A' 将'A'的ASCII码填入内存。

3、用命令 D100 10F 观察内存中的十六进制码及屏幕右边的ASCII字符。 4、用命令 F110 11F 41 重复上二项实验,观察结果并比较。 5、用命令 E100 30 31 32 …… 3F将30H-3FH写入地址为100开始的内存单元中,再用D命令观察结果,看键入的十六进制数是什么字符的ASCII 码?

6、用DEBUG调试和运行下列程序,记录所用的DEBUG命令和运行结果。 MOV WORD PTR [1100],3445 MOV WORD PTR [1102],5678 MOV WORD PTR [1106],6732 MOV AX,[1100] SUB AX,[1102] ADD AX,[1106] MOV [1104],AX HLT 其中粗斜体的数字可以修改。

实验二、基本程序结构设计

实验报告 课程名称微机接口与汇编语言 实验项目实验二 基本程序结构设计 实验仪器 TPC-USB通用微机接口实验系统 系别计算机学院 专业 班级/学号 学生姓名 实验日期 成绩 指导教师胡信裕

一、实验目的 1. 学习汇编程序设计的基本方法,掌握用汇编语言设计、编写、调试和运行程序的方法; 2. 进一步熟悉TPC-USB通用微机接口实验系统的使用操作; 3. 熟悉、掌握顺序结构、分支结构、循环结构程序设计和调试。二.实验设备 1.PC微机系统一套 2.TPC-USB通用微机接口实验系统一套 三.实验要求 1.实验前要作好充分准备,包括程序框图、源程序清单、调试步骤、测试方法、对运行结果的分析等。 2.熟悉与实验有关的系统软件(如编辑程序、汇编程序、连接程序和调试程序等)使用方法。在程序调试过程中,有意识地了解并掌握TPC-USB通用微机接口实验系统的软硬件环境及使用,掌握程序的调试及运行的方法技巧。 3.实验前仔细阅读理解教材相关章节的相关内容,实验时必须携带教材及实验讲义。 四.实验内容及步骤 (一) 程序设计 1.按图1虚线连接电路,将计数器0设置为方式0,计数器初值为N(N≤0FH),用手动逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用逻辑笔观察OUT0电平变化(当输入N+1个脉冲后OUT0变高电平)。 图1 实验连接参考电路图之一

2. 按图2连接电路,将计数器0、计数器1分别设置为方式3,计数初值均设为1000,用逻辑笔观察OUT1输出电平的变化(OUT1输出频率应为1Hz)。 图2 实验连接参考电路图之二 3. 参考流程图 8253控制寄存器地址:283H、计数器0地址:280H;计数器1:281H;CLK0连接时钟1MHz。 图3 实验电路之一参考流程图图4 实验电路之二参考流程图 4.实验程序设计如下: 8253_1.asm io8253a equ 283h io8253b equ 280h code segment assume cs:code

汇编语言编程步骤调试方法

汇编语言的编程步骤与调试方法 一、汇编源程序的建立 1. 使用工具 (1)EDIT,记事本等文本编辑软件,编辑源程序,保存为.asm文 件; (2)ASM,MASM汇编程序,对源程序进行汇编,生成.obj文件- 目标文件,以及调试用.LST-列表文件和.CRF-交叉引用表; (3)Link连接程序,对使用的目标文件和库文件进行连接,生 成.exe文件,同时调试用.map-地址映像文件; 如果源程序无语法错误,上述三步将生成可运行的.exe文件, 如果运行结果无误,则完成对汇编程序的编程,如果运行后结果存 在错误,需要进行调试。 (4)Debug调试程序,对.exe文件进行调试,修改,直到程序正 确。 图3 目标程序生成步骤图2. 编程过程 (1)用文本编辑软件,编写扩展名为.asm的源文程序文件。 (2)用汇编程序对编好的源文件进行汇编。 命令行:masm [*.asm] ↙ 如果源文件中存在语法错误,则汇编程序将指出错误类型及位置,可根据这些信息重新编辑源文件,直至无语法错误,汇编后,将生成指定名称的目标文件.obj。 使用MASM50汇编程序进行汇编,输入命令行masm或者masm *.asm后,根据提示,输入文件名,在汇编没有错误的情况下,如屏幕所示:汇编程序可生成三个文件,*.obj,*.lst和*.crf。 *.obj-目标文件,用于连接生成可执行文件; *.lst-列表文件(可选),汇编语言汇编的机器语言与汇编语言对照表,可用于

调试; *.crf-交叉引用文件(可选),给出了用户定义的所有符号和对每个符号定义、引用的行号。 (3)目标文件的连接 命令行:link [*.obj] [*.obj] [*.lib] ↙ 连接程序,将多个目标程序及库文件,连接生成可执行的*.exe文件,同时可选择生成*.map文件。 *.map-地址映像文件,给出内存地址分配的有关信息。 下图所示屏幕,为Link连接两个目标文件,没有错误的情况下,生成*.exe 文件。 (4)执行程序 执行*.exe文件,观察程序运行结果,如果存在错误,需要进行调试。调试工具DEBUG是针对汇编语言程序设计的一种调试工具,熟练使用DEBUG有助于汇编语言程序员对于逻辑错误的调试。 二、汇编程序的调试

汇编程序调试实验报告

微机原理与接口技术 课 程 作 业 班级:

目录 一、实验目的: (3) 二、实验环境 (3) 三、实验过程 (3) (一)基础知识储备 (3) (二)汇编语言程序设计 (3) (三)汇编程序调试 (3) 四、调试实例 (4) (一)实例一 (4) (二)实例二 (5) (三)实例三 (6) (四)实例四 (7) 五、实验总结 (8) (一)实验收获 (8) (二)实验感悟 (9)

一、实验目的: 汇编语言是一种用助记符表示的程序设计语言。用汇编语言编写的源程序生成的目标代码短,占内存少,执行速度快,适合于系统软件、实时控制软件、I/O 接口驱动等程序设计。通过本次实验,熟练掌握汇编程序的调试,深入了解MASM 汇编语言及其程序设计方法。 二、实验环境 EDIT编辑器、MASM汇编程序、LINK连接程序、TD调试程序 三、实验过程 (一)基础知识储备 1.了解微处理器80486的内部结构、寄存器组、工作模式等基本知识。 2.熟练掌握微处理器指令系统的相关知识,重点掌握80486的寻址方式和常用的指令格式及功能。 3.了解MASM汇编语言及其程序设计方法。掌握MASM汇编语言的语句格式、语法规则、常用伪指令及DOS功能的调用等。了解顺序结构、分支结构、循环结构和子程序的设计方法。 (二)汇编语言程序设计 1.分析问题,明确要解决的问题和要求。 2.确定解决问题的思路和方法。 3.将解决问题的方案编制成程序流程图。 4.根据流程图,逐条编写程序。 5.上机调试,验证程序是否正确。 (三)汇编程序调试 MASM汇编程序的主要功能是:把源文件转换成用二进制代码表示的目标文件,并生成列表文件;在转换过程中汇编程序将对源程序进行扫描,检查源程序是否有语法错误并指出源程序的语法错误。 汇编语言源程序的调试过程需要经过编辑、汇编、连接、运行、调试等几个步骤:

03实验三 顺序结构程序设计_答案

湖北工业大学实验报告 课程名称:C语言程序设计实验内容实验三顺序结构程序设计 学院:工程技术学院专业班级: 姓名:学号:教师:成绩: 一、实验目的 1、掌握赋值语句、表达式语句、函数调用语句、复合语句、空语句的使用方法。 2、掌握输入、输出函数的格式及格式符的使用。掌握文件包含预处理命令的使用方法。 3、掌握数据的输入、存储、输出之间的关系。 4、掌握顺序程序设计的逻辑结构,掌握数据结构的功能。 二、预习作业 1、程序填空题:试在括号中填入正确的答案,并上机验证程序的正确性。(1) 输入大写字符A,则输出为( )。(文件名:ex3_1.c) (#include ) main( ) { ( char ch,chr; ) chr=(ch= getchar( )) main( ) { ( long int) a =80000 , b = 60000, c, d; ( c) = ( a - b ,a + b ); ( d) = (a + b,a - b); printf(“%ld ,%ld\n”, c, d); }

2、程序改错并上机调试运行 (1)更改下列程序中的位运算符和逻辑运算符,能使变量d、e输出的结果为零。 (文件名:ex3_3.c) #include main( ) { int a = 8, b = 2,c = 3,d,e; /********** found **********/ d = (a % c & ^ a % c); e = a / c - b || && c + + ; printf (“%d, %d\n”, d, e); } (2) 查找改程序中的错误,并修改正确。(文件名:ex3_4.c) #include main( ) { int a = 4, b = 6, c= 3; /********** found **********/ a = a + b = b + c ; b = a < b ?a :b < c ?b :c printf(“%d,%d\n”, a, b); } 3、读程序写结果并上机验证其正确性 (1) 变量 a,b,c,d如下,将变量a以各种格式输出并输出表达式c+a,d – 32的值。(文件名:ex3_5.c) #include main( ) 结果为:(-1,4294967295,37777777777,ffffffff ) { int a = - 1 , b = 2 ; C,B char c = …D?,d = …b?; b = b + c;//??? printf (“%d, %u,%o,%x \n ”,a,a,a,a ); printf (“%c,%c \n ”,c + a, d - 32); } (2) 运行程序后输入”a空格b空格c回车”后,输出结果是(a ,b )。(文件

汇编语言上机 实验一 DEBUG常用命令及8086指令使用

实验一DEBUG常用命令及8086指令使用 实验目的: 通过实验掌握下列知识: 1、8086指令: M OV,ADD,SUB,XCHG等 2、DEBUG命令: A,D,E,F,H,R,T,U。 3、ASCII码及用16进制数表示二进制码的方法。 内容及步骤: 一、DEBUG 命令使用: 1、打 DEBUG 进入 DEBUG 控制,显示提示符 '_ '。 2、用命令 F100 10F 'A' 将'A'的ASCII码填入内存。 3、用命令 D100 10F 观察内存中的16进制码及屏幕右边的ASCII字符。 4、用命令F110 11F 41 重复上二项实验,观察结果并比较。 5、用命令 E100 30 31 32 …… 3F将30H-3FH写入地址为100开始的内存 单元中,再用D命令观察结果,看键入的16进制数是什么字符的ASCII码? 6、用H命令检查下列各组16进制数加减结果并和你的手算结果比较: (1)34H,22H (2)56H,78H (3)A5,79H (4)1284H,5678H (5)A758,347FH 7、用R 命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF 和AF的内容。 8、用R命令将AX,BX内容改写为1050H及23A8H。

二、8086常用指令练习 1、传送指令 1)用A命令在内存100H处键入下列内容: MOV AX,1234 MOV BX,5678 XCHG A X,BX MOV AH,35

MOV AL,48 MOV DX,75AB XCHG A X,DX 2)用U命令检查键入的程序并记录,特别注意左边的机器码。 3)用T命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况。并注意标志位有无变化。 2、加减法指令:

实验一调试程序DEBUG的使用实验报告

南昌理工学院实验报告 二O一二年月日 课程名称:微机原理与接口技术实验名称:调试程序DEBUG的使用班级:姓名:同组人: 指导教师评定:签名: 【一、实验名称】 调试程序DEBUG的使用 【二、实验目的】 1.掌握汇编程序的编辑,编译,连接和执行的全过程; 2.学习和掌握用DEBUG 调试程序的方法。 【三、实验内容和原理】 1.用编辑软件,输入以下汇编语言源程序: DAT SEGMENT A D B 20 ;(自定) B DB 15 ;(自定) Y DB 3 DUP(0) Z DB 0,0 DAT ENDS STA SEGMENT STACK DW 50 DUP(?) STA ENDS COD SEGMENT ASSUME CS:COD,DS:DAT STAR PROC FAR PUSH DS XOR AX,AX PUSH AX MOV AX,DAT MOV DS,AX MOV AX,STA MOV SS,AX MOV AL,A MOV Z,AL MOV Z+1,AL CALL SUB1 MOV AL,B MOV Z,AL MOV Z+1,AL CALL SUB1 MOV AL,A MOV Z,AL MOV AL,B MOV Z+1,AL CALL SUB1 ADD WORD PTR Y,AX ADC BYTE PTR[Y+2],0 RET STAR ENDP SUB1 PROC MOV AL,Z MOV AH,Z+1 MUL AH ADD WORD PTR Y,AX ADC BYTE PTR[Y+2],0 RET SUB1 ENDP COD ENDS END STAR

实验报告 子程序设计实验

实验5 子程序实验 一.实验目的 1.掌握主程序与子程序之间的调用关系及调用方法; 2.掌握子程序调用过程中近程调用与远程调用的区别; 3.掌握通过堆栈转送参数的方法。 4. 掌握多模块程序设计方法 二.实验内容 1.将BUF开始的10个单元中的二进制数转换成两位十六进制数的ASCII码,在屏幕上显示出来。要求码型转换通过子程序HEXAC实现,在转换过程中,通过子程序DISP实现显示。 DATAS SEGMENT BUF DB 00000111B,00100001B,00100010B,00000011B,00000101B,10000010B,10010011B,00100100B, 11100010B,01010010B CAN DB $-BUF ;定义常量CAN DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS MAIN PROC FAR ;主程序块 START: MOV AX,DATAS MOV DS,AX MOV CL,10 LEA SI,BUF LOOP1: ;调用子程序语句 call HEXAC call DISP DEC CAN JNZ LOOP1 EXIT: MOV AH,4CH INT 21H MAIN ENDP HEXAC PROC NEAR ;二进制转换成十六进制子程序 MOV BL,[SI] INC SI RET HEXAC ENDP

DISP PROC NEAR ;显示子程序 MOV CL,4 MOV CH,2 MOVE: ;移位语句 ROL BL,CL MOV DL,BL AND DL,0FH ADD DL,30H CMP DL,'9' JBE PRINT ADD DL,07H PRINT: MOV AH,02H ;显示语句 INT 21H DEC CH JNZ MOVE MOV DL,' ' MOV AH,02H INT 21H RET DISP ENDP CODES ENDS END START 2.编写一个主程序,从键盘接收若干个字符,然后用远调用的方法,调用子程序统计字符串中字符’b’的个数.子程序的参数是字符串的首地址TABLE,字符串长度N及字符”b”.子程序返回字符"b”的个数.参数传送采用堆栈实现.主程序在子程序返回后,显示字符”b”及其个数(设为一位十六进制数)。 DATA SEGMENT STR1 DB 0ah,0dh,'PLEASE INPUT YOUR STRING:$' STR2 DB 0ah,0dh,'THE NUMBER OF b is:$' TABLE DB 50, ? ,50 DUP(?),'$' DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX,DATA MOV DS,AX LEA DX,STR1 MOV AH,9 INT 21H LEA DX,TABLE

汇编语言debug的使用方法

进入Windows操作系统,输入cmd回车 输入debug 回车,这样就进入了debug模式 1: 输入-r 查看或者修改寄存器,可以修改CS IP来指向要执行汇编的内存地址-r 回车查看 -r ax 回车修改ax的值 -r cs 回车修改cs的值 -r ip 回车修改ip的值 2: 输入-D 查看内存中的信息 -d 1000:0000 查看段地址为1000H ,偏移地址为0开始的内存信息 -d 1000:0000 00ff 就是查看1000:0000 到1000:00ff的内存信息 查看主板生产日期 -d fff0:0000 00ff 可以看到右下角的08/14/08 格式月/日/年,08年8月14号生产的主板 这里的生产日期是只读的,无法修改,通过-e修改表面上看是改过了,下次打开后又恢复之前数据了 如果直接用-d 0100 则会显示DS:0100处的内存信息,也就是显示段地址为ds,便宜地址为0100的内存信息。 -d ds:0100 也可以这么使用 3:输入-E修改内存中位置的信息 -e 1000:0000 1a 00 09 10 a1 61 这样就可以修改对应段地址为1000H ,偏移地址为0开始的内存信息 -e 1000:0000 'a+b' 这样就会在内存1000:0000处写入61H(a的ASICC码) 1000:0001处+ 1000:0002 62 4:输入-u查看指定位置对应的汇编指令 -u 1000:0000 查看该处的汇编指令 -u cs:0000 查看段地址为cs处的汇编指令 5:输入-t 执行指令 -t 执行CS:IP所指向的第一个指令,如果要执行自己写入内存的指令,应该先通过-r来改变CS IP的值,然后再执行-t 执行

VB程序调试技巧

一,如果遇到了一些逻辑性很强的问题比如有循环什么的我的方法是在关键地方加入 变量 这样可以比较好地找到问题 二,msgbox 三,监视窗口,如下面的例子 For i=1 to 10000 A=sqr(i) next i 你想再监视当i=799时A的值,就可以添加监视,方法:点调试,添加监视,选择“当监视值为真时中断”,上面表达式框中写上i=799, 这样你按F5,运行程序,程序会在i=799时中断。其他选项你可以自己去琢磨一下。 一个程序如何顺利的“脱产”,调试的过程是非常重要的。学过、钻研过程序设计的人都有同样的感受,很多情况下,调试程序的过程会比程序编写的过程更为困难。任何一个天才都不敢说,他编的程序是100%正确的。几乎每一个稍微复杂一点的程序都必须经过反复的调试、修改,最终才完成。所以说,程序的调试是编程中的一项重要技术。 程序中的典型错误类型 A类:语法错误。 B类:编译错误。

C类:属性设置错误。 D类:逻辑错误。 调试方法 方法一:利用“MSDN帮助菜单” “MSDN帮助菜单”是一个很好的自学工具,对于出现调试对话框的菜单来说,可以按下“帮助”按钮查看错误原因。 对于一些不是很清楚的函数格式、保留字的作用,也可以借助“帮助菜单”。 方法二:逐过程检查 主要检查代码是否写对,位置有没有错误,关键是要确定一段代码是在哪个事件控制下的。 不妨先在脑海中把整个程序过一边,想一想究竟会有哪些事件发生(有些事件是人机互动的,例如:鼠标点击;而有些是机器自己执行的,这时要想到计时器的作用);然后想一想每一件事发生后有什么效果。我们代码所编写的一般就是事件发生后的这个效果,那么以此事件来决定代码所写的位置。

相关主题
文本预览
相关文档 最新文档