微机实验报告汇总Word文档格式.docx
《微机实验报告汇总Word文档格式.docx》由会员分享,可在线阅读,更多相关《微机实验报告汇总Word文档格式.docx(26页珍藏版)》请在冰豆网上搜索。
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
D'
实验二 数据的显示实验
1.掌握屏幕上显示各种进制数据的方法。
2.掌握将内存中的二进制数转换为十进制、十六进制数的方法。
3.学会子程序的编写、调用及数据传递方法。
1.把BX中的无符号二进制数转换成十进制数,在屏幕上显示出来。
2.把BX中的带符号二进制数转换成十进制数,在屏幕上显示出来。
3.求一个数据块(由10个单字节的无符号数组成)中的最大元素,并将结果以十进制数的形式在屏幕上显示出来。
4.求一个数据块(由20个单字节的带符号数组成)中的正数之和(和不超过字)和负数之和(和不超过字),并在屏幕上用十进制数的形式分别显示出两个和。
5.将寄存器BX中的二进制数转换成十六进制数,并在屏幕上显示出来。
从高到低依次取出4位二进制数变为ASCII码输出即可。
三、实验设备:
PC机一台、masm汇编程序
四、实验步骤:
依照前面介绍的方法,对每一个实验内容对应的程序进行编辑、编译、连接和运行,直到达到实验要求。
1.实验内容1
(1)实验内容1的流程图,如图所示:
(2)实验内容1的程序:
CODESEGMENT
CODE
DEC_DIVMACRO
MOVAX,BX
MOVDX,0
DIVCX
MOVBX,DX
MOVDL,AL
ADDDL,30H
INT21H
ENDM
START:
MOVBX,0FFFH
MOVCX,1000
DEC_DIV
MOVCX,100
MOVCX,10
MOVCX,1
ENDSTART
(3)实验结果:
2.实验内容2
(1)实验容1的程序:
DATASEGMENT
ADW1000
BDW100
CDW10
DDW1
DATAENDS
CODESEGMENT
CODE,DS:
DATA
MOVAX,DATA
MOVDS,AX
MOVBX,0FFEFH;
-0017的补码是0FFEFH
ORBX,BX
JNSNEXT
NEGBX
ANDBH,7FH
MOVDL,2DH
MOVAH,2
NEXT:
MOVSI,OFFSETA
CALLDEC_DIV
MOVSI,OFFSETB
MOVSI,OFFSETC
MOVSI,OFFSETD
DEC_DIVPROCNEAR
MOVCX,[SI]
RET
DEC_DIVENDP
(2)实验结果:
3.实验内容3
(1)实验内容3的流程图,如图所示:
(2)实验3的程序:
BLOCKDB1,0,5,7,10,30,100,127,90,80
RESULTDB?
?
BUFDB'
MAXIS:
$'
CODE,DS:
BEGINPROCFAR
MOVAX,DATA
MOVDS,AX
MOVCX,9
LEASI,BLOCK
MOVAL,[SI]
X1:
INCSI
CMPAL,[SI]
JAEX2
X2:
LOOPX1
MOVRESULT,AL
MOVDX,OFFSETBUF
MOVAH,9
MOVBL,RESULT
CBW
MOVCX,1000
BEGINENDP
ENDBEGIN
(3)实验3的运行结果:
4.实验内容4
(1)实验内容4的流程图,如图所示:
(2)实验内容4程序:
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
STARTPROC
MOVBX,OFFSETBLOCK
MOVSI,0
MOVDI,0
MOVCX,20
MOVAL,[BX]
CBW
CMPAX,0
JGEX3
ADDDI,AX
JMPX2
X3:
ADDSI,AX
INCBX
MOVPOSIT,SI
MOVNEGAT,DI
MOVDX,OFFSETBUF1
MOVBX,POSIT
MOVDL,0AH
MOVDX,OFFSETBUF2
MOVBX,NEGAT
ANDBH,01111111B
MOVDL,2DH;
显示负号
(3)实验结果:
5.实验内容5
(1)实验内容5的流程图,如图所示:
图2-4内容5流程图
(2)实验内容5的源程序,参考如下:
BINHEXPROCFAR
MOVCH,4
MOVBX,1000
ROTATE:
MOVCL,4
ROLBX,CL
MOVDL,BL
ANDDL,0FH
ADDDL,30H
CMPDL,3AH
JLOUTPUT
ADDDL,7
OUTPUT:
DECCH
JNEROTATE
MOVDL,'
H'
MOVAH,4CH
BINHEXENDP
ENDBINHEX
实验内容1:
宏定义必须先定义,后调用,自己刚开始时把宏定义放在调用的后面,导致程序出错。
看了生产的LIST给出的源程序和目标程序,发现每个宏调用处,通过宏扩展,宏体中的指令的机器代码被插入到宏调用处,不节省内存单元,但相对于子程序,简化了源程序。
实验内容2:
刚开始的时候给BX寄存器送负值,比如-17,我写成了1000000000010001
即MOVBX,8011H,后来发现显示出来的数不是-17。
经过思考,懂得原来负数的表示要用补码,下面是两种LIST文件里对应地方的目标程序和源程序,可以看出转化为目标程序的时候,用补码表示。
0000BBFFEFSTART:
M