微机原理及应用实验教程参考答案.docx
- 文档编号:12288621
- 上传时间:2023-06-05
- 格式:DOCX
- 页数:42
- 大小:30.21KB
微机原理及应用实验教程参考答案.docx
《微机原理及应用实验教程参考答案.docx》由会员分享,可在线阅读,更多相关《微机原理及应用实验教程参考答案.docx(42页珍藏版)》请在冰点文库上搜索。
微机原理及应用实验教程参考答案
微机原理及应用实验教程参考答案
实验一DEBUG调试程序
一、实验目的
掌握DEBUG调试软件的基本命令。
为今后编程调试,打下基础。
二、实验内容:
DEBUG.EXE程序是专门为分析、研制和开发汇编语言程序而设计的一种调试工具,具有跟踪程序执行、观察中间运行结果、显示和修改寄存器或存储单元内容等多种功能。
它能使程序设计人员或用户触及到机器内部,因此可以说它是80X86CPU的心灵窗口,也是我们学习汇编语言必须掌握的调试工具。
WINDOWS操作系统安装时自带有DEBUG.EXE程序,不需另外安装。
1、DEBUG程序的使用
在DOS提示符下键入命令:
C:
\>DEBUG [盘符:
][路径][文件名.EXE][参数1][参数2]
这时屏幕上出现DEBUG的提示符“-”,表示系统在DEBUG管理之下,此时可以用DEBUG进行程序调试。
若所有选项省略,仅把DEBUG装入内存,可对当前内存中的内容进行调试,或者再用N和L命令,从指定盘上装入要调试的程序;若命令行中有文件名,则DOS把DEBUG程序调入内存后,再由DEBUG将指定的文件名装入内存。
2、DEBUG的常用命令
(1)汇编命令A
格式:
A[起始地址]或A ;每输入完一条指令,用回车键来确认。
功能:
将输入源程序的指令汇编成目标代码并从指定地址单元开始存放。
若缺省起始地址,则从当前CS:
100(段地址:
偏移地址)地址开始存放。
A命令是按行进行汇编,主要是用于小段程序的汇编或对目标程序的修改,具有检查错误的功能。
如有错误,用^Error提示。
然后重新输入正确命令即可。
注:
DEBUG的A命令中数字部分输入的默认格式是16进制。
如输入10,对于计算机而言,就是10H。
另外A命令不支持标识符的输入。
只能用准确的段地址:
偏移地址来设置跳转的位置。
(2)反汇编命令U
格式1:
U[起始地址]
格式2:
U[起始地址][结束地址|字节数]
功能:
格式1从指定起始地址处开始固定将32个字节的目标代码转换成汇编指令形式,缺省起始地址,则从当前地址CS:
IP开始。
格式2将指定范围的内存单元中的目标代码转换成汇编指令。
(3)显示、修改寄存器命令R
格式:
R[寄存器名]或R
功能:
若给出寄存器名,则显示该寄存器的内容并可进行修改。
缺省寄存器名,则按以下格式显示所有寄存器的内容及当前值(不能修改)。
AX=0000 BX=0004 CX=0020 DX=0000 SP=0080 BP=0000 SI=0000
DI=0000 DS=3000 ES=23A0 CS=138E IP=0000
NVUPDIPLNZNAPONC
138E:
0000MOVAX,1234
-RAX ;输入命令
AX0014 ;显示AX的内容
:
;供修改,不修改按回车。
若对标志寄存器进行修改,输入:
-RF
屏幕显示如下信息,分别表示OF、DF、IF、SF、ZF、AF、PF、CF的状态。
NVUPDIPLNZNAPONC
不修改按回车键。
要修改需个别输入一个或多个此标志的相反值,再按回车键。
R命令只能显示、修改16位寄存器。
(4)显示存储单元命令D
格式1:
D[起始地址]
格式2:
D[起始地址][结束地址|字节数]
功能:
格式1从起始地址开始按十六进制显示80H(128)个单元的内容,每行16个单元,共8行,每行右边显示16个单元的ASCII码,不可显示的ASCII码则显示“·”。
格式2显示指定范围内存储单元的内容,其他显示方式与格式1一样。
如果缺省起始地址或地址范围,则从当前的地址开始按格式1显示。
例如:
-D200 ;表示从DS:
0200H开始显示128个单元内容
-D100120 ;表示显示DS:
0100-DS:
0120单元的内容
说明:
在DEBUG中,地址表示方式有如下形式:
段寄存器名:
相对地址,如:
DS:
100
段基值:
偏移地址(相对地址),如:
23A0:
1500
(5)修改存储单元命令E
格式1:
E[起始地址][内容表]
格式2:
E[地址]
功能:
格式1按内容表的内容修改从起始地址开始的多个存储单元内容,即用内容表指定的内容来代替存储单元当前内容。
例如:
—E DS:
0100 'VAR' 12 34
表示从DS:
0100为起始单元的连续五个字节单元内容依次被修改为
'V'、'A'、'R'、12H、34H。
格式2是逐个修改指定地址单元的当前内容。
如:
—EDS:
0010
156F:
001041.5F
其中156F:
0010单元原来的值是41H,5FH为输入的修改值。
若只修改一个单元的内容,这时按回车键即可;若还想继续修改下一个单元内容,此时应按空格键,就显示下一个单元的内容,需修改就键入新的内容,不修改再按空格跳过,如此重复直到修改完毕,按回车键返回DEBUG“-”提示符。
如果在修改过程中,将空格键换成按“-”键,则表示可以修改前一个单元的内容。
(6)运行命令G
格式:
G[=起始地址][第一断点地址[第二断点地址……]
功能:
CPU从指定起始地址开始执行,依次在第一、第二等断点处中断。
若缺省起始地址,则从当前CS:
IP指示地址开始执行一条指令。
最多可设置10个断点。
(7)跟踪命令T
格式:
T[=起始地址][正整数];缺省时执行一条指令
功能:
从指定地址开始执行‘正整数’条指令。
若缺省‘正整数’,表示执行一条指令,若两项都缺省,表示从当前CS:
IP指示地址开始执行一条指令。
(8)指定文件命令N
格式:
N<文件名或扩展名>
功能:
指定即将调入内存或从内存写入磁盘的文件名。
该命令应该用在L命令和W命令之前。
(9)装入命令L
格式1:
L[起始地址][盘符号][扇区号][扇区数]
格式2:
L[起始地址]
功能:
格式1根据盘符号,将指定扇区的内容装入到指定起始地址的存储区中。
格式2将N命令指出的文件装入到指定起始地址的存储区中,若省略起始地址,则装入到CS:
100处或按原来文件定位约定装入到相应位置。
(10)写磁盘命令W
格式1:
W<起始地址>[驱动器号]<起始扇区><扇区数>
格式2:
W[起始地址]
功能:
格式1把指定地址开始的内容数据写到磁盘上指定的扇区中。
格式2将起始地址的BX×10000H+CX个字节内容存放到由N命令指定的文件中。
BX中存放程序段地址的末地址与首地址的差(通常程序存放在一个段中,即BX=0),CX中存放偏移地址的末地址与首地址的差。
在格式2的W命令之前,除用N命令指定存盘的文件名外,还必须将要写的字节数用R命令送入BX和CX中。
(11)退出命令Q
格式:
Q
功能:
退出DEBUG,返回到操作系统。
以上介绍的是DEBUG常用命令,其他命令请参考有关书籍。
练习程序:
1。
将0-99等100个数依次存放到1000:
0000为首地址的存储单元中。
xxxx:
0100 MOVAX,1000 ;数据段地址
MVDS,AX
XORBX,BX ;清零
MOVCX,0064 ;循环次数
MOVAL,00
xxxx:
010C MOV[BX],AL
INCAL
DAA ;加法的十进制调整
INCBX
LOOP 010C ;跳转到010c处
INT03
所对应的宏汇编格式的程序:
DATASEGMENT
32DBDUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,1000H
MOVDS,AX
XORBX,BX
MOVCX,0064H
MOVAL,00H
A1:
MOV[BX],AL
INCAL
DAA
INCBX
LOOPA1
MOVAX,4C00H
INT21H
CODE ENDS
ENDSTART
三、实验步骤:
通过练习程序,熟悉相关DEBUG的命令。
(1)用A命令输入相关程序。
(2)保存该程序到硬盘中。
1)先要计算该程序的大小。
分别在BX和CX送入相应的数值。
2)用N命令给程序起文件名。
例:
-NC:
\STU\文件名.COM。
此时保存的文件后缀名只能是.COM的(或缺省不要后缀名)。
3)用W命令将程序写入到一个指定的地方或由计算机选择转载地址。
例:
-Wxxxx:
xxxx 或-W
(3)用Q命令退出DEBUG。
(4)用DEBUG路径\文件名.COM的方式,将刚才保存的文件重新装入到内存。
(5)用U命令,查看程序转载的地址。
(6)用G命令运行程序。
例:
-G=xxxx:
xxxx 从程序转载处的地址开始运行
(7)查看结果。
如果结果在寄存器中,用R命令查看。
如果结果在存储单元中,用D命令查看。
实验二循环程序设计
一、实验目的
1、加深对循环结构的理解。
2、掌握循环结构程序设计的方法。
3、熟练掌握调试循环程序的方法。
二、实验内容
编制程序
1、使S=1+2*3+3*4+…+N*(N+1),直到N*(N+1)项大于200为止
2、求某数据区内负数的个数。
设数据区的第一个单元存放数据的个数,从第二个单元开始存放数据,在最后一个单元存放结果。
参考程序一如下:
STACKSEGMENTSTACK
DB32DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE
START:
MOVDX,0001H
MOV BL,02H
A1:
MOV AL,BL
INC BL
MUL BL
ADD DX,AX
CMP AX,00C8H
JNA A1
INT 03H
CODE ENDS
END START
参考程序二、(数据段内的数据可根据需要改变)
STACKSEGMENTSTACK
DW64DUP(?
)
STACKENDS
DATASEGMENT
DB06H,12H,88H,82H,90H,22H,33H
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,SS:
STACK,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVDI,0000H
MOVCL,[DI]
XORCH,CH
MOVBL,CH
INCDI
A0:
MOVAL,[DI]
TESTAL,80H
JEA2
INCBL
A2:
INCDI
LOOPA0
MOV[DI],BL
MOVAX,4C00H
INT21H
CODEENDS
ENDSTART
三、实验步骤:
(1)用编辑软件如:
EDIT,输入源程序,并保存,后缀名为.ASM。
(2)用MASM.EXE编译源程序,编译无错后,生成相应的OBJ目标文件。
(3)用LINK.EXE连接OBJ文件,生成可执行的EXE文件。
(4)运行程序:
根据需要,可选择直接通过文件名的方式运行程序,或者是用DEBUG将可执行的EXE文件跳入内存后,用G命令运行。
例:
C:
\>DEBUG文件名.EXE
-U ;先用反汇编来查看源程序装入的地址和数据段的地址
:
-G=xxxx:
xxxx ;从程序装入的地址处,开始运行程序
(5)查看实验结果。
(6)也可使用EMU8086软件进行调试和运行。
实验三排序程序设计
一、实验目的
1、掌握分支、循环、子程序调用等基本的程序结构。
2、学习综合程序的设计、编制及调试
二、实验内容
在数据区中存放着一组数,数据的个数就是数据缓冲区的长度,要求用大数沉底法(或冒泡法)对该数据区中数据按递增关系排序。
设计思想:
A、从最后一个数(或者第一个数)开始,依次把相邻的两个数进行比较,即第N个数与第N-1个数比较,第N-1个数与第N-2个数比较等等;若第N-1个数大于第N个数,则两者交换,否则不交换,直到N个数的相邻两个数都比较完为止。
此时,N个数中的最小数将被排在N个数的最前列。
B、对剩下的N-1个数重复上步,找到N-1个数中的最小数。
C、重复第二步,直到N个数全部排序好为止。
编程:
将DATA数据区内的10个16位有符号二进制数,由小到大排序,结果放在原数据区。
这16个数是:
6666H,7777H,8888H,9999H,0AAAAH,0BBBBH,0CCCCH,0DDDDH,0EEEEH,0FFFFH
参考程序:
DATA SEGMENT
DW6666H,7777H,8888H,9999H,0AAAAH,0BBBBH,0CCCCH,0DDDDH,0EEEEH,0FFFFH
DATA ENDS
CODE SEGMENT
ASSUME CS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVCX,9
L1:
MOVDX,CX
MOVBX,0
L2:
MOVAX,[BX]
INCBX
INCBX
CMPAX,[BX]
JLE DONE ;小于或等于转移
XCHG[BX],AX
DECBX
DECBX
MOV[BX],AX
INCBX
INCBX
DONE:
DECDX
JNE L2
LOOP L1
MOVAX,4C00H
INT 21H
CODE ENDS
END START
三、实验步骤:
(1)用编辑软件如:
EDIT,输入源程序,并保存,后缀名为.ASM。
(2)用MASM.EXE编译源程序,编译无错后,生成相应的OBJ目标文件。
(3)用LINK.EXE连接OBJ文件,生成可执行的EXE文件。
(4)运行程序:
根据需要,可选择直接通过文件名的方式运行程序,或者是用DEBUG将可执行的EXE文件跳入内存后,用G命令运行。
例:
C:
\>DEBUG文件名.EXE
-U ;先用反汇编来查看源程序装入的地址
:
-G=xxxx:
xxxx ;从程序装入的地址处,开始运行程序
(5)查看实验结果。
实验四系统功能调用
一、实验目的:
1、了解INT21H及INT10H中断系统中各功能块的作用及用法。
2、掌握字符方式下PC机显示器的显示控制。
二、实验内容及步骤:
1、在屏幕上输出HELLOWORLD的字符串。
2、等待键盘输入,无论是小写还是大写字母,均以大写字母显示在屏幕上,数字和其他键无效,回车返回系统。
(做完后,考虑如果要改成数字键有效,字符键无效,应如何编写)
3、在显示器上显示A-Z,26个英文字母。
4、从键盘输入0-F,显示对应不同的背景色。
参考程序一:
DATA SEGMENT
TEXTDB‘HELLOWORLD!
’,0DH,0AH,’$’
DATA ENDS
CODE SEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAH,9
LEADX,TEXT ;或者用MOVDX,OFFSETTEXT
INT21H
MOVAH,4CH
INT21H
CODE ENDS
ENDSTART
参考程序二:
CODESEGMENT
ASSUMECS:
CODE
START:
MOVAH,07H ;等待键盘输入,无回显
INT21H
CMPAL,0DH ;回车键
JZRT
CMPAL, ’z’ ;小写z
JASTART
CMPAL, ’a’ ;小写a
JBL1
SUBAL,20H
JMPL2
L1:
MPAL, ’Z’ ;大写Z
JASTART
CMPAL,’A’ ;大写A
JBSTART
L2:
MOVAH,0EH ;显示字符,也可用21H当中的2号功能代替,显示字符在DL
INT10H
JMPSTART
RT:
MOVAH,4CH ;结束返回系统
INT21H
CODEENDS
ENDSTART
参考程序三:
CODE SEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAL,'A'
A2:
MOVAH,0EH
INT10H
INCAL
CMPAL,'Z'
JBA2
MOVAH,4CH
INT21H
CODE ENDS
ENDSTART
参考程序四:
DATASEGMENT
TBLDB48DUP(0FFH)
DB0,1,2,3,4,5,6,7,8,9
DB39DUP(0FFH)
DB0AH,0BH,0CH,0DH,0EH,0FH
DB57DUP(0FFH)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
STD:
MOVAL,04
MOVAH,00H ;320*200的彩色图形模式
INT10H
ST1:
MOVAH,00H ;读取键盘状态 AL=字符码
INT16H
CMPAL,0DH
JZRTN
MOVBX,OFFSETTBL
XLAT ;(AL+BL)->AL
CMPAL,0FFH
JZST1
MOVBL,AL
MOVBH,00H ;置彩色调色板,BH=彩色调色板ID,BL和ID配套使用的颜色
MOVAH,0BH
INT10H
JMPST1
RTN:
MOVAL,03H ;80*25彩色模式
MOVAH,00H
INT10H
MOVAX,4C00H
INT21H
CODEENDS
ENDSTART
实验五 8253定时/计数器应用实验
5.0基础知识
可编程计数器/定时器接口芯片8253的基本功能是对脉冲信号进行计数。
当它用于对外部事件计数时,它的作用是计数器;当它用于对内部基准时钟计数时,它的作用是定时器。
8253内部有3个独立的计数器,又称为3个通道,具有完全相同的功能,其芯片结构和引脚如图2.3.1所示。
8253有2位地址线A0和A1用于内部寻址,内部地址分配如下:
A1A0
读操作
写操作
00
读通道0当前计数值
写通道0计数初值
01
读通道1当前计数值
写通道1计数初值
10
读通道2当前计数值
写通道2计数初值
11
非法操作
写通道0、1、2控制字
8253每个通道的内部结构主要由三部分组成:
初值寄存器、减1计数器和输出锁存器,其结构如图2.3.2所示。
8253每个通道有6种不同的工作方式,这些工作方式的区别主要体现在GATE信号控制作用以及OUT信号输出波形的不同。
归纳起来,各种工作方式有以下特点:
其中方式0和1输出波形相同,前者为编程触发,后者为GATE升沿触发;方式2和3输出连续波形,常用作分频器,其触发方式既可以采用GATE升沿触发,也可以采用编程触发(当GATE=1时);方式4和5输出波形相同,前者编程触发,后者GATE升沿触发。
所谓编程触发(即软触发)是指对8253某一通道进行编程(写控制字和计数初值或只写计数初值)后,即能触发通道工作;所谓GATE升沿触发(即硬触发)是指对通道编程后,还需要硬件信号GATE升沿才能触发通道工作。
软触发时,一次编程只能触发一次;硬触发时,一次编程后可用GATE升沿多次触发。
需要说明的是,无论是软触发还是硬触发,对于CLK信号都可能是异步的(即触发时序与CLK无关),所以在8253各通道内部,都要采用各种的CLK信号对触发进行同步,具体地说,无论何种触发,都要在其后CLK信号完成一次↑和↓后才能真正实现,其后计数器的减1计数,也是在CLK↓进行的。
这些细节,在后面的实验中请注意观察。
在通道工作过程中,随时可以读取其当前计数值。
如果是静态读取(即在停止计数的情况下),可以直接从通道读取;如果是动态读取(即边计数边读取),则必须先把减1计数器的内容锁存到输出锁存器中,然后才能进行读取。
对8253某个通道进行编程包括写方式控制字和计数初值。
方式控制字只须一个字节,随后的计数初值则可以只写一个字节(8位),也可以写两个字节(16位),要由前面的方式控制字决定。
如果只写一个字节,则另一个字节自动清零。
三个通道的方式控制字都写入同一个控制口(A1A0=11),而计数初值则分别写入各自的通道口(A1A0=00、01、10)。
8253方式控制字的格式是:
其中:
SC=00、01、10为通道选择:
RL=00为输出锁存器锁存当前计数值,
01为只读、写低8位,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 应用 实验 教程 参考答案