武大微机原理实验报告汇总 4000字word版本 25页Word文档格式.docx
- 文档编号:18428000
- 上传时间:2022-12-16
- 格式:DOCX
- 页数:20
- 大小:24.27KB
武大微机原理实验报告汇总 4000字word版本 25页Word文档格式.docx
《武大微机原理实验报告汇总 4000字word版本 25页Word文档格式.docx》由会员分享,可在线阅读,更多相关《武大微机原理实验报告汇总 4000字word版本 25页Word文档格式.docx(20页珍藏版)》请在冰豆网上搜索。
户的下一步操作。
但是在遇到INTn指令时与F8一样,进入服务程序后立即自动地连续执行服务程序直到返回。
③Alt+F7(Run|Instructiontrace)单步操作。
真正意义上的单步操作,执行CALL和INTn
指令进入相关子程序之后立即停止,等待用户的下一步操作。
实践证明:
用Alt+F7跟进服务程序以后,如果再执行单步操作,很容易使系统瘫痪。
因此,请读者慎用。
编者认为:
Alt+F7的用途在于跟进中断服务程序以后,可以了解服务程序的结构,如果服务程序是系统设计的(如INT21H,INT10H等),应当用F8操作。
(5)断点的设置和取消
按↑、↓键,使光标指向欲设置断点的指令,再按F2键(Breakpoints|Toggle),则红色光条覆盖光标处的指令,表示断点设置成功,重复上述操作,可以设置多个断点。
将光标移到红色光条覆盖的指令,再次按下F2键,红色光条消失,表明此处断点撤销。
设置断点的目的是使程序执行到断点指令时暂停,以便检查执行结果。
(6)检查单步执行结果
指令执行后一定会使目标寄存器和状态标志发生变化,欲查看执行效果,怎么办?
①在CPU窗口调试时
因为窗口中有寄存器、标志寄存器显示窗口,所以,当前指令执行后,可以从相关的显示窗口中看到结果。
②在MODULE窗口调试时
选中View|Registers可弹出寄存器和标志寄存器显示窗口,就可以查看执行结果。
(7)检查内存数据区的内容
如果被调试程序要对数据段或附加段进行操作,怎样检查结果?
关键问题是要找出用户程序的数据段或附加段。
以例题1为例,说明这一操作的实现过程。
①如果调试是在MODULE窗口进行
首先选择View|Dump,弹出内存数据显示窗口,接着再按Ctrl+S弹出一个对话框,
用户键入’HELLO’—--用单引号括起来的这一字符串是例1用户数据段中设置的内容,TD根据用户的提示立即找出并显示用户程序数据区。
做好以上准备工作之后,按F8键单步执行指令,就可以看到用户数据段内容的变化。
例1中的语句①~⑧就是为此项调试而设置的。
②如果调试是在CPU窗口进行
首先按Tab键,使内存数据显示区成为活动区,接下来的工作则与在MODULE窗口的调试是相同的。
5、程序修改
下面的程序采用比较法,将一个8位二进制数转换成十进制数显示,其设计方法拙劣,语法错误很多,希望以它为蓝本,练习源程序的编辑、编译、链接和调试。
同学应照原样编辑源程序,汇编之后,必定给出若干错误信息,再根据错误提示,修改源程序,直到汇编后没有错误时为止,然后进行链接、执行。
正确的执行结果是在屏幕上显示:
100+9=109
【程序流程图】1,程序一
2,程序二
【源程序】1,程序一
DATAMESG
DATACODE
BEG:
LL1:
SEGMENTDB‘HELLO’DB
0,0,0
;
①
ENDSSEGMENT
USE16ASSUMECS:
CODE,DS:
DATA
MOVAX,DATAMOVDS,AXMOVES,AX
②
MOV
CX,5
MOVMESG+5,0DH
③MOVMESG+6,0AH;
④MOVMESG+7,'
$'
⑤
CALL
DISP
MOVMESG+5,0MOVMESG+6,0MOVMESG+7,0
LOOPLL1MOVAH,4CHINT
21H
PROCMOVAH,9
MOVDX,OFFSETMESGINT21H
RET
DISPENDPCODE
ENDSEND
BEG
DATASEGMENTN1DW0809H,ABN2DB100
SUNDB?
MESGDB‘100+9='
DB30H,30H,30H
DATAENDSCODE
SEGMENT
ASSUMECS:
MOVDS,DATA
MOVBX,OFFSETSUM
MOVAH,N1MOVAL,N2
ADDAH,ALMOV[BX],AH
N2_10MOVAH,9
MOVDX,OFFSETMESGINT21HMOVAH,4CH
INT
21HN2_10PROC
LAST:
CMP[BX],100JC
NEXT1SUB[BX],100
INC
[BX+7]
⑥;
⑦
⑧
此处应为N1DB9;
输入错误,SUN与后段代码SUM不一致;
应加上$以提示信息结束
MOV指令不允许将立即数直接送给段寄存器
AH为八位,BX为十六位寄存器,寄存位置不明
错误同上
错误同上
JC
[BX],10
错误同上;
NEXT2[BX+8]NEXT1[BX+9],SUM
源操作数和目的操作数不能同时为存储器
NEXT1:
CMPSUBINCJMP
NEXT2:
N2_10:
CODE
ADDRET
ENDP;
此处无需冒号ENDSEND
【实验结果与分析】
程序二中错误代码出现在第2、4、6、10、15、23、25、26、28、30、31、33、35行。
错误原因已附在各行末尾,修改后的代码如下:
DATAN1N2SUMMESGDATACODEBEG:
SEGMENTDBDBDBDBDBENDSSEGMENT
DATAMOVMOVMOVMOVADDMOVCALLMOVMOVINTMOVINT
N2_10LAST:
PROCCMPJC
SUBINCJMP
CMPJC
AX,DATADS,AXAH,N1AL,N2AH,AL
BYTEPTR[BX],AHN2_10AH,9
DX,OFFSETMESG
21H21H
AH,4CH
BX,OFFSETSUM
9100
?
‘100+9='
30H,30H,30H,’$’
BYTEPTR[BX],100NEXT1
BYTEPTR[BX],100BYTEPTR[BX+7]LAST
BYTEPTR[BX],10NEXT2
INCJMP
N2_10CODE
ENDPENDSEND
BYTEPTR[BX+8]NEXT1
BYTEPTR[BX+9],AL
MOVAL,SUM
【实验名称】顺序程序设计
【实验目的】
学习汇编语言基本操作指令和伪指令的应用;
了解编程的基本方法。
【实验内容】
【实验1】编写程序,计算(a+b)–2*(aANDb),结果送入S单元。
S单元的内容在TD里面观察,在实验报告附上运行完毕后所有通用寄存器及段寄存器的值。
【实验2】定义一个双字变量VOLUME,从键盘输入长方体的长(a),宽(b)和高(h),计算它的体积,a,b,c均为单字节变量,结果保存在VOLUME中(注意判断溢出)。
要求:
①上述实验中的各变量单元要在数据区定义;
②用TD(或debug)调试,运行并修改各变量的值,观察结果存放单元。
【程序框图】
【实验1】【实验2】
【程序代码】
【实验1】
DATASEGMENTADB40BDB50SDB?
DATAENDSCODESEGMENT
CODE,DS:
DATABEG:
MOVAX,DATAMOVDS,AXMOVBL,AADDBL,BMOVBH,0ADCBH,0MOVAL,AANDAL,BMOVCL,2MULCL
SUBBX,AXMOVS,BXMOVAH,4CHINT21HCODEENDS
ENDBEG
【实验2】
DATASEGMENTADB?
BDB?
CDB?
VOLUMEDD?
DATAENDS
CODESEGMENT
CODE,DS:
MOVAX,DATAMOVDS,AXMOVAH,1INT21HSUBAL,30HMOVA,ALMOVAH,1INT21HSUBAL,30HMOVB,AL
MOVAH,1INT21HSUBAL,30HMOVC,ALMOVBL,BMULBLMOVBL,AMOVBH,0MULBX
MOVWORDPTRVOLUME,AXMOVWORDPTRVOLUME+2,DXMOVAH,4CHINT21HCODEENDS
ENDBEG【实验结果】
【实验1】:
程序运行后,运行结果S=26H,与预期相符。
所有通用寄存器即段寄存器的值如下:
AX=1B6FBX=000FCX=0206DX=3002DS=04BACS=0000【实验2】:
程序运行时,取a=4,b=5,c=6,运行后,VOLUME=120,与预期相符所有通用寄存器即段寄存器的值如下:
AX=1B6FBX=000FCX=0206DX=3002DS=04BACS=0000
【实验名称】循环实验的设计
【实验目的】学习并掌握循环程序的设计方法。
【实验1】用表格形式显示ASCII字符。
实验要求:
按15行×
16列的表格形式显示ASCII码为10H-100H的所有字符,即以行为主的顺序及ASCII码递增的次序依次显示对应的字符。
每16个字符为一行,每行中的相邻两个字符之间用空白符(ASCII为0)隔开。
提示:
(1)显示每个字符可使用功能号为02的显示输出功能调用,使用方法如下:
movah,02h
movdl,输出字符的ASCII码int21h
本题中可把DI初始化为10H,然后不断使其加1(用INC指令)以取得下一个字符时ASCII码。
(2)显示空白符时,用其ASCII码0置入DI寄存器。
每行结束时,用显示回车(ASCII为0dh)和换行符(ASCII为0ah)来结束本行并开始下一行。
(3)由于逐个显示相继的ASCII字符时,需要保存并不断修改dl寄存器的内容,而显示空白、回车、换行符时也需要使用DI寄存器,为此可使用堆找来保存相继的ASCII字符。
具体用法是:
在显示空白或回车、换行符前用指令
pushdx
把DI的内容保存到堆栈中去。
在显示空白或回车、换行符后用指令
popdx
恢复DI寄存器的原始内容。
【实验2】编程计算:
S=1+2+3+…+N≤100的最大项数N以及对应的和S。
实验要求:
①将最大项数与和数分别存入N和SUM单元,用TD调试,运行程序并检查结果;
②将结果在屏幕上以16进制数显示。
显示格式:
MAXN=×
×
HSUM=×
H。
【程序框图】
【实验1】【实验2】
CODESEGMENTMAINPROCFAR
CODEBEG:
MOVAH,02H
MOVDL,10H;
设置初始输出为ASCII的10hMOVBL,15;
输出显示为15行E:
MOVCX,16;
设置循环次数,16,表示输出显示为16列l:
INT21H;
显示输出PUSHDX;
推入堆栈MOVAH,02HMOVDL,0INT21H
MOVAH,02HMOVDL,0
显示空白符
POPDX;
将栈顶元素推出INCDL;
设置下一个元素
LOOPl;
循环输出每行的16个ASCII元素PUSHDX;
将下一行的首元素推入堆栈MOVAH,02HMOVDL,0DHINT21H
MOVAH,02HMOVDL,0AH
输出换行
将栈顶元素推出DECBL
CMPBL,0;
比较确定是否已经输出15行元素
JNEE;
若还未完成输出,则跳转至e,继续进行下一行元素的输出
JEEXIT;
否则退出程序EXIT:
MOVAX,4C00HINT21HMAINENDPCODEENDS
DATASEGMENT
NDB'
'
;
开辟一个字节单元SUMDB'
MESG1DB'
MAXN='
'
MESG2DB'
SUM='
DATA;
段分配
MOVAX,DATA;
段基址→DSMOVDS,AX
MOVMOVL1:
INCADDCMPJBESUBMOVMOVMOVMOVINTMOVANDRORCMPJLADDNEXT:
ADDMOVMOVINTMOVANDCMPJLADDNEXT1:
ADDOVMOVINTMOVINTMOVMOVBL,0H;
给BL和AL赋初始值0AL,0HBLAL,BLAL,64H
L1;
无符号数<
=跳转
AL,BL;
所得AL大于100,故要减去BL[N],BL;
最大项数→N单元[SUM],AL;
和数→SUM单元AH,9;
9号功能调用,输出字符串DX,OFFSETMESG121H
AL,N;
2号功能调用,输出两个空格AL,0F0H;
屏蔽低四位AL,4;
右移4位AL,10;
与10比较NEXT;
小于跳转NEXTAL,7;
否则加7AL,30H
AH,02HDL,AL21HAL,N
AL,0FH;
屏蔽高4位AL,10NEXT1
AL,7AL,30HAH,02HDL,AL21H
DL,'
H'
显示出H21H
AH,02HDL,0DH
回车MOVAH,02HMOVDL,0AH
换行
MOVAH,9;
9号功能调用,输出字符串MOVDX,OFFSETMESG2INT21H
ANDAL,0F0H;
屏蔽低四位RORAL,4;
右移4位CMPAL,10JLNEXT2ADDAL,7NEXT2:
ADDAL,30H
MOVAH,02HMOVDL,ALINT21HMOVAL,SUM
ANDAL,0FHJLNEXT3
ADDAL,7NEXT3:
ADDAL,30HMOVAH,02HMOVDL,ALINT21H
MOVDL,'
INT21H
MOVAH,4CHINT21HCODEENDSENDBEG
实验一运行后显示结果为
与10比较;
小于跳转NEXT;
否则加7;
屏蔽高4位;
显示出H;
返回DOS操作系统
【调试结果】
与预期相符【实验2】
实验二运行后结果为“MAX=0DHSUM=5BH”,与预期相符。
【实验名称】分支程序设计
学习分支程序的结构,掌握具有分支结构程序的设计方法。
【实验1】分类统计字符个数COUNT_CHAR。
【实验2】显示月份名direct。
试编写一程序,根据用户键入的月份数在屏上显示该月份的英文缩写名
【程序代码及框图】
【实验1】DATASEGMENTSTRINGLABELBYTEMAXDB80ACTDB'
STOKNDB80DUP('
)DIGITDB0LETTERDB0OTHERDB0
MESS1DB'
PLEASEINPUTCHARS:
0DH,0AH,'
MESS2DB0DH,0AH,'
MESS3DB'
DIGIT:
0H,'
MESS4DB'
LETTER:
MESS5DB
OTHER:
MESS6DB'
NDB3DATAENDS
DATACOUNT_CHARPROCFARPUSHDSSUBAX,AXPUSHAX
MOVAX,DATAMOVDS,AXLEADX,MESS1MOVAH,09INT21H
LEADX,STRINGMOVAH,0AHINT21H
LEADX,MESS2MOVAH,09HINT21H
LEASI,STOKNSUBCH,CHMOVCL,ACTAGAIN:
MOVAL,[SI]CMPAL,30HJLOTHER1CMPAL,3AHJLDIGIT1CMPAL,41HJLOTHER1CMPAL,5BHJLLETTER1CMPAL,61HJLOTHER1CMPAL,7BHJLLETTER1
OTHER1:
INCOTHERINCSI
LOOPAGAINJMPPRINTDIGIT1:
INCDIGITINCSI
LOOPAGAINJMPPRINT
LETTER1:
INCLETTERINCSI
LOOPAGAINPRINT:
MOVCH,2MOVBL,DIGITLEADX,MESS3MOVAH,09INT21HROTATE:
MOVCL,4ROLBL,CLMOVAL,BLANDAL,0FHADDAL,30HCMPAL,3AHJLPRINT1ADDAL,7HPRINT1:
MOVDL,ALMOVAH,2INT21HDECCHJNZROTATELEADX,MESS6MOVAH,09INT21HDECNCMPN,2JZLETTER2CMPN,1JZOTHER2JMPEXIT
LETTER2:
LEADX,MESS4MOVAH,09INT21HMOVCH,2
MOVBL,LETTERJMPROTATEOTHER2:
LEADX,MESS5MOVAH,09INT21HMOVCH,2
MOVBL,OTHERJMPROTATEEXIT:
RET
COUNT_CHARENDPCODEENDS
ENDCOUNT_CHAR
【实验2】DATASEGMENT
MESG1DB'
PLEASEINPUTTHENUMBERFORMONTH'
MESG2DB'
ERROR!
NUMDB3COUNTDB?
STOREDB2DUP(?
)MONTABDB'
JAN'
'
FEB'
MAR'
APR'
MAY'
JUN'
DB'
JUL'
AUG'
SEP'
OCT'
NOV'
'
DEC'
MONTHDB3DUP(?
),0DH,0AH,'
CODESEGMENTASSUMECS:
DATASTART:
MOVAX,DATA
MOVDS,AXMOVES,AXMOVDX,OFFSETMESG1MOVAH,09HINT21H
MOVDX,OFFSETNUMMOVAH,0AHINT21H
CMP[COUNT],0JZEXITCMP[COUNT],2JZNEXT
MOVAL,[STORE]
XORAL,30HMOVAH,0JMPGOON
NEXT:
MOVAH,[STORE]MOVAL,[STORE+1]
XORAX,3030HCMPAH,0
JZGOONCMPAH,1
JNZLASTSUBAH,AHADDAL,10GOON:
CMPAL,0
JZLASTCMPAL,12JALASTDECALMOVBL,3
MULBLLEASI,MONTABADDSI,AXLEADI,MONTHMOVCX,3
CLDREPMOVSB
DISP:
MOVDX,OFFSETMONTHMOVAH,09HINT21H
JMPSTARTLAST:
MOVDX,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 武大微机原理实验报告汇总 4000字word版本 25页 微机 原理 实验 报告 汇总 4000 word 版本 25
![提示](https://static.bdocx.com/images/bang_tan.gif)