微型计算机实验一实验报告Word下载.docx

上传人:b****5 文档编号:20794777 上传时间:2023-01-25 格式:DOCX 页数:16 大小:638.33KB
下载 相关 举报
微型计算机实验一实验报告Word下载.docx_第1页
第1页 / 共16页
微型计算机实验一实验报告Word下载.docx_第2页
第2页 / 共16页
微型计算机实验一实验报告Word下载.docx_第3页
第3页 / 共16页
微型计算机实验一实验报告Word下载.docx_第4页
第4页 / 共16页
微型计算机实验一实验报告Word下载.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

微型计算机实验一实验报告Word下载.docx

《微型计算机实验一实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《微型计算机实验一实验报告Word下载.docx(16页珍藏版)》请在冰豆网上搜索。

微型计算机实验一实验报告Word下载.docx

实验步骤:

Part1

(一)熟悉DEBUG的使用(熟悉DEBUG的常用命令A,U,R,T,D,E,G)

DEGUG下的实践:

1在DEBUG状态下用“E”命令在偏移地址为0200H开始的18H个单元输入0,1,2….,17H。

(1)写一段程序,把这24个单元的内容复制到偏移地址为0230H开始的单元中。

(2)写一段程序,把偏移地址为5000H开始的40H个单元写入AAH.

2.写一段程序把1,2,...,100共100个数写入偏移地址为0200H开始的100个单元中。

用条件转移指令完成这100个数相加,并把结果放入偏移地址为0300H起的单元中。

(选做)

(二)寻址方式实践

(1)用E命令(E2000:

0000)把内存2000:

0000开始的10个单元的内容改写为:

10,11,12,13,14…..,19;

把内存2000:

0040开始的10个单元的内容改写为:

00,11,22,33,44…..,99

(2)用D命令检查执行

(1)的情况

(3)用A命令输入如下指令,逐条执行并观察结果并解析之。

MOVAX,2000

MOVDS,AX

MOVBX,4

MOVSI,40

MOVAL,[2]

MOVAL,[BX]

MOVAL,[SI]

MOVAL,[BX+4]

MOVAL,[SI+3]

MOVAL,[BX+SI]

MOVAX,[BX+SI+4]

MOV[BX+SI+20],AL;

AL的内容送何处?

MOVBP,4

MOV[BP+2],AX;

AX的内容送何处?

找找

INCAX

MOV[BX+2],AX;

PUSHAX;

AX的内容送何处?

观察SP的变化

PUSHBX  ;

BX的内容送何处?

POPCX;

CX=?

观察SP的变化

(4)说明第4~13条指令的寻址方式,确定第5~11条指令源操作数的物理地址

Part2

一 在DEBUG状态下用“E”命令在3000:

0010H开始的10H个单元输入0,1,2….,0FH。

(1)写一段程序,用串指令把这16个单元的内容复制到4000:

0020H开始的单元中。

(2)写一段程序,用串指令把物理地址为3000:

0400H开始的40H个单元写入AAH;

3000:

0450

开始的30H个单元写入55H

二熟悉Masmforwindows的使用。

三编写1个具有一定功能的小程序,完成它们的汇编,连接,运行和在DEBUG下的调试。

(分析运行结果)题目可自拟

实验结果:

1在DEBUG状态下用“E”命令在偏移地址为0200H开始的24H个单元输入0,1,2….,17H,

在ASM平台上代码如下:

MOVAX,2000H

MOVDS,AX

MOVBX,200H

MOVCX,24

MOVSI,230H

FIND:

MOVAL,[BX]

MOV[SI],AL

INCBX

INCSI

LOOPFIND

实验结果分析:

这个程序完成了从偏移地址从200开始的24个内存单元的数值复制,初始偏移地址为SI=200H,要复制到偏移地址BX=230中,每复制一次,BX,SI都要做+1操作,循环,当做完CX=24次复制时,程序停止。

MOVAX,2000H

MOVDS,AX

MOVCX,40

MOVSI,5000H

MOVAL,0AAH

FIND:

INCSI

LOOPFIND

实验结果分析:

先把要赋值的AAH赋值给AL,然后设置循环次数CX=40,偏移地址为5000H,从5000H开始给内存单元赋值AAH,循环结束后完成40次赋值。

2.写一段程序把1,2,...,100共100个数写入偏移地址为0200H开始的100个单元中。

MOVCX,100

MOVAX,0;

SUM

MOVBX,1

JUMP:

ADDAX,BX

INCBL

DECCX

JNZJUMP

MOVSI,300H

MOV[SI],AX

1+2+3+...+100=1050,用16进制表示即13BA,结果正确(按照数据的存储规则低位在前高位在后)。

在本题目中,先给和赋初值0,BX=1~100,一共计算CX=100次,每次相加后BL即BX的值增加1,最终能算出正确结果。

二)寻址方式实践

分析:

执行第一条后,AX=2000.

执行第二条,DS=2000

使BX=0004

对SI赋值

把偏移地址为0002的内存单元的内容,即把12赋给AL,则AX=2012

把偏移地址为0004的内存单元的内容,即把14赋给AL,则AX=2014

把偏移地址为0040的内存单元的内容,即把14赋给AL,则AX=2000

把偏移地址为BX+4=0008的内存单元的内容,即把18赋给AL,则AX=2018

把偏移地址为SI+3=0043的内存单元的内容,即把33赋给AL,则AX=2033

把偏移地址为BX+SI=0044的内存单元的内容,即把44赋给AL,则AX=2044

把偏移地址为BX+SI+4=0048的内存单元的内容,即把88赋给AX,则AX=9988(按照低位在前高位在后的存储规则)

