实验须知Word文档格式.docx
《实验须知Word文档格式.docx》由会员分享,可在线阅读,更多相关《实验须知Word文档格式.docx(23页珍藏版)》请在冰豆网上搜索。
(3)MOVDS,2010
(4)PUSHAL
(5)OUT900,AL
(6)MOV[BX],0
4.利用T,P,G命令,执行下列程序段,注意它们的不同之处。
(1)MOVDI,300
MOVSI,400
MOVCX,3
CLD
REPMOVSB
INT3
(2)先在CS:
200处汇编一条RET指令,再在CS:
100处汇编。
MOVBX,200
CALLBX
然后从MOVBX,200处开始执行。
5.用A命令汇编下列程序段,完成将DS:
2000开始的5个字节内存内容相加,并把相加的结果存放在DS:
2005内存单元中,用DEBUG调试﹑运行该程序,查看运行结果,观察程序段能否完成指定功能,若不能,说明原因。
MOVCX,5
MOVAL,0
MOVBX,2000
NEXT:
ADDAL,[BX]
INCBX
DECCX
LOOPNEXT
MOV[BX],AL
INT3
步骤:
1)用A命令将程序键入到100H开始的内存中,在键入时记下标号LL的实际地址,在键入JNZ指令时LL用实际地址值代替。
2)用U命令检查键入的程序及对应的机器码。
3)用E20000102030405将2000H开始的前5个内存单元的内容修改为01、02、03、04、05,用D命令查看修改结果,并记录结果。
4)用T命令逐条运行上述小程序指令,检查并记录有关寄存器、存储单元内容及ZF情况。
5)用F2000L050203040506将2000H开始的5个内存单元的内容修改为02、03、04、05、06,用D命令查看修改结果,并记录修改结果。
6)用G=100全速运行上述小程序,用D10001005查看运行结果并记录运行结果。
【预习要求】
1.仔细阅读附录中“汇编语言上机操作过程及程序调试技术”部分的内容。
2.根据实验要求,对各项结果进行预测。
【思考题】
1.指令MOV[BX],AX中,操作数[BX]的寻址方式是什么?
在DEBUG下执行完该指令后,如何查看执行结果?
2.可否随意在DEBUG提示符“-”后不带参数发出命令G?
什么情况下使用命令G时,可不用“=”给出执行首地址?
【报告要求】
1.分析任务2中各条指令错误原因。
2.说明命令T和P的区别。
3.写出任务5的编辑调试过程,并附上调试记录。
4.回答思考题。
【实验提示】
1.DEBUG的进入
⑴如果是首次进入DEBUG编程,则只要在DOS提示符下键入DEBUG↙,即可进入DEBUG环境,显示提示符“-”。
⑵如果要对某个程序使用DEBUG进行调试,只要在DOS提示符下键入DEBUG文件名↙,即可进入DEBUG环境,显示提示符“-”。
如:
C>
debugexam.exe↙
2.程序的汇编与反汇编
⑴源程序可以在DEBUG下,用汇编命令A输入到内存中,只需在DEBUG提示符“-”下,键入汇编命令A↙,并在显示“段寄存器地址:
偏移地址”后面键入你自己编写的程序,每键入一条,按一次回车键。
-A↙
127B:
0100MOVCX,5↙
0103MOVAL,0↙
0105MOVBX,2000↙
┇
⑵如果进入DEBUG时是使用“DEBUG文件名↙”进入的,那么在进入DEBUG状态后,可用反汇编命令U,将调入的程序显示出来:
-U↙
0100B90500MOVCX,5
0103B000MOVAL,0
0105BB0020MOVBX,2000
3.在DEBUG状态下,对所编写文件存盘的步骤
给程序命名
-N文件名.COM↙
将文件长度放入BX、CX中(高位放入BX,低位放入CX中)
-RBX↙(注意!
!
由于文件长度一般较小,所以切记BX中付0值)
-RCX↙(文件最末偏移地址减去文件开始的偏移地址即文件长度)
用写盘命令W把正在调试的内存中程序写入磁盘中
-W〈地址〉↙(文件开始地址)
退出DEBUG状态用Q命令:
-Q↙
4.在DEBUG状态下,建议使用DOS分配给用户的内存可用区
在DEBUG状态下,用户可对所有寄存器、RAM内存随意查看和修改,但由于对DOS操作系统在内存中存放情况不了解,可能会将存放有操作系统程序的内存内容破坏,从而可能引起系统的异常,出现死机现象,故建议使用DOS分配给用户的内存可用区,其低端地址是刚进入DEBUG时,用命令R查看到的DS:
IP。
5.用连续执行命令G应注意问题
用连续执行命令G执行程序时,注意给出执行程序的首地址,并注意执行的程序中有返回DEBUG功能的程序段,如指令INT20H或断点设置INT3,否则发出命令后,很容易出现死机,原因是无返回程序段使系统返回命令接受状态,CPU将不断到内存中取指令、执行指令,使用户失去对系统的控制。
为避免这种情况,可在用户程序段结尾加上一条INT20H指令,或INT3指令。
6.关于任务5
DS:
2000单元开始的5个字节内容,可用填充命令F给其赋值。
-F2000L50102030405↙(在执行程序前用F命令给单元赋值)
之后,运行任务5程序段,检查运行结果是否正确。
实验二两个多位十进制数相加实验
1.熟悉在PC机上建立、汇编、连接、调试和运行汇编语言程序的过程。
2.掌握数据传送和算术运算指令的用法。
3.熟悉和掌握用DEBUG调试程序的方法。
将两个多位十制数相加,要求加数和被加数均以ASCII码形式各自顺序存放在以DATAl和DATA2为首的5个内存单元中(低位在前),结果送DATA3处。
实验说明:
汇编语言没有十进制加法指令,ADD/ADC加法指令的运算对象是二进制数,如果要进行BCD码数的加法,需要对结果进行修正。
组合BCD码的加法调整指令为DAA,它针对AL寄存器中的组合BCD码数之和进行修正。
对于未组合BCD码的加法调整指令为AAA(加法的ASCII码调整指令),它将存于AL寄存器中的一位ASCII码数加法运算的结果调整为一位拆开型十进制数,仍保留在AL中,如果向高位有进位(AF=1),则进到AH中。
对于多字节的ASCII码相加,只能从最低位开始逐个字节地进行加法操作,并随即进行调整。
参考程序清单(WJSY2.ASM):
DATASEGMENT
DATA1DB33H,39H,31H,37H,34H
DATA2DB36H,35H,30H,38H,32H
DATA3DB5DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVCX,5;
计数
MOVSI,0;
做变址用,因从DATA1的第一个数取数,故SI=0
CLC
NEXT:
MOVAL,DATA1[SI];
取被加数给AL
ADCAL,DATA2[SI];
取加数和AL相加
AAA;
未组合十进制数加法调整指令
MOVDATA3[SI],AL;
结果送至DATA3处
INCSI;
修改SI指向下一位数
LOOPNEXT
MOVSI,5;
因显示是从高位到低位,故SI=5
L:
ADDDATA3[SI-1],30H;
还原成ASCII码
MOVDL,DATA3[SI-1]
MOVAH,02;
送显示
INT21H
DECSI
JNZL
MOVAH,4CH;
返回DOS
CODEENDS
ENDSTART
运行结果:
75249
实验要求:
上述程序有很多不方便的地方,比如
加数和被加数以低字节在前高字节在后顺序存放在内存单元中,不符合我们日常的习惯,如果改为高字节在前低字节在后的形式存放数据,程序如何改变?
程序只显示了相加结果,没有显示加数和被加数,如果要求显示加数和被加数,程序如何修改?
如果按47193+28056=75249格式显示,程序如何修改?
1.仔细阅读课本及相应教材。
2.参照程序框图编制源程序,准备好多组运算数据,以供校验。
1.一个段的大小为多少?
一定是64KB吗?
如何在DEBUG下查看程序在内存的存放情况?
2.加数与被加数都是ASCII码形式,在作相加运算时,是否要先转换为十六进制数?
1.列出运行正确的源程序清单,加上适当注释,写出执行结果。
2.总结应用DEBUG调试程序的方法。
3.回答思考题。
打开MASM文件夹,有四个文件EDIT.COM,MASM.EXE,LINK.EXE,DEBUG.COM我们要用到。
1.进入EDIT编辑环境建立和修改汇编源程序文件(文件名要以.ASM结尾)
2.用MASM命令汇编源文件以产生相应的目标文件(OBJ文件)
3.用LINK命令连接目标文件以产生可执行文件(EXE文件)
4.用DEBUG调试、运行可执行程序。
参考程序框图:
注:
该框图考虑了五位十进制数向更高位有进位的情况。
实验三字符串匹配程序
1.掌握提示信息的使用方法及键盘输入字符串的用法。
2.进一步掌握串操作指令的用法。
3H)。
1.编写程序,实现两个字符串比较,当两字符串完全相同时,才显示“MATCH”,如果有一个字符不同,则显示“NOMATCH”。
字符串由键盘输入。
1.仔细阅读课本中有关DOS功能调用INT21H中0AH号功能调用及串操作类指令部分的内容。
1.整理出经过运行正确的源程序,并加上注释。
2.总结实验中遇到的问题及解决的方法。
调用INT21H中的0AH号功能时,用0AH输入的字符串,不加处理,能否直接用09H号功能输出?
1.在串比较操作时,一定要注意以下三点:
①源串一定放在数据段,目的串一定放在附加段;
②源串偏移地址的首地址一定放在SI寄存器中,目的串偏移地址首地址一定放在DI寄存器中;
③串长度一定放在CX中。
④清方向标志CLD。
2.INT21H中0AH号功能调用关于输入数据的缓冲区开辟问题
输入缓冲区格式:
DATASEGMNET
BUFF1DB20,?
21DUP(0)
预定最大输入字符数
BUFF1
31H
实际输入字符数
32H
33H
从键盘输入字符的ASCII码
34H
3.实验环境
可打开CMASM2文件夹,点击CMASM文件,进入集成汇编环境来建立、汇编、连接、调试程序。
实验四从键盘输入数据并显示实验
掌握接收键盘数据的方法,并了解从键盘接收数据送显示时须转换为ASC
码的原理。
编写程序,将键盘收到的四位十六进制转换为等值的二进制数,再显示在终端上。
1.仔细阅读实验指导书及相应教材。
2.参照给定程序框图编制源程序。
代码转换是计算机和外设打交道的重要技术。
外部设备通常用ASC
码(如键盘输入的程序)或BCD码输入计算机,而计算机都将其转换为二进制数,运算完了之后计算机又必须将其转换为ASC
码或BCD码送到输出设备。
主程序参考框图:
子程序GETNUM框图:
第二部分硬件部分实验
实验十一定时器8253与中断控制器8259A实验
1.掌握计数器/定时器8253的工作原理和编程方法。
2.掌握8259中断控制器的工作原理。
3.掌握中断处理程序的编写。
1.该实验用PC机内部的中断控制器8259A,中断源用TPC-H实验箱上的8253来产生,电路如图1所示,将8253计数器0,计数器1分别设置为方式3和方式2,计数初值设为2000,使8253每隔4秒产生一次低电平的中断请求。
2.硬件电路如附图1所示。
3.编写程序,要求每次主机响应外中断IRQ7时,显示"
THISISA8259AINTERRUPT!
"
,在键盘上敲任意一个键,程序退出。
4.修改电路和程序,直接用手动产生单个脉冲作为中断请求信号,要求每按一次开关产生一次中断,在屏幕上显示一次"
ThisisaIRQ7interrupt!
,中断10次后程序退出。
【实验步骤】
1.断开电源,按虚线位置连接好接线,经检查无误后合上电源。
2.输入准备好的源程序,并进行汇编﹑连接﹑调试。
3.运行程序观察结果。
1.复习8253和8259A工作原理,编程方法和使用方法。
2.根据给定的参考程序框图,在实验前编写出源程序。
1.在8253计数器/定时器中,时钟信号CLK、门脉冲信号GATE分别起什么作用?
2.初始化时设置为非自动结束方式,那么在中断服务程序将结束时必须设置什么操作命令?
如果不设置这种命令会发生什么现象?
3.8259A的中断屏蔽寄存器IMR和8086/8088的中断允许标志IF有什么差别?
在中断响应过程中,它们怎样配合起来工作?
4.在那些情况下需用CLI指令关中断?
在那些情况下需用STI指令开中断?
1.画出程序框图。
2.整理好运行正确的源程序,并加上注释。
3.总结8259的编程方法。
重点总结中断服务程序的实际入口地址是怎样得到的。
4.总结实验调试过程中遇到的问题。
5.回答思考题。
【编程提示】
1.在TPC-H实验系统的接口卡上有一个跳线开关(JP),可以选择IRQ2、IRQ3、IRQ4、IRQ7引到试验箱上的IRQ插孔,出厂设置的是IRQ7。
2.中断控制器8259的地址为20H、21H,IRQ7对应的中断类型号为0FH,编程时要根据中断类型号设置中断向量,8259中断屏蔽寄存器IMR对应位要清零(允许中断),中断服务程序结束返回前要使用中断结束命令:
MOVAL,20H
OUT20H,AL
3.程序退出返回操作系统前应将8259中断屏蔽寄存器IMR对应位置1(以关闭中断)。
程序参考框图:
实验十二8255和LED数码管显示实验
1.掌握并行接口8255A的工作原理及使用方法。
2.了解七段数码管显示数字的原理。
3.掌握多位数码显示的接口技术。
1.静态显示:
按图2连接好电路,将8255A的A口PA0~PA6分别与七段数码管的段码驱动输入端a~g相连,位码驱动输入端S1接+5V(选中),S0、dp接地(关闭)。
编程从键盘输入一位十进制数字(0~9),在七段数码管上显示出来。
2.动态显示(选做):
按图3连接好电路,七段数码管段码连接不变,位码驱动输入端S1S0接8255C口的PC1、PC0。
编程在两个数码管上显示56。
图2图3
1.断开电源,按虚线位置连接好接线,经检查无误后合上电源。
2.输入准备好的源程序,并进行汇编﹑连接﹑调试。
3.运行程序观察结果。
1.复习8255A工作原理、编程方法和使用方法。
2.参考给定的程序框图,在实验前编写出源程序。
1.8255A的三个端口在使用时有什么差别?
2.8255A的方式0一般使用在什么场合?
在方式0时,如果使用应答信号进行联络,应该怎么办?
3.当8255A工作在中断方式2时,CPU是如何区分输入或输出的?
2.整理运行正确的源程序,并加上注释。
3.总结实验调试过程中遇到的问题及解决的办法。
1.实验台上的七段数码管为共阴极,码段采用同相驱动,输入端加高电平,选中的数码管亮,位码加反相驱动器,位码输入端高电平选中。
2.七段数码管的字形代码如下表:
实验十三串行通信实验
1.了解串行通信的一般原理和RS-232C串行通信接口标准。
2.熟悉BIOS系统功能调用INT14H的使用。
利用串口1进行双机通信,硬件连接如图4所示。
1.要求从甲机键盘输入的字符在乙机屏幕上显示,乙机键盘输入的字符在甲机屏幕上显示,按q键双方退出,返回操作系统。
利用BIOS串行通信中断进行编程,采用查询方式,波特率2400,偶校验,1位停止位,7位数据位。
2.实验说明
本实验为双机通信实验,实验的硬件连接只需通过RS-232C串行口连接双机通讯电缆。
双机电缆连接情况需用万用表仔细检查。
复习BIOS系统功能调用INT14H的使用,在实验前编写出源程序。
3.总结实验调试过程中遇到的问题及解决方法。
可以利用BIOS功能调用的INT14H号功能来实现串行通信,该功能调用是RS-232串行I/O接口的一个中断功能调用,其中0号功能是初始化串行通信口,1号功能是发送一字符,2号功能是接收一字符,3号功能是取串行口状态。
实验十四数字录音机实验
1.了解数字录音技术的基本原理。
2.对所学的接口芯片进行一次综合应用。
综合性实验(学时数:
4H)。
【实验要求】
利用TPC-H实验系统设计一个数字录音机,要求以每秒钟5000次的速率采集语音信号,录音时间12秒(60000个数据),以同样的速率进行放音。
完成硬件电路的设计和软件编程。
1.可利用TPC-H实验系统的ADC0809将麦克风产生的语音信号按要求的采集速率转换成数字量存入到内存。
放音时,可利用DAC0832将内存中的数据转换成模拟信号给喇叭,使喇叭发声(放音)。
有关ADC0809和DAC0832的电路可参考附录Ⅲ(TPC-H通用微机实验系统使用说明)中的电路图,声传感器接J2,代表语音的电信号送ADC0809的通道2(IN2);
8位A/D转换器DAC0832的输出端J1接喇叭。
一次A/D转换的程序可以为
MOVDX,口地址
OUTDX,AL;
启动转换
延时
INAL,DX;
读取转换结果放在AL中
2.采集速率的控制可利用8253和8255来实现。
将8253设置成方式0,在输入脉冲为1MHZ时计数200个,200个1MHZ的脉冲对应的时间为0.2ms(每秒钟5000次的采集速率即每隔0.2ms采集一次数据),利用8255查询8253的OUT端电平,若高电平表示定时时间到。
3.在设计之前,仔细阅读附录中的有关内容。
1.画出硬件电路图。
2.写出硬件设计思路和软件设计方法并附上程序框图。
3.整理运行正确的源程序,并加上适当注释。
4.总结实验调试过程中遇到的问题及解决的方法。