微机原理与接口技术实验指导(2010版)
更新时间:2023-04-15 09:23:01 阅读量: 实用文档 文档下载
微型计算机原理与接口技术实验指导(上)
微机应用实验室
2010年9月
前言
本课程是为了配合《微机原理与接口技术》的学习开设的实验课程,目的在于通过实践加深同学们对理论知识的认知和理解,熟悉汇编语言程序的编制和调试,熟悉通用的微机接口电路,为今后的学习和工作打下基础。
由于课程时间安排比较紧,有一些程序设计的基础知识需要同学们自行预习并掌握,主要内容都在本讲义的附录中,这里简单的列举一下,便于大家查找:
1、DOS的使用初步(这一部分由实验辅导教师讲授)
2、Turbo Assembler 的使用
3、Turbo Debugger 的使用
4、接口实验所采用的实验平台TPC-H的基本构成
5、基于TPC-H系统的汇编语言程序设计
2
目录
实验要求及实验报告书写规范 (4)
第一部分汇编语言程序设计 (5)
实验一汇编语言程序的编辑与调试 (6)
实验二顺序程序设计 (8)
实验三循环程序的设计 (11)
实验四分支程序的设计 (19)
实验五子程序结构的设计方法 (25)
实验六图形方式程序设计基础 (30)
第二部分接口技术实验 (49)
实验七可编程定时器/计数器(8253) (52)
实验八中断 (54)
实验九可编程并行接口(8255) (59)
实验十数/模转换器 (64)
实验十一模/数转换器 (66)
实验十二串行通信 (69)
附录一 (71)
附录二 (91)
3
实验要求及实验报告书写规范
实验要求:
1、实验前有预习并写有预习报告(程序框图和源程序)
2、熟悉实验仪器,操作规范、安全
3、能独立完成实验
4、能独立分析并解决实验中出现的问题
5、能独立回答指导教师实验中提出的问题
实验报告书写规范:
实验报告应包括下面内容,可以打印,每次实验上交上次实验的实验报告
1、实验内容
2、实验目的
3、实验原理
4、实验采用的电路图(部分实验没有)
5、程序的流程图
6、源程序
7、实验结果及分析
8、思考题(未布置的省略)
4
实验评分标准
5
第一部分汇编语言程序设计
这一部分含六个实验,同学们可以根据自己的进度适当调整实验的进程,总的原则是要熟练掌握汇编语言程序设计的方法,掌握使用TD进行程序调试的方法,相关内容见附录一。
6
实验一汇编语言程序的编辑与调试【预习准备】
预习附录一的内容,特别是TD的使用部分。
【实验目的】
学习汇编源程序的编辑、编译、链接、执行全过程。
学习编辑文件、TASM、TLINK的使用方法以及汇编语言的语法规则。
学习使用TD对程序进行调试的方法。
【实验1.1】阅读附录一的内容,根据附录一【例1.1】的步骤,将例程输入并完成编译、链接等工作;按照【例1.1】后面的提示,启动TD并进行各项动态调试,逐步熟悉TD的用法;在实验报告上为源程序增加注释。
【实验1.2】下面的程序采用比较法,将一个8位二进制数转换成十进制数显示,其设计方法拙劣,语法错误很多,希望以它为蓝本,练习源程序的编辑、编译、链接和调试。同学应照原样编辑源程序,汇编之后,必定给出若干错误信息,再根据错误提示,修改源程序,直到汇编后没有错误时为止,然后进行链接、执行。正确的执行结果是在屏幕上显示:
100 + 9 = 109
[程序清单]:
;FILENAME:EXA111.ASM
DATA SEGMENT
N1 DW 0809H , AB
N2 DB 100
SUN DB ?
MESG DB ?100+9='
DB 30H , 30H , 30H ; 3个0的ASCII码
DATA ENDS
CODE SEGMENT
7
ASSUME CS: CODE , DS: DATA
BEG: MOV DS , DATA ; 段基址→DS MOV BX , OFFSET SUM
MOV AH , N1 ; 9→AH
MOV AL , N2 ; 100→AL
ADD AH , AL
MOV [BX] , AH ; 和数→SUM单元
CALL N2_10
MOV AH , 9
MOV DX , OFFSET MESG
INT 21H
MOV AH , 4CH
INT 21H
N2_10 PROC ; 二进制数→十进制数ASCII码LAST: CMP [BX] , 100 ; 和数与100比较JC NEXT1 ; 小于100转
SUB [BX] , 100 ; 否则,和数减10O
INC [BX+7] ; 百位数加1JMP LAST
JMP LAST
NEXT1: CMP [BX] , 10 ; 余数与10比较JC NEXT2 ; 小于10转
SUB [BX] , 10 ; 否则,余数减10
INC [BX+8] ; 十位数加1
JMP NEXT1
NEXT2: ADD [BX+9] , SUM ; 生成个位数
RET
N2_10: ENDP
CODE ENDS
END BEG
8
实验二顺序程序设计
【实验目的】
学习汇编语言基本操作指令和伪指令的应用;了解编程的基本方法。
1.示例
【例2.1】变量X,Y为二位数字的ASCII码串,请编写程序计算并显示出下式的值:
Z←X+(Y-15)
解:求一个代数式(或表达式)的值,一般的做法是根据运算符的优先级顺序进行计算,如上式先计算(Y-15),再与X相加,将其结果存放在Z变量中,最后可用DOS功能调用将结果显示出来。程序流程见图2.1。
[程序清单]:
TITLE ASCDAT(COM) ; add &sub ASCII numbers CODESG S EGMENT
ASSUME CS: CODESG, DS: CODESG
ORG 100H
BEGIN: JMP SHORT MAIN
;--------------------------------------------------------
X DB '60' ; ASCII number
Y DB '24'
Z DB ?000‘ , '$‘
MAIN PROC NEAR
MOV DX , CODESG ; initialize DS
MOV DS , DX
MOV AH , 0 ; clear AH
MOV AL , Y+1 ; load Y‘s low order
SUB AL , 05 ; sub low order digit
AAS ; adjust for sub
MOV Z+2 , AL ; put result in Z‘s low order
MOV AL , Y ; load y's high order
图2.1例2.1的程序框图
9
SBB AL , 01 ; sub digit with carry
AAS ; adjust for sub
XCHG AL , Z+2 ; exchange lower-order in AL
ADD AL , X+1 ; add lower-order in AL
AAA ; adjust for add
XCHG AL , Z+2 ; exchange high_order in AL
ADC AL , X ; add high_order digit
AAA ; adjust for add
MOV Z+1 , AL ; store high_order result
MOV Z , AH ; store carry
OR Z , 30H ; string should be
OR Z+1 , 30H ; ASCII string
OR Z+2 , 30H
MOV DX , OFFSET Z ; offset of string Z
MOV AH , 9 ; display string function
INT 21H ; call DOS
MOV AX , 4C00H ; return
INT 21H
MAIN ENDP
;--------------------------------------------------------
CODEG ENDS
END BEGIN
10
2.实验题
【实验2.1】编写程序,计算(a + b) – 2 * (a AND b),结果送入S单元。(a,b为字变量)
【实验2.2】设有两个带符号整数变量A和B,求A和B之差并判断结果是否溢出。
【实验2.3】定义一个双字变量VOLUME,从键盘输入长方体的长(a),宽(b)和高(h),计算它的体积,并保存在VOLUME中(注意判断溢出)。
要求:①上述实验中的各变量单元要在数据区定义;②用TD(或debug)调试,运行并修改各变量的值,观察结果存放单元。
11
12
实验三 循环程序的设计
【实验目的】 学习并掌握循环程序的设计方法。
1. 示例
【例3.1】 表格查找tabsrch 仓库管理中,总共存有有关库存品的编号、名称、数量、价格等情况的表格,根据用户提供的编号可以找到有关材料。假设表格中共有6种库存品,表格的格式为:
STOKTAB
DB ?05' , ?Excavatos‘
DB ?08‘ , ?Lifters‘ ┇
试编写一程序,根据用户提供的编号在终端上显示其名称。
根据题目的要求,程序可由三部分组成:
① 输入:接收用户键入的库存品号; ② 查表:根据给定编号在表格中查找
所要求的库存品名称;
③ 输出:显示找到的库存品名称。
其中,第二部分是程序的主体,显然它可以使用循环结构。由于在给定的表格中,编号及库存品名所占的字节数都是相等的,因此在查找时,只要根据编号的地址就可逐项查找。循环的结束条件应该是在找到用户所指定的项时就可退出循环,但还必须考虑在表格中未
查到所需编号的特殊情况。根据以上考虑可画出程序框图如图3.1所示。如用户给出的编号可在表格中查到,则显示出相应的库存品名。如用户不再需要查找,只需按一下??回车‘键就可结束程序。如表格中并无用户给出的编号,则显示Not in table !后结束程序。
图3.1 例3.1的框图
[程序清单]:
;.PROGRAM TITLE GOES
; HERE--tabsrch
; Table search
;----------------------------------------
datasg segment para ? data‘
mess1 ld ?stock nember?‘ , 13 ,10 , ?$‘
stoknin label byte
max db 3
act db ?
stokn db 3 dup (?)
stoktab db ?05‘ , ?Excavators ‘
db ?08‘ , ? F Lifters ‘
db ?09‘ , ?Presses ‘
db ?12‘ , ? Valves ‘
db ?23‘ , ? Processors ‘
db ?27‘ , ? Pumps ‘
descrn db 14 dup (20h) , 13 , 10 , ?$‘
mess db ?Not in table ! ? , $‖
datasg ends
;---------------------------------------------------------
codesg segment para ?code‘
assume cs: codesg , ds: datasg , es: datasg main proc far
push ds ; save old
;data segment
sub ax , ax ; put zore
; in AX
push ax ; save it
; on stack
mov ax , datasg
mov ds , ax ; into DS
13
;register
mov es , ax ; into ES
; register
; MAIN PART OF PROGRAM GOES HERE
start : lea dx , mess1
; Prompt for stock number
mov ah , 09
int 21h
lea dx , stoknin
mov ah , 0ah
int 21h
cmp act , 0
Je exit
Mov al , stokn ; get stock#
Mov ah , stock+1
Mov cx , 06 ; No. of entries
Lea si , stoktab
a20: cmp ax , word ptr [si] ; stock#: table
je a30 ; equel exit
add si , 14 ; not equal increment
loop a20
lea dx , mess ; not in table
mov ah , 09h
int 21h
jmp exit
a30: mov cx , 07 ; length of descr‘n
lea di , descrn ; addr of descr‘n
rep movsw
lea dx , descrn
mov ah , 09h
int 21h
jmp start
14
exit: ret ; return to DOS
main endp
;----------------------------------------------------------------------------
codesg ends ; end of code segment end main ; end of code assembly
[运行情况]:
C:\>tsrch
stock nember?
23 Processors
stock nember?
27 Pumps
stock nember?
05 Excavators
stock nember?
C:\>tsrch
stock nember?
09 Presses
stock nember?
08 Lifters
stock nember?
12 Valves
stock nember?Not in table!
15
16 【例3.2】建立学生名次表rank
以grade 为首地址的10个字的数组中保存了学生的成绩,其中grade+i 保存学号为i+1的学生的成绩。要求建立一个10个字的rank 数组,并根据grade 中的学生成绩将学生名次填入rank 数组中,其中rank+i 的内容是学号为i+1学生的名次(提示:一个学生的名次等于成绩高于该学生的人数加1)。
本题可以用两重循环结构来实现。内层对应于每个学生的名次计算,外层则解决所有学生的名次计算。由于数组的长度是确定的,因此内、外层均可用计数值来控制循环的结束。在设计多重循环结构时,必须注意内层循环结束后的重新初始化问题。现将寄存器的分配情况说明如下:
AX 存放当前被测学生的成绩;
BX 存放当前被测学生的相对地址指针; CX 内循环计数值;
DX 当前被测学生的名次计数值; SI 内循环测试时的地址指针;
DI 外循环计数值。
程序框图如图3.2所示。
[程序清单]:
datarea segment ; pdefine data segment grade dw 88, 75, 95, 63, 98
dw 78, 87, 73, 90, 60
rank dw 10 dup(?)
datarea ends
;---------------------------------------------------- prognam segment ; define code segment
;----------------------------------------------------- 图3.2 例3.2的程序框图
main proc far
; main part of program
assume cs: prognam , ds: datarea
start:
; Starting execution address, Set up stack
; for return
push ds
; Save old data segment
sub ax , ax ; put zero in AX
push ax ; save it on stack
; set DS register to current data's segment
mov ax , datarea
; datarea segment addr
mov ds , ax ; into DS register
; MAIN PART OF PROGRAM GOES HERE
mov di , 10
mov bx , 0
loop: mov ax , grade [bx]
mov dx , 0
mov cx , 10
lea si , grade
next: cmp ax , [si]
jg no_count
inc dx
no_count: add si , 2
loop next
mov rank [bx] , dx
add bx , 2
dec di
jne loop ; return to DOS
main endp ; end of main part of program ; -----------------------------------------------------------------------------------
17
prognam ends ; end of code segment
end start ; end assemly
使用debug或TD来查看程序的运行结果,可以看出主程序结束时,rank数组已存放了学生的名次。
2.实验题
【实验3.1】用表格形式显示ASCII字符。
实验要求:按15行×16列的表格形式显示ASCII码为10H - 100H的所有字符,即以行为主的顺序及ASCII码递增的次序依次显示对应的字符。每16个字符为一行,每行中的相邻两个字符之间用空白符(ASCII为0)隔开。
提示:
(1) 显示每个字符可使用功能号为02的显示输出功能调用,使用方法如下:
mov ah , 02h
mov dl , 输出字符的ASCII码
int 21h
本题中可把DI初始化为10H,然后不断使其加1(用INC指令) 以取得下一个字符时ASCII码。
(2) 显示空白符时,用其ASCII码0置入DI寄存器。每行结束时,用显示回车(ASCII 为0dh)和换行符(ASCII为0ah)来结束本行并开始下一行。
(3) 由于逐个显示相继的ASCII字符时,需要保存并不断修改dl寄存器的内容,而显示空白、回车、换行符时也需要使用DI寄存器,为此可使用堆找来保存相继的ASCII字符。具体用法是:在显示空白或回车、换行符前用指令
push dx
把DI的内容保存到堆栈中去。在显示空白或回车、换行符后用指令
pop dx
恢复DI寄存器的原始内容。
【实验3.2】统计负数的个数
设数据段有8个有符号数:
18
NUM DB -19,+28,37,-46,+55,61,-74,+255
设计一个程序(不是两个程序)完成两项要求:
(1)统计并且显示负数的个数,存入N单元;找出真值最大的数,存入MAX单元。
(2)并以十六进制的形式,显示在屏幕上,显示格式为:
N=××H
MAX=××H
提示:
①正确的答案是有4个负数,如果你得到3个负数,肯定是错误的。
②最大的真值数应是3DH。
③为了理解汇编语言是怎样对数据进行汇编的,建议在对源程序进行汇编时,键入汇
编参数"/L",即键入:
TASM源文件名/L
键入汇编参数"/L"的目的,是在生成OBJ文件的同时,也生成LST文件。再用编辑文件显示LST文件的内容,就可以看到NUM单元的8个数经汇编后生成的机器数了。
【实验3.3】编程计算:S=1+2+3+…+N ≤100的最大项数N以及对应的和S。
实验要求:
①将最大项数与和数分别存入N和SUM单元,用TD调试,运行程序并检查结果;
②将结果在屏幕上以16进制数显示。显示格式:MAX N = ××H SUM = ××H。
19
实验四分支程序的设计
【实验目的】学习分支程序的结构,掌握具有分支结构程序的设计方法。
1.示例
【例4.1】统计学生成绩result。
设有10个学生的成绩分别为56、69、84、82、73、88、99、63、100和80分。试编制程序分别统计低于60分、60 ~ 69分、70 ~ 79分、80 ~ 89分、90 ~ 99分及100分的人数,并存放到s5、s6、s7、s8、s9及s10单元中。程序框图见图4.1,用debug (或TD)可检查程序运行结果。
[程序清单]:
; PROGRAM TITLE GOES
; HERE -- result
datarea segment
grade dw 56, 69, 84, 82
dw 73, 88, 99, 63
dw 100 ,80
s5 dw 0
s6 dw
图4.1 例4.1的程序框图
20
s7 dw 0
s8 dw 0
s9 dw 0
s10 dw 0
datarea ends
prognam segment
main proc far
assume cs: prognam,
ds: datarea
start:
push ds
sub ax ,ax
push ax
mov ax , datarea
mov ds , ax
; into DS register
; MAIN PART OF PROGRAM
; GOES HERE
mov s5 , 0
; initia1ize counter
mov s6 , 0
mov s7 , 0
mov s8 , 0
mov s9 , 0
mov s10 , 0
mov cx , 10
21
正在阅读:
微机原理与接口技术实验指导(2010版)04-15
福建省公务员行测考试资料分析模拟试题03-08
2014高考化学名师精编拔高点睛专题篇:同分异构体08-07
武汉病毒所微生物学考博真题11-25
田园风格卧室效果图02-09
失败也很美丽作文450字06-29
七年级上语文期中复习卷03-17
可爱的弟弟作文300字07-04
秋之韵作文800字07-07
《软件工程》课程设计任务书02-02
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 微机
- 接口
- 原理
- 指导
- 实验
- 技术
- 2010
- 如何做一名好员工.doc
- 2015年劳动合同书最新版
- 北师大版一年级上册语文教案《山村》教学设计之三
- 2015年欧洲急性心力衰竭院前和院内管理专家共识
- 【范文】争做‘四有’教师”专题师德师风教育活动细化方案
- 农十四师团盐碱地治理项目
- 江苏省徐州地区2022-2022届上学期九年级英语12月月考试卷分类汇
- 影剧院消防安全管理制度示范文本
- 最新农村信用社金融服务收费办法
- 活畜畜产品交易市场建设项目可行性研究报告
- 2022年哈尔滨工业大学深圳研究生院809材料力学考研核心题库
- 申论范文:完善社会保障制度 保持社会和谐稳定
- 人力资源管理师试题之劳动关系配答案
- 新概念英语第二册第66课笔记
- 突发环境污染事故应急处置正式样本
- 南充市高二下学期数学期末试卷及答案(理科)
- 教师编考试教育学笔记
- 哈弗H6 1,5T常见问题集锦
- 班组长培训心得体会10篇
- 武汉工程大学邮电与信息工程学院 大学物理练习册答案上册