《计算机原理与应用》实验指导书.docx
- 文档编号:4237589
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:33
- 大小:30.28KB
《计算机原理与应用》实验指导书.docx
《《计算机原理与应用》实验指导书.docx》由会员分享,可在线阅读,更多相关《《计算机原理与应用》实验指导书.docx(33页珍藏版)》请在冰豆网上搜索。
《计算机原理与应用》实验指导书
十六位微机教学实验系统
微机原理及接口实验
指导书
中国矿业大学
2009年10月
DEBUG命令及其操作
开机输入8装载8088系统。
系统提示符为“〉”
.A启动小汇编程序
格式:
A[段址:
][偏移量]或A[偏移量]例:
A2000
.B断点设置
.D显示一段地址单元中的数据
格式:
D[[段址:
]起始地址,[尾地址]]
.E编辑制定地址单元的数据
格式:
E[[段址:
]偏移量]。
修改的数据之间用空格分隔,回车结束输入。
.G连续运行程序
格式:
G[=[段址:
]偏移量
GB[=[段址:
]偏移量](带断点运行)
.I从I/O端口读入数据并显示
格式:
I[I/O接口地址]如:
>1002显示地址为0042接口单元的内容。
.L从外设读入数据或输入程序
格式:
通过RS-232C接口读入外部计算机系统(如IBMPC)传送来的数据。
.M数据块搬移
格式:
M[段址:
]源起始址,尾址[目标段址:
]目标起始址。
.O数据送存指定I/O接口地址单元
格式:
OI/O口地址,数据
如:
>O0098,10回车,就完成送10到地址为98的I/O端口上去。
.R寄存器显示与修改
格式:
R或R寄存器
.T单步运行指定程序
格式:
T[[段址:
]偏移量]
.U反汇编程序命令
格式:
U[[段址:
起始址[,尾址]]或U
.W将内存数据或程序转贮到外设中去
格式:
WP由RS-232C接口传送由DS:
SI指定入口,CX指定长度的数据块到外设。
.Z进入汇编器界面
格式:
Z。
在此下有如下命令:
伪指令:
ORG目标程序首址END结束程序
.N建立新文件,格式:
*N功能:
建立新文件。
.I插入命令,格式:
*I或*I[行号],退出插入用CTRL+Z或CTRL+Q。
.L行列表,格式:
*L或*L[行号]或*L[行号1],[行号2]
.C修改命令,格式:
*C或*C[行号]
.D删除命令,格式:
*D或*D[行号]或*D[行号1],[行号2]
.A汇编命令,将汇编器内的源程序汇编成目标程序。
.Q退出汇编器,返回DEBUG状态。
实验一系统认识实验
1.系统操作练习
(1)
从3500H内存单元开始建立0~15共16个数据。
程序如下:
2000MOVDI,3500;设数据区首址
2003MOVCX,0010;字节数送CX
2006MOVAX,0000
2009SAHF;AH送状态寄存器
200AMOVB[DI],AL;写入一字节
200CINCDI;修改地址指针
200DINCAX;修改数据
200EDAA;十进制调整
200FLOOP200A;未填完转移
2011JMP2011
要求:
①单步运行,记下每次各寄存器的内容。
②连续运行。
③断点运行,在2009H设断点。
用D命令查看3500H~350FH
2.系统操作练习
(2)
从3500H内存单元开始建立0~15共16个数据传递到3600H单元开始的数据区中。
程序如下:
2000MOVSI,3500;建立源址指针
2003MOVDI,3600;目标地址指针
2006MOVCX,0008;数字送CX
2009MOVAX,W[SI];取一字
200BMOVW[DI],AX;送一字
200DINCSI;修改指针
200EINCSI
200FINCDI
2010INCDI
2011DECCX
2012JNZ2009;判传完否
2014INT
先在3500H内存单元开始建立16个字节的数据,运行后用D命令显示结果。
要求传送不同的数据三次。
实验二数码转换编程及程序调试
1.将ASCII码表示的十进制数转换为二进制数
2000MOVSI,3500;源首地址
2003MOVDI,3510;结果首址
2006MOVBX,000A
2009MOVCX,0004
200CMOVAH,00
200EMOVAL,B[SI]
2010SUBAL,30
2012IMULBX
2014ADDAL,B[SI+01]
2017SUBAL,30
2019INCSI
201ALOOP2012;转换完否
201CMOVW[DI],AX;存结果
201EINT;停机
在3500H~3504H单元存入十进制数12的ASCII码,即E3500,并输入3030303132。
运行后用D命令查3510H应为0C00。
2.将十进制数的ASCII码转换为BCD码
2000MOVCX,0005;计数器赋初值
2003MOVDI,3500;ASCII码首址
2006MOVBL,FF;错误标志送BL
2008MOVAL,B[DI];ASCII码送AL
200ACMPAL,3A
200CJNB2014;不低于3A转
200ESUBAL,30;低于3A取ASCII码
2010JB2014;低于30转
2012MOVBL,AL;否则AL送BL
2014MOVAL,BL;结果或错误标志送AL
2016MOVB[DI+0A],AL
2019INCDI
201ALOOP2006
201CINT
在3500~3504H单元中存入五位十进制数的ASCII码,即:
E3500回车,并输入31、32、33、34、35。
运行后结果在350AH,用D命令显示结果:
0102030405CC。
反复试几组数,考查程序的正确性。
3.将十六位二进制数转换为ASCII码表示的十进制数
2000MOVDX,W[3500];取二进制数
2004MOVSI,3515;目标首址
2007DECSI
2008MOVAX,DX
200AMOVDX,0000
200DMOVCX,000A
2010DIVCX;除10
2012XCHGAX,DX
2013ADDAL,30
2015MOVB[SI],AL
2017CMPDX,0000
201AJNE2007
201CCMPSI,3510;填余下高位为0
2020JZ2029;对应的ASCII码
2022DECSI
2023MOVAL,30
2025MOVB[SI],AL
2027JMP201C
2029INT
在3500~3501H单元中存放0C00,运行程序并检查结果,应看到3510H~3514H单元中的数依次为3030303132。
反复试几组数,并运行程序、观察结果。
4.十六进制数转为ASCII码
2000MOVCX,0004
2003MOVDI,3500
2006MOVDX,W[DI]
2008MOVAX,DX
200AANDAX,000F;取低4位
200DCMPAL,0A;判是否“0~9”
200FJB2013;是“0~9”转
2011ADDAL,07;是“A~F”加7
2013ADDAL,30;转为ASCII码
2015MOVB[DI+0A],AL
2018INCDI
2019PUSHCX;保护计数器内容
201AMOVCL,04;移位次数送CL
201CSHRDX,CL
201EPOPCX
201FLOOP2008
2021INT
在3500~3501H单元中存入四位十六进制数203B,即:
E3500回车,并输入3B、20。
运行后结果在350AH,用D命令查看结果:
42333032。
反复试几组,验证程序正确性。
5.BCD码转为二进制码
2000MOVCX,0004
2003MOVDI,3500
2006MOVAL,B[DI]
2008ADDAL,AL;乘2
200AMOVBL,AL
200CADDAL,AL;乘2
200EADDAL,AL;乘2
2010ADDAL,BL;乘10
2012INCDI
2013MOVAH,00
2015ADDAL,B[DI];BCD码十位+个位
2017MOVW[DI+0F],AX;存结果
201AINCDI
201BLOOP2006
201DINT
在3500~3507单元中存入四个十进制数(12、34、56、78)的BCD码,即E3500回车,输入01、02、03、04、05、06、07、08。
运行后结果在3510H,用D命令查看结果,应为0C00220038004E00。
反复试几组数,考查程序的正确性。
实验三运算类编程实验
(一)加法运算
1.二进制双精度加法运算
2000MOVAX,W[3500];加数低位送AX
2003ADDAX,W[3504];两数低位相加
2007MOVW[3508],AX;存低位和
200AMOVAX,W[3502];加数高位送AX
200DADCAX,W[3506];两数高位相加
2011MOVW[350A],AX;存高位和
2014INT
在3500开始的单元存入A0,65,15,00(即001565A0)在3504开始的单元存入9E,B7,21,00(即0021B79E)。
运行后,结果在3508开始的单元,用D命令查看,应有:
3E1D3700CC。
反复试几组数,考查程序的正确性。
2.十进制的BCD码相减运算
2000MOVAH,00
2002SAHF
2003MOVCX,0002
2006MOVSI,3500
2009MOVDI,3510
200CMOVAL,B[SI]
200ESBBAL,B[SI+02]
2011DAS
2012PUSHF
2013ANDAL,0F
2015POPF
2016MOVB[DI],AL
2018INCDI
2019INCSI
201ALOOP200C
201CINT
在3500~3503H单元,依次存入00、04、02、01(即40和12)运行后结果在3510,应有0802。
(二)乘除运算
1.考察乘法指令MUL、IMUL对状态标志位的影响
取3000H单元开始的10个无符号数,将其各自乘以2,若有溢出,显示“O”,有进位显示“C”,否则只显示间隔符“,”,规定每一组相应的标志显示之间均用“,”来间隔。
这样就可以在数据区放各种试验数来考察乘法对标志的影响。
2000MOVSI,3000;源数据首址
2003MOVCX,000A;数据个数
2006MOVBX,0002
2009MOVAX,W[SI];取数
200BCLC
200CIMULBX;乘2
200EJO201E;溢出转
2010JB2022
2012MOVAL,2C;显示“,”
2014INCSI
2015INCSI
2016MOVAH,01;显示功能调用
2018INT10
201ALOOP2009;完否
201CJMP201C;停机
201EMOVAL,4F;显示“O”
2020JMP2014
2022MOVAL,43;显示“C”
2024JMP2014
2026INT
准备10个数存放到3000~3009H单元中,运行程序,观察显示结果并认真分析。
反复试几组数,观察结果。
用MUL指令代替LMUL指令,重复运行程序。
2.考察除法指令DIV、IDIV以及ASCII码调整指令对标志的影响情况
取3000~3009H单元中的五个无符号数,将其用101H除,若有溢出或进位,就分别显示“O”或“C”。
在进行ASCII码转换后,若奇偶位为偶(PF=1),则显示“P”,为负(SF=1)显示“S”为了解每个数运算后对状态标志的影响,在每个数运算完后均显示“;”。
2000MOVSI,3000
2003MOVCX,0005
2006MOVDX,0000
2009MOVAH,00
200BSAHF;清标志位
200CMOVAX,W[SI];取数
200EMOVBX,0101
2011DIVBX;除101
2013AAD;ASCII码调整
2015JO2029
2017JB202D
2019JP2031
201BJS2035
201DMOVAL,3B;显示“;”
201FINCSI
2020INCSI
2021MOVAH,01
2023INT10
2025LOOP2006
2027JMP2027
2029MOVAL,4F;显示“O”
202BJMP201F
202DMOVAL,43;显示“C”
202FJMP201F
2031MOVAL,50;显示“P”
2033JMP201F
2035MOVAL,53;显示“S”
2037JMP201F
2039INT
在3000~3009H中填入5个16位二进制数。
用DIV除法指令,判定它对CF,OF,PF,SF标志的影响,记录显示结果。
用IDIV除法指令代替DIV,执行程序,记录结果。
(三)开平方运算
用减奇数法开平方
2000MOVAX,W[3500];取被开方数
2003MOVCL,00;清平方根
2005MOVDX,0001;奇数初值
2008SUBAX,DX;减奇数
200AJB2013;不够减则结束
200CINCCL;够减奇数个数计数
200EADDDX,02;形成下一个奇数
2011JMP2008
2013MOVB[350A],CL;存平方根
2017INT
在3500存入10,00(即0010),结果在350A,应为0400CC,反复试几组数,考查程序的正确性。
实验四分支程序设计实验
数据块搬移程序。
将3100H为首址的16个字节搬到3200为首址的区域。
2000MOVCX,0010;取搬家字节数
2003MOVSI,3100;取源块首址
2006MOVDI,3200;取目的块首址
2009CMPSI,DI;从首址开始?
200BJA201E;是,转移
200DADDSI,CX;否,以末地址
200FADDDI,CX;开始搬家
2011DECSI
2012DECDI
2013MOVAL,B[SI]
2015MOVB[DI],AL
2017DECSI
2018DECDI
2019DECCX
201AJNE2013
201CJMP2027
201EMOVAL,B[SI];从首地址开始搬家
2020MOVB[DI],AL
2022INCSI
2023INCDI
2024DECCX
2025JNE201E
2027INT
用E命令在以SI为起址的单元中填入16个数字。
运行后用D命令查看DI为起址的单元中的数,是否同SI单元中。
改变SI和DI(源首址>目的首址),观察结果。
实验五循环程序设计
1.计算1+2×3+3×4N(N+1),直到N(N+1)大于200为止。
2000MOVDX,0001
2003MOVBL,02
2005MOVAL,BL
2007INCBL
2009MULBL
200BADDDX,AX
200DCMPAX,00C8;(AX)>200吗?
2010JNA2005
2012INT
2.求某数据区域的负数的个数
2000MOVDI,3000;设数据区首址
2003MOVCL,B[DI];送数据个数
2005XORCH,CH;CH清0
2007MOVBL,CH;BL清0
2009INCDI;指针指向第一个数据
200ATESTB[DI],80;首位是否为1
200DJNE2011
200FINCBL;负数个数累加
2011INCDI
2012LOOP200A
2014MOVB[DI],BL;存结果
2016INT
在3000输入数据的个数,在3001开始输入数据(12,88,82,90,22,33),在3007看结果。
实验六排序程序设计
1.在数据区中存放着一组数,数据的个数就是数据缓冲区的长度,要求用气泡法对该数据区中数据按递增关系排序
2000MOVCX,000A
2003MOVSI,300A
2006MOVBL,FF;初始化
2008CMPBL,FF
200BJNZ202A;BL不为FF则转
200DMOVBL,00
200FDECCX;外循环修正CX
2010JZ202A
2012PUSHSI
2013PUSHCX
2014DECSI
2015MOVAL,B[SI]
2017DECSI
2018CMPAL,B[SI]
201AJA2023
201CXCHGAL,B[SI]
201EMOVB[SI+01],AL
2021MOVBL,FF
2023INCSI
2024LOOP2014
2026POPCX
2027POPSI
2028JMP2008
202AINT
在3000~3009H数据区中任意放入10个无符号数。
调通程序,并检查最后的运行结果。
反复修改数据区中的数,运行程序并观察结果,以验证程序的正确性。
2.学生成绩名次表
主程序
2000MOVAX,0000
2003MOVDS,AX
2005MOVES,AX
2007MOVSI,3000
200AMOVCX,001E
200DMOVDI,3100
2010CALL2020
2013MOVAL,1E
2015SUBAL,CL
2017INCAL
2019MOVBX,DX
201BMOVB[BX+DI],AL
201DLOOP2010
201FINT
子程序
2020PUSHCX
2021MOVCX,001E
2024MOVAL,00
2026MOVBX,3000
2029MOVSI,BX
202BCMPAL,B[SI]
202DJAE2035
202FMOVAL,B[SI]
2031MOVDX,SI
2033SUBDX,BX
2035INCSI
2036LOOP202B
2038ADDBX,DX
203AMOVB[BX],00
203DPOPCX
203ERET
将30个成绩存入首址为3000H的单元中。
调试并运行程序。
检查3100H开始的区域中的名次表的正确性。
实验七子程序设计
1.求无符号字节序列中的最大值最小值
主程序
2000MOVSI,3000
2003MOVCX,0008
2006CALL2010
2009INT
子程序
2010JCXZ202F
2012PUSHSI
2013PUSHCX
2014PUSHBX
2015MOVBH,B[SI]
2017MOVBL,BH
2019LODSB
201ACMPAL,BH
201CJBE2022
201EMOVBH,AL
2020JMP2028
2022CMPAL,BL
2024JAE2028
2026MOVBL,AL
2028LOOP2019
202AMOVAX,BX
202CPOPBX
202DPOPCX
202EPOPSI
202FRET
在3000H处输入8个字节数据:
D9、07、8B、C5、EB、04、9D、F9。
运行后用R命令检查AX,AH中为最大值,AL中为最小值。
输入三组数据,反复验证程序的正确性。
2.求N!
2000MOVAX,3010
2003PUSHAX
2006MOVAX,W[3000]
2007PUSHAX
2008MOVDI,0000
200BCALL200F
200EINT
200FPUSHBP
2010MOVBP,SP
2012PUSHBX
2013PUSHAX
2014MOVBX,W[BP+DI+06]
2017MOVAX,W[BP+DI+04]
201ACMPAX,0000
201DJZ2033
201FPUSHBX
2020DECAX
2021PUSHAX
2022CALL200F
2025MOVBX,W[BP+DI+06]
2028MOVAX,W[BX]
202APUSHBX
202BMOVBX,W[BP+DI+04]
202EMULBX
2030POPBX
2031JMP2036
2033MOVAX,0001
2036MOVW[BX],AX
2038POPAX
2039POPBX
203APOPBP
203BRET0004
在3000、3001H放N,N!
的结果在3010H起的单元中,N取值<10H,且3000H中放低位。
实验八显示程序
显示器I/O功能调用(INT10)使用说明
入口:
AH=00H,AL=01H功能:
清屏
入口:
AH=01H,AL=数据功能:
写AL中的数据到屏幕上
入口:
AH=02H,AL=功能设置命令功能:
设置显示屏
入口:
AH=03H,BL=列,BH=行功能:
光标控制
入口:
AH=04H,AL方式设置指令功能:
设置显示屏
入口:
AH=05H,功能:
读当前DDRAM数据字符到AL中
入口:
AH=06H,DS:
BX=字符串首址,且字符串尾为00H功能:
显示字符串
2000MOVCX,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机原理与应用 计算机 原理 应用 实验 指导书
![提示](https://static.bdocx.com/images/bang_tan.gif)