微机原理实验.docx
《微机原理实验.docx》由会员分享,可在线阅读,更多相关《微机原理实验.docx(19页珍藏版)》请在冰豆网上搜索。
微机原理实验
以下程序供参考:
要理解实验目的看懂程序,老师会要求修改!
剩下的四个实验程序希望大家踊跃上传!
实验二:
DATASEGMENT
DATA1DB1,6,7;被加数(修改)
DATA2DB5,6,3;加数(修改)
DATA3DB0,0,0;和(修改)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVSI,0
CLC;清进位标志
MOVBX,OFFSETDATA3
movcx,0003h;
AGAIN:
MOVAL,DATA1[SI]
ADCAL,DATA2[SI]
MOVDATA3[si],AL;一个字节相加
INCSI
MOVDL,[bx]
cmpdl,16
jaaa;先判断是否超16
d:
CMPdL,10
JCbb;再判断是否超过10
adddl,37h;超过10其ascii码加37h
jmpee
bb:
ADDDL,30H;在0到9的acsii码加上‘0’的ascii码转化为相应的字符
jmpee
aa:
incData1[SI];有进位时其相应的处理
SUBDL,10h
JMPd
ee:
MOVAH,2
INT21H;显示器输出该字符
INCBX
loopAGAIN
MOVAH,4CH
INT21H;返回DOS
CODEENDS
ENDSTART
实验三:
1.AL中两位十进制数;
CODESEGMENT
ASSUMECS:
CODE
START:
MOVAL,3EH
MOVBL,AL
MOVDL,AL
MOVCL,4
SHRDL,CL
CMPDL,9
JBENEXT1
ADDDL,7
NEXT1:
ADDDL,30H
MOVAH,2
INT21H;显示高位ASCII码
MOVDL,BL
ANDDL,0FH
CMPDL,9
JBENEXT2
ADDDL,7
NEXT2:
ADDDL,30H
MOVAH,2
INT21H;显示低位ASCII码
MOVAH,4CH
INT21H
CODEENDS;返回DOS
ENDSTART
2.
assumecs:
code
start:
movah,1
int21h
cmpal,0dh
jzdone
cmpal,'0'
jbnext
cmpal,'9'
jacharup
movdl,al
movah,2
int21h
jmpstart
charup:
cmpal,41h
jbnext
cmpal,5ah
jachard
dispc:
movdl,'c'
movah,2
int21h
next:
jmpstart
chard:
cmpal,61h
jbnext
cmpal,7ah
janext
jmpdispc
done:
movah,4ch
int21h
codeends
endstart
3.AX中四位十六进制数:
codesegment
assumecs:
code
start:
movax,04967h
movbx,ax;bx=384eh
movdl,ah;dx=384eh
movch,2;ch=2
movcl,4;cl=4
again:
shrdl,cl
cmpdl,9
jbenext1
adddl,7
next1:
adddl,30h
movah,2
int21h;先输出高字节高四位
movdl,bh
anddl,0fh
cmpdl,9
jbenext2
adddl,7
next2:
adddl,30h
movah,2
int21h;再输出高字节低四位
movbh,bl
movdl,bl
decch
jnzagain
movah,4ch
int21h
codeends
endstart
实验四:
思考题:
datasegment
stringdb100dup(?
)
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movcx,0000h
leadi,string
begin:
movah,1
int21h
cmpal,0dh
jzdone
mov[di],al
incdi
inccx
jmpbegin
done:
MOVDL,0aH
MOVAH,02
INT21H
movbx,cx;bx=384eh
movdl,ch;dx=384eh
movch,2;ch=2
movcl,4;cl=4
again:
shrdl,cl
cmpdl,9
jbenext1
adddl,7
next1:
adddl,30h
movah,2
int21h
movdl,bh;先输出高字节
anddl,0fh
cmpdl,9
jbenext2
adddl,7
next2:
adddl,30h
movah,2
int21h
movbh,bl
movdl,bl
decch
jnzagain
movah,4ch
int21h
codeends
endstart
实验五:
1.
datasegment
bufdb0abh,0cdh,0deh,01h,02h,03h,3ah,4bh,5ch,6fh
eofdb$-buf
dataends
codesegment
assumecs:
code,ds:
data
mainprocnear
start:
movax,data
movds,ax
movcl,10
leasi,buf
loop1:
callHEXAC
callDISP
deceof
jnzloop1
movah,4ch
int21h
mainendp
HEXACprocnear
movbl,[si]
incsi
ret
HEXACendp
DISPprocnear
movcl,4
movch,2
move:
rolbl,cl
movdl,bl
anddl,0fh
adddl,30h
cmpdl,'9'
jbeprint
adddl,07h
print:
movah,02h
int21h
decch
jnzmove
movdl,''
movah,02h
int21h
ret
DISPendp
codeends
endstart
2.统计字符串中字符b的个数
DATASEGMENT
STR1DB0ah,0dh,'PLEASEINPUTYOURSTRING:
$'
STR2db0ah,0dh,'THENUMBEROFbis:
$'
TABLEDB50,?
50DUP(?
),'$'
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
leadx,str1
movah,9
int21h
leadx,table
movah,0ah
int21h
leasi,table
movcl,[si+1]
movch,0
incsi
incsi
moval,'b'
movah,0
pushsi
pushcx
pushax
callcheck
popax
movcl,al
leadx,str2
movah,9
int21h
movdl,cl
anddl,0fh
cmpdl,9
jbecan
adddl,07h
can:
adddl,30h
movah,2
int21h
exit:
movah,4ch
int21h
codeends
scodesegment
assumecs:
scode
checkprocfar
pushbp
movbp,sp
movsi,[bp+10]
movcx,[bp+8]
movax,[bp+6]
xorah,ah
again:
cmpal,[si]
jnecan1
incah
can1:
incsi
loopagain
moval,ah
mov[bp+10],ax
popbp
ret4
checkendp
scodeends
endstart
实验六:
1.统计小写字母的个数:
datasegment
strndb80dup(?
)
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
leadi,strn
movcl,0
again:
movah,1
int21h
cmpal,0dh
jzdone
mov[di],al
incdi
inccl
jmpagain
done:
leasi,strn
movch,0
movbl,0
cld
cycle:
lodsb
cmpal,61h
jbnext
cmpal,7ah
janext
incbl
next:
loopcycle
movdl,0ah
movah,02h
int21h
moval,bl
movah,0
movcl,0ah
divcl
addax,3030h
pushax
movdl,al
movah,2
int21h
popax
movdl,ah
movah,2
int21h
movah,4ch
int21h
codeends
endstart
2.删除字符串中重复的字符
datasegment
standb80dup(?
)
lendb?
dataends
codesegment
assumecs:
code,ds:
data,es:
data
start:
movax,data
movds,ax
moves,ax
leasi,stan
movcl,0
again:
movah,1
int21h
cmpal,0dh
jzdone
mov[si],al
incsi
inccl
jmpagain
done:
movch,0
movlen,cl
decsi
repea:
pushsi
pushcx
pushcx
popdx
deccx
jenext1
moval,[si]
cmpal,0
jenext1
comp:
decsi
cmpal,[si]
jnegoon
movbyteptr[si],0
goon:
loopcomp
next1:
popdx
popsi
decsi
decdx
MOVCX,DX
jnzrepea
leasi,stan
movcl,len
movch,0
mov[si+len-1],'$'
inccl
cycle:
moval,[si]
cmpal,0
jnznext
deccx
jzdone1
calldele
decsi
inccx
next:
incsi
loopcycle
done1:
movah,2
movdl,0dh
int21h
movdl,0ah
int21h
leadx,stan
movah,9
int21h
movah,4ch
int21h
deleproc
pushsi
pushcx
cld
movdi,si
incsi
repmovsb
popcx
popsi
ret
deleendp
codeends
endstart
思考题:
查找匹配字符m(注:
可以另选其他匹配字符)
datasegment
stringdb64hdup(?
)
chardb'm'
dataends
codesegment
assumecs:
code,ds:
data,es:
data
start:
movax,data
movds,ax
moves,ax
leadi,string
movcl,0
movbx,0
again:
movah,1
int21h
cmpal,0dh
jzdone
mov[di],al
incdi
inccl
jmpagain
done:
movch,0
movdi,offsetstring
moval,char
cld
A:
repnescasb
jzfound
jmpB
found:
incbx
cmpcx,0
jaA
B:
MOVDL,0aH
MOVAH,2
INT21H
movdl,bh;dx=384eh
movch,2;ch=2
movcl,4;cl=4
aa:
shrdl,cl
cmpdl,9
jbenext1
adddl,7
next1:
adddl,30h
movah,2
int21h
movdl,bh;先输出高字节
anddl,0fh
cmpdl,9
jbenext2
adddl,7
next2:
adddl,30h
movah,2
int21h
movbh,bl
movdl,bl
decch
jnzaa
movah,4ch
int21h
codeends
endstart