微机汇编实验代码Word文档格式.docx
《微机汇编实验代码Word文档格式.docx》由会员分享,可在线阅读,更多相关《微机汇编实验代码Word文档格式.docx(20页珍藏版)》请在冰豆网上搜索。
MOV AX,4C00H
CODE ENDS
END START
实验二:
数据传送、数码转换程序设计实验(传送20个数据并排序)
DATASEGMENT
MSRDB20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1
NEQU20
MSR1DB'
thesmallestandthelargest'
0AH,0DH,'
$'
DATAENDS
EXDASEGMENT
VALUEDB22DUP(?
EXDAENDS
;
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
EXDA
START:
MOVAX,DATA
MOVDS,AX
MOVAX,EXDA
MOVES,AX
MOVBX,0
XORCX,CX
MOVCX,N
NEXT:
MOVAL,MSR[BX]
MOVES:
VALUE[BX],AL
INCBX
LOOPNEXT
MOVBX,OFFSETVALUE-1
MOVSI,1
FORI:
MOVDI,SI
INCDI
FORJ:
MOVAL,[BX+SI]
CMPAL,[BX+DI]
JBENEXTJ
XCHGAL,[BX+DI]
MOV[BX+SI],AL
NEXTJ:
CMPDI,N
JBEFORJ
NEXTI:
INCSI
CMPSI,N-1
JBEFORI
;
MOVDX,OFFSETMSR1
MOVAH,9
INT21H
MOVAL,ES:
VALUE[0]
MOVBX,OFFSETVALUE
XORAH,AH
MOVAL,[BX]
RORAL,4
CALLFOR
MOVDL,'
h'
MOVAH,2
MOVBX,OFFSETVALUE+19
[BX]
MOVDL,0DH
MOVDL,0AH
VALUE[20],0
将附加段寄存器指向的段值赋给数据段寄存器
PO:
CMPES:
VALUE[BX],0
JAPO
MOVAH,4CH
FORPROC
PUSHAX
ANDAL,0FH
CMPAL,09H
JANEXT2
ADDAL,30H
MOVDL,AL
POPAX
RET
NEXT2:
ADDAL,37H
FORENDP
CODEENDS
ENDSTART
实验三:
运算类程序设计实验(两个五位数减法运算,减数可大于被减数)
HANGDB0AH,0DH,'
SHUDB'
INPUTA5(WEI)NUMBER:
A1DB8
DB7DUP(?
A2DB8
A3DB5DUP(?
A4DB18DUP(?
DB'
STAKSEGMENTSTACK
SADB100DUP(?
STAKENDS
DATA,SS:
STAK
MAINPROCFAR
MOVAX,STAK
MOVSS,AX
MOVDX,OFFSETSHU
MOVAH,09H
MOVDX,OFFSETA1
MOVAH,0AH
MOVBX,DX
ADDBX,2
MOVDX,OFFSETHANG
MOVDX,OFFSETA2
MOVSI,DX
ADDSI,2
MOVCX,5
BI:
CMPAL,[SI]
JBL2
JAL1
LOOPBI
L1:
MOVAX,1
CLC
MOVBX,6
MOVSI,4
P1:
MOVAL,A1[BX]
SBBAL,A2[BX]
MOVA3[SI],AL
DECBX
DECSI
LOOPP1
MOVSI,0
JIA:
CMPA3[SI],9
JALL1
JBELL2
LL1:
ADDA3[SI],10
LL2:
ADDA3[SI],30H
LOOPJIA
JMPCHU
L2:
MOVAX,0
POPBX
POPSI
P11:
MOVAL,A2[BX]
SBBAL,A1[BX]
LOOPP11
JIA1:
JALL11
JBELL22
LL11:
LL22:
LOOPJIA1
CHU:
K1:
MOVAL,A1[SI+2]
MOVA4[SI],AL
LOOPK1
MOVA4[SI],'
-'
MOVBX,2
K2:
LOOPK2
='
CMPAX,0
JAZ2
Z1:
Z2:
K3:
MOVAL,A3[BX]
LOOPK3
MOVDX,OFFSETA4
MOVAX,4C00H
MAINENDP
实验四:
子程序设计实验(含进制及数码转换)
功能:
输入1时将输入数转换为十六进制输出,输入2时将输入数转化为bcd码输出,输入3时将输入数转化为七段共阳极码,;
输入4时返回dos系统
DATASEGMENT
MESDB'
Inputanumberfrom1to4,1-H,2-bcd,3-7-duan,4-dos'
MEDB'
youputawrongnumber'
0AH,0DH,'
TEMDB'
--Inputadecimalnumber'
'
16
STR1DB0AH,0DH;
NUMDB4DUP(?
),'
H$'
TABDB'
0123456789ABCDEF'
MES2DB'
--Ileaseinputtwoormorebitsdecimal:
'
bcd
MES1DB'
--TheBCDcodeofdecimalare:
MES3DB'
0000$'
MES4DB'
0001$'
MES5DB'
0010$'
MES6DB'
0011$'
MES7DB'
0100$'
MES8DB'
0101$'
MES9DB'
0110$'
MES10DB'
0111$'
MES11DB'
1000$'
MES12DB'
1001$'
BUFDB100
DB?
DB100DUP(0)
MEDDB100DUP(?
);
MES21DB'
--Pleaseinputtwoormorebitsdecimal:
7-d
MES111DB'
--The7duancodeofdecimalare:
TAB1DB40H,79H,24H,30H,19H,12H,02H,78H,00H,18H
BUF1DB100
MED1DB100DUP(?
STACK1SEGMENTSTACK
DW256DUP(?
STACK1ENDS
DATA,SS:
STACK1
BEGAIN:
MOVDX,OFFSETMES
MOVAH,1
CMPAL,'
1'
JZFOR1
2'
JZFOR2
3'
JZFOR3
4'
JZFOR4
MOVDX,OFFSETME
JMPBEGAIN
FOR1:
JMPFUNCTION1
FOR2:
JMPFUNCTION2
FOR3:
JMPFUNCTION3
FOR4:
JMPFUNCTION4
FUNCTION1:
LEADX,TEM
XORBX,BX
MOVCX,10
MOVAH,1;
1号功能从键盘读入字符
CMPAL,0DH;
如果=13也就是回车则跳到conv进行转换
JZCONV
PUSHAX;
暂存ax
MOVAX,BX;
bx存当前已有的数值,这里交换是为了用num
MULCX;
bx=bx*10
MOVBX,AX
XORAH,AH;
清空高位
ADDBX,AX;
相加
JMPNEXT;
继续读取下个字符
CONV:
bx里存的是输入的10进制数
MOVCH,4
LEABX,TAB;
bx保存16进制字符表的基址
MOVCL,4
LEASI,NUM;
num是转换后存16进制字符的地方
LOPA:
ROLAX,CL;
ax左移动4位,由于是rol,所以高4位移到低4位
暂存
ANDAX,000FH;
取出低4位,也就是高4位移过来位
MOVDI,AX;
查表
MOVAL,[BX+DI]
MOV[SI],AL;
存储
INCSI;
下个位置
POPAX;
还原状态
DECCH
JNZLOPA
LEADX,STR1;
输出
FUNCTION2:
MOVDX,OFFSETMES2
MOVDX,OFFSETBUF
MOVCL,[BX+1]
A1:
MOVDL,0FFH
MOVAL,BUF[BX]
CMPAL,3AH;
比较AL中的数是否是0~9的ASCII码
JNBA2
SUBAL,30H
JBA2
A2:
MOVAL,DL
MOVMED[BX],AL
LOOPA1
MOVCL,BX[1]
MOVDX,OFFSETMES1
A3:
MOVAL,MED[BX]
CALLSHOW1
A4:
MOVDL,20H
MOVAH,02H
LOOPA3
SHOW1PROCNEAR
CMPAL,0
JEZERO
CMPAL,1
JEONE
CMPAL,2
JETWO
CMPAL,3
JETHREE
CMPAL,4
JEFOUR
CMPAL,5
JEFIVE
CMPAL,6
JESIX
CMPAL,7
JESEVEN
CMPAL,8
JEEIGHT
CMPAL,9
JENINE
ZERO:
MOVDX,OFFSETMES3
JMPA4
ONE:
MOVDX,OFFSETMES4
TWO:
MOVDX,OFFSETMES5
THREE:
MOVDX,OFFSETMES6
FOUR:
MOVDX,OFFSETMES7
FIVE:
MOVDX,OFFSETMES8
SIX:
MOVDX,OFFSETMES9
SEVEN:
MOVDX,OFFSETMES10
EIGHT:
MOVDX,OFFSETMES11
NINE:
MOVDX,OFFSETMES12
ENDP
FUNCTION3:
MOVDX,OFFSETMES21;
显示提示
MOVDX,OFFSETBUF1
A11:
MOVAL,BUF1[BX]
JNBA21
JBA21
A21:
MOVMED1[BX],AL
LOOPA11
MOVDX,OFFSETMES111
A31:
CALLSHOW2
MOVDL,48H
LOOPA31
SHOW2PROCNEAR
MOVAL,MED1[BX]
MOVDX,BX
MOVBX,OFFSETTAB1
XLATTAB1
ANDAL,0F0H;
取高4位
SHRAL,4
CMPAL,0AH;
是否是A以上的数
JBC2
ADDAL,07H
C2:
MOVDL,AL;
showcharacter
ANDAL,0FH;
取低4位
CMPAL,0AH
JBC3
C3:
FUNCTION4: