东华大学信息学院微机实验报告.docx

上传人:b****8 文档编号:30405073 上传时间:2023-08-14 格式:DOCX 页数:58 大小:271.83KB
下载 相关 举报
东华大学信息学院微机实验报告.docx_第1页
第1页 / 共58页
东华大学信息学院微机实验报告.docx_第2页
第2页 / 共58页
东华大学信息学院微机实验报告.docx_第3页
第3页 / 共58页
东华大学信息学院微机实验报告.docx_第4页
第4页 / 共58页
东华大学信息学院微机实验报告.docx_第5页
第5页 / 共58页
点击查看更多>>
下载资源
资源描述

东华大学信息学院微机实验报告.docx

《东华大学信息学院微机实验报告.docx》由会员分享,可在线阅读,更多相关《东华大学信息学院微机实验报告.docx(58页珍藏版)》请在冰豆网上搜索。

东华大学信息学院微机实验报告.docx

东华大学信息学院微机实验报告

实验一基本程序编程和程序调试

一、实验目的

 

二、实验设备

 

三、实验内容及步骤

数码转换程序及其调试

1、将ASCII码表示的十进制数转换为二进制数

1)程序设计算法

 

2)实验步骤

 

3)代码4)程序流程图

地址(H)助记符注释

2000MOVSI,3500;源地址

2003MOVDI,3510;结果地址

2006MOVBX,000A;乘数10

2009MOVCX,0004;计数

200CMOVAH,00;AH清零

200EMOVAL,[SI];取被转换数

2010SUBAL,30;ASCII码变十进制数

2012IMULBX;高位(AX)*(BX)送AX

2014ADDAL,[SI+01];取下一位

1017SUBAL,30;ASCII码减30变十进制数

2019INCSI;源地址指针+1

201ALOOP2012;CX-1,若CX不等于零则继续

201CMOV[DI],AX;若CX等于零则存结果

201EINT3

图1-1

5)运行结果

2将十进制数的ASCII码转换为BCD码

1)程序设计算法

 

2)实验步骤

 

3)代码4)程序流程图

地址(H)助记符注释

2000MOVCX,0005;循环计数器赋初值

2003MOVDI,3500;ASCII码首址

2006MOVBL,FF;错误标志送BL

2008MOVAL,[DI];送ASCII码至AL

200ACMPAL,3A;比较AL与3AH

200CJNB2014;不低于3A则转2014

200ESUBAL,30;低于3A则取ASCII码的低四位

2010JB2014;低于30则转2014

2012MOVBL,AL;否则AL内容送BL,取代FF

2014MOVAL,BL;结果或错误标志送AL

2016MOV[DI+0A],AL

2019INCDI

201ALOOP2006

201CINT3

图1-2

5)运行结果:

3将十六位二进制数转换为ASCII码表示的十进制数

1)程序设计算法

 

2)实验步骤

 

3)代码4)程序流程图

地址(H)助记符注释

2000MOVDX,[3500];取二进制数

2004MOVSI,3515;目标首址在3510

2007DECSI

2008MOVAX,DX

200AMOVDX,0000

200DMOVCX,000A

2010DIVCX;;除10

2012XCHGAX,DX

2014ADDAL,30

2016MOV[SI],AL

2018CMPDX,0000

201BJNE2007

201DCMPSI,3510;填余下高位为0

2021JZ202A;

2023DECSI

2024MOVAL,30

2026MOV[SI],AL

2028JMP201D

202AINT3

图1-3

5)运行结果

4、十六进制数转换为ASCII码

1)程序设计算法

 

2)实验步骤

 

3)代码4)程序流程图

地址(H)助记符注释

2000MOVCX,0004

2003MOVDI,3500

2006MOVDX,[DI]

2008MOVAX,DX

200AANDAX,000F;取低四位值

200DCMPAL,0A;;判是否“0”-“9”

200FJB2013;是“0”-“9”转2013

2011ADDAL,07;是“A”-“F”,加7

2013ADDAL,30;转换为ASCII码

2015MOV[DI+0A],AL

2018INCDI

2019PUSHCX;保护循环计数器内容

201AMOVCL,04;移位次数送CL

201CSHRDX,CL

201EPOPCX

201FLOOP2008

2021INT3

图1-4

 

5)运行结果

4BCD码转换为二进制数

1)程序设计算法

 

2)实验步骤

 

3)代码4)程序流程图

地址(H)助记符注释

2000MOVCX,0004

2003MOVDI,3500

2006MOVAL,[DI]

2008ADDAL,AL;乘2

200AMOVBL,AL

200CADDAL,AL;乘2

200EADDAL,AL;乘2

2010ADDAL,BL;乘10

2012INCDI

2013MOVAH,00

2015ADDAL,[DI];BCD码十位与个位加

2017MOV[DI+0F],AX;存结果

201AINCDI

201BLOOP2006

201DINT3图1-5

 

5)运行结果

四、思考题

1、

 

2、

 

3、

 

4、

 

1)ASCII码→十六进制

代码:

运行结果

2)十进制小数→二进制

 

3)二进制→BCD码

 

五、实验总结

 

实验二程序设计和PC机上程序调试操作实验

一、实验目的

 

二、实验设备

 

三、实验内容及步骤

(一)按要求编写程序并在DEBUG下建立、汇编和调试程序

1、四字节二进制数的加法

1)程序设计要求

 

2)实验步骤

 

代码:

MOVSI,3500;源地址

MOVDI,3508;目的地址

MOVAX,[SI];取低两位运算

ADCAX,[SI+4]

MOV[DI],AX

PUSHF;将上一次加法运算后的标志位结果入栈

ADDSI,2

ADDDI,2

POPF;出栈

MOVAX,[SI];取高两位运算

ADCAX,[SI+4];带进位加法

MOV[DI],AX

INT3

运行结果:

2、数据块的搬移

1)程序设计思想和要求

 

2)实验步骤

 

3)代码:

(1)源数据块与目的数据块无重叠

MOVSI,3500

MOVDI,3510

MOVCX,10;循环16次

2009:

MOVAL,[SI]

MOV[DI],AL

INCSI

INCDI

LOOP2009\

INT3

运行结果:

(2)源数据块与目的数据块有重叠。

①源数据块首地址大于目的数据块

 

代码:

MOVSI,3505

MOVDI,3500

MOVCX,10;循环16次

2009:

MOVAL,[SI]

MOV[DI],AL

INCSI

INCDI

LOOP2009

INT3

 

运行结果:

②目的数据块首址大于源数据块首址

 

MOVSI,3500

MOVDI,3505

MOVCX,10;循环16次

2009:

MOVAL,[SI+F]

MOV[DI+F],AL

DECSI;地址指针递减

DECDI

LOOP2009

INT3

运行结果:

 

3、无序数据块的递增排序

1)程序设计思想和要求

 

2)实验步骤

 

代码:

2000MOVSI,3500;指定循环次数

2003MOVDI,3000

2006MOVCX,[SI]

2008DECCX

2009PUSHCX

200AMOVBX,0000

200DMOVAL,[DI+BX]

200FCMPAL,[DI+BX+1]

2012JA201B

2014INCBX

2015LOOP200D

2017POPCX

2018LOOP2009

201AINT3

201BMOVAH,[DI+BX+1]

201EMOV[DI+BX+1],AL

2021MOV[DI+BX],AH

2023JMP2014

运行结果:

4、求数的平方根

1)程序设计思想和要求

 

2)实验步骤

 

代码:

2000MOVSI,4006

2003MOVDI,4017

2006MOVCX,0004

2009:

MOVBX,0001

200CMOVDX,0000

200FMOVAH,[SI]

2011MOVAL,[SI+1]

2014CMPAX,0000

2017JE2028

2019SBBAX,BX

201BCMPAX,0000

201EJLE2027

2020INCBX

2021INCBX

2022INCDX

2023CMPAX,BX

2025JA2019

2027INCDX

2028MOV[DI],DL

202ADECDI

202BDECSI

202CDECSI

202DLOOP2009

202FINT3

运行结果:

5、思考题

(1)

 

(2)

 

(3)

 

6.总结

 

(二)MASM汇编程序和LINK连接程序的使用操作

1、计算机钢琴程序

 

1)实验内容

源程序为:

DATASEGMENT

MESSDB‘Pushanykeytostop!

’,0dH,0aH,’$’

TABLEDW524,588,660,698,784,880,988,1048,1176,1320,0

TABLELDB31H,31H,32H,31H,34H,33H,3BH

DB31H,31H,32H,31H,35H,34H,3BH

DB31H,31H,38H,36H,34H,33H,32H,3BH

DB36H,36H,36H,34H,35H,34H,3BH,0AAH

DATAENDS

STACKSEGMENTPARASTACK‘STACK’

STADB256DUP(?

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK,ES:

DATA

STARTPROCFARDIVWORDPTR[TABLE+BX]

PUSHDSMOVBX,AX

XORAX,AXMOVAL,10110110B

PUSHAXOUT43H,AL

MOVAX,DATAMOVAX,BX

MOVDS,AXOUT42H,AL

MOVES,AXMOVAL,AH

MOVAH,09HOUT42H,AL

LEADX,MESSINAL,61H

INT21HORAL,03H

KK:

LEASI,TABLELOUT61H,AL

CALLDELAY

INAL,61H

ANDAL,0FCH

OUT61H,AL

QQ:

INCSI

SING:

MOVAH,06HJMPSING

MOVDL,0FFHFINISH:

RET

INT21HSTARTENDP

JNEFINISH

MOVAL,[SI]DELAYPROCNEAR;延时子程序

CMPAL,3BHPUSHCX

JNEDDDPUSHAX

CALLDELAYMOVAX,500H;大循环次数

JMPQQX1:

MOVCX,0FFFFH;小循环次数

DDD:

CMPAL,0AAHX2:

DECCX

JEKKJNZX2

SUBAL,31HDECAX

SHLAL,01HJNZX1

MOVBL,ALPOPAX

MOVAX,0000HPOPCX

MOVDX,12HRET

MOVBH,00HDELAYENDP

CODEENDS

ENDSTART

2、求数据块的最小值和最大值

1)实验内容

 

DATASEGMENT

BUFFERDB10,22,33,-80,127,-76,0,90,-45,60,-1

MINVALDB?

MAXVALDB?

DATAENDS

STACKSEGMENTPARASTACK‘STACK’

STADB100DUP(?

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,ES:

DATA,SS:

STACK

STARTPROCFAR

PUBHDS

MOVAX,0

PUSHAX

MOVAX,DATA

MOVDS,AX

MOVES,AX

LEABX,BUFFER

MOVCH,0

MOVCL,[BX]

INCBX

MOVAL,[BX]

MOVMINVAL,AL

MOVMAXVAL,AL

INCBX

DECCX

AGAIN:

MOVAL,[BX]

CMPAL,MINVAL

JENEXT

JGA1

MOVMINVAL,AL

JMPNEXT

A1:

CMPAL,MAXVAL

JLNEXT

MOVMAXVAL,AL

NEXT:

INCBX

DECCX

JNEAGAIN

RETF

STARTENDP

CODEENDS

ENDSTART

2)实验步骤

 

3.运行结果:

反汇编生成的代码:

结果:

最小值在141C:

B中,最大值在141:

C中。

3、从无序数列中删除一个元素

1)实验内容

 

2)实验步骤

 

 

代码:

DATASEGMENT

SERDB7,'ABCDEFG'

KEYDB'F'

FLAGDB0

DATAENDS

STACKSEGMENTPARASTACK'STACK'

STACDB100DUP(?

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,ES:

DATA,SS:

STACK

STARTPROCFAR

PUSHDS

MOVAX,0

PUSHAX

MOVAX,DATA

MOVDS,AX

MOVES,AX

LEABX,SER

MOVCX,[BX]

MOVAL,KEY

AA:

INCBX

CMPAL,BYTEPTR[BX]

JEKK

LOOPAA

MOVFLAG,0FFH

JMPEN

KK:

DECCX

BB:

MOVAL,BYTEPTR[BX+1]

MOVBYTEPTR[BX],AL

INCBX

LOOPBB

EN:

RET

STARTENDP

CODEENDS

ENDSTART

运行结果:

4、思考题

 

 

 

 

5.总结

 

实验三DOS系统功能调用及模块化程序设计

一、实验目的

 

二、实验设备

 

三、实验内容及步骤

(一)DOS键盘、显示基本功能子程序调用

1、显示缓冲区的字符串

1)实验程序:

DSEGSEGMENT

STRINGDB‘WelcometoDONGHUAUniversity!

’,0dH,0aH,’$’

DSEGENDS

STACKSEGMENTPARASTACK‘STACK’

DB256DUP(?

STACKENDS

CSEGSEGMENT

MAINPROCFAR

ASSUMECS:

CSEG,DS:

DSEGSS:

STACK

START:

PUSHDS

MOVAX,0

PUSHAX

MOVAH,9

MOVDX,SEGSTRING

MOVDS,DX

MOVDX,OFFSETSTRING

INT21H

RET

MAINENDP

CSEGENDS

ENDSTART

2)实验步骤:

 

运行结果:

2、键盘输入小写字母,显示器显示大写字母

1)实验程序:

CSEGSEGMENT

MAINPROCFAR

ASSUMECS:

CSEG

START:

PUSHDS

MOVAX,0

PUSHAX

BEGIN:

MOVAH,1

INT21H

CMPAL,‘a’

JBSTOP

CMPAL,‘z’

JASTOP

SUBAL,20H

MOVDL,AL

MOVAH,2

INT21H

JMPBEGIN

STOP:

RET

MAINENDP

CSEGENDS

ENDSTART

2)实验步骤:

 

运行结果:

3、从键盘输入一个二位十进制的月份数(01-12),显示相应月份的英文缩写名

1)程序及其结构

 

程序如下:

DATASGSEGMENTPARA‘DATA’

THREEDB3

MONINDB3,4DUP(?

ALFMONDB‘?

?

?

’,’$’

MONTABDB‘JAN’,’FEB’,’MAR’,’APR’,’MAY’,JUN’

DB‘JUL’,’AUG’,’SEP’,’OCT’,’NOV’,’DEC’

DATASGENDS

CODESGSEGMENTPARA‘CODE’

ASSUMECS:

CODESG,DS:

DATASG

MAINPROCFAR

PUSHDS

SUBAX,AX

PUSHAX

MOVAX,DATASG

MOVDS,AX

MOVES,AX

CALLINPUT

CALLLOCATE

CALLDISPLAY

RET

MAINENDP

INPUTPROCNEAR;键盘输入并将ASCⅡ码转换二进制数的子程序

PUSHDX

MOVAH,0AH;键盘输入月份数

LEADX,MONIN

INT21H

MOVAH,MONIN+2;将月份数字的ASCⅡ码取入AH和AL

MOVAL,MONIN+3

XORAX,3030H;将ASCⅡ码转换为BCD码

CMPAH,00

JZRETURN

SUBAH,AH

ADDAL,10

RETURN:

POPDX

RET

INPUT:

ENDP

LOCATEPROCNEAR;将月份数字转换为英文缩写字母的子程序

PUSHSI

PUSHDI

PUSHCX

LEASI,MONTAB

DECAL

MULTHREE

ADDSI,AX

MOVCX,03

CLD

LEADI,ALFMON

REPMOVSB

POPCX

POPDI

POPSI

RET

LOCATE:

ENDP

DISPLAYPROCNEAR;屏幕显示子程序

PUSHDX

LEADX,ALFMON

MOVAH,09

INT21H

POPDX

RET

DISPLAYENDP

CODESGENDS

ENDMAIN

运行结果:

分别输入01,09,10得到

(二)采用DOS功能调用设计源程序,并运行调试程序

1、十进制加法和结果显示程序

1)程序设计要求

 

2)实验步骤:

 

3)代码

DESGSEGMENT

ADDOP1DD9999

SUMDD?

DESGENDS

ESEGSEGMENT

ADDOP2DD9999

ESEGENDS

STACKSEGMENTPARASTACK'STACK'

DB100DUP(?

STACKENDS

CODESEGMENT

ASSUMEDS:

DESG,CS:

CODE,ES:

ESEG

START:

MOVAX,DESG

MOVDS,AX

MOVAX,ESEG

MOVES,AX

MOVAX,WORDPTRADDOP1

ADDAX,WORDPTRADDOP2

MOVWORDPTRSUM,AX

MOVAX,WORDPTRADDOP1+2

ADCAX,WORDPTRADDOP2+2

MOVWORDPTRSUM+2,AX

MOVBX,WORDPTRSUM+2

CALLDISPLAY

MOVBX,WORDPTRSUM

CALLDISPLAY

MOVAH,4CH

INT21H

DISPLAYPROCNEAR

MOVCX,10000D

CALLDEC_DIV

MOVCX,1000D

CALLDEC_DIV

MOVCX,100D

CALLDEC_DIV

MOVCX,10D

CALLDEC_DIV

MOVCX,1D

CALLDEC_DIV

RET

DEC_DIVPROCNEAR

MOVAX,BX

MOVDX,0

DIVCX

MOVBX,DX

MOVDL,AL

ADDDL,30H

MOVAH,2H

INT21H

RET

DEC_DIVENDP

DISPLAYENDP

CODEENDS

ENDSTART

4)运行结果

反汇编

结果:

(两个加数均为9999)

 

2、十进制加法和算式显示程序

1)程序设计要求

 

2)实验步骤:

 

3)代码

DSEG

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

当前位置:首页 > PPT模板 > 艺术创意

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

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