微机原理与系统设计上机报告.docx
《微机原理与系统设计上机报告.docx》由会员分享,可在线阅读,更多相关《微机原理与系统设计上机报告.docx(41页珍藏版)》请在冰豆网上搜索。
微机原理与系统设计上机报告
微机原理与系统设计上机报告
学号:
*******
姓名:
**
指导老师:
**
时间:
2016年11月
西安电子科技大学
内容一Debug程序的使用
一、实验目的
1.学习使用DEBUG调试命令。
2.学习用DEBUG调试简单程序。
3.通过程序验证码制及其对标志位的影响。
4.通过调试熟悉和掌握各寄存器的作用与特点。
二、实验内容
用DEBUG调试简单程序。
三、实验仪器
微机一台
四、实验步骤
1.由DOS进入DEBUG调试环境。
(1)DEBUG将调试程序装入内存
注意:
当机器控制权由DOS成功地转移给调试程序后,将显示“-”号,它是DEBUG的状态提示符,表示可以接受调试子命令了。
(2)-R显示CPU中各寄存器当前初始内容,请记录下列各项:
AX=0000
BX=0000
CX=0000
DX=0000
BP=0000
SI=0000
DI=0000
DS=13E0
ES=13E0
SS=13E0
SP=FFEE
CS=13E0
IP=0100
FLAG寄存器中的8个标志位状态值是:
OF
DF
IF
SF
ZF
AF
PF
CF
NV
UP
EI
PL
NZ
NA
PO
NC
DEBUG用符号给出标志寄存器中8个标志位的当前状态,其含义如下表所示。
标志位含义
‘1’的对应符号
‘0’的对应符号
OF溢出
OV有
NV无
DF方向
DN递减
UP递增
IF中断
EI允许
DI禁止
SF符号
NG负
PL正
ZF全零
ZR零
NZ非零
AF辅助进位
AC有
NA无
PF奇偶性
PE偶
PO奇
CF进位
CY有
NC无
2.用DEBUG调试简单程序
例1-ACS:
0106
MOVAX,1234
MOVBX,2345
MOVCX,0
ADDAX,BX
MOVCX,AX
INT20
运行程序
(注:
执行程序时IP应指向要执行的指令,需要修改该寄存器
-RIP
当前值
输入需要值该处为0106,当然也可以在T或G命令中指出程序起始地址)
-R显示各寄存器当前内容及首条指令
-T3跟踪执行三条赋值传送指令,观察寄存器及标志位
-T2跟踪执行相加及送和数指令,观察寄存器及标志位
-G执行软件中断指令INT20,机器将显示“程序正常终止”的信息,并显示“-”,表明仍处在DEBUG的调试控制状态下,注意未用T命令,因为我们不想进入到20H中断处理程序中去,P命令也可实现相同操作
实验现象记录:
观察与记录按照上述要求命令执行后,哪些寄存器和标志位发生了变化。
例2-ACS:
116
MOVAX,[0124]
MOVBX,[0126]
ADDAX,BX
MOV[0128],AX
INT20
DW2222
DW8888
DW0
设置断点分段运行程序
-G=CS:
11611D从指定入口运行程序,至断点11D停,可见两个数已取至AX,BX,但还没有求和
-G122从上一断点运行至新断点停,已完成求和并存入指定结果单元
-G完成程序
观看内存内容
-DCS:
11612A显示本程序小段目标代码和数据单元内容
-UCS:
11612A反汇编指定范围的内存内容-
实验现象记录:
观察与记录指定范围的内存内容;通过反汇编,观察与记录指定范围的内存内容及对应指令。
例3-ACS:
0192
MOVDX,19B
MOVAH,9
INT21
INT20
DB‘HELLO,WORLD!
$’
-P命令单步执行
实验现象记录:
观察每条指令执行后各寄存器的变化,记录DX,AX的变化。
思考:
根据程序输入情况,考虑‘HELLO,WORLD!
$’在内存中的ASCⅡ码和地址范围
-D109C01A7(如下图)
ASCⅡ码为:
454C4C4F2C574F524C442124;
例4自己设计一段小程序验证补码的加法、进位、溢出的概念;
参考程序(可对数据进行修改):
-ACS:
0100
MOVAL,74
ADDAL,70
MOVAL,7A
ADDAL,94
MOVAL,43
ADCAL,65
INT20
-P命令单步执行
实验现象记录:
记录每条指令执行后AX及标志位变化。
AX及标志位变化如下图:
例5
1.使用R命令,实现AX=0108,BX=F1AA
如下图:
2.编辑下列程序
-ACS:
0100
MOVAL,05
MOVBL,09
MULBL
AAM
INT20
-P命令执行单步执行
实验现象记录:
记录每条指令执行后,AX、BX以及标志位的变化。
例6执行下列程序,用P命令或T命令跟踪
-ACS:
0100
MOVAX,0200
MOVDX,1E4F
CALLAX;调用子程序
MOVDX,167C
ADDDH,DL
MOV[0300],DX
INT20
;********下面是子程序段********
-ACS:
0200
PUSHAX
MOVAX,010B
POPAX
RET
实验现象记录:
1)跟踪执行程序,观察在子程序调用过程中
IP0201SPFFEC堆栈区域内容13DE:
FFEC
0204FFEC13DE:
FFEC
0205FFEE13DE:
FFEE
2)程序运行完毕后DS:
[0300]中的内容为0000
3)如果去掉POPAX,程序执行后DS:
[0300]中内容为4F6D
内容二汇编语言上机环境及基本步骤
一、实验目的:
1.掌握编写汇编源程序的基本格式。
2.熟悉汇编语言上机环境。
3.掌握汇编源程序的编辑和修改,熟悉EDIT或记事本的使用方法。
4.掌握汇编源程序编译、连接成可执行文件的过程,熟悉MASM,LINK的使用方法。
二、实验内容:
在屏幕上显示并打印字符串“Thisisasampleprogram.”
三、实验仪器
微机一台
四、实验步骤:
1.在某盘如E盘,以自己的名字的汉语拼音建立一个工作目录(文件夹,名称不要太长,不超过8个字符比如zhangsan),将文件MASM.EXE,LINK.EXE等复制到该目录下,编辑的源文件也保存到该目录下。
从WINDOWS进入DOS环境:
C:
\>
2.用EDIT编辑SW1.ASM源文件。
(1).从当前目录进入自己的目录下,
C:
\>E:
回车
E:
\>CDzhangsan↙回车
键入EDIT并回车:
E:
\zhangsan>EDIT
根据菜单提示进行各种操作。
(2)进入EDIT编辑------EDIT是一种全屏幕编辑软件,可输入、编辑、修改、保存、另存源程序非常方便。
说明:
也可在WIDNDOWS环境下用记事本编辑源文件,在保存时,保存类型应选择所有文件,不能选择文本文件(*.txt),否则在编译时会找不到源文件的。
(3).编辑新文件:
a、在EDIT编辑器中输入汇编源程序。
b、检查输入有无错误。
c、打开文件菜单FILE选择另存为SAVEAS┅输入文件名为:
SW1.ASM保存。
注意:
保存到你自己的文件夹中
d、若需要修改此文件,用FILE菜单选择打开OPEN输入文件名SW1.ASM,即可修改。
修改后注意重新再存盘。
(4).编辑汇编源程序
a、在EDIT(或记事本)中输入源程序。
b、检查。
c、存盘。
可保存为SW1.ASM
3.用汇编程序MASM将SW1.ASM文件汇编,生成SW1.OBJ目标文件。
(1).一般简单程序只需生成.OBJ文件,可键入简化命令:
E:
\zhangsan>MASMSW1;↙
若有错误,则显示错误行号及错误性质,如:
SW1.ASM(5):
errorA2006:
undefinedsymbor:
xxxx
(2).若有错重新进入EDIT进行修改。
修改后并再存盘,退出编辑,回到DOS,再汇编。
E:
\zhangsan>MASMSW1;↙
(3).没有任何错误时,显示:
Assembling:
SW1.asm
表示汇编成功,生成SW1.OBJ文件。
(4).用DIR命令查看应有SW1.OBJ:
E:
\zhangsan>DIRSW1.*
4.用连接程序LINK将SW1.OBJ文件连接,生成SW1.EXE可执行文件。
(1).一般仅生成SW1.EXE文件,可键入简化命令:
E:
\zhangsan>LINKSW1;↙
若有错误,则显示错误信息,则应返回编辑、修改、存盘,再汇编、连接直到连接成功,生成SW1.EXE可执行文件。
(2).用DIR命令查看应有SW1.EXE:
E:
\zhangsan>DIRSW1.*↙
5.运行SW1.EXE文件
E:
\zhangsan>SW1↙
执行SW1.EXE文件,屏幕应显示:
“Thisisasampleprogram.”。
由连接程序生成的.EXE,在DOS下,直接键入文件名(不要扩展名.EXE)就可以把文件装入内存,并立即执行。
但有的程序没有直接显示结果;对于较复杂程序难免会出现错误,直接观察很难找到错误所在,这样就要借用调试程序进行调试。
实验现象记录:
记录调试过程中出现的问题及修改措施,并记录程序执行结果。
五、实验源程序
DATASEGMENT
DA1DB'Thisisasimpleprogram.'
DB0DH,0AH,'$'
DATAENDS
STACKSEGMENT
ST1DB100DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,STACK
MOVSS,AX
MOVAX,DATA
MOVDS,AX
MOVAH,9
MOVDX,OFFSETDA1
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
内容三顺序程序设计
一、实验目的
1)掌握使用指令编程及调试的方法;
2)掌握指令对状态标志位的影响及其测试方法;
3)学会运用顺序程序解决实际问题的方法。
二、实验设备
PC机一台
三、实验内容及步骤
1.
(1)题目计算X+Y=Z,将结果Z存入某存贮单元。
本实验程序是2个16位,即32位运算,利用累加器AX,先求低16位和,并存入低地址存贮单元,后求高16位和,再存入高地址存贮单元。
由于低位和可能向高位有进位,因而高位相加语句须用ADC指令,则低位相加有进位时CF=l,高位字相加时,同时加上CF中的1。
参考程序如下:
STACKSEGMENT
DW64DUP(?
)
STACKENDS
DATASEGMENT
XLDW?
;请在此处给X低位赋值
XHDW?
;请在此处给X高位赋值
YLDW?
;请在此处给Y低位赋值
YHDW?
;请在此处给Y高位赋值
ZLDW?
ZHDW?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAX,XL
ADDAX,YL
MOVZL,AX
MOVAX,XH
ADCAX,YH
MOVZH,AX
INT03H
CODEENDS
ENDSTART
(2)实验步骤
1)输入实验程序并检查无误,经汇编、连接后生成EXE文件。
2)用DEBUG的U命令查看MOVAX,XXXX(DATA)语句,即得到数据段基址DS:
XXXX,用E命令EXXXX:
0000给XL,XH,YL,YH赋值存入十六进制数A0651500和9EB72100。
3)用G命令运行以上程序。
4)用DXXXX:
0008显示计算结果:
3E1D3700
5)反复试几组数,考查程序的正确性。
2.写出计算y=a*b+c-18的程序,其中a、b、c分别为3个带符号的8位二进制数。
同1一样,写出上机过程,观察现象,记录结果
内容四分支程序设计
一、实验目的
1)学习分支程序的设计与调试方法;
2)掌握分支程序的指令和基本结构。
二、实验设备
PC机一台
三、实验内容及步骤
1.求某数X的绝对值,并送回原处
同上,写出上机过程,观察现象及记录结果
2.写出将一位十六进制数转换成对应的ASXII码的程序(只考虑大写字母)。
同上,写出上机过程,观察现象及记录结果
3.参看课本例3,在DS数据段偏移地址为DATA开始的顺序20个单元中,存放着某班80个同学的微型机原理考试成绩。
现欲编程序统计≥90分、80分~89分,70分~79分60分~69分和<60分的人数,并将统计的结果放在当前数据段偏移地址为BUFFER的顺序单元中。
同上,写出上机过程,观察现象及记录结果
STACKSEGMENT
DW64DUP(?
)
STACKENDS
DATASEGMENT
CJDB20DUP(?
)
BUFFERDB5DUP(0)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVDX,0000H
MOVBX,0000H
MOVAH,00H
MOVCX,20
LEASI,CJ
LEADI,BUFFER
GOON:
MOVAL,[SI]
CMPAL,90
JCNEXT1
INCDH
JMPSTOR
NEXT1:
CMPAL,80
JCNEXT2
INCDL
JMPSTOR
NEXT2:
CMPAL,70
JCNEXT3
INCBH
JMPSTOR
NEXT3:
CMPAL,60
JCNEXT4
INCBH
JMPSTOR
NEXT4:
INCBL
STOR:
INCSI
LOOPGOON
MOV[DI],DH
MOV[DI+1],DL
MOV[DI+2],BH
MOV[DI+3],BL
MOV[DI+4],AH
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
内容五循环程序设计
一、实验目的
1)学习循环程序的设计与调试方法;
2)掌握循环程序的基本结构。
二、实验设备
PC机一台
三、实验内容及步骤
1.
(1)题目:
求某数据区内负数的个数。
设数据区的第一单元存放区内单元数据的个数,从第二单元开始存放数据,在区内最后一个单元存放结果。
为统计数据区内负数的个数,需要逐个检查区内的每一个数据,然后将所有数据中凡是符号位为1的数据的个数累加起来,即可得到所包含负数的个数。
参考程序:
STACKSEGMENT
DW64DUP(?
)
STACKENDS
DATASEGMENT
ORG3000H
DATA1DB16DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVDI,OFFSETDATA1;设数据区首地址
MOVCL,[DI];送数据个数
XORCH,CH;CH清零
MOVBL,CH;BL清零
INCDI;指针指向第一个数据
A1:
MOVAL,[DI]
TESTAL,80H;数据首位是否为1
JEA2
INCBL;负数个数累加
A2:
INCDI
LOOPA1
MOV[DI],BL;存结果
INT03H
CODEENDS
ENDSTART
(2)实验步骤
1)输入实验程序并检查无误,经汇编、连接后生成EXE文件。
2)用DEBUG的U命令查看MOVAX,XXXX(DATA))语句,即得到数据段基址DS:
XXXX,
3)用E命令输入数据如下:
EXXXX:
3000H3000H单元的内容为06(数据个数)
3001H单元开始的内容为12、88、82、90、22、33。
4)用G命令运行以上程序。
5)用D命令检查3007H单元是否显示结果03。
学习本题目。
2.
课堂讲的数据传送题,传送数据变为10个数,写出完整的程序并调试,
1)将ADRS开始存放的100个字节的数据传送到ADRD开始的连续内存中。
假设他们的段地址分别存放在DS和ES中。
STACKSEGMENT
DB256DUP(?
)
STACKENDS
DATASEGMENT
ADRSDB10DUP(?
)
ADRDDB10DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVAX,ES
MOVAX,STACK
MOVSS,AX
LEASI,ADRS
LEADI,ADRD
MOVCX,100
NEXT:
MOVAL,[SI]
MOVES:
[DI],AL
INCSI
INCDI
LOOPNEXT
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
2)将ADRS开始存放的100个字节的数据传送到ADRD开始的连续内存中。
假设他们的段地址分别存放在DS和ES中。
如果传送过程中出现‘#’时,立即停止传送。
STACKSEGMENTSTACK
DW256DUP(?
)
TOPLABELWORD
STACKENDS
DATASEGMENT
ADRSDB100DUP(?
)
ADRDDB100DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVAX,STACK
MOVSS,AX
MOVSP,OFFSETTOP
LEASI,ADRS
LEADI,ADRD
MOVCX,100
MOVAL,[SI]
CMPAL,'#'
JEPEND
AGAIN:
MOVES:
[DI],AL
INCSI
INCDI
MOVAL,[SI]
CMPAL,'#'
LOOPNEAGAIN
PEND:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
3.课堂讲的排序题,递减排列。
STACKSEGMENT
DW256DUP(?
)
TOPLABELWORD
STACKENDS
DATASEGMENT
DATBUFDB10DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVAX,STACK
MOVSS,AX
MOVSP,OFFSETTOP
MOVCX,LENGTHDATBUF
MOVSI,CX
MOVBL,0FFH
LOOPA:
CMPBL,0FFH
JNZDONE
MOVBL,00
DECCX
JZDONE
PUSHSI
PUSHCX
LOOPB:
DECSIG
MOVAL,[SI]
CMPAL,[SI-1]
JAELA
XCHGAL,[SI-1]
MOV[SI],AL
MOVBL,0FFH
LA:
LOOPLOOPB
POPCX
POPSI
JMPLOOPA
DONE:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
;DATA=1427H,STACK=1407H,OFFSETTOP=200H,CX=000AH,
4.设DATBUF中存放有N个无符号数(或有符号数),编程实现求它们的最小值和最大值,将最小值放入DATMIN单元,最大值放入DATMAX单元。
DATASEGMENT
DATA1DB16DUP(?
)
DATMINDB?
DATMAXDB?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVDI,OFFSETDATA1
MOVCL,[DI]
XORCH,CH
MOVBL,[DI+1]
MOVDATMIN,BL
MOVDATMAX,BL
MOVAL,01H
AGAIN:
INCDI
INCAL
CMPCL,AL
JSDONE
MOVBL,DATMIN
CMPBL,[DI+1]
JSA1
MOVBL,[DI+1]
MOVDATMIN,BL
JMPA1
A1:
MOVBL,DATMAX
CMPBL,[DI+1]
JNSAGAIN
MOVBL,[DI+1]
MOVDATMAX,BL
JMPAGAIN
DONE:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
写出以上题目的程序、上机调试过程及现象,并记录结果。
内容六子程序设计
一、实验目的
1)学习子程序程序的设计与调试方法;
2)掌握子程序程序的基本结构。
二、实验设备
PC机一台
三、实验内容及步骤
题目:
编写程序,统计一个字中的1的个数。
分别采用段内调用和段间调用实现。
STACKSEGMENTSTACK
DW256DUP(?
)
TOPLABELWORD
STACKENDS
DATASEGMENT
TWDW?
TWISDW?
DATAENDS
CODE1SEGMENT
ASSUMECS:
CODE1,DS:
DATA,SS:
STACK
MAIN:
MOVAX,DATA
MOVDS,AX
MOVAX,STACK
MOVSS,AX
MOVSP