微机系统及原理实验报告.docx
《微机系统及原理实验报告.docx》由会员分享,可在线阅读,更多相关《微机系统及原理实验报告.docx(33页珍藏版)》请在冰点文库上搜索。
微机系统及原理实验报告
微机系统及应用实验
实验报告
实验一DEBUG的启动及其基本命令的使用
实验内容:
6:
设堆栈指针SP=2000H,AX=3000H,BX=5000H;请仿照例程的格式编一程序段将AX和BX的内容进行交换。
请用堆栈作为两寄存器交换内容的中间存储单元,用DEBUG调试程序进行汇编与调试。
写出在DEBUG状态下编写、运行步骤6所要求的程序过程(要求包含源程序)以及调试所中遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。
程序清单:
STACKSEGMENTSTACK
DB2003HDUP(0)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,SS:
STACK
START:
MOVAX,STACK
MOVSS,AX
MOVSP,2000H
MOVAX,3000H
MOVBX,5000H
PUSHAX
MOVAX,BX
POPBX
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
运行及调试:
进入调试后,运行正常。
进行反汇编调试:
通过追踪指令观察SP、AX、BX变化
可知对SP、AX、BX赋值正确。
将AX入栈后
用显示内存单元内容的命令D观察堆栈段中SP为1FFF,2000的内容
[1FFF]=00,[2000]=30说明已经AX=3000已经放入到堆栈段中。
结果可以看出:
AX=5000,BX=3000
结果完成正确!
实验二内存操作数及寻址方法
实验内容:
1、设堆栈指针SP=2000H,AX=3000H,BX=5000H;请编一程序段将AX和BX的内容进行交换。
请用堆栈作为两寄存器交换内容的中间存储单元,用字处理程序编辑程序,用masm.exe和link.exe对源程序进行汇编程和连接,用DEBUG调试程序。
2、用masm和link对以下程序进行汇编和连接,调试程序在DEBUG调试程序状态下进行。
用单步执行的方法,分析每条指令源地址的形成过程,当数据传送完毕时,AX中的内容是什么。
程序清单如下:
DATASEGMENT
ORG0300H
ADB12H,23H,34H,45H,56H,67H,78H,89H,9AH
DATAENDS
PROGNAMSEGMENT
ASSUMECS:
PROGNAM,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAX,BX
MOVAX,0300H
MOVAX,[0300H]
MOVAX,[BX]
MOVSI,2
MOVAX,0001[BX]
MOVAX,[BX][SI]
MOVAX,0001[BX][SI]
MOVAH,4CH
INT21H
PROGNAMENDS
ENDSTART
对源程序文件汇编,生成目标文件
将目标文件LINK后,生成可执行文件如下:
进入debug调试
单步追踪执行:
AX=0B91,为数据段的首地址。
AX不变,将数据段的首地址送至DS。
执行MOVAX,BX
AX同BX,清零。
执行MOVAX,0300H
AX=0300
执行MOVAX,[0300H]
AX=0300
可知MOVAX,0300H与MOVAX,[0300H]得到同样结果
AX均为0000.
将原文中的指令清单改为
DATASEGMENT
ADB12H,23H,34H,45H,56H,67H,78H,89H,9AH
ORG0300H
BDB0BH,0CH
DATAENDS
PROGNAMSEGMENT
ASSUMECS:
PROGNAM,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAX,BX
MOVAX,0300H
MOVAX,[0300H]
MOVAX,[BX]
MOVSI,2
MOVAX,0001[BX]
MOVAX,[BX][SI]
MOVAX,0001[BX][SI]
MOVAH,4CH
INT21H
PROGNAMENDS
ENDSTART
单步执行后:
可知:
随着程序进行,AX发生变化。
实验三算术运算指令
实验内容
编写三个完整的汇编语言源程序,完成以下计算。
其中X、Y、Z、R、W均为存放16位带符号数单元的地址。
(1)Z←W+(Z-X)
(2)Z←W-(X+6)-(R+9)
(3)Z←(W*X)/(Y+6),R←余数
实验前要做好充分准备,包括汇编程序清单、调试步骤、调试方法,以及对程序结果的分析等
1、程序说明。
说明程序的功能、结构。
2、调试说明。
包括上机调试的情况、上机调试步骤、调试所遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。
3、写出源程序清单和执行结果。
(1)Z←W+(Z-X)
汇编程序清单
DATASEGMENT
XDW10
ZDW20
WDW10
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAX,Z
SUBAX,X
ADDAX,W
MOVZ,AX
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
进入debug调试:
使用追踪指令T单步执行:
执行结果是将20放入AX中。
AX=0014H
执行结果AX=0014H-000AH=000A,结果正确。
执行结果显示:
AX=0014H,即为20,正确。
然后将结果保存至Z存储字中。
最后观察数据组中的数据;
显示为X=10,Z=20,W=10。
程序运行结果正确
(2)Z←W-(X+6)-(R+9)
汇编程序清单:
DATASEGMENT
WDW100
XDW20
RDW30
ZDW?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAX,W
MOVBX,X
ADDBX,6
SUBAX,BX
MOVBX,R
ADDBX,9
SUBAX,BX
MOVZ,AX
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
对程序进行汇编后调试:
单步执行:
此时,对DS的段基址赋值为数据组的首地址
此时,对AXBX分别赋值为100,20
(3)Z←(W*X)/(Y+6),R←余数
汇编程序清单:
DATASEGMENT
XDW10H
ZDW?
WDW10H
YDW3H
RDW?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAX,W
IMULX
MOVBX,Y
ADDBX,6
IDIVBX
MOVZ,AX
MOVR,DX
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
编译执行结果如下:
单步执行结果如下:
执行结果可得:
商的整数部分z所指向的字单元内容为001CH,余数本分R指向的字单元内容为0004H。
实验四查表程序设计
实验内容:
用查表的方法将一位十六进制数转换成与它相应的ASCII码,并将结果存放到ASCI单元中。
汇编程序清单:
DATASEGMENT
TABLEDB30H,31H,32H,33H,34H,35H,36H,37H
DB38H,39H,41H,42H,43H,44H,45H,46H
HEXDB0AH
ASCIDB?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVBX,OFFSETTABLE
MOVAL,HEX
XLAT
MOVASCI,AL
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
对程序进行编译进入debug调试
使用t追踪指令观察数据变化
ASCI所指向的字节单元的内容正是十六进制数0AH的ASCII值41。
实验五系统功能调用
实验内容:
试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。
汇编程序清单:
CODESEGMENT
ASSUMECS:
CODE
START:
MOVAH,1
INT21H
SUBAL,20H
MOVDL,AL
MOVAH,2
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
对源程序编译并进入debug状态
调试结果正确。
实验六分支程序设计:
实验内容
假设有一组数据:
5,-4,0,3,100,-51,请编一程序,判断:
每个数大于0,等于0,还是小于0;并输出其判断结果。
即:
1当x>0
y=0当x=0
-1当x<0
汇编程序清单:
DATASEGMENT
TABLEDB5,-4,0,3,100,-51
GDB'1',13,10,'$'
ZDB'0',13,10,'$'
LDB'-1',13,10,'$'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
LEASI,TABLE
MOVCL,6
COMP:
CMPBYTEPTR[SI],0
JGGREAT
JZEQUAL
LEADX,L
JMPSHORTDISP
GREAT:
LEADX,G
JMPSHORTDISP
EQUAL:
LEADX,Z
DISP:
MOVAH,9
INT21H
INCSI
LOOPCOMP
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
对源程序进行编译并进入调试状态
分布调试:
从结果可知:
经过第一次循环,DX所代表的要输出的字符串的地址0006H即为数据段中Z字符串的EA,所以输出内容为1。
且SI自增1,CL减1。
以下循环原理同上。
全部运行的:
程序运行正确。
思考题:
程序中的原始数据是以怎样的形式存放在数据区中的?
请用DEBUG调试程序观察并分析。
答:
程序中的原始数据是以补码的十六进制的形式存放在数据区中的。
实验七循环程序设计
实验内容与要求
1.编制程序计算S=1+2·3+3·4+4·5+……+N(N+1)+……直到N(N+1)大于200为止,并将结果由屏幕上显示出来。
其程序的流程图如图7.1所示。
2.将从3000H内存单元开始的100个字节存储单元全部清0。
本实验要求在DEBUG调试状态下进行,包括汇编程序、运行程序、检查结果。
程序框图
图7.1程序框图
实验步骤
实验内容一:
1)按程序流程图编制实验程序。
2)输入源程序。
3)汇编、连接程序,执行程序,检查结果。
实验内容二:
1)输入源程序并检查无误。
2)对内存单元3000H开始的100个存储单元用E命令输入任意数。
3)程序的执行可用DEBUG的G命令,也可用T命令单步跟踪执行。
4)用D命令检查执行结果。
实验内容1的程序清单:
DATASEGMENT
STRDB5DUP(0)
DB'$'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVDX,1
MOVBL,2
LOP:
MOVAL,BL
INCBL
MULBL
ADDDX,AX
CMPAX,200
JBELOP
MOVAX,DX
LEADI,STR+4
LOP2:
MOVCL,10
DIVCL
ADDAH,30H
MOV[DI],AH
ANDAX,00FFH
DECDI
CMPAL,0
JNELOP2
LEADX,STR
MOVAH,9
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
程序运行及结果:
实验内容1的程序清单:
DATASEGMENT
STRDB5DUP(0)
DB'$'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVDX,1
MOVBL,2
LOP:
MOVAL,BL
INCBL
MULBL
ADDDX,AX
CMPAX,200
JBELOP
MOVAX,DX
LEADI,STR+4
LOP2:
MOVCL,10
DIVCL
ADDAH,30H
MOV[DI],AH
ANDAX,00FFH
DECDI
CMPAL,0
JNELOP2
LEADX,STR
MOVAH,9
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
程序运行及结果:
程序循环体如下图:
结束循环:
下部分程序为利用除10取余法将计算结果用十进制在屏幕上显示:
计算结果在DS的存储:
实验内容与要求
(2)将从3000H内存单元开始的100个字节存储单元全部清0。
本实验要求在DEBUG调试状态下进行,包括汇编程序、运行程序、检查结果。
实验步骤
实验内容二:
1)输入源程序并检查无误。
2)对内存单元3000H开始的100个存储单元用E命令输入任意数。
3)程序的执行可用DEBUG的G命令,也可用T命令单步跟踪执行。
4)用D命令检查执行结果。
汇编程序清单:
CODESEGMENT
ASSUMECS:
CODE
START:
PUSHDS
MOVAX,0
PUSHAX
MOVBX,3000H
MOVCL,100
LOP:
MOVBYTEPTR[BX],0
INCBX
LOOPLOP
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
运行及调试:
E命令修改:
T追踪:
实验九综合程序设计
实验内容:
设有十个学生成绩分别是76,69,84,90,73,88,99,63,100和80分。
试编制一个子程序,统计低于60分,60~69分,70~79分,80~89分,90~99分和100分的人数,并输出显示统计结果。
编程提示:
1、成绩分等部分采用分支结构,统计所有成绩则用循环结构完成,显示统计结果采用DOS功能调用。
2、统计学生成绩和显示统计结果两部分内容用子程序结构来完成。
程序框图:
汇编程序清单:
DATASEGMENT
GRADEDB76,69,84,90,73,88,99,63,100,80
STR1DB'低于60分人数为:
'
X1DB30H,'$'
STR2DB'60-69分人数为:
'
X2DB30H,'$'
STR3DB'70-79分人数为:
'
X3DB30H,'$'
STR4DB'80-89分人数为:
'
X4DB30H,'$'
STR5DB'90-99分人数为:
'
X5DB30H,'$'
STR6DB'100分人数为:
'
X6DB30H,'$'
CRLF1DB13,10,'$'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
MAINPROCFAR
MOVAX,DATA
MOVDS,AX
CALLCOMP
CALLDISP
MOVAH,4CH
INT21H
MAINENDP
COMPPROCNEAR
LEASI,GRADE
MOVCL,10
LOP:
CMPBYTEPTR[SI],60
JBNEXT1
CMPBYTEPTR[SI],70
JBNEXT2
CMPBYTEPTR[SI],80
JBNEXT3
CMPBYTEPTR[SI],90
JBNEXT4
CMPBYTEPTR[SI],100
JBNEXT5
INCX6
INCSI
LOOPLOP
RET
NEXT1:
INCX1
INCSI
LOOPLOP
RET
NEXT2:
INCX2
INCSI
LOOPLOP
RET
NEXT3:
INCX3
INCSI
LOOPLOP
RET
NEXT4:
INCX4
INCSI
LOOPLOP
RET
NEXT5:
INCX5
INCSI
LOOPLOP
RET
COMPENDP
DISPPROCNEAR
LEADX,STR1
MOVAH,9
INT21H
CALLCRLF
LEADX,STR2
MOVAH,9
INT21H
CALLCRLF
LEADX,STR3
MOVAH,9
INT21H
CALLCRLF
LEADX,STR4
MOVAH,9
INT21H
CALLCRLF
LEADX,STR5
MOVAH,9
INT21H
CALLCRLF
LEADX,STR6
MOVAH,9
INT21H
RET
DISPENDP
CRLFPROCNEAR
LEADX,CRLF1
MOVAH,9
INT21H
RET
CRLFENDP
CODEENDS
ENDMAIN