微机实验报告汇总.docx
《微机实验报告汇总.docx》由会员分享,可在线阅读,更多相关《微机实验报告汇总.docx(26页珍藏版)》请在冰豆网上搜索。
微机实验报告汇总
微机实验报告
曾东明
实验一输出字符‘A’
一、实验目的
1.通过这个简单的例子熟悉在微机上建立、汇编、链接和运行8086/8088汇编语言程序的过程。
2.掌握字符的显示方法。
3.学习DOS系统功能调用。
二、实验内容
输出字符‘A’,程序流程图如图1-1所示。
图1-1输出字符‘A’程序流程图
源程序如下:
CODESEGMENT
ASSUMECS:
CODE
MOVDL,'A'
MOVAH,2
INT21H
MOVAH,4CH
INT21H
CODEENDS
END
三、实验设备
PC机一台,MASM汇编程序
四、实验步骤
1.用记事本将源程序输入,并存盘。
注意:
源程序是用汇编语言语句编写的程序,并不能为机器所识别。
源程序的扩展名为.ASM
2.用宏汇编程序将.ASM源程序汇编成机器码的目标文件(OBJ文件)
3.用LINK程序产生执行文件(EXE文件)
4.执行程序
实验结果:
五、心得体会
第一次经历了汇编语言的上机过程,对在计算机上进行汇编语言程序设计的步骤不是很熟悉,对命令提示符的一些操作命令不懂,后来查阅了一些资料,比如可以在window7下按住shift,点击鼠标右键,在弹出的窗口里就可以打开命令提示符了。
六、思考题
1.请说出一个完整的汇编程序从编写到运行所需的步骤。
(1)用编辑程序建立ASM源程序文件
(2)用宏汇编程序将.ASM源程序汇编成机器码的目标文件(OBJ文件)
(3)用LINK程序产生执行文件(EXE文件)
(4)在DOS命令行直接键入文件名执行该文件
2.修改源程序,改变屏幕显示的内容。
修改的源程序:
CODESEGMENT
ASSUMECS:
CODE
MOVDL,'D'
MOVAH,2
INT21H
MOVAH,4CH
INT21H
CODEENDS
END
实验二 数据的显示实验
一、实验目的
1.掌握屏幕上显示各种进制数据的方法。
2.掌握将内存中的二进制数转换为十进制、十六进制数的方法。
3.学会子程序的编写、调用及数据传递方法。
二、实验内容
1.把BX中的无符号二进制数转换成十进制数,在屏幕上显示出来。
2.把BX中的带符号二进制数转换成十进制数,在屏幕上显示出来。
3.求一个数据块(由10个单字节的无符号数组成)中的最大元素,并将结果以十进制数的形式在屏幕上显示出来。
4.求一个数据块(由20个单字节的带符号数组成)中的正数之和(和不超过字)和负数之和(和不超过字),并在屏幕上用十进制数的形式分别显示出两个和。
5.将寄存器BX中的二进制数转换成十六进制数,并在屏幕上显示出来。
从高到低依次取出4位二进制数变为ASCII码输出即可。
三、实验设备:
PC机一台、masm汇编程序
四、实验步骤:
依照前面介绍的方法,对每一个实验内容对应的程序进行编辑、编译、连接和运行,直到达到实验要求。
1.实验内容1
(1)实验内容1的流程图,如图所示:
(2)实验内容1的程序:
CODESEGMENT
ASSUMECS:
CODE
DEC_DIVMACRO
MOVAX,BX
MOVDX,0
DIVCX
MOVBX,DX
MOVDL,AL
ADDDL,30H
MOVAH,2
INT21H
ENDM
START:
MOVBX,0FFFH
MOVCX,1000
DEC_DIV
MOVCX,100
DEC_DIV
MOVCX,10
DEC_DIV
MOVCX,1
DEC_DIV
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
(3)实验结果:
2.实验内容2
(1)实验容1的程序:
DATASEGMENT
ADW1000
BDW100
CDW10
DDW1
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVBX,0FFEFH;-0017的补码是0FFEFH
ORBX,BX
JNSNEXT
NEGBX
ANDBH,7FH
MOVDL,2DH
MOVAH,2
INT21H
NEXT:
MOVSI,OFFSETA
CALLDEC_DIV
MOVSI,OFFSETB
CALLDEC_DIV
MOVSI,OFFSETC
CALLDEC_DIV
MOVSI,OFFSETD
CALLDEC_DIV
MOVAH,4CH
INT21H
DEC_DIVPROCNEAR
MOVCX,[SI]
MOVAX,BX
MOVDX,0
DIVCX
MOVBX,DX
MOVDL,AL
ADDDL,30H
MOVAH,2
INT21H
RET
DEC_DIVENDP
CODEENDS
ENDSTART
(2)实验结果:
3.实验内容3
(1)实验内容3的流程图,如图所示:
(2)实验3的程序:
DATASEGMENT
BLOCKDB1,0,5,7,10,30,100,127,90,80
RESULTDB?
?
BUFDB'MAXIS:
$'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
BEGINPROCFAR
MOVAX,DATA
MOVDS,AX
MOVCX,9
LEASI,BLOCK
MOVAL,[SI]
X1:
INCSI
CMPAL,[SI]
JAEX2
MOVAL,[SI]
X2:
LOOPX1
MOVRESULT,AL
MOVDX,OFFSETBUF
MOVAH,9
INT21H
MOVBL,RESULT
CBW
MOVCX,1000
CALLDEC_DIV
MOVCX,100
CALLDEC_DIV
MOVCX,10
CALLDEC_DIV
MOVCX,1
CALLDEC_DIV
MOVAH,4CH
INT21H
DEC_DIVPROCNEAR
MOVAX,BX
MOVDX,0
DIVCX
MOVBX,DX
MOVDL,AL
ADDDL,30H
MOVAH,2
INT21H
RET
DEC_DIVENDP
BEGINENDP
CODEENDS
ENDBEGIN
(3)实验3的运行结果:
4.实验内容4
(1)实验内容4的流程图,如图所示:
(2)实验内容4程序:
DATASEGMENT
BLOCKDB-1,-2,-3,-4,-5,-6,-7,-8,-9,-10
DB11,12,13,14,15,16,17,18,19,20
POSITDW?
NEGATDW?
BUF1DB'POSIT:
$'
BUF2DB'NEGAT:
$'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
STARTPROC
MOVAX,DATA
MOVDS,AX
MOVBX,OFFSETBLOCK
MOVSI,0
MOVDI,0
MOVCX,20
X1:
MOVAL,[BX]
CBW
CMPAX,0
JGEX3
ADDDI,AX
JMPX2
X3:
ADDSI,AX
X2:
INCBX
LOOPX1
MOVPOSIT,SI
MOVNEGAT,DI
MOVDX,OFFSETBUF1
MOVAH,9
INT21H
MOVBX,POSIT
MOVCX,1000
CALLDEC_DIV
MOVCX,100
CALLDEC_DIV
MOVCX,10
CALLDEC_DIV
MOVCX,1
CALLDEC_DIV
MOVDL,0AH
MOVAH,2
INT21H
MOVDX,OFFSETBUF2
MOVAH,9
INT21H
MOVBX,NEGAT
NEGBX
ANDBH,01111111B
MOVDL,2DH;显示负号
MOVAH,2
INT21H
MOVCX,1000
CALLDEC_DIV
MOVCX,100
CALLDEC_DIV
MOVCX,10
CALLDEC_DIV
MOVCX,1
CALLDEC_DIV
MOVAH,4CH
INT21H
DEC_DIVPROCNEAR
MOVAX,BX
MOVDX,0
DIVCX
MOVBX,DX
MOVDL,AL
ADDDL,30H
MOVAH,2
INT21H
RET
DEC_DIVENDP
CODEENDS
ENDSTART
(3)实验结果:
5.实验内容5
(1)实验内容5的流程图,如图所示:
图2-4内容5流程图
(2)实验内容5的源程序,参考如下:
CODESEGMENT
ASSUMECS:
CODE
BINHEXPROCFAR
MOVCH,4
MOVBX,1000
ROTATE:
MOVCL,4
ROLBX,CL
MOVDL,BL
ANDDL,0FH
ADDDL,30H
CMPDL,3AH
JLOUTPUT
ADDDL,7
OUTPUT:
MOVAH,2
INT21H
DECCH
JNEROTATE
MOVDL,'H'
MOVAH,2
INT21H
MOVAH,4CH
INT21H
BINHEXENDP
CODEENDS
ENDBINHEX
(3)实验结果:
五、心得体会
实验内容1:
宏定义必须先定义,后调用,自己刚开始时把宏定义放在调用的后面,导致程序出错。
看了生产的LIST给出的源程序和目标程序,发现每个宏调用处,通过宏扩展,宏体中的指令的机器代码被插入到宏调用处,不节省内存单元,但相对于子程序,简化了源程序。
实验内容2:
刚开始的时候给BX寄存器送负值,比如-17,我写成了1000000000010001
即MOVBX,8011H,后来发现显示出来的数不是-17。
经过思考,懂得原来负数的表示要用补码,下面是两种LIST文件里对应地方的目标程序和源程序,可以看出转化为目标程序的时候,用补码表示。
0000BBFFEFSTART:
M