内蒙古工业大学微机原理实验指导答案doc.docx
《内蒙古工业大学微机原理实验指导答案doc.docx》由会员分享,可在线阅读,更多相关《内蒙古工业大学微机原理实验指导答案doc.docx(28页珍藏版)》请在冰豆网上搜索。
内蒙古工业大学微机原理实验指导答案doc
被嗅材尊机原理与旅用实验指导布实验
程禹够告
沽说:
信息工程修陇班披,
电877-7班g生名:
Eg
样号,2011202030
实验一编辑、汇编、
连接、调试程序的使用
程序设计A
设计要求
(1)将FFFFH送到AX,SI,DI,BP,DS,ES寄存器
(2)编程(利用DEBUG调试程序,每执行一次T命令后,记录相关寄存器
内容,并判断是否正确。
)程序如下:
CODESEGMENT
ASSUMECS:
CODE
STARTPROCFAR
STTPUSHDS
SUBAX,AX
PUSHAX
MOVAX,0FFFFH
MOVSI,AX
MOVDI,AX
MOVBP,AX
MOVDS,AX
MOVES,AX
RET
STARTENDP
CODEENDS
ENDSTT
B、设计要求
⑴将1,2,3,4,5分别送到数据段偏移地址为1000H,1001H,1002H,1003H,
1004H,单元中。
⑵编程
DATASEGMENT
ORG1000H
DATAENDS
CODESEGMENT
ASSUMECS:
CODE
STARTPROCFAR
STTPUSHDS
SUBAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVAL,1
MOVDS:
[1000H],AL
MOVAL,2
MOVDS:
[1001H],AL
MOVAL,3
MOVDS:
[1002H],AL
MOVAL,4
MOVDS:
[1003H],AL
MOVAL,5
MOVDS:
[1004H],AL
RET
STARTENDP
CODEENDS
ENDSTT
实验二、加法程序设计
设计内容A、设计要求
(1)在数据段偏移地址1000H处开始,连续存放有3字节的数据(高位对应高地址,低位对应低地址),1003H处开始连续存放有两字节的数据(高对高,低
对低),求这两数据之和,并将结果放在流量数据之后。
(eg:
123456H+789AH=12
ACFOH)
(2)编程
DATASEGMENT
ORG1000H
H1DB56HJ34H,12H,9AH,78H
H2DB3DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
STARTPROCFAR
STTPUSHDS
SUBAX,AX
PUSHAX
MOVAX,DATAMOV
DS,AX
MOVSIJOOOH
MOVDI,1003H
MOVBX,1005H
MOVCX,2
CLC
LP:
MOVAL,[SI]
MOVDL,[DI[
ADCAL,DL
MOV[BX],AL
INCSI
INCDI
INCBX
LOOPLP
MOVAL,[SI]
ADCAL,00
MOV[BX],AL
RET
CODEENDP
STARTENDS
ENDSTT
C、设计要求
(1)用串传送指令把A程序的数据块偏移地址1000H开始的区域传递到同一数据段的偏移地址为1003H开始的区域。
用DEBUG查看运行结果。
(2)编程
DATASEGMENTORG
1000H
H1DB56H,34H,12H,9AH,78H
ORG1003H
H2DB56H,34H,12HJ9AH,78H,0F0H,0ACHJ12H
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
STARTPROCFAR
STTPUSHDS
SUBAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AXMOV
ES,AX
LP:
MOVSIJOOOHMOV
DIJ003H
MOVSBMOV
CX,8
INCSI
INCDI
LOOPLP
RET
STARTENDP
CODEENDS
ENDSTT
实验三、查表程序设计
A、设计要求
(1)在数据段偏移地址1000H处,存放0—9的平方值,任给一个自然数M在1010H单元中(0WMW9),查表求出M的平方值,并将结果放入1011单元中。
(2)编程
DATASEGMENT
ORG1000H
TABDB00,01,04,09,16,25,36,49,64,81
ORG1010HMDB4,?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
STARTPROCFAR
STT:
PUSHDS
SUBAX,AX
PUSHAX
MOVAX,DATA
MOVDS3AX
MOVBX,OFFSETTAB
MOVAL,M
XLAT
MOVDS:
[1011H],AL
RET
STARTENDP
CODEENDS
ENDSTT
B、设计要求
(1)编程实现:
将BCD数00H-99H顺序存放到当前数据1000H开始的内存单元中,用DEBUG查看运行结果。
(2)编程
DATASEGMENT
ORG1000H
HDB100DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
STARTPROCFAR
STT:
PUSHDSSUB
AX5AX
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVSI,1000H
MOVAL,0
MOVCX,100
LP:
MOV[SI],AL
ADDAL,1
DAA
INCSI
LOOPLP
RET
STARTENDP
CODEENDS
ENDSTART
实验四、码制的变换程序设计
B、设计要求
(1)把BX中的“1”的个数放到AL中,“0”的个数放到AH中,并在屏幕上分别显示0和1的个数
(2)编程
DATASEGMENT
ORG1000H
HDB000FH
ORG1010H
WDB100DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
STARTPROCFAR
STT:
PUSHDS
SUBAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
CALLZ1
CALLZ2
CALLZ3
CALLZ4
RET
STARTENDP
Z1PROCNEAR
MOVBX,DS:
[1000H]
MOVCX,16
MOVAX,0
CLC
KK:
RCRBX,1
JCAA
ADDAH,1
JMPBB
AA:
ADDAL,1BB:
LOOP
KK
MOVDS:
[1010H],AH
MOVDS:
[1020H],AL
RET
Z1ENDP
Z2PROCNEAR
PUSHAX
PUSHBX
MOVAX,DS:
[1010H]
MOVAH,0
MOVBX,000AH
DIVBL
ADDAH,30H
ADDAL,30H
MOVDS:
[1041H],AH
MOVDS:
[1040H],AL
POPBX
POPAX
RET
Z2ENDP
Z3PROCNEAR
PUSHAX
PUSHBX
MOVAX,DS:
[1020H]
MOVAH,0
MOVBX,000AH
DIVBL
ADDAH,30H
ADDALs30H
MOVDS:
[1044H],AH
MOVDS:
[1043H],AL
POPBX
POPAX
RET
Z3ENDP
Z4PROCNEAR
PUSHAX
PUSHCX
PUSHDX
PUSHSI
MOVCX,6
MOVSI,1040H
LP:
MOVDL,[SI]
MOVAH,2
INT21H
INCSI
LOOPLP
POPSI
POPDX
POPCX
POPAX
RET
Z4ENDP
CODEENDS
ENDSTT
实验五、求最大值的程序设计
A、设计要求
(1)从首地址为BUF开始存放的10个字节无符号数,从这些数中找出最大值,
存入MAX中。
(2)编程
DATASEGMENT
ORG1000H
BUFDB01H302H303H,04H305H306H,07H308H309H,0AH
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
STARTPROCFAR
STT:
PUSHDSSUB
AX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVSIJOOOH
MOVCX,9
MOVAL,[SI]
INCSI
MOVAL,0
LP:
CLC
CMPAL,[SI]
JNCAA
MOVAL,[SI]
AAJNCSI
LOOPLP
MOVDS:
[2000H],AL
RET
STARTENDP
CODEENDS
ENDST1
实验六、软件综合设计
一、实验目的:
1.熟悉并且掌握汇编语言的基本指令及编程方法。
2.掌握用汇编语言编写程序的思路和设计方法。
3.熟练掌握DEBUG调试程序的方法。
二、实验内容:
1.设计课题:
模拟温度测量软件设计
2设计要求:
(1)将首地址为1000H开始存放的10个单字节数据,进行数字滤波。
实现方法是:
找出其中最大值(设子程序名为:
ZMAX)和最小值(设子程序名为:
ZMIN)并从中10个数中去掉最大值和最小值,将剩余的的8个数取平均值后,存放在1010H单元中。
(设子程序名为:
Z1)
(2)将存放在1010H单元中的十六进制数的整数部分转换成非压缩的
BCD码,存放在1020H开始的存储单元中(低位在前,高位在后)。
(设子程序名为:
Z2)
(3)将存放在1020H开始的非压缩BCD码转换成ASCII码。
存放在
1030H开始的存储单元中。
(低位在前,高位在后)(设子程序名为:
Z3)
(4)将存放在1030H开始的ASCII码送CRT显示(高位在前,低位在后)。
(设子程序名为:
Z4)
3、程序结构及编程
DATASEGMENT
ORG1000H
LDB9AH,66H,2EH51AH,5DH,3CH,36H,88H552H,22H
ORG1010H
AVERDB?
ORG1020H
XDB3DUP(?
)
ORG1030H
YDB3DUP(?
)
ORG1050H
HDB4DUP(?
)
ORG1060H
H1DB100DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
STARTPROCFAR
STT:
PUSHDS
SUBAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
CALLZMAX
CALLZMIN
CALLZ1
CALLZ2
CALLZ3
CALLZ4
RET
STARTENDP
ZMAXPROCNEAR
PUSHAX
PUSHCX
PUSHSI
MOVSI,1000H
MOVCX,0009H
MOVALJSI]LP1:
CLC
CMPALJSI]
JNCAA
MOVALJSI]
AA:
INCSI
LOOPLP1
MOVDS:
[1050H],AL
POPSI
POPCX
POPAX
RET
ZMAXENDP
ZMINPROCNEAR
PUSHAX
PUSHCX
PUSHSI
MOVSI,1000H
MOVCX,0009H
MOVAL,[SI]
LP2:
GLC
CMPAL,[SI]
JCBB
MOVAL,[SI]
BB:
INCSI
LOOPLP2
MOVDS:
[1052H],AL
POPSI
POPCX
POPAX
RET
ZMINENDP
Z1PROCNEAR
PUSHAX
PUSHCX
PUSHSIMOVSIJOOOHMOVCX,000AHMOVAX,0000HEE:
ADDAL,[SI]
ADGAH30
INCSI
LOOPEE
SUBAX,DS:
[1050H]
SUBAX,DS:
[1052H]
MOVBL,0008H
DIVBL
MOVDS:
[1010H],AL
POPSI
POPCX
POPAX
RET
Z1ENDP
Z2PROCNEAR
PUSHAX
PUSHBX
MOVAX,DS:
[1010H]
MOVAH,0
MOVBX,000AH
DIVBL;
MOVDS:
[1020H],AH
MOVDS:
[1021H],AL
POPBX
POPAX
RET
Z2ENDP
Z3PROCNEAR
PUSHAX
PUSHBX
MOVAX,DS:
[1020H]
ADDAH,30H
ADDAL.30H
MOVDS:
[1030H],AX
POPBX
POPAX
RET
Z3ENDP
Z4PROCNEAR
PUSHAX
PUSHCX
PUSHDX
PUSHSI
MOVCX,3MOVSIJ032H
LP3:
MOVDL,[SI]MOVAH,2INT21HDECSILOOPLP3
POPSIPOPDXPOPCXPOPAX
RET
Z4ENDP
CODEENDS
ENDSTT
实验七、并行接口芯片的使用
(1)编程要求将开关kO——k7作为输入开关量从8255c口输入,发光二极管
10——17作
为输出开关量从A口输出。
当某个开关闭合式时,对应发光二极管亮。
当按下
(2)编程提示
CODESEGMENT
ASSUMECS:
CODE
STARTPROCFAR
ST1:
PUSHDS
SUBAX,AX
PUSHAX
MOVDS,AX
MOVDX,28BH
MOVAL,89H
OUTDX,AL
LL:
MOVDX,28AH
INAL,DX
MOVDX,288H
OUTDX,AL
MOVAH,0BH
INT21H
CMPAL,OFFH
JNZLL
MOVAH,4CH
INT21H
CODEENDS
ENDST1
实验八、定时/技术器芯片的使用
1、实验内容一
(1)将计数器0设置为方式0,计数初值为N(NW0FH),用手动逐个输入单
脉冲,编程使计数值在屏幕上显示,并同时用逻辑笔观察OUTO电平变化。
(2)编程
CODESEGMENT
ASSUMECS:
CODE
STARTPROCFAR
ST1PUSHDS
SUBAX,AX
MOVDX,283H
MOVAL,36H
OUTDX,AL
MOVAL,3EH
MOVDX,280H
OUTDX,AL
MOVAL,03H
OUTDX,AL
MOVAL,08H
OUTDX,AL
AA:
MOVAL,280H
INAL,DX
ADDAL,30H
MOVDL,AL
MOVAH,2
INT21H
MOVAH,OBH
INT21H
CMPAL,OFFH
JCAA
RET
STARTENDP
CODEENDS
ENDST1
2、实验内容二
(1)将计数器0、计数器1分别设置方式为3,计数初值设为1000,用逻辑笔观察OUT1电平变化。
(2)编程
CODESEGMENT
ASSUMECS:
CODE
STARTPROCFAR
ST1PUSHDS
SUBAX,AX
MOVDX,283H
MOVAL,36H
OUTDX,AL
MOVAL,OE8H
MOVDX,280H
OUTDX,AL
MOVAL,03H
OUTDX,AL
MOVDX,283H
MOVAL,76H
OUTDX,AL
MOVAL,OE8H
MOVDX,281H
OUTDX,AL
MOVAL,03H
OUTDX,AL
MOVAX,4CH
INT21H
STARTENDP
CODEENDSEND
ST1
实验~一、D/A转换接口
实验内容
1、实验电路原理如图,将DAC0832片选端接地址290HoDACO832米用单缓冲方式,具有单极性输入端
2、编程验证DAC0832能够将数字量转换为与之成正比的模拟量填入下表。
3、编程产生以下波形(从Ub输出,用示波器观察波形)
(1)锯齿波参考流程图与编程(图11-2)
*5
四、参考流程图:
图27
程序如下:
CODESEGMENT
ASSUMECS:
CODE
DAPORTEQD298H
ORG1000H
START:
MOVAL,OFFH
DACON1:
MOVDX,DAPORT
OUTDX,AL
MOVCX,400H
DACONR:
LOOPDACON2
NOTAL
JMPDACON1
CODEENDS
ENDSTART
(A)锯齿波
实验十二、A/D转换接口
1、通过实验台左下角屯位器RW1输出0—5V直流电压送入ADC0809通道0,ADC0809的IN0口地址为298H,IN1口地址为299H。
2、编程验证ADC0809能够将模拟量转换为与之成正比的数字量。
3、通过实验台左下角电位器RW1输出0〜5V直流电压送入ADC0809通道0(IN0),编程采集IN0输入的电压,在屏幕上显示出转换后的16进制数据。
ref(+)VCC
6ND
1NM2
JWV
R6
10k
R710k
10
28
27
>CLOCK
IN-2
IN-1
I"26
INI♦空
IN-0
~|ihRUl19k
12346678
22222222
76643210DDDDDDDD
ADD・C
ADD-B
ADD-A
EOC
ALESTftRT
ENABLE
210
AAa
•EOC
7
74LSG2
U9ADC0809
图29模数转换电路
、参考流程图(见图30、31)
COD
读入转换后数据
所该数据吼给BL
从BL中取出数朔和0FH相"
调显示r程序虽示其高“
调显示*程序显示其低叫位
(A)'程序
COD
商AL赋给DlT]
DL加7
DL大于9吗?
DUJI130H|
星示ASC玛为DL的字符
编程如下:
codesegmentassume
cs:
code
start:
movdx,298h;启动A/D转换
器outdx,almovcx.Offh;
延时
delay:
loopdelay
inal,dx;从A/D转换器输入数据
movbl,al;将AL保存到BL
movcl,4shral,cl;将AL右移四
位
calldisp;调显示了程序显示其高四位
moval,blandal,Ofh
calldisp;调显示子程序显示其低四位movah,02mov
dl,20h;加空格符
int21hmovdl,20hint21hpushdx
movah,06h;判断是否有键按下
movdl,Offhint21hpopdxjestart;若没有转STARTmovah,4ch;退出int21h
dispprocnear;显示子程序mov
;比较DL是否>9
;若不大于则为。
・9,加30h为其ASCII码
;否则为A・F,再加7ddd:
;显示movah,02int
dispendpcodeends
dl,al
cmpdl,9
jleddd
adddl,7
adddl,30h21hretendstart