把偏移地址为AL=0088的内存单元的内容,即把88赋给BX+SI+20=0064所在的内存单元,值为0088

把4赋值给BP,BP=0004

把AX=9988赋值给BP+2=0006所在的内存单元,此时由SS=140D提供段地址

分析:

把AX的值+1,AX=9989

把AX=9989赋值给BX+2=0006所在的内存单元,DS提供段地址

压栈,栈顶指针SP=SP-2=-2即FFFE。

AX的内容送到SS:

SP=140D:

FFFE中,99在前,89在后,如图。

压栈,栈顶指针SP=SP-2=-4即FFFC。

BX的内容送到SS:

FFFC中,04在前,00在后,如图。

入栈,先把栈SS:

FFFC中的数据送到BX中,顶指针SP=SP+2=-2即FFFE。

MOVSI,40立即数寻址

MOVAL,[2]直接寻址2000:

0002

MOVAL,[BX]寄存器间接寻址2000:

:

0004

MOVAL,[SI]寄存器间接寻址2000:

0040

MOVAL,[BX+4]寄存器相对寻址2000:

0008

MOVAL,[SI+3]寄存器相对寻址2000:

0043

MOVAL,[BX+SI]基址变址寻址2000:

0044

MOVAX,[BX+SI+4]基址变址相对寻址2000:

0048

MOV[BX+SI+20],AL基址变址相对寻址

MOVBP,4立即数寻址

MOVAX,3000H

MOVAX,4000H

MOVES,AX

MOVSI,10H

MOVDI,20H

MOVCX,16;

此处输入代码段代码

CLD

REPMOVSB

HLT

结果分析:

由于串指令指定源串地址为DS:

SI(支持段重设),目标串地址为ES:

DI(不支持段重设),因此程序开始先设定DS,SI,ES,DI的值,然后设定传送次数CX=16,接着有CLD设定DF=0即传送方向从低地址向高地址进行,再在无条件循环REP下使用字节传送指令MOVSB即可完成复制。

MOVDI,400H

MOVCX,40;

MOVAL,0AAH

REPSTOSB

MOVDI,450H

MOVCX,30;

MOVAL,55H

HLT

STOSB指令把AL中的字节存到由ES:

DI指向的存储单元中,因此需要先设定ES,DI的值,然后设定存储次数CX和存储方向DF,在无条件循环REP下实现两次地址不同的地址存储。

定义12个数,把它们的和放到SUM中;

找出它们中最大和最小的数,分别放到MAX和MIN单元中。

DATASSEGMENT

ARRAYDW2,1,4,8,5,3,7,6,9,12,10,11

SUMDW0

MAXDW0

MINDW0

;

此处输入数据段代码

DATASENDS

STACKSSEGMENT

STACKSENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

MOVAX,DATAS

MOVDS,AX

MOVCX,12

LEASI,SUM;

由于输出结果为ASCII码,此处直接记录地址方便调试

LEASI,MIN;

记录地址

LEASI,MAX;

LEASI,ARRAY;

MOVAX,0

ADDING:

ADDAX,[SI]

ADDSI,2

LOOPADDING

MOVSUM,AX

MOVAH,09

MOVDX,OFFSETSUM;

INT21H

MOVCX,12;

求最大值

LEASI,ARRAY

MOVAX,[SI]

DECCX

MAX1:

JCXZMINN

CMP[SI],AX

JLMAX1

JMPMAX1

MINN:

求最小值

MOVMAX,AX

MIN1:

JCXZENDING

JGMIN1

JMPMIN1

ENDING:

MOVMIN,AX

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

经过记录,SUM,MAX,MIN的偏移地址分别为0018,001A,001C.以下用D查看相关结果:

由上图可以知道,这12个数相加的和为4E(即10进制的78),最大值为C(10进制的12),最小值为1,结果正确。

程序主要思路:

先对12个数求和,不断地把SI指向的内存单元的数值累加到AX中,得到最终结果。

第二步求最大值,用AX存储,通过没比较一次CX减少1,共比较11次,每次把大的数值存储在AX中,最后把AX中的数值赋给MAX。

同理,第三部对12个数求最小值时,用AX存储,通过没比较一次CX减少1,共比较11次,每次把小的数值存储在AX中,最后把AX中的数值赋给MIN。

实验结论:

①通过这次实验,我能比较熟练地操作使用DEBUG了。

②常见的寻址方式有以下几种:

立即寻址,直接寻址,寄存器寻址,寄存器间接寻址,寄存器相对寻址,基址——变址寻址,基址——变址——相对寻址,隐含寻址。

③通过本次实验,能比较熟练地在MASM平台上编写程序了。

实验心得:

①做第一部分时,用到寄存器间接寻址,而用SI,DI,BX来指定有效地址时,段地址由DS提供,因此在代码中需要对DS进行设定。

②在ASM平台上写程序时,把AAH赋值给AL,注意要写成MOVAL,0AAH而不是MOVAL,AAH,否则会出错。

③做1~100求和的时候,要注意不能直接ADDAX,BL,因为BL8位AX16位,因此写成ADDAX,BX,而这么写的前提是BH=0,即提前赋值使得BX=0.

④使用串指令时要注意操作数的大小使用不同的指令。

⑤在求数组的最大值最小值时,一开始没有把CMP比较命令和JL跳转命令连在一起写,导致结果错误,原因是夹在条命令之间的命令对SF或者ZF做修改导致程序没有按照人的意愿跳转。

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

当前位置:首页 > 工程科技 > 能源化工

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

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