微机原理实验报告.docx
《微机原理实验报告.docx》由会员分享,可在线阅读,更多相关《微机原理实验报告.docx(31页珍藏版)》请在冰豆网上搜索。
![微机原理实验报告.docx](https://file1.bdocx.com/fileroot1/2022-12/12/bd39afbc-c75d-4814-9a28-a4939e9ebc13/bd39afbc-c75d-4814-9a28-a4939e9ebc131.gif)
微机原理实验报告
物理与信息工程学院
微机原理
实
验
报
告
实验一
1.写出完成下列功能的指令序列
(1)传送20H到AL寄存器MOVAL,20H
(2)将(AL)*2MOVAL,02HMULAL
(3)传送25H到BL寄存器MOVBL,25H
(4)(AL)*BLMULBL
问最后结果(AX)=?
AX=0940H
2.分别写出完成下列指令要求的指令
(1)将BX的低4位清零ANDBX,F0H
(2)将AX的高4位置1ORAX,F0H
(3)将DX的低4位取反;XORDX,0FH
(4)将CX的中间八位清零ANDCX,0FF0H
(5)将AX中与BX中的对应位不相同的位均置1XORAX,BX
3.上机运行下面指令序列,分析运行后(AX)=?
movax,4312
movcl,8
sarax,cl
decax
movcx,8
mulcx
ax=210.9h
4.4.设DS=当前段地址,BX=0300H,SI=0002H,请用DEBUG的命令将存储器偏移地址300-304H连续单元装入0AH 0BH 0CH 0DH 0EH。
在DEBUG状态下送入下面的程序,并用单步执行的方法,分析每条指令原源地址的形成过程?
当数据传送完毕时,AX中的内容是什么?
实验二
1.编程:
求两个数的平均值。
这两个数分别放在X单元和Y单元中,而平均值放在Z单元中。
程序实验报告已给出,在此只给出运行结果:
3.编写程序:
求1+2+3+……+100的和
程序如下:
datasegment
numberdw0001h
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movbx,number
movax,0
movcx,64h
next:
addax,bx
incbx
loopnext
movah,4ch
int21h
codeends
endstart
实验结果:
1+2+3+……+100=5050
(5050)10=(13BA)16
实验三
1.从键盘输入两个1位十进制数,求这两个数的和,并将结果显示在屏幕上。
程序如下:
DATASEGMENT
INFOR1DB'PLEASEINPUTTHEFIRSTDATA(<10):
$'
INFOR2DB0AH,0DH,'PLEASEINPUTTHESECONDDATA(<10):
$'
INFOR3DB0AH,0DH,'THERESULTIS:
$'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETINFOR1
MOVAH,09H
INT21H
MOVAH,01H
INT21H
ANDAL,0FH
ANDAL,0FH
MOVBL,AL
MOVDX,OFFSETINFOR2
MOVAH,09H
INT21H
MOVAH,01H
INT21H
ANDAL,0FH
SUBAL,30H
MOVAH,0
XORAH,AH
ADDAL,BL
AAA
PUSHAX
MOVDX,OFFSETINFOR3
MOVAH,09H
INT21H
POPAX
PUSHAX
PUSHAX
MOVDL,AH
ADDDL,30H
MOVAH,02H
INT21H
POPAX
MOVDL,AL
ADDDL,30H
MOVAH,02H
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
实验结果:
2.从键盘输入0~9中任意一个自然数,将其立方值在屏幕上显示出来。
程序如下:
datasegment
tabledw0,1,8,27,64,125,216,343,512,729
bufdb'pleaseinputanumber(0~9):
',0dh,0ah,'$'
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movdx,offsetbuf
movah,9h
int21h
movah,01
int21h
andax,0fh
addax,ax
movbx,offsettable
movah,0
addbx,ax
movax,[bx]
movax,4c00h
int21h
codeends
endstart
实验结果:
9*9*9=(729)10=(02D9)16
5*5*5=(125)10=(007D)16
实验四
1.编程实现符号函数。
程序如下:
DATASEGMENT
XDB-25
YDB?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAL,X
CMPAL,0
JGNEXT1
JLNEXT2
MOVY,0
JMPEXIT
NEXT1:
MOVY,1
JMPEXIT
NEXT2:
MOVY,-1
EXIT:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
实验结果:
输入CD的值为-25时的结果
输入CD的值为25时的结果
实验五
1.从自然数1开始累加,直到累加和大于1000为止,统计被累加自然数的个数,并把统计的个数送入n单元,并把累加和送入sum单元。
程序如下:
datasegment
ndw?
sumdw?
xdb'nis:
$'
ydb0Ah,0Dh,'sumis:
$'
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movah,9
movdx,offsetx
int21h
movax,0
movbx,0
movcx,0
movdx,0
again:
addbx,1
addax,bx
addcx,1
cmpax,3e8h
jbeagain
movn,cx
movsum,ax
movsi,ax
movax,cx
movbl,10
divbl
movbh,ah
movdl,al
callzg
movdl,bh
callzg
movah,9
movdx,offsety
int21h
movax,si
movdx,0
movbx,1000
divbx
movbx,dx
movdl,al
callzg
movax,bx
movbl,100
divbl
movbh,ah
movdl,al
callm
moval,bh
movah,0
movbl,10
divbl
movbh,ah
movdl,al
callzg
movdl,bh
callzg
movah,4ch
int21h
zgproc
ordl,30h
movah,2
int21h
ret
mendp
codeends
endstart
实验结果:
编程序统计学生的数学成绩,分别归类90~99分,80~89分,70~79分,60~69分及60分以下,并将各段的人数送入内存单元中。
程序如下:
DATASEGMENT
BUFDB95,91,64,85,79,66,35
S9DB?
S8DB?
S7DB?
S6DB?
S5DB?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVCX,7
LEASI,BUF
AGAIN:
MOVAL,[SI]
CMPAL,90
JBNEXT
INCS9
JMPEXIT
NEXT:
CMPAL,80
JBNEXT1
INCS8
JMPEXIT
NEXT1:
CMPAL,70
JBNEXT2
INCS7
JMPEXIT
NEXT2:
CMPAL,60
JBNEXT3
INCS6
JMPEXIT
NEXT3:
INCS5
EXIT:
INCSI
LOOPAGAIN
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
实验结果:
实验六
1.编程计算N个(N<50)连续偶数之和(2+4+6+……)。
程序如下:
datasegment
bufdb10
db?
db10dup(?
)
dataends
codesegment
mainprocfar
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movah,0ah
movdx,offsetbuf
int21h
movcl,buf+1
movch,0
movsi,offsetbuf+2
movax,0
again:
movbl,10
mulbl
subbyteptr[si],30h
addal,[si]
adcah,0
incsi
loopagain
callqh
callxs
movah,4ch
int21h
ret
mainendp
qhprocnear
movcx,ax
movax,0
movdx,0
again1:
adddx,2
addax,dx
loopagain1
ret
qhendp
xsprocnear
movdx,0
movbx,1000
divbx
movbx,dx
movdl,al
callp
movax,bx
movbl,100
divbl
movbh,ah
movdl,al
callp
moval,bh
movah,0
movbl,10
divbl
movbh,ah
movdl,al
callp
movdl,bh
callp
ret
xsendp
pprocnear
ordl,30h
movah,2
int21h
ret
pendp
codeends
endstart
实验结果:
四个偶数的和:
2+4+6+8=20
实验七
代码转换:
设计将十六位二进制数转换成4位压缩型BCD码的算法。
实验程序:
datassegment
datasends
stackssegment
stacksends
codessegment
assumecs:
codes,ds:
datas,ss:
stacks
start:
movax,datas
movds,ax
movax,1345h
cwd
movbx,1000
divbx
movcx,dx
movdl,al
calldisp
moval,bh
movbl,10
movah,0
divbl
movbh,ah
movdl,al
calldisp
movdl,bh
calldisp
movah,4ch
int21h
ret
dispprocnear
ordl,30H
movah,2
int21h
ret
dispendp
codesends
endstart
实验结果:
一、PC机内部8259中断实验
datasegment
countdw1
messdb'thebellisring!
',0dh,0ah,'$'
dataends
stacksegment
db100dup(?
)
stackends
codesegment
mainprocfar
assumecs:
code,ds:
data,ss:
stack
start:
movax,stack
movss,ax
pushds
subax,ax
pushax
movax,data
movds,ax
moval,1ch
movah,35h
int21h
pushes
pushbx
pushds
movdx,offsetring
movax,segring
movds,ax
moval,1ch
movah,25h
int21h
popds
moval,10110110b
out43h,al
movax,533h
out42h,al
moval,ah
out42h,al
inal,21h
andal,0feh
out21h,al
sti
d:
movah,0
int16h
cmpal,1bh
jnzd
popdx
popds
moval,1ch
movah,25h
int21h
ret
mainendp
ringprocnear
pushds
pushax
pushcx
pushdx
movax,data
movds,ax
sti
deccount
jnzexit
movdx,offsetmess
movah,09
int21h
movdx,2000h
inal,61h
andal,0fch
sound:
xoral,03h
out61h,al
movcx,9600h
wait1:
loopwait1
decdx
jnesound
movcount,91
exit:
cli
popdx
popcx
popax
popds
iret
ringendp
codeends
endstart
实验结果:
程序写完后保存,然后直接运行。
该实验每隔10秒响铃一次,外部响铃,内部显示如上图所示
8254可编程定时中断实验
实验程序:
datasegment
messagedb'thisisa8254',0ah,0dh,'$'
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
cli
moval,72h
movah,35h
int21h
pushes
pushbx
pushds
movax,segint_proc
movds,ax
movdx,offsetint_proc
movax,2572h
int21h
popds
inal,0a1h
andal,0fbh
out0a1h,al
inal,21h
andal,0fbh
out21h,al
moval,00110100b
movdx,3003h
outdx,al
movaX,5000h
movdx,3000h
outdx,al
moval,ah
outdx,al
LL:
MOVAH,0
INT16H
JZLL
MOVAH,0
INT16H
CMPAL,1BH
JNZLL
INAL,0A1H
ORAL,04H
OUT0A1H,AL
INAL,21H
ORAL,04H
OUT21H,AL
CLI
POPDX
POPDX
MOVAL,72H
MOVAH,25H
INT21H
MOVAH,4CH
INT21H
INT_PROCPROC
PUSHDX
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETMESSAGE
MOVAH,09H
INT21H
MOVAL,20H
OUT20H,AL
OUT0A0H,AL
POPAX
POPDX
IRET
INT_PROCENDP
CODEENDS
ENDSTART
实验结果:
8255并行接口实验
1.使8255的端口A口为输出,B口为输入,完成拨动开关到数据灯的数据传送。
codesegment
assumecs:
code
start:
movdx,3003h
moval,10000010b
outdx,al
movdx,3001h
inal,dx
movdx,3000h
outdx,al
movah,4ch
int21h
codeends
endstart
1.使8255的B口为输出,实现8位数据灯左移循环显示,单行。
codesegment
assumecs:
code
start:
movdx,3003h
moval,10000000b
outdx,al
movdx,3001h
moval,01111111b
l:
outdx,al
movcx,3000h
a:
movbx,2000h
b:
decbx
jnzb
loopa
roral,1
jmpl
movah,4ch
int21h
codeends
endstart
2.使8255的B口为输出,实现8位数据灯左移循环显示,单行。
codesegment
assumecs:
code
start:
movdx,3003h
moval,10000000b
outdx,al
l:
movdx,3000h
callxu
movcx,3000h
a:
movbx,2000h
b:
decbx
jnzb
loopa
movdx,3001h
callxu
jmpl
movah,4ch
int21h
xuprocnear
movcx,8
moval,01111111b
outdx,al
ll:
pushcx
movcx,3000h
c:
movbx,2000h
d:
decbx
jnzd
loopc
popcx
roral,1
outdx,al
loopll
moval,11111111b
outdx,al
ret
xuendp
codeends
endstart
jmpl
movah,4ch
int21h
codeends
endstart
3.使8255的B口为输出,实现8位数据灯左移循环显示,两行。
codesegment
assumecs:
code
start:
movdx,3003h
moval,10000000b
outdx,al
l:
movdx,3000h
callxu
movcx,3000h
a:
movbx,2000h
b:
decbx
jnzb
loopa
movdx,3001h
callxu
jmpl
movah,4ch
int21h
xuprocnear
movcx,8
moval,01111111b
outdx,al
ll:
pushcx
movcx,3000h
c:
movbx,2000h
d: