微机原理与接口技术李珍香版十个实验程序.docx
《微机原理与接口技术李珍香版十个实验程序.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术李珍香版十个实验程序.docx(13页珍藏版)》请在冰豆网上搜索。
微机原理与接口技术李珍香版十个实验程序
实验一
1.实验目的:
掌握汇编语言源程序的结构。
2.实验内容:
显示一串字符串“hellowworld!
班级,学号”。
3.实验代码:
DATASEGMENT
MSDB'Hello,World!
$'
NSDB'151044A,151044106$'
DATAENDS
STACKSEGMENTSTACK
DW50DUP(?
)
STACKENDS
CODESEGMENT
ASSUMEDS:
DATA,CS:
CODE:
CODE,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETMS
MOVAH,9
INT21H
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETNS
MOVAH,9
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
4.实验结果:
实验二
1.实验目的:
熟悉汇编语言源程序的编辑、汇编、连接、调试过程
2.实验内容:
两个8位16进制数相加(生日+当天日期)
3.实验代码:
DATASEGMENT
SRDD19970925H
RQDD20171111H
DATAENDS
STACKSEGMENTSTACK
DB50DUP(0)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVAX,WORDPTRSR
ADDAX,WORDPTRRQ
MOVBX,WORDPTRSR+2
ADCBX,WORDPTRRQ+2
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
4.实验结果:
实验三
1.实验目的:
主要掌握汇编伪指令DB、DW、ORG、$的功能和用法
2.实验内容:
在内存单元X中定义一个8位数,要求将其高4位放入X+1单元的低4位,低4位放入X+2单元的低4位,并将X+1与X+2单元的高4位清0。
3.实验代码:
DATASEGMENT
Xdb23h,?
?
DATAENDS
STACKSEGMENTSTACK
DW100DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAL,X
MOVCL,4
SHRAL,CL
MOVX+1,AL
MOVAL,X
ANDAL,0FH
MOVX+2,AL
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
4.实验结果:
实验四
1.实验目的:
理解和掌握变量的定义方法及系统如何为变量分配空间
2.实验内容:
实现将存放在AX与DX中的32位数据循环右移二进制数的4位。
3.实验代码:
CODESEGMENT
ASSUMECS:
CODE
START:
MOVCL,4
MOVBH,AL
SHLBH,CL
SHRAX,CL
MOVBL,DL
SHLBL,CL
SHRDX,CL
ORAH,BL
ORDH,BH
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
4.实验结果:
实验五
1.实验目的:
掌握条件转移、无条件转移指令的使用方法
2.实验内容:
编写程序计算|X|的值,其中X为存放于X单元单元的16位操作数,要求将结果存入result单元中。
3.实验代码:
DATASEGMENT
XDB-100
RESULTDB?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAL,X
CMPAL,0
JGEDONE
NEGAL
DONE:
MOVRESULT,AL
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
4.实验结果:
实验六
1.实验目的:
掌握分支程序设计、编写、调试和运行的方法。
2.实验内容:
从键盘输入一个字符,并判断该字符是否为一个数字,如果是请输出该数字字符,如果不是请输出“这不是一个数字”的英文提示信息(要求:
能连续输入)。
3.实验代码:
datasegment
str1db'PLEASEENTER:
',0AH,0DH,'$'
STR2DB'Thisisnotanumber!
',0AH,0DH,'$'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
AGAIN:
MOVAH,09H
LEADX,STR1
INT21H
MOVAH,08H
INT21H
CMPAL,'#'
JZEXIT
CMPAL,'9'
JAFALSE
MOVAH,2
MOVDL,AL
INT21H
MOVDL,0AH
MOVAH,02H
INT21H
JMPAGAIN
FALSE:
MOVDX,OFFSETSTR2
MOVAH,9
INT21H
JMPAGAIN
EXIT:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
4.实验结果:
实验七
1.实验目的:
熟悉运算类指令对标志位的状态影响以及标志位状态的表示方法
2.实验内容:
编写一汇编语言程序,实现统计DX数据中所含的1的个数。
3.实验代码:
DATASEGMENT
SHUDW10H
COUNTDB0
DATAENDS
STACKSEGMENTSTACK
DB100DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVDX,SHU
MOVCL,0
JIA:
ANDDX,DX
JEEXIT
SHLDX,1
JNCJIA
INCCL
JMPJIA
EXIT:
MOVCOUNT,CL
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
4.实验结果:
实验八
1.实验目的:
掌握循环指令LOOP、LOOPZ、LOOPNZ的使用方法
2.实验内容:
在数据段变量名为A的数据区内有10个字符,编程实现将这10个字符以相反次序传送到附加段变量名为B的内存区中。
源程序已部分给出,请将程序补充完整,并调试运行结果。
3.实验代码:
DATASEGMENT
ADB'1234567890'
nequ$-a
BDBndup(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVES,AX
LEASI,A
LEADI,B
ADDDI,9
MOVCX,10
MOVE:
MOVAL,[SI]
MOVES:
[DI],AL
INCSI
DECDI
LOOPMOVE
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
4.实验结果:
实验九
1.实验目的:
掌握实现单重、多重循环程序设计、编写、调试和运行的方法
2.实验内容:
编写一个程序,将内存1000H开始的连续100个字节送往2000H开始的连续100个内存单元中。
3.实验代码:
DATASEGMENT
ORG1000H
ADB100DUP(?
)
ORG2000H
BDB100DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,SEGDATA
MOVDS,AX
MOVSI,OFFSETA
MOVCX,100
MOVBL,0
L0:
MOV[SI],BL
INCSI
INCBL
LOOPL0
MOVSI,0
LEASI,A
LEADI,B
ADDSI,99
ADDDI,99
MOVCX,100
L1:
MOVAL,[SI]
MOV[DI],AL
DECSI
DECDI
LOOPL1
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
4.实验结果:
实验十
1.实验目的:
掌握实现单重、多重循环程序设计、编写、调试和运行的方法。
2.实验内容:
编程实现由键盘输入任意一个字符,将该字符用二进制形式显示出它的ASCII码值(譬如:
若从键盘上键入“A”,则运行时在屏幕上显示出“01000001B”)。
3.实验代码:
CODESEGMENT
ASSUMECS:
CODE
START:
MOVAH,1
INT21H
MOVBL,AL
MOVCX,8
L1:
SHLBL,1
JNCL2
MOVDL,31H
JMPL3
L2:
MOVDL,30H
JMPL3
L3:
MOVAH,2
INT21H
LOOPL1
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
4.实验结果: