参考文档东华大学微机实验报告答案软件 3000字优秀word范文 28页Word文档下载推荐.docx

上传人:b****6 文档编号:16380545 上传时间:2022-11-23 格式:DOCX 页数:22 大小:21.74KB
下载 相关 举报
参考文档东华大学微机实验报告答案软件 3000字优秀word范文 28页Word文档下载推荐.docx_第1页
第1页 / 共22页
参考文档东华大学微机实验报告答案软件 3000字优秀word范文 28页Word文档下载推荐.docx_第2页
第2页 / 共22页
参考文档东华大学微机实验报告答案软件 3000字优秀word范文 28页Word文档下载推荐.docx_第3页
第3页 / 共22页
参考文档东华大学微机实验报告答案软件 3000字优秀word范文 28页Word文档下载推荐.docx_第4页
第4页 / 共22页
参考文档东华大学微机实验报告答案软件 3000字优秀word范文 28页Word文档下载推荐.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

参考文档东华大学微机实验报告答案软件 3000字优秀word范文 28页Word文档下载推荐.docx

《参考文档东华大学微机实验报告答案软件 3000字优秀word范文 28页Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《参考文档东华大学微机实验报告答案软件 3000字优秀word范文 28页Word文档下载推荐.docx(22页珍藏版)》请在冰豆网上搜索。

参考文档东华大学微机实验报告答案软件 3000字优秀word范文 28页Word文档下载推荐.docx

STACK,CS:

CODESTART:

MOVAX,3000HMOVBX,5000HMOVSP,201XH

PUSHAX;

将AX中的内容压栈MOVAX,BX;

BX中的内容给AXPOPBX

MOVAH,4CHINT21HCODEENDS

ENDSTART

用debug调试结果:

2、程序说明:

用masm和link对以下程序进行汇编和连接,调试程序在DEBUG调试程序状态下进行。

用单步执行的方法,分析每条指令源地址的形成过程,当数据传送完毕时,AX中的内容是什么。

DATASEGMENTORG0300H

ADB12H,23H,34H,45H,56H,67H,78H,89H,9AHDATAENDS

DATASTART:

MOVAX,DATAMOVDS,AX

MOVBX,0300H

MOVAX,0300H;

立即数寻址

MOVAX,[0300H];

存储器寻址方式中的直接寻址方式MOVAX,[BX];

寄存器间接寻址MOVSI,2

MOVAX,0001[BX];

基址寻址MOVAX,[BX][SI];

基址加变址

MOVAX,0001[BX][SI];

带偏移量的基址加变址MOVAH,4CHINT21HPROGNAMENDSENDSTART

实验三算术运算指令

1、程序说明:

编写三个完整的汇编语言源程序,完成以下计算。

其中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←余数

2、调试说明:

当编译完成后,计算机未能生成.OBJ的文件,经检查错误发生在ADD使用上,我把两个寄存器操作数同时用在ADD语句里,结果出错了。

把ADD语句稍作写该后,程序运行正确。

3、写出源程序清单和执行结果

本实验我们只做前两个,即:

(1)Z←W+(Z-X);

(1)Z←W+(Z-X)

XDD0001H

ZDD0003H

WDD0005H

DATAENDS

CODESEGMENT

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVAX,X

MOVBX,Z

SUBBX,AX

MOVAX,W

ADDBX,AX

MOVZ,BX

MOVAH,4CH

INT21H

CODEENDS

XDW0006H

RDW003AH

WDW0110H

ZDW?

CODE,DS:

ADDAX,6

MOVBX,R

ADDBX,9

MOVCX,W

SBBCX,AX

SBBCX,BX

MOVZ,CX

实验四查表程序设计

用查表的方法将一位十六进制数转换成与它相应的ASCII码,并将结果存放到ASCI单元中。

开始生成.OBJ文件时,调试不成功,以为是程序编译有误,后经再三检查都未发现错误,这时只好从头做检查,结果发现了错误:

从本实验有的提示语段中拷贝过来的语句书写有误,即符号的书写为中文书写,以至于整个程序未能通过编译。

把中文书写修改为英文书写后,编译成功。

3、源程序清单和执行结果:

TABLEDB30H,31H,32H,33H,34H,35H,36H,37H

DB38H,39H,41H,42H,43H,44H,45H,46H

HEXDB08H

ASCIDB?

ASSUMEDS:

DATA,CS:

CODE

MOVBX,OFFSETTABLE

MOVAL,HEX;

查找对象的下标存在AL中

XLAT

MOVASCI,AL

实验五系统功能调用

试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。

在DEBUG显示字符窜时,曾显示乱码,未能按预期显示,经检查发现在编译字符窜时出现错误,因为调用21H中断输出一串字符要求用'

结尾,我没用上‘$’。

还有,键盘输入字符是被存放在AX内,当要多次使用AX时应该把输入内容另存一地址

DB?

STACKSEGMENTSTACK

DB5DUP(0)

STACKENDS

DATA,SS:

MOVAH,01H;

从输入端读取字符

SUBAL,20H;

小写转换成大写

MOVDL,AL

MOVAH,02H;

输出字符到终端

实验六分支程序设计

1、实验说明:

假设有一组数据:

5,-4,0,3,100,-51,请编一程序,判断:

每个数大于0,等于0,还是小于0;

并输出其判断结果。

即:

1当x>

0当x=0

当x<

在最初的程序中,我使用了MOVBX,XX等语句,后来发现像这样的语句在实际使用中有些累赘,于是我便做了修改,简化了汇编语言。

其次,在调试中,发现符号无法显示的问题,于是采用两次显示符号的方法,较理想的解决了负号问题。

3

4、源程序清单和执行结果:

XXDB05H,0FCH,00H,03H,64H,0CDH

Y1DB'

Y=1'

0DH,0AH,'

Y2DB'

Y=0'

Y3DB'

Y=-1'

DB10DUP(0)

LEASI,XX

MOVAX,0

MOVCX,6

L1:

MOVAL,[SI]

CMPAL,0;

与0比较

JGBIGER

JEEQUAL

MOVDX,OFFSETY3

MOVAH,09H

JMPOUTPUT

BIGER:

MOVDX,OFFSETY1

EQUAL:

MOVDX,OFFSETY2

OUTPUT:

INCSI

LOOPL1

思考题:

程序中的原始数据是以怎样的形式存放在数据区中的?

请用DEBUG调试程序观察并分析。

以补码形式存放

实验七循环程序设计

实验内容:

1.编制程序计算S=1+2?

3+3?

4+4?

5+?

?

+N(N+1)+?

直到N(N+1)大于200为止,并将结果由屏幕上显示出来。

其程序的流程图如图7.1所示。

2.将从3000H内存单元开始的100个字节存储单元全部清0。

本实验要求在DEBUG调试状态下进行,包括汇编程序、运行程序、检查结果。

(1)编制程序计算S=1+2?

RESULTDW?

MOVDX,1

MOVBL,2

LP:

MOVAL,BL

ADDBL,1

MULBL

ADDDX,AX;

DX中存放sum和

CMPAX,200

JGOUTPUT

LOOPLP

MOVBX,DX

MOVCX,4

LP2:

ROLBX,1;

BL存放和,移位,从高到低一位一位显示ROLBX,1

ROLBX,1

MOVAX,BX

ANDAX,000FH;

取BL中低四位

XORDX,DX

ADDAL,30H;

十六进制转换成ASCII码加30H

CMPAL,3AH;

0—9数字与A—F的ASCII码不连续

JBPIT

ADDAL,07H;

若比A(10)大,还要再加07H

PIT:

MOVDL,AL

MOVAH,02H

LOOPLP2

(2)将从3000H内存单元开始的100个字节存储单元全部清0。

ORG3000H

XDB100DUP(?

DB10DUP(?

LEASI,X

MOVCX,100

ANDBYTEPTR[SI],00H

先将内存单元赋值,用debug的E指令赋值,用D指令查看内存中的数据

再运行程序,将内存单元全部清零

实验八子程序设计

编制一程序,要求键入一个班的学生成绩,并存放于50字的ERADE数组中,然后根据ERADE中的成绩,把学生名次填入50字的RANK数组中,再按学号顺序把名次从终端上显示出来。

提示:

①程序MAIN

功能:

根据输入的学生成绩,计算并显示出学生名次。

②子程序INPUT

接收一个班级学生的成绩,各成绩之间用空格隔开。

③子程序RANKP

计算一个班级学生的名次。

④子程序OUTPUT

输出(显示)一个班级的学生名次

⑤子程序DECIBIN

十进制转换二进制,存入BX

⑥子程序BINDEC

十进制转换二进制,并在屏幕上显示。

⑦子程序DEC_DIV

BX的内容除以CX的内容,并在屏幕上显示一位商。

GRADEDW50DUP()

RANKDW50DUP()

ENTERDB'

Grades:

'

24H;

提示用户输入成绩

ERRORDB13,10,'

Error!

13,10,24H;

用户输入的格式出错SHOWDB'

Rank:

'

24H

COUNTDW0;

统计输入的成绩个数

CRDB13,10,24h;

换行

DB400DUP(0)

MOVAX,DATA

MOVES,AX

CALLINPUT

CALLRANKP

CALLOUTPUT

MOVAH,01H

MOVAX,4CH

;

INPUT程序段

以学号为序从键盘输入一个班的学生成绩,各个成绩之间用逗号格开,最后以回车符结束。

然后把一个班的成绩存入grade数组。

INPUTPROCNEAR

LEADX,ENTER

MOVAH,9

INT21H;

提示用户输入

MOVSI,0

MOVCOUNT,0;

将输入用户的输入个数置0

_ENTER:

;

对用户的输入进行监视,对错误输入立即进行出错处理CALLDECIBIN;

调用DECIBIN;

对用户输入进行处理

INCCOUNT

CMPDL,'

'

与'

比较,相同则保存成绩,不同出错JE_STORE

CMPDL,0DH;

与回车键进行比较,回车则成绩输入结束JE_ENDENTER

JNE_ERROR;

出错处理:

显示出错信息

_STORE:

保存成绩

MOVGRADE[SI],BX

ADDSI,2

JMP_ENTER

_ERROR:

LEADX,ERROR

_ENDENTER:

用户结束成绩输入

MOVDX,OFFSETCR;

RET

INPUTENDP

RANKP程序段

从grade数组取得一个班的成绩,以学号为序计算出该班每个学生的名次存入rank数组。

算法为:

一个学生的名次等于成绩高于该生的学生人数加1

RANKPPROCNEAR

MOVDI,COUNT

MOVBX,0

_LOOP:

MOVAX,GRADE[BX];

取学生成绩

MOVWORDPTRRANK[BX],0;

初始化RANK[BX]的值为0MOVCX,COUNT

LEASI,GRADE;

第一个学生的成绩_NEXT1:

CMPAX,[SI];

比较两个成绩

JG_JUMP;

成绩大于被比较的跳过INCWORDPTRRANK[BX]

_JUMP:

ADDSI,2;

取下一个被比较成绩的地址LOOP_NEXT1

ADDBX,2;

下一个成绩

DECDI;

未比较成绩个数减1JNE_LOOP

RANKPENDP

OUTPUT程序段

从rank数组取得一个班的学生名次。

把一个班的学生名次以学号为序在终端显示出来;

调用子模块binidec,以便把rank数组中的二进制数转成十进制数并在终端上显示出来.调用子模块crlf完成回车,换行功能.

OUTPUTPROCNEAR

LEADX,SHOW

INT21H

_NEXT2:

MOVBX,RANK[SI];

将成绩保存到BX中CALLBINIDEC;

调用BINIDEC

CMPDI,1;

将剩余的成绩个数与1比较,若为1则不显示'

JE_NOCOMMA

MOVDL,'

INT21H;

显示'

_NOCOMMA:

ADDSI,02H;

取下一个成绩名次DECDI

JNZ_NEXT2

OUTPUTENDP

DECIBIN程序段

从键盘取得一个十进制数。

把该数转换成二进制数并存入BX寄存器中。

DECIBINPROCNEAR

_CATCH:

SUBAL,30H

JL_ENDCHANGE;

小于则结束SFVOF=1CMPAL,39H

JG_ENDCHANGE;

大于则结束

CBW

XCHGAX,BX;

AX与BX值交换MOVCX,10

MULCX;

无符号数乘法指令,(AX)<

----(AL)*(CX)

XCHGAX,BX

ADDBX,AX;

(BX)<

------(BX)+(AX)JMP_CATCH

_ENDCHANGE:

DECIBINENDP

BINIDEC程序段

把bx寄存器中的二进制数转换成10进制数,并在终端屏幕上显示出来。

调用dec_div来作除法运算并显示字符。

BINIDECPROCNEAR

PUSHBX

PUSHCX

PUSHSI

PUSHDI;

压栈

MOVCX,10

CALLDEC_DIV;

调用DEC_DIV

MOVCX,1

POPDI

POPSI

POPCX

POPBX;

出栈

BINIDECENDP

DEC_DIV程序段

把bx中二进制数除以相应的十的幂,并在屏幕上显示一位商。

余数保存在bx寄存器中。

DEC_DIVPROCNEAR

MOVDX,0

DIVCX

MOVBX,DX

ADDDL,30H

INT21H;

显示

DEC_DIVENDP

1、思考题:

(1)写出4位BCD码转二进制数的算法。

设AX寄存器中存放着4位BCD码

BCDTO2PROCNEAR

PUSHDX

MOVBX,AX;

保存AX中的BCD码到BX

MOVAX,0;

结果单元清0

MOVCX,4;

共处理4位BCD码

RETRY:

PUSHCX

MOVCL,4

ROLBX,CL;

最高1位BCD码移到BX中的低半字节POPCX

MULW10;

累加和AXx10->

DX:

AXPUSHBX

ANDBX,000FH;

取出BX中的1位BCD码

ADDAX,BX;

累加到AX中

POPBX

LOOPRETRY

POPDX

BCDTO2ENDP

(2)写出AX中进二制数转BCD码的算法。

W1000DW1000,100,10,1;

十进制数千,百,十,个位权值;

入口参数:

AX=二进制数。

出口参数:

AX=压缩BCD码

AX2TOBCDPROCNEAR

XORBX,BX;

BCD码暂存单元清0

MOVSI,OFFSETW1000;

权值首地址送SI

循环次数4->

CX

SHLBX,CL

MOVDX,0;

DX:

AX组成被除数

DIVWORDPTR[SI];

除以权值,商,余数在AX,DX中

ORBX,AX;

压缩BCD码

MOVAX,DX;

余数送AX

ADDSI,2;

地址加2,指向下一权值

MOVAX,BX;

BCD码由BX->

AXRET

AX2TOBCDENDP

实验九综合程序设计

设有十个学生成绩分别是76,69,84,90,73,88,99,63,100和80分。

试编制一个子程序,统计低于60分,60~69分,70~79分,80~89分,90~99分和100分的人数,并输出显示统计结果。

S1DB'

below60:

S2DB'

60~69:

S3DB'

70~79:

S4DB'

80~89:

S5DB'

90~99:

S6DB'

100:

XXDB76,69,84,90,73,88,99,63,100,80

COUNTEQU$-XX

N

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

当前位置:首页 > 小学教育 > 小升初

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

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