当前位置:首页 > 微机原理软件实验指导书
实验一 基本程序编程和程序调试
一、 实验目的
1、 掌握数码转换等基本程序设计的技巧和方法。 2、 熟悉DEBUG命令。
3、 学会和掌握用DEBUG调试程序的方法。
二、 实验设备
PC机一台,装有DOS基本系统
三、 实验内容及步骤
用DEBUG建立、汇编和运行调试程序的操作。DEBUG是DOS系统支持的用于汇编语言源程序调试的系统软件。它共有19条命令完成相应的功能,命令及其格式可参阅附录一。
(一) DEBUG操作练习
1)实验调试程序
程序的功能是从3500H内存单元开始建立0-15共16个数据。程序如下: 地址 (H) 机器码(H) 助记符 2000 BF0035 MOV DI, 3500 2003 B91000 MOV CX, 0010 2006 B80000 MOV AX, 0000 2009 9E SAHF 200A 8805 MOV BYTE[DI],AL 200C 47 INC DI 200D 40 INC AX 200E 27 DAA 200F E2F9 LOOP 200A 2011 F4 HLT
2)实验步骤: (1)输入与修改
① 启动DOS,在DOS提示符下输入D E B U G后回车,屏幕立即显示DEBUG提示符“—”,表明已进入DEBUG状态,可以执行DEBUG的各种命令。
② 用DEBUG中的汇编命令 “A 地址”将程序建立在内存单元中。 在提示符“—”下键入 :
1
“A 2000 ?” 此时显示器上将会显示程序的段地址CS和偏移地址IP,你就可以输入以上的程序了。即
显示 169C :2000 键入 MOV DI, 3500
169C: 2003 MOV CX, 0010
169C: 2011 HLT
: : :
③ 用反汇编命令 “U 地址”检查程序 在提示符“—”下,键入 “U 2000?”,将从2000内存单元开始的内容反汇编,屏幕上显示 169C:2000 BF0035 MOV DI, 3500 169C:2003 B91000 MOV CX, 0010 169C:2006 B8000 MOV AX, 0000 : : : : : : 169C:2011 F4 HLT
当发现程序有错时,可用汇编命令“A 地址”进行修改,如要修改200A单元中的指令, 则键入 “A 200A?” ,屏幕显示 169C:200A ,然后再键入MOV BYTE[DI], AL?,就把错误的程序改正了。
(2)显示和修改数据
①用修改内存单元命令 “E 地址” 在指定内存单元中存入一个数。
如要在3500为首址的单元中存入14H和25H两个数据,可在提示符“—”下,键入:“ 3500?” 显示 169C:3500 ××. 键入14,按空格键 ××. 25,按空格键
②用显示内存命令 “D 地址” 检查指定单元的内容 在提示符“—”下,键入 “D3500?”
显示 1489:3500 14 25 48 02 ???? 1489:3510 ** ** ** ** ???? : : : :
1489:3570 ** ** ** ** ????
若某单元内容有错则可用命令: “E 地址 ”进行修正。
③用显示和修改命令 “R ”或“R 寄存器名”显示寄存器或修改其内容 在提示符“—”下,键入 “R?”
显示 AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE????????
2
DS=169C ES=169C SS=169C CS=169C IP=2000????????? 要修改IP的内容时,键入命令 “R IP”后, 显示 IP 2000,在2000之后键入新内容。 (3)程序运行
程序的运行方式有单步运行、断点运行和连续运行几种方式。
①单步运行
输入DEBUG跟踪命令“T”或“T=地址”或“T=地址 指定次数”,可从指定地址处运行该单元中的一条指令,以后只要连续输入“T”命令就能连续执行一条一条指令。 如在提示符“—”下,键入 “T=2000 ?” 显示 :
AX=0000 BX=0000 CX=001D DX-0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=169C ES=169C SS=169C CS=169C IP=2000 NV??? 169C:2003 B91000 MOV CX, 0010
②断点运行
用运行命令 “G=地址 地址断点 地址断点?”执行指定地址的程序 在提示符“—”下,键入 “G=2000 2011 ?”
显示 169C:2011 F4 HLT 表示这段程序已经执行完毕。
③连续运行
输入DEBUG命令“G=地址”,执行指定地址的程序 (4)用显示内存命令检查运行结果
在提示符“—”下,键入命令 “D 地址?”,根据其中的内容判断程序运行是否正确。
如检查以上程序执行后的结果,在提示符“—”下,键入“ D 3500?”,可显示 169C:3500 00 01 02 03 04 ?? 15 169C:3510
(二)数码转换程序及其调试
1、 将ASCII码表示的十进制数转换为二进制数
1)程序设计的算法及其程序 十进制数据可表示为:
Dn????Dn?????nn?????D??????Di???i?i??n(?)DI代表十进制数1,2,3,?9,0 上式可转换为:
?D???ii??ni?((?(Dn????Dn??)???)?Dn??)??????D?)????D?(?) 由式(2)可归纳十进制数转换为二进制数的方法:从十进制的最高位Dn开始乘10加次位的操
3
作,将结果再乘10再加下一次位,如此重复,则可求出二进制数结果来。程序流程及参考程序如图1-1。这里我们规定:被转换的ASCII码十进制数存放在3500H——3504H单位中。而转换结果存放在3510H——3511H单元中。 2)实验步骤
(1)输入程序并检查无误。 (2)在3500H——3504H单元存入十进制数12的ASCII码,即E3500H↙,并输入3030303132H。 (3)G=2000↙,运行程序,并用CTRL+C来中断程序返回监控状态。 (4)用D3510↙来查看结果,应为:3510 0C 00 (5)反复试几组数,考查程序的正确性。
地址(H) 助记符 注释 2000 MOV SI,3500 ;源地址 2003 MOV DI,3510 ;结果地址 2006 MOV BX,000A ;乘数 10 2009 MOV CX,0004 ;计数 200C MOV AH,00 ;AH 清零 200E MOV AL,[SI] ;取被转换数
2010 SUB AL,30 ;ASCII码变十进制数 2012 IMUL BX ;高位(AX)*(BX)送AX 2014 ADD AL,[SI+01] ;取下一位
1017 SUB AL,30 ;ASCII码减30变十进制数 2019 INC SI ;源地址指针+1
201A LOOP 2012 ;CX-1,若CX不等于零则继续 201C MOV [DI],AX ;若CX不等于零则存结果 201E INT 3
图1-1
2 将十进制数的ASCII码转换为BCD码
1)程序流程和程序
设从键盘输入的五位十进制数的ASCII码已存放在3500H起始的内存单元内,把它转换成BCD码后,再按位分别存入350AH起始的内存单元内。若输入的不是十进制数的ASCII码,则对应存放结果的内容为“FF”。一字节ASCII码取其低四位即变为BCD码,程序流程图及考程序如图1-2所示。
2)实验步骤
(1) 输入程序并检查无误。
(2) 在3500H——3504H单元中存入五位十进制数的ASCII码,即 E3500↙,并输入31,32,33,34,35。 (3) G=2000↙,运行以上程序。 (4) D350A↙,显示结果为:
4
共分享92篇相关文档