微机实验教案111.docx
- 文档编号:27534754
- 上传时间:2023-07-02
- 格式:DOCX
- 页数:68
- 大小:529.66KB
微机实验教案111.docx
《微机实验教案111.docx》由会员分享,可在线阅读,更多相关《微机实验教案111.docx(68页珍藏版)》请在冰豆网上搜索。
微机实验教案111
2010-2011学年度第一学期
微机原理实验教案
陈善荣
物理科学与信息工程学院
《微机原理与接口技术》实验安排表
实验时间
班级
第一组
第二组
第三组
08电科1
星期一5、6节
星期三1、2节
08电科2
星期三3、4节
08电子1
星期一3、4节
星期一7、8节
星期二7、8节
08电子2
星期四1、2节
星期二7、8节
08通信1
星期三7、8节
星期三9、10节
星期二9、10节
08通信2
星期二1、2节
星期二9、10节
实验项目
教学周次
实验项目名称
对应的实验指导书的内容
汇编语言程序设计指导书(电子文档)
微机原理与接口实验指导书(2006.7)
4
1、熟悉汇编语言的编程环境
实验一熟悉汇编语言的编程过程
5
2、循环程序设计实验
实验五循环程序设计
6
3、子程序设计实验
实验七子程序设计
7
4、中断程序设计实验
P39实验八
8
5、数字钟设计实验
P41实验九
9
5、数字钟设计实验
P41实验九
10
6、8253定时/计数器实验
P30实验六
11
7、8255并口可编程实验
P24实验四
12
8、模数转换ADC0809
P17实验一
13
9、数模转换DAC0832
P20实验二
14
10、小型直流电机调速实验
P57实验十三
15
11、双机通信实验
P44实验十
注意事项:
1、实验室位置:
第三教学楼3607(商学院办公室楼上);
2、中午实验的同学12:
30分开始,其它按照学校作习时间表;
3、每次实验前写好预习报告,进入实验室时指导老师检查合格后方可进行实验,实验过程中认真记录实验结果和出现的问题,各组独立完成实验,并按规定交实验报告(每个实验做完当堂交报告)。
4、分组:
08电科1
(1)=学号前36,08电科1
(2)=余下的37人;
08电科2=全班37人
08电子1
(1)=学号前32,08电子1
(2)=学号前33-64,08电子1(3)=余下的18人,
08电子2
(1)=学号前32,08电子2
(2)=余下的12人
08通信1
(1)=学号前30,08通信1
(2)=学号前31-60,08通信1(3)=余下的9人
08通信2
(1)=学号前30,08通信2
(2)=余下的20人
实验1熟悉汇编语言的编程环境
[实验目的]
1.学习并掌握VisualASM软件的使用;
2.学习在MSDOS方式下的手工汇编方式;
3.学习Debug.exe软件的使用方法;
[实验重点和难点]
1.Debug命令
[实验课时]
2学时
[实验仪器]
联想启天2400微型计算机。
[实验原理]
1.80X86微处理的编程结构
1.18086/8088微处理器的内部编程结构
1.28086/8088的内部寄存器
2.VisualASM的使用方法
选择工作目录;编写源程序->保存源程序->汇编源程序->链接目标码->运行/调试程序;
3.手工汇编
运行“cmd.exe”进入MSDOS方式,用记事本等文本编辑工具软件编写源程序并以“.asm”扩展名存盘->进入到工作目录->汇编源文件,运行“masm文件名”->链接目标文件,运行“link文件名”->运行可执行文件,“文件名.exe”
4.DEBUG命令
常用命令:
汇编A;反汇编U;查看内存D;修改寄存器R;修改内存命令:
E;单步命令:
T;单步命令:
P;运行命令:
G等
[实验内容与步骤]
1.用VISUAL ASM的建立一个汇编语言程序;输入如下程序并存盘。
datasegment
messagedb"HelloWorld!
",'$'
dataends
codesegment
assumecs:
code,ds:
data
begin:
movax,data
movds,ax
movdx,offsetmessage
movah,9
int21h;显示字符串
movah,0
int16h;等待键盘输入,暂停程序运行
movah,4ch
int21h;退出程序
codeends
endbegin
汇编、链接、运行该程序,记录运行结果:
2.将上述程序复制到记事本,另存为a1.asm。
然后手工编译运行程序。
2.1“另存为”对话框的选择保存路径“C:
\dvcc8086”;“保存类型”选择“所有文件”,文件名填“a1.asm”;
2.2“开始”菜单“运行。
。
。
”执行命令“cmd”,进入MSDOS方式,执行“cd\dvcc8086”转换到工作目录“c:
\dvcc8086”下;
2.3执行“masma1.asm”将a1.asm汇编成目标代码;
2.4执行“linka1.obj”将a1.obj连接生成可执行文件“a1.exe”
2.5执行“a1.exe”或“a1”可以得到程序的执行结果。
3.用DEBUG命令调试运行上述程序
3.1同2.2
3.2执行“debuga1.exe”,显示“-”号提示符
3.3执行“u”并按“enter”键,可以看到从“begin”行开始的程序代码,该命令为反汇编命令;
3.4连续按“p”+“enter”,可以一步一步、执行程序,并显示每一步的执行结果;也可以按“t”+“enter”,但二者不同的是:
后者会进行中断子程序中去,之后就看不懂了。
3.5按“g”+“enter”执行程序,可以得到2中的运行结果,按“q”+“enter”退出。
4.其它DEBUG命令使用,记录命令执行前和执行后的结果
(1)键入DEBUG进入DEBUG控制状态,显示提示符'-'。
(2)用命令F10010F'A'将'A'的ASCII码填入内存。
(3)用命令D10010F观察内存中的十六进制码及屏幕右边的ASCII字符。
(4)用命令F11011F41重复上二项实验,观察结果并比较。
(5)用命令E100303132……3F将30H-3FH写入地址为100开始的内存单元中,再用D命令观察结果,看键入的十六进制数是什么字符的ASCII码?
(6)用H命令检查下列各组十六进制数加减结果并和你的手算结果比较:
A)34H,22HB) 56H,78H C)A5,79HD)1284H,5678HE)A758H,347FH
(7)用R命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF和AF的内容。
(8)用R命令将AX,BX内容改写为1050H及23A8H。
5.用DEBUG调试指令,输入以下程序段
MOVBX,1000
MOVCX,10
SUBAX,AX
LOP:
ADDAL,[BX]
ADCAH,0
INCBX
J:
LOOPLOP
INT3
记录每一个步骤的执行执行结果。
(1)用A命令将程序键入到100H开始的内存中,在键入时记下标号LOP和J的实际地址,在键入LOOP指令时LOP用实际地址值代替。
(2)用命令NAA将此程序命名为文件AA(文件名可任取)。
(3)用R命令将BX:
CX改为程序长度值(即最后一条指令后面的地址减去开始地址)。
(4)用命令W100将此程序存到AA命名的磁盘文件中。
(5)用命令Q退出DEBUG。
(6)用命令DEBUGAA再次调入DEBUG和文件AA,可用U命令检查调入程序。
若调入DEBUG时忘了加AA文件名,可用N命令和L命令将文件调入。
(7)用E命令在内存地址1000H处键入16个数字
(8)用命令G=100J(J用实际地址代替),使程序运行并停在断点J上,检查AX,BX的值是否符合你的预计值。
(9)用T命令运行一步,观察程序方向(IP值)和CX值是否与你的估计一样,若不一样,检查程序是否有错。
(10)重复GJ与T,再检查AX是否正确。
(11)用G命令使程序运行到结束,检查AX值是否正确。
[本实验注意事项]
1.第一次实验,请仔细按照指导书操作,以免出现莫名其妙的错误
[实验总结]
1.
2.
[附实验参考程序]
1.
2.
实验2 循环程序设计实验
[实验目的]
1.掌握循环程序和排序程序设计方法。
2.掌握带符号数的比较转移指令:
JL,JLE,JG,JGE;
3.伪指令EQU及操作符'$'的使用;
[实验重点和难点]
1.转移指令的使用
[实验课时]
2学时
[实验仪器]
联想启天2400微型计算机。
[实验原理]
1.参考教材的汇编语言程序设计
[实验内容与步骤]
1.简单的循环程序。
datasegment
stringdb“Helloworld”
codesegment
assumecs:
code,ds:
data
begin:
movax,ds
movds,ax
movcx,7
movbx,offsetstring
next:
movdl,[bx]
movah,2
int21h
incbx
loopnext
movah,0
int16h
movah,4ch
int21h
codeends
endbegin
编译上面的程序。
指出其中的错误并改正错误。
2.多重循环
CODESEGMENT
ORG100H
ASSUMECS:
CODE,DS:
CODE
MAIN:
JMPSTART
ARRAYDW1234H,5673H,7FFFH,8000H,0DFFH
DW0AB5H,0369H,005FH,5634H,9069H
COUNTEQU$-ARRAY
START:
MOVCX,COUNT
SHRCX,1
DECCX
MOVBL,-1
AGAIN:
MOVDX,CX
ANDBL,BL
JEEXIT
XORBL,BL
XORSI,SI
AGAIN1:
MOVAX,ARRAY[SI]
CMPAX,ARRAY[SI+2]
JLENCHG
XCHGARRAY[SI+2],AX
MOVARRAY[SI],AX
MOVBL,-1
NCHG:
INCSI
INCSI
DECDX
JNZAGAIN1
LOOPAGAIN
EXIT:
INT20H
CODEENDS
ENDMAIN
输入,汇编并连接此程序。
忽略连接时的无堆栈告警。
在DEBUG下运行此程序,记录运行结果。
将转移指令JLE改为JBE,JGE和JAE,分别运行并记录排序结果。
[本实验注意事项]
1.
2.
[实验总结]
1.
2.
[附实验参考程序]
1.
2.
实验3 子程序设计实验
[实验目的]
1.掌握利用堆栈传递参数的子程序调用方法。
2.掌握子程序递归调用方法。
3.过程调用伪指令:
PROC,ENDP,NEAR和FAR。
4.8088指令:
CALL,RET,RETn。
5.利用RET指令退出EXE文件的方法。
[实验重点和难点]
1.利用堆栈传递参数的子程序调用方法;
[实验课时]
2学时
[实验仪器]
联想启天2400微型计算机。
[实验原理]
1.参考教材的汇编语言程序设计
2.
[实验内容与步骤]
1.利用堆栈传递参数的子程序调用(求累加和)
程序内容:
STACKSEGMENTSTACK
DB256DUP(0)
STACKENDS
DATASEGMENT
ARY1DB1,2,3,4,5,6,7,8,9,10
COUNT1EQU$-ARY1
SUM1DW?
ARY2DB10,11,12,13,14,15,16,17,18
COUNT2EQU$-ARY2
SUM2DW?
DATAENDS
MAINSEGMENT
ASSUMECS:
MAIN,DS:
DATA,SS:
STACK
STARTPROCFAR
PUSHDS
XORAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVAX,COUNT1
PUSHAX
LEAAX,ARY1
PUSHAX
CALLFARPTRSUM
MOVAX,COUNT2
PUSHAX
LEAAX,ARY2
PUSHAX
CALLFARPTRSUM
RET
STARTENDP
MAINENDS
PROCESEGMENT
ASSUMECS:
PROCE
SUMPROCFAR
MOVBP,SP
MOVCX,[BP+6]
MOVBX,[BP+4]
XORAX,AX
ADN:
ADDAL,[BX]
ADCAH,0
INCBX
LOOPADN
MOV[BX],AX
RET4
SUMENDP
PROCEENDS
ENDSTART
操作步骤:
(1)输入,汇编并将此程序连接成EXE文件。
(2)用DEBUG的断点命令和T命令运行此程序,观察并记录每次过程调用及进出栈指令前后(带';'的语句)的SP和堆栈内容。
(3)记录最后结果:
SUM1,SUM2的段及偏移地址和它们的内容。
STACKSEGMENTSTACK
DB256DUP(0)
STACKENDS
DATASEGMENT
ARY1DB1,2,3,4,5,6,7,8,9,10
COUNT1EQU$-ARY1
SUM1DW?
ARY2DB10,11,12,13,14,15,16,17,18
COUNT2EQU$-ARY2
SUM2DW?
DATAENDS
MAINSEGMENT
ASSUMECS:
MAIN,DS:
DATA,SS:
STACK
STARTPROCFAR
PUSHDS;将DS的值压入堆栈
XORAX,AX
PUSHAX;将AX的值0压入堆栈
MOVAX,DATA
MOVDS,AX
MOVAX,COUNT1
PUSHAX;将AX的值----个数压入堆栈
LEAAX,ARY1
PUSHAX;将AX的值---变量ARY1的偏移地址压入堆栈
CALLFARPTRSUM
MOVAX,COUNT2
PUSHAX
LEAAX,ARY2
PUSHAX
CALLFARPTRSUM
RET
STARTENDP
MAINENDS
PROCESEGMENT
ASSUMECS:
PROCE
SUMPROCFAR
MOVBP,SP
MOVCX,[BP+6];CX存放变量的个数
MOVBX,[BP+4];指向第一个变量
XORAX,AX;将AX清零
ADN:
ADDAL,[BX]
ADCAH,0
INCBX
LOOPADN
MOV[BX],AX;此时BX的值为SUM1的偏移地址,
RET4;先将IP和CS弹出,再将SP=SP+4
SUMENDP
PROCEENDS
ENDSTART
下一个指令IP低8位
下一个指令IP高8位
原段地址CS低8位
原段地址CS高8位
数据偏移地址低8位
数据偏移地址高8位
个数10低8位
个数10高8位
0
0
DL
DH
2.子程序递归调用(求阶乘)
程序内容:
STACKSEGMENTSTACK
DB100HDUP(?
)
STACKENDS
DATASEGMENT
RESULDW?
DATAENDS
CODESEGMENT
MAINPROCFAR
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
PUSHDS
SUBAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVAX,5
CALLFACT
MOVRESUL,AX
RET
FACTPROC
ANDAL,AL
JNEIIA
MOVAL,1
RET
IIA:
PUSHAX
DECAL
CALLFACT
X2:
POPCX
MULCL
RET
FACTENDP
MAINENDP
CODEENDS
ENDSTART
操作步骤:
数值4的低8位
数值4的高8位
过程1下一条指令(标号X2)IP的低8位
过程1下一条指令(标号X2)IP的高8位
数值5的低8位
数值5的高8位
主程序下一条指令(MOVRESUL,AX)IP的低8位
主程序下一条指令(MOVRESUL,AX)IP的高8位
0
0
DL
DH
(1)将程序输入,汇编并连接成EXE文件。
(2)用DEBUG的断点和T命令检查并记录每层递归嵌套过程的堆栈和AL内容。
(3)修改源程序,将阶乘数5改为本程序的最大允许值(是多少?
),重新汇编连接之。
用DEBUG运行并记录RESUL单元内容。
(4)若要在DOS命令下直接运行并显示阶乘结果(十六进制形式),试修改程序并调试运行。
(机动)
[本实验注意事项]
1.
2.
[实验总结]
1.
2.
[附实验参考程序]
1.
2.
实验4中断程序设计实验
[实验目的]
1.熟悉PC机系列从中断请求到中断响应处理、中断返回的整个中断过程和详细流程;
2.熟悉掌握中断有关概念
3.了解8259的原理及使用方法
4.学会中断服务程序的编写、入口地址的设置和将用户中断源引入的方法
[实验重点和难点]
1.中断服务程序的编写
[实验课时]
2学时
[实验仪器]
联想启天2400微型计算机。
[实验原理]
1.中断向量的装入
中断向量并非常驻内存,而是开机上电时,由程序装入内存指定的中断向量表中。
(1)用MOV指令,假设中断类型号为60H,中断服务程序的段基址是SEG_INTR,偏移是OFFSET_INTR,则填写中断向量表的程序为:
CLI;关中断
CLD;内存地址加1
MOVAX,0
MOVES,AX;给ES赋值
MOVDI,4*60H;中断向量指针->DI
MOVAX,OFFSET_INTR;中断服务程序偏移值->AX
STOSW;AX->[DI][DI+1]
MOVAX,SEG_INTR;中断服务程序段基址->AX
STOSW;AX->[DI+2][DI+3]
STI;开中断
(2)将中断服务程序的入口地址直接写入中断向量表
MOVAX,00H
MOVES,AX
MOVBX,60H*4;中断号*4->BX
MOVAX,006DH;中断服务程序偏移地址
MOVES:
[BX],AX;装入偏移地址
PUSHCS
POPAX;获取中断服务程序的段基址
MOVES:
[BX+2],AX;装入段基址
2.中断向量的修改
(1)保存原中断向量(例1CH)的入口地址
MOVAL,N
MOVAH,35H
INT21H
MOVOLD_INT_SEG,EX
MOVOLD_INT_OFF,BX;取原中断向量的入口地址并保存
(2)设置新的中断向量N的入口地址
MOVAL,N
MOVAH,25H
MOVDX,SEGINT_PR
MOVDS,DX
MOVDX,OFFSETINT_PR
INT21H
(3)恢复原中断向量
MOVAL,N
MOVAH,25H
MOVDX,OLD_INT_PR
MOVDS,DX
MOVDX,OLD_INT_PR
INT21H
3.主程序结构
CLI;关中断
…;初始化部分,保存原中断向量N的入口地址
…;设置新的中断入口地址
STI;开中断
……;主程序的其它处理
INTN;(调用中断)
……;主程序的其它处理
CLI;关中断
;恢复原来的借用的中断向量
STI;开中断
MOVAX,4C00H;退出程序,回到DOS
INT21H
4.中断程序结构
INT-PRPROCFAR
CLI
……保护现场
SETI
……(中断主程序)
CLI
……恢复现场
SETI
IRET
INT-PRENDP
[实验内容与步骤]
1.结合前几次实验的内容,编写一个简单的显示字符串的小程序,并调试运行
;显示字符串的简单程序
d_segsegment
msgdb"HelloWorld!
",'$'
d_segends
c_segsegment
assumecs:
c_seg,ds:
d_seg
start:
movax,d_seg
movds,ax
movcx,4
l1:
movdx,offsetmsg
movah,9h
int21h
deccx
jzexit1
jmpl1
exit1:
movax,4c00h
int21h
c_segends
endstart
2.将上述显示部分功能写成子程序调用的方式,再调试运行
;用子程序的方式实现显示字符串
d_segsegment
msgdb"HelloWorld!
",'$'
d_segends
c_segsegment
assumecs:
c_seg,ds:
d_seg
mainprocfar
calldisp
calldisp
exit1:
movax,4c00h
int21h
mainendp
dispprocnear
movax,d_seg
movds,ax
movdx,offsetmsg
movah,9h
int21h
ret
dispendp
c_segends
endmain
3.将上述子程序写成中断程序如67H中断(系统为用户预留),并调试运行
;用中段的方式实现显示字符串
d_segsegment
msgdb"HelloWorld!
",'$'
old_int_segdw0
old_int_offdw0
d_segends
s_segsegmentstack
db250dup(0)
s_segends
c_segsegment
assumecs:
c_seg,ds:
d_seg,ss:
s_seg
mainprocfar
movax,d_seg
movds,ax
callinit_int
int67h
int67h
int67h
call
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 实验 教案 111
![提示](https://static.bdocx.com/images/bang_tan.gif)