微机实验程序汇总.docx
《微机实验程序汇总.docx》由会员分享,可在线阅读,更多相关《微机实验程序汇总.docx(12页珍藏版)》请在冰点文库上搜索。
![微机实验程序汇总.docx](https://file1.bingdoc.com/fileroot1/2023-6/14/0d836316-0afc-4c44-b321-8f5981e9bb5a/0d836316-0afc-4c44-b321-8f5981e9bb5a1.gif)
微机实验程序汇总
实验2EDIT,MASM,LINK的使用
实验内容:
在内存X-NUM和Y-NUM单元存有42和-43,利用汇编语言程序编程设计计算这两数字和,
结果放入S-NUM单元
DATASEGMENT
XDB42
YDB-43
SDB?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAL,X
ADDAL,Y
MOVS,AL
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
实验3 循环程序设
标签:
教育
实验3循环程序设计
实验内容:
1.现有数组X,Y.X=32,-43,76,95,-1;
Y=-78,127,-128,-125,88.
计算这两个数组之和,结果送到另一组数,
即S(i)=X(i)+Y(i)
DATASEGMENT
XDB32,-43,76,95,-1
YDB-78,127,-128,-125,88
COUNTEQU$-Y
SDBCOUNTDUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVSI,OFFSETX
MOVDI,OFFSETY
L1:
MOVAL,[SI]
MOVAH,[DI]
ADDAL,AH
MOVS[SI],AL
INCSI
INCDI
LOOPL1
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
实验内容:
2.现有两个多位十进制数:
X=1357902468,Y=5790123467
计算X+Y之和(BCD码加法),结果送到Z.
DATASEGMENT
XDB68H,24H,90H,57H,13H
YDB67H,34H,12H,90H,57H
COUNTEQU$-Y
ZDB6DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVCX,COUNT
MOVSI,OFFSETX
MOVDI,OFFSETY
L1:
MOVAL,[SI]
MOVAH,[DI]
ADCAL,AH
DAA
MOVZ[SI],AL
INCSI
INCDI
LOOPL1
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
实验4子程序调用编程设计
实验内容:
现有数组X=32,-43,76,95,-1,-78,127,-128,-125,88
编程按递增顺序排序,排序后的数据复制到附加段内。
1.无子程序结构。
DATASEGMENT
XDB32,-43,76,95,-1,-78,127,-128,-125,88
COUNTEQU$-X
DATAENDS
EXTRASEGMENT
YDBCOUNTDUP(?
)
EXTRAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
EXTRA
START:
MOVAX,DATA
MOVDS,AX
MOVAX,EXTRA
MOVES,AX
MOVCX,COUNT
MOVSI,0
DECCX
L1:
MOVDX,CX
L2:
MOVAL,X[SI]
CMPAL,X[SI+1]
JL L3
XCHGAL,X[SI+1]
MOVX[SI],AL
L3:
INCSI
LOOPL2
MOVCX,DX
MOVSI,0
LOOPL1
MOVCX,COUNT
L4:
MOVAL,X[SI]
MOVY[SI],AL
INCSI
LOOPL4
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
2.子程序调用结构
DATASEGMENT
XDB32,-43,76,95,-1,-78,127,-128,-125,88
COUNTEQU$-X
DATAENDS
EXTRASEGMENT
YDBCOUNTDUP(?
)
EXTRAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
EXTRA
START:
MOVAX,DATA
MOVDS,AX
MOVAX,EXTRA
MOVES,AX
MOVCX,COUNT
MOVSI,0
CALLORDER
MOVCX,COUNT
NEXT:
MOVAL,X[SI]
MOVY[SI],AL
INCSI
LOOPNEXT
MOVAH,4CH
INT21H
ORDERPROCNEAR
DECCX
L1:
MOVDX,CX
L2:
MOVAL,X[SI]
CMPAL,X[SI+1]
JLL3
XCHGAL,X[SI+1]
MOVX[SI],AL
L3:
INCSI
LOOPL2
MOVCX,DX
MOVSI,0
LOOPL1
RET
ORDERENDP
CODEENDS
ENDSTART
实验5DOS功能调用
实验内容:
用子程序调用的方式完成以下要求:
1.使用键盘向内存输入一个自定义的ASCII字符;
2.将内存缓冲区OUTBUF里的一个ASCII字符从显示器输出;
3.将内存缓冲区OUTBUF里的一个自定义ASCII字符串显示出来;
4.使用键盘向输入缓冲区INBUF输入一个ASCII字符(如Thisisastring!
)
DATASEGMENT
INBUF1DB(?
)
INBUF2DB32
DB?
DB32DUP(?
)
OUTBUF1DB38H
OUTBUF2DB'ABCDE',0DH,0AH,'$'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVSI,OFFSETINBUF1
CALLL1
MOV[SI],AL
CALLL2
CALLL3
CALLL4
MOVAH,4CH
INT21H
L1PROCNEAR
MOVAH,01H
INT21H
RET
L1ENDP
L2PROCNEAR
MOVDL,OUTBUF1
MOVAH,02H
INT21H
RET
L2ENDP
L3PROCNEAR
MOVDX,OFFSETOUTBUF2
MOVAH,09H
INT21H
RET
L3ENDP
L4PROCNEAR
MOVDX,OFFSETINBUF2
MOVAH,0AH
INT21H
RET
L4ENDP
CODEENDS
ENDSTART
实验9接口实验预备知识
实验内容:
根据实验所用机器的主频编写一个倒计时程序,
要求在屏幕上显示倒计时结果。
如9,8,7,6,5,4,3,2,1,0
每个字符显示时间为1秒。
DATASEGMENT
OUTBUFDB'9','8','7','6','5','4','3','2','1','0'
COUNTEQU$-OUTBUF
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVSI,OFFSETOUTBUF
MOVDI,COUNT
NEXT:
MOVDL,[SI]
MOVAH,02H
INT21H
CALLDELAY
INCSI
DECDI
JNZNEXT
MOVAH,4CH
INT21H
DELAYPROCNEAR
PUSHCX
MOVBX,299H
FOR1:
MOVCX,0FFFFH
FOR2:
LOOPFOR2
DECBX
JNZFOR1
POPCX
RET
DELAYENDP
CODEENDS
ENDSTART
实验10简单的输出接口实验
实验内容:
利用74LS273设计一个接口电路,使8个LED循环顺序点亮,
中间间隔1秒,循环3次,要求高电平时LED点亮。
CODESEGMENT
ASSUMECS:
CODE
START:
MOVSI,3
L1:
MOVAL,01H
MOVDI,8
L2:
ROLAL,1
MOVDX,280H
OUTDX,AL
CALLDELAY
DECDI
JNZL2
DECSI
JNZL1
MOVAH,4CH
INT21H
DELAYPROCNEAR
PUSHCX
MOVBX,299H
FOR1:
MOVCX,0FFFFH
FOR2:
LOOPFOR2
DECBX
JNZFOR1
POPCX
RET
DELAYENDP
CODEENDS
ENDSTART
实验11简单的输入接口实验
实验内容:
设计一个接口电路,当开关来回搬动1次后,在屏幕上输出‘1’,再来回搬动1次,
输出‘2’,共搬动5次。
利用硬件消抖。
CODESEGMENT
ASSUMECS:
CODE
START:
MOVDL,31H
MOVCX,5
L1:
PUSHDX
MOVDX,280H
INAL,DX
ANDAL,01H
MOVAH,AL
L2:
INAL,DX
ANDAL,01H
CMPAH,AL
JZL2
L3:
INAL,DX
ANDAL,01H
CMPAH,AL
JNZL3
POPDX
MOVAH,02H
INT21H
INCDL
LOOPL1
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
实验12数码管显示实验
实验内容:
使2个七段显示管分别显示01,23,45,67,89,
每两个字符保持2秒钟。
DATASEGMENT
TABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB7FH,6FH,77H,7CH,39H,5EH,79H,71H
XDB01H,23H,45H,67H,89H
COUNTEQU$-X
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVCX,COUNT
MOVSI,OFFSETX;SI指向X
MOVBX,OFFSETTABLE;BX指向TABLE
MOVDX,280H
L1:
MOVDI,200
L2:
MOVAL,[SI]
ANDAL,0F0H;保留低四位
RORAL,1;循环右移四位
RORAL,1
RORAL,1
RORAL,1
XLAT;查表
ANDAL,7FH
OUTDX,AL
CALLDELAY
MOVAL,[SI]
ANDAL,0FH
XLAT
ORAL,80H
OUTDX,AL
CALLDELAY
DECDI
JNZL2
INCSI
LOOPL1
MOVAH,4CH
INT21H
DELAYPROCNEAR
PUSHCX
PUSHBX
MOVBX,200
FOR1:
MOVCX,0FFFFH
FOR2:
LOOPFOR2
DECBX
JNZFOR1
POPBX
POPCX
RET
DELAYENDP
CODEENDS
ENDSTART
实验13可编程并行接口8255A芯片实验
实验内容:
由8255A的A接口输出数据,驱动4个LED,使其顺序显示0--F的二进制状态,
每个状态保持1秒钟。
CODESEGMENT
ASSUMECS:
CODE
START:
MOVDX,283H
MOVAL,80H
OUTDX,AL
MOVCX,16
MOVAL,00H
L1:
MOVDX,280H
OUTDX,AL
CALLDELAY
INCAL
LOOPL1
MOVAH,4CH
INT21H
DELAYPROCNEAR
PUSHCX
MOVBX,299H
FOR1:
MOVCX,0FFFFH
FOR2:
LOOPFOR2
DECBX
JNZFOR1
POPCX
RET
DELAYENDP
CODEENDS
ENDSTART
实验148253编程测试实验
实验内容:
8253方式0测试,用消抖电路产生的脉冲作为CLK0输入信号,
OUT0接LED。
运行程序5秒将计数器的显示在屏幕上,分析读取
的计数常数与CLK0信号的关系。
CODESEGMENT
ASSUMECS:
CODE
START:
MOVAL,11H
MOVDX,283H
OUTDX,AL
MOVAL,03H
MOVDX,280H
OUTDX,AL
CALLDELAY
MOVAL,00H
MOVDX,283H
OUTDX,AL
MOVDX,280H
INAL,DX
MOVCH,AL
MOVCL,4
ANDAL,0F0H
ROLAL,CL
MOVDL,AL
ADDDL,30H
MOVAH,02H
INT21H
ANDCH,0FH
MOVDL,CH
ADDDL,30H
MOVAH,02H
INT21H
MOVAH,4CH
INT21H
DELAYPROCNEAR
PUSHCX
MOVBX,999H
FOR1:
MOVCX,0FFFFH
FOR2:
LOOPFOR2
DECBX
JNZFOR1
POPCX
RET
DELAYENDP
CODEENDS
ENDSTART