武大微机原理实验报告汇总 4000字word版本 25页Word文档格式.docx

上传人:b****4 文档编号:18428000 上传时间:2022-12-16 格式:DOCX 页数:20 大小:24.27KB
下载 相关 举报
武大微机原理实验报告汇总 4000字word版本 25页Word文档格式.docx_第1页
第1页 / 共20页
武大微机原理实验报告汇总 4000字word版本 25页Word文档格式.docx_第2页
第2页 / 共20页
武大微机原理实验报告汇总 4000字word版本 25页Word文档格式.docx_第3页
第3页 / 共20页
武大微机原理实验报告汇总 4000字word版本 25页Word文档格式.docx_第4页
第4页 / 共20页
武大微机原理实验报告汇总 4000字word版本 25页Word文档格式.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

武大微机原理实验报告汇总 4000字word版本 25页Word文档格式.docx

《武大微机原理实验报告汇总 4000字word版本 25页Word文档格式.docx》由会员分享,可在线阅读,更多相关《武大微机原理实验报告汇总 4000字word版本 25页Word文档格式.docx(20页珍藏版)》请在冰豆网上搜索。

武大微机原理实验报告汇总 4000字word版本 25页Word文档格式.docx

户的下一步操作。

但是在遇到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,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1