内蒙古工业大学微机原理实验指导答案.docx
《内蒙古工业大学微机原理实验指导答案.docx》由会员分享,可在线阅读,更多相关《内蒙古工业大学微机原理实验指导答案.docx(21页珍藏版)》请在冰豆网上搜索。
内蒙古工业大学微机原理实验指导答案
微型计算机原理与应用实验指导书实验程序报告
学院:
信息工程学院班级:
电子11-1班姓名:
LXY
学号:
2011202030
实验一编辑、汇编、连接、调试程序的使用
程序设计A设计要求
(1)将FFFFH送到AX,SI,DI,BP,DS,ES寄存器
(2)编程(利用DEBUG调试程序,每执行一次T命令后,记录相关寄存器内容,并判断是否正确。
)程序如下:
CODESEGMENT
ASSUMECS:
CODE
STARTPROCFAR
STT:
PUSHDS
SUBAX,AX
PUSHAX
;==============================
MOVAX,0FFFFH
MOVSI,AX
MOVDI,AX
MOVBP,AXMOVDS,AX
MOVES,AX
;==============================
RET
STARTENDP
CODEENDS
ENDSTT
B、设计要求
(1)将1,2,3,4,5分别送到数据段偏移地址为1000H,1001H,1002H,1003H,1004H,单元中。
(2)编程
DATASEGMENT
ORG1000H
DATAENDS
CODESEGMENT
ASSUMECS:
CODE
STARTPROCFAR
STT:
PUSHDS
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
CODEENDSENDSTT
实验二、加法程序设计
设计内容A、设计要求
(1)在数据段偏移地址1000H处开始,连续存放有3字节的数据(高位对应高地址,低位对应低地址),1003H处开始连续存放有两字节的数据(高对高,低
对低),求这两数据之和,并将结果放在流量数据之后。
(eg:
123456H+789AH=12
ACF0H)
(2)编程
DATASEGMENT
ORG1000H
H1DB56H,34H,12H,9AH,78H
H2DB3DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
STARTPROCFAR
STT:
PUSHDS
SUBAX,AX
PUSHAX
MOVAX,DATAMOVDS,AX
;===========================
MOVSI,1000H
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)编程
DATASEGMENTORG1000H
H1DB56H,34H,12H,9AH,78H
ORG1003H
H2DB56H,34H,12H,9AH,78H,0F0H,0ACH,12H
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
STARTPROCFAR
STT:
PUSHDS
SUBAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AXMOVES,AX
;============================
LP:
MOVSI,1000HMOVDI,1003H
MOVSBMOVCX,8
INCSI
INCDI
LOOPLP
RET
STARTENDPCODEENDS
ENDSTT
实验三、查表程序设计
A、设计要求
(1)在数据段偏移地址1000H处,存放0—9的平方值,任给一个自然数M在1010H单元中(0≤M≤9),查表求出M的平方值,并将结果放入1011单元中。
(2)编程
DATASEGMENT
ORG1000H
TABDB00,01,04,09,16,25,36,49,64,81ORG1010HMDB4,?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
STARTPROCFAR
STT:
PUSHDS
SUBAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
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:
PUSHDSSUBAX,AX
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,1JMPBB
AA:
ADDAL,1BB:
LOOPKK
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
POPBXPOPAX
RET
Z2ENDP
;===============================
Z3PROCNEAR
PUSHAX
PUSHBX
MOVAX,DS:
[1020H]
MOVAH,0
MOVBX,000AH
DIVBL
ADDAH,30H
ADDAL,30H
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
BUFDB01H,02H,03H,04H,05H,06H,07H,08H,09H,0AH
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
STARTPROCFAR
STT:
PUSHDSSUBAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVSI,1000H
MOVCX,9
MOVAL,[SI]
INCSI
MOVAL,0
LP:
CLC
CMPAL,[SI]
JNCAA
MOVAL,[SI]
AA:
INCSI
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,2EH,1AH,5DH,3CH,36H,88H,52H,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
MOVAL,[SI]LP1:
CLC
CMPAL,[SI]JNCAA
MOVAL,[SI]
AA:
INCSI
LOOPLP1
MOVDS:
[1050H],AL
POPSI
POPCX
POPAX
RET
ZMAXENDP
;===============================
ZMINPROCNEAR
PUSHAX
PUSHCX
PUSHSI
MOVSI,1000H
MOVCX,0009H
MOVAL,[SI]
LP2:
CLC
CMPAL,[SI]
JCBB
MOVAL,[SI]
BB:
INCSI
LOOPLP2
MOVDS:
[1052H],AL
POPSI
POPCX
POPAX
RET
ZMINENDP
;==================================
Z1PROCNEAR
PUSHAX
PUSHCX
PUSHSI
MOVSI,1000H
MOVCX,000AH
MOVAX,0000H
EE:
ADDAL,[SI]
ADCAH,0
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
;===================================
Z4PROCNEARPUSHAX
PUSHCX
PUSHDX
PUSHSI
MOVCX,3
MOVSI,1032H
LP3:
MOVDL,[SI]
MOVAH,2
INT21H
DECSI
LOOPLP3
POPSI
POPDX
POPCX
POPAX
RET
Z4ENDP
;======================================
CODEENDS
ENDSTT
实验七、并行接口芯片的使用
(1)编程要求将开关k0——k7作为输入开关量从8255c口输入,发光二极管l0——l7作
为输出开关量从A口输出。
当某个开关闭合式时,对应发光二极管亮。
当按下键盘任意键时,退出程序。
(2)编程提示
CODESEGMENT
ASSUMECS:
CODE
STARTPROCFAR
ST1:
PUSHDS
SUBAX,AX
PUSHAX
MOVDS,AX
MOVDX,28BH
MOVAL,89H
OUTDX,AL
LL:
MOVDX,28AHINAL,DX
MOVDX,288H
OUTDX,AL
MOVAH,0BH
INT21H
CMPAL,0FFH
JNZLL
MOVAH,4CH
INT21H
CODEENDS
ENDST1
实验八、定时/技术器芯片的使用
1、实验内容一
(1)将计数器0设置为方式0,计数初值为N(N≤0FH),用手动逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用逻辑笔观察OUTO电平变化。
(2)编程
CODESEGMENT
ASSUMECS:
CODE
STARTPROCFAR
ST1:
PUSHDS
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,0BH
INT21H
CMPAL,0FFH
JCAA
RET
STARTENDP
CODEENDS
ENDST1
2、实验内容二
(1)将计数器0、计数器1分别设置方式为3,计数初值设为1000,用逻辑笔观察OUT1电平变化。
(2)编程
CODESEGMENT
ASSUMECS:
CODE
STARTPROCFAR
ST1:
PUSHDS
SUBAX,AX
MOVDX,283H
MOVAL,36H
OUTDX,AL
MOVAL,0E8H
MOVDX,280H
OUTDX,AL
MOVAL,03H
OUTDX,AL
MOVDX,283H
MOVAL,76H
OUTDX,AL
MOVAL,0E8H
MOVDX,281H
OUTDX,AL
MOVAL,03H
OUTDX,AL
MOVAX,4CH
INT21H
STARTENDP
CODEENDSENDST1
实验十一、D/A转换接口
实验内容
1、实验电路原理如图,将DAC0832片选端接地址290H。
DAC0832采用单缓冲方式,具有单极性输入端
2、编程验证DAC0832能够将数字量转换为与之成正比的模拟量填入下表。
3、编程产生以下波形(从Ub输出,用示波器观察波形)
(1)锯齿波参考流程图与编程(图11-2)
1、通过实验台左下角电位器RW1输出0—5V直流电压送入ADC0809通道0,
ADC0809的IN0口地址为298H,IN1口地址为299H。
2、编程验证ADC0809能够将模拟量转换为与之成正比的数字量。
3、通过实验台左下角电位器RW1输出0~5V直流电压送入ADC0809通道0
(IN0),编程采集IN0输入的电压,在屏幕上显示出转换后的16进制数据。
编程如下:
codesegmentassumecs:
code
start:
movdx,298h;启动A/D转换器outdx,almovcx,0ffh;延时
delay:
loopdelay
inal,dx;从A/D转换器输入数据
movbl,al;将AL保存到BLmovcl,4shral,cl;将AL右移四位
calldisp;调显示子程序显示其高四位
moval,blandal,0fh
calldisp;调显示子程序显示其低四位
movah,02movdl,20h;加空格符
int21hmovdl,20hint21hpushdx
movah,06h;判断是否有键按下
movdl,0ffhint21hpopdxjestart;若没有转STARTmovah,4ch;退出int21hdispprocnear;显示子程序movdl,al
cmpdl,9;比较DL是否>9
jleddd;若不大于则为'0'-'9',加30h为其ASCII码
adddl,7;否则为'A'-'F',再加7ddd:
adddl,30h;显示movah,02int21hretdispendpcodeendsendstart