微机原理软件实验指导书

发布时间 : 星期一 文章微机原理软件实验指导书更新完毕开始阅读

实验一 基本程序编程和程序调试

一、 实验目的

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

联系合同范文客服:xxxxx#qq.com(#替换为@)