微机实验.docx
- 文档编号:10884478
- 上传时间:2023-02-23
- 格式:DOCX
- 页数:54
- 大小:692.08KB
微机实验.docx
《微机实验.docx》由会员分享,可在线阅读,更多相关《微机实验.docx(54页珍藏版)》请在冰豆网上搜索。
微机实验
实验一基本程序编程和程序调试
一、实验目的
1、掌握数码转换等基本程序设计的技巧和方法。
2、熟悉DEBUG命令。
3、学会和掌握用DEBUG调试程序的方法。
二、实验设备
PC机一台,装有DOS基本系统
三、实验内容及步骤
用DEBUG建立、汇编和运行调试程序的操作。
DEBUG是DOS系统支持的用于汇编语言源程序调试的系统软件。
它共有19条命令完成相应的功能,命令及其格式可参阅附录一。
(一)DEBUG操作练习
1)实验调试程序
程序的功能是从3500H内存单元开始建立0-15共16个数据。
程序如下:
地址(H)机器码(H)助记符
2000BF0035MOVDI,3500
2003B91000MOVCX,0010
2006B80000MOVAX,0000
20099ESAHF
200A8805MOVBYTE[DI],AL
200C47INCDI
200D40INCAX
200E27DAA
200FE2F9LOOP200A
2011F4HLT
2)实验步骤:
(1)输入与修改
①启动DOS,在DOS提示符下输入DEBUG后回车,屏幕立即显示DEBUG提示符“—”,表明已进入DEBUG状态,可以执行DEBUG的各种命令。
②用DEBUG中的汇编命令“A地址”将程序建立在内存单元中。
在提示符“—”下键入:
“A2000”此时显示器上将会显示程序的段地址CS和偏移地址IP,你就可以输入以上的程序了。
即
显示169C:
2000键入MOVDI,3500
169C:
2003MOVCX,0010
169C:
2011HLT
:
:
:
③用反汇编命令“U地址”检查程序
在提示符“—”下,键入“U2000”,将从2000内存单元开始的内容反汇编,屏幕上显示
169C:
2000BF0035MOVDI,3500
169C:
2003B91000MOVCX,0010
169C:
2006B8000MOVAX,0000
:
:
:
:
:
:
169C:
2011F4HLT
当发现程序有错时,可用汇编命令“A地址”进行修改,如要修改200A单元中的指令,则键入
“A200A”,屏幕显示169C:
200A,然后再键入MOVBYTE[DI],AL,就把错误的程序改正了。
(2)显示和修改数据
①用修改内存单元命令“E地址”在指定内存单元中存入一个数。
如要在3500为首址的单元中存入14H和25H两个数据,可在提示符“—”下,键入:
“3500”
显示169C:
3500××.键入14,按空格键
××.25,按空格键
②用显示内存命令“D地址”检查指定单元的内容
在提示符“—”下,键入“D3500”
显示1489:
350014254802…………
1489:
3510********…………
:
:
:
:
1489:
3570********…………
若某单元内容有错则可用命令:
“E地址”进行修正。
③用显示和修改命令“R”或“R寄存器名”显示寄存器或修改其内容
在提示符“—”下,键入“R”
显示AX=0000BX=0000CX=0000DX=0000SP=FFEE……………………
DS=169CES=169CSS=169CCS=169CIP=2000………………………
要修改IP的内容时,键入命令“RIP”后,显示IP2000,在2000之后键入新内容。
(3)程序运行
程序的运行方式有单步运行、断点运行和连续运行几种方式。
①单步运行
输入DEBUG跟踪命令“T”或“T=地址”或“T=地址指定次数”,可从指定地址处运行该单元中的一条指令,以后只要连续输入“T”命令就能连续执行一条一条指令。
如在提示符“—”下,键入“T=2000”
显示:
AX=0000BX=0000CX=001DDX-0000SP=FFEEBP=0000SI=0000DI=0000
DS=169CES=169CSS=169CCS=169CIP=2000NV………
169C:
2003B91000MOVCX,0010
②断点运行
用运行命令“G=地址地址断点地址断点…”执行指定地址的程序
在提示符“—”下,键入“G=20002011”
显示169C:
2011F4HLT表示这段程序已经执行完毕。
③连续运行
输入DEBUG命令“G=地址”,执行指定地址的程序
(4)用显示内存命令检查运行结果
在提示符“—”下,键入命令“D地址”,根据其中的内容判断程序运行是否正确。
如检查以上程序执行后的结果,在提示符“—”下,键入“D3500”,可显示
169C:
35000001020304……15
169C:
3510
(二)数码转换程序及其调试
1、将ASCII码表示的十进制数转换为二进制数
1)程序设计的算法及其程序
十进制数据可表示为:
DI代表十进制数1,2,3,…9,0
上式可转换为:
由式
(2)可归纳十进制数转换为二进制数的方法:
从十进制的最高位Dn开始乘10加次位的操作,将结果再乘10再加下一次位,如此重复,则可求出二进制数结果来。
程序流程及参考程序如图1-1。
这里我们规定:
被转换的ASCII码十进制数存放在3500H——3504H单位中。
而转换结果存放在3510H——3511H单元中。
2)实验步骤
(1)输入程序并检查无误。
(2)在3500H——3504H单元存入十进制数12的ASCII码,即E3500H↙,并输入3030303132H。
(3)G=2000↙,运行程序,并用CTRL+C来中断程序返回监控状态。
(4)用D3510↙来查看结果,应为:
35100C00
(5)反复试几组数,考查程序的正确性。
地址(H)助记符注释
2000MOVSI,3500;源地址
2003MOVDI,3510;结果地址
2006MOVBX,000A;乘数10
2009MOVCX,0004;计数
200CMOVAH,00;AH清零
200EMOVAL,[SI];取被转换数
2010SUBAL,30;ASCII码变十进制数
2012IMULBX;高位(AX)*(BX)送AX
2014ADDAL,[SI+01];取下一位
1017SUBAL,30;ASCII码减30变十进制数
2019INCSI;源地址指针+1
201ALOOP2012;CX-1,若CX不等于零则继续
201CMOV[DI],AX;若CX等于零则存结果
201EINT3
图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↙,显示结果为:
0000:
350A0102030405CC…
(5)反复试几组数,考查程序的正确性。
地址(H)助记符注释
2000MOVCX,0005;循环计数器赋初值
2003MOVDI,3500;ASCII码首址
2006MOVBL,FF;错误标志送BL
2008MOVAL,[DI];送ASCII码至AL
200ACMPAL,3A;比较AL与3AH
200CJNB2014;不低于3A则转2014
200ESUBAL,30;低于3A则取ASCII码的低四位
2010JB2014;低于30则转2014
2012MOVBL,AL;否则AL内容送BL,取代FF
2014MOVAL,BL;结果或错误标志送AL
2016MOV[DI+0A],AL
2019INCDI
201ALOOP2006
201CINT3
图1-2
3将十六位二进制数转换为ASCII码表示的十进制数
1)程序及其流程
十六位二进制数的值域为0——65535,最大可转换为五位十进制数。
算法:
五位十进制数可表示为:
Di:
表示十进制数0——9。
因此,将十六位二进制数转换为五位ASCII码表示表示的十进制数,就是求D1——D4,并将它化为ASCII码。
程序流程图如图1-3所示,设源数据存于3500——3501H单元中,结果数存于3510——3514H单元中。
2)实验步骤
(1)输入程序并检查无误。
(2)在3500——3501H单元中存放0C00,运行程序并检查结果,应看到3510——3514H单元中的数依次为3030303132。
(3)反复试几组数,并运行程序、观察结果。
地址(H)助记符注释
2000MOVDX,[3500];取二进制数
2004MOVSI,3515;目标首址在3510
2007DECSI
2008MOVAX,DX
200AMOVDX,0000
200DMOVCX,000A
2010DIVCX;;除10
2012XCHGAX,DX
2014ADDAL,30
2016MOV[SI],AL
2018CMPDX,0000
201BJNE2007
201DCMPSI,3510;填余下高位为0
2021JZ202A;
2023DECSI
2024MOVAL,30
2026MOV[SI],AL
2028JMP201D
202AINT3
图1-3
4、十六进制数转换为ASCII码
1)程序及其流程
经过CPU处理后的十六进制数存放在起始地址为3500H的内存单元中,把它们转换成ASCII码之后,再分别存入起始地址为350AH的内存单元中。
从表2-1中可知,十六进制数加30H即可得到0H——9H的ASCII码,而要得到AH——FH的ASCII码,则需再加7H。
程序流程图及参考程序如图1-4所示。
2)实验步骤
(1)输入程序并检查无误。
(2)在3500——3501H单元中存入四位十六进制数203B,即
E3500↙,并输入3B,20。
(3)G=2000↙,运行以上程序
(4)D350A↙,显示结果为:
0000:
350A42333032CC…
输入数据与结果ASCII码对应顺序相反。
(5)反复试几组数。
考查程序的正确性。
地址(H)助记符注释
2000MOVCX,0004
2003MOVDI,3500
2006MOVDX,[DI]
2008MOVAX,DX
200AANDAX,000F;取低四位值
200DCMPAL,0A;;判是否“0”-“9”
200FJB2013;是“0”-“9”转2013
2011ADDAL,07;是“A”-“F”,加7
2013ADDAL,30;转换为ASCII码
2015MOV[DI+0A],AL
2018INCDI
2019PUSHCX;保护循环计数器内容
201AMOVCL,04;移位次数送CL
201CSHRDX,CL
201EPOPCX
201FLOOP2008
2021INT3
图1-4
5BCD码转换为二进制数
1)程序及其流程
设四个二位十进制数的BCD码存放在起始地址为3500H的单元中,转换出的二进制数码存入起始地址为3510H的内存单元中,程序流程图及参考程序如图1-5所示。
地址(H)助记符注释
2000MOVCX,0004
2003MOVDI,3500
2006MOVAL,[DI]
2008ADDAL,AL;乘2
200AMOVBL,AL
200CADDAL,AL;乘2
200EADDAL,AL;乘2
2010ADDAL,BL;乘10
2012INCDI
2013MOVAH,00
2015ADDAL,[DI];BCD码十位与个位加
2017MOV[DI+0F],AX;存结果图1-5
201AINCDI
201BLOOP2006
201DINT3
2)实验步骤
(1)输入程序并检查无误。
(2)在3500——3507单元中存入四个十进制数(12,34,56,78)的BCD码,即E3500↙输入01,02,03,04,05,06,07,08。
(3)G=2000↙,运行以上程序。
(4)D3510↙,显示结果为35100C00220038004E00
(5)反复试几组数,考查程序的正确性。
实验二程序设计和PC机上程序调试操作实验
一、 实验目的
1.掌握常用程序设计的基本技巧和方法。
2.学会和熟悉使用MASM汇编程序和LINK连接程序。
3.掌握使用PC机上编程和调试程序的方法。
二、 实验设备
PC机一台,装有DOS基本系统和MASM宏汇编软件
三、 实验内容及步骤
(一)按要求编写程序并在DEBUG下建立、汇编和调试程序
1、四字节二进制数的加法
1)程序设计要求
两个字的被加数存放于3500H-3503H单元, 加数存于3504H-3507H单元 (存放格式为高位存高地址单元,低位存低地址单元),两数之和(如不超过四字节)存放于3508H-350BH单元。
2)实验步骤
(1)编写程序。
(2)在DEBUG下输入程序并检查(程序可存放于2000H-8000H单元)。
(3)在3500H-3507H单元中存入被加数014527和加数146758。
(4)运行程序后,检查3508H-350BH单元中内容。
(5)反复选择几组被加数和加数,检查结果,验证程序正确性。
0BB0:
2000BE0035MOVSI,3500
0BB0:
2003BF0835MOVDI,3508
0BB0:
20068B04MOVAX,[SI]
0BB0:
2008034404ADDAX,[SI+04]
0BB0:
200B8905MOV[DI],AX
0BB0:
200D8B4402MOVAX,[SI+02]
0BB0:
2010134406ADCAX,[SI+06]
0BB0:
20138905MOV[DI+2],AX
0BB0:
2015CCINT3
DATASEGMENT
FIRSTDD014527
SECONDDD146758
THIRDDD?
DATAENDS
STACKSEGMENTPARASTACK'STACK'
DB100DUP(?
)
STACKENDS
CODESEGMENT
ASSUMEDS:
DATA,CS:
CODE
START:
MOVAX,DATA
MOVDS,AX
MOVAX,WORDPTRFIRST
ADDAX,WORDPTRSECOND
MOVWORDPTRTHIRD,AX
MOVAX,WORDPTRFIRST+2
ADCAX,WORDPTRSECOND+2
MOVWORDPTRTHIRD+2,AX
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
03000000FEFF0000
2、数据块的搬移
1)程序设计思想和要求
将内存中一数据区中数据(源数据块)传送到另一数据区(目的数据块)。
源数据块和目的数据块区在内存中的位置有两种情况:
两区重叠和不重叠,如下图所示。
对于两个数据块不重叠的情况,数据的传送可从数据块的首址开始,也可从数据块的末址开始;对于两个数据块重叠的情况,则要加以分析,否则重叠部分会因搬移而遭破坏。
处理方法可以是:
在源数据块首址>目的数据块首址时,从数据块的首址开始传送,在数据块首址<目的数据块首址时,从数据块的末址开始传送。
若源数据块首址存放于SI中,目的数据块首址存放于DI中,块字节数存放于CX中。
要求设计的程序能够实现不同情况下的数据块传送。
源数
源
据块
数
据
目的
块
数
据
目的数
块
据块
2)实验步骤
(1)编写程序。
(2)在DEBUG下键入程序并检查(程序可存放于2000H-8000H单元)。
(3)确定源数据块和目的数据块区不重叠时的首址,确定数据块个数为16个。
并在源数据区送入任意16个数据。
0BB0:
2000BE0035MOVSI,3500
0BB0:
2003B91000MOVCX,0010
0BB0:
20068A04MOVAL,[SI]
0BB0:
2008884410MOV[SI+10],AL
0BB0:
200B46INCSI
0BB0:
200CE2F8LOOP2006
0BB0:
200ECCINT3
(4)运行程序后,检查目的数据区的内容。
(5)确定源数据块和目的数据块区重叠时,源区首址>目的区首址时的首址,以及数据块个数为16个,并在源数据区送入任意16个数据。
运行程序后,检查目的数据区的内容。
0BB0:
2000BE0C35MOVSI,350C
0BB0:
2003B91000MOVCX,0010
0BB0:
20068A04MOVAL,[SI]
0BB0:
20088844F4MOV[SI-0C],AL
0BB0:
200B46INCSI
0BB0:
200CE2F8LOOP2006
0BB0:
200ECCINT3
从350A开始输入00010203040506070809101112131415,得到
(6)确定源数据块和目的数据块区重叠时,源区首址<目的区首址时的首址,以及数据块个数为16个,并在源数据区送入任意16个数据。
运行程序后,检查目的数据区的内容。
0BB0:
2000BE0035MOVSI,3500
0BB0:
2003B91000MOVCX,0010
0BB0:
20068A440FMOVAL,[SI+0F]
0BB0:
200988441BMOV[SI+1B],AL
0BB0:
200C4EDECSI
0BB0:
200DE2F7LOOP2006
0BB0:
200FCCINT3
从3500开始输入00010203040506070809101112131415,运行程序,得到:
3、无序数据块的递增排序
1)程序设计思想和要求
在首址为3000H的数据区中存放着一组无符号数,数据的长度存于3500H单元内,要求用冒泡法对该区中的数据按递增次序排列。
冒泡法的基本思想是从最后一个数(或从第一个数)开始,依次把相邻两个数比较,即第N个数与第N-1个数比较…,若大则交换,否则不交换,直到N个数都比较完为止。
此时,其中最小数排在最前列。
然后将剩下的N-1个数再按前述方法进行,找到N-1个数中最小的数。
以后重复进行,直到全部按序排列。
2)实验步骤
(1)编写程序。
(2)在DEBUG下键入程序并检查(程序可存放于2000H-8000H单元,只要不与数据区重叠即可)。
(3)确定数据个数并输入3500H单元中,在首址为3500H的数据区中存入任意无符号数。
(4)运行程序并检查运行结果。
(6)反复修改数据个数和数据区中的数,运行程序、观察结果,验证程序的正确性。
DATASEGMENT
ARRAYDB89,67,10,1,29,100,98,45
COUNTEQU8
FLAGDB-1
DATAENDS
STACKSEGMENTPARASTACK'STACK'
DB100DUP(?
)
STACKENDS
CODESEGMENT
ASSUMEDS:
DATA,CS:
CODE
SORT:
MOVAX,DATA
MOVDS,AX
MOVBX,COUNT
LP1:
CMPFLAG,0
JEEXIT
DECBX
MOVCX,BX
MOVSI,0
MOVFLAG,0
LP2:
MOVAL,ARRAY[SI]
CMPAL,ARRAY[SI+1]
JBENEXT
XCHGAL,ARRAY[SI+1]
MOVARRAY[SI],AL
MOVFLAG,-1
NEXT:
ADDSI,1
LOOPLP2
JMPLP1
EXIT:
MOVAH,4CH
INT21H
CODEENDS
ENDSORT
4、求数的平方根
1)程序设计思想和要求
减奇数法是一种求取近似平方根和平方根的整数部分的方法。
有公式:
n
(2K-1)=N2
k=1
若要求数S的平方根S,则可以从S中减去奇数1、3、5…直到减为零或不够减下一个奇数为止,然后统计减去的奇数个数,它就是S的近似平方根。
被开方数为一个足够大的二进制数,存于首址为4000H的单元内,它的方根存放在以4500H为首的单元内。
2)实验步骤
(1)编写程序。
DATASEGMENT
ORG4000H
SDW12345;3039H,开方后约为111(6FH)
DB4FEHDUP(?
)
SQDW?
DATAENDS
STACKSEGMENTPARASTACK'STACK'
DB100DUP(?
)
STACKENDS
CODESEGMENT
ASSUMEDS:
DATA,CS:
CODE
START:
MOVAX,DATA
MOVDS,AX
MOVCX,0000H
MOVBX,0001H
MOVAX,S
LP:
SUBAX,BX
ADDBX,2
INCCX
CMPAX,000
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 实验