微机原理实验报告.docx

上传人:b****6 文档编号:7167296 上传时间:2023-01-21 格式:DOCX 页数:58 大小:268.27KB
下载 相关 举报
微机原理实验报告.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.掌握在PC机上以十六进制形式显示数据的方法;

2.掌握部分DOS功能调用使用方法;

3.熟悉Tddebug调试环境和TurboDebugger的使用。

二、实验所用设备

1.PC微机一台。

三、实验内容

一般来说,程序需要显示输出提示运行的状况和结果,有的还需要将数据区中的内容显示在屏幕上。

本实验要求将指定数据区的数据以十六进制数形式显示在屏幕上,并通过DOS功能调用完成一些提示信息的显示。

实验中可使用DOS功能调用(INT21H)。

(1)显示单个字符输出

入口:

AH=02H

调用参数:

DL=输出字符

(2)显示字符串

入口:

AH=09H

调用参数:

DS:

DX=串地址,’$’为结束字符

(3)键盘输入并回显

入口:

AH=01H

返回参数:

AL=输出字符

(4)返回DOS系统

入口:

AH=4CH

调用参数:

AL=返回码

四、实验步骤

1.运行Tddebug软件,选择Edit菜单,根据实验内容的描述编写实验程序,本实验显示部分参考实验流程如图1-1示;

2.使用Compile菜单中的Compile和Link对实验程序进行汇编、连接;

3.使用Rmrun菜单中的Run,运行程序,观察运行结果;

4.使用Rmrun菜单中的Debug,调试程序,观察调试过程中,数据传输指令执行后,各寄存器及数据区的内容;

5.更改数据区中的数据,考察程序的正确性。

 

图1-1显示程序实验流程图

五、参考程序清单

DATASEGMENT

MESDB'Showaashex:

',0AH,0DH,'$'

SDDB'a'

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVDX,OFFSETMES;显示提示信息

MOVAH,09H

INT21H

MOVDI,OFFSETSD

MOVAL,DS:

[DI]

ANDAL,0F0H;取高4位

SHRAL,4

CMPAL,0AH;是否是A以上的数

JBC2

ADDAL,07H

C2:

ADDAL,30H

MOVDL,AL;显示字符

MOVAH,02H

INT21H

MOVAL,DS:

[DI]

ANDAL,0FH;取低4位

CMPAL,0AH

JBC3

ADDAL,07H

C3:

ADDAL,30H

MOVDL,AL;显示字符

MOVAH,02H

INT21H

MOVAX,4C00H;返回DOS

INT21H

CODEENDS

ENDSTART

六、实验报告内容及要求

1.打开应用软件,参考实验程序。

2.保存程序,编译,链接,生成。

3.运行成功,在dos环境下显示为:

七、实验思考

对PC机上以十六进制形式显示数据的方法有一定了解,

了解了DOS功能调用使用,熟悉了调试环境和TurboDebugger的使用。

 

实验二数据传送实验

一、实验目的

1.熟悉Tddebug调试环境和TurboDebugger的使用;

2.掌握与数据有关的不同寻址方式。

二、实验所用设备

1.PC微机一台。

三、实验内容

将数据段中的一个字符串传送到附加段中,并输出附加段中的目标字符串到屏幕上。

参考实验程序:

DDATASEGMENT;定义源数据段

MSRDB"HELLO,WORLD!

$"

LENEQU$-MSR

DDATAENDS

EXDASEGMENT;定义附加数据段

MSDDBLENDUP(?

EXDAENDS

MYSTACKSEGMENTSTACK;定义堆栈段

DW20DUP(?

MYSTACKENDS

CODESEGMENT;定义代码段

ASSUMECS:

CODE,DS:

DDATA,ES:

EXDA

START:

MOVAX,DDATA

MOVDS,AX;装载数据段寄存器

MOVAX,EXDA

MOVES,AX;装载附加数据段寄存器

MOVSI,OFFSETMSR;设置SI

MOVDI,OFFSETMSD;设置DI

MOVCX,LEN

NEXT:

MOVAL,[SI];开始传输数据

MOVES:

[DI],AL

INCSI

INCDI

DECCX

JNZNEXT

PUSHES

POPDS;将附加段寄存器的段值赋给数据段寄存器

MOVDX,OFFSETMSD

MOVAH,9

INT21H

MOVAX,4C00H;利用DOS功能调用返回DOS状态

INT21H

CODEENDS

ENDSTART

将程序主体部分的寄存器间接寻址方式改为相对寻址方式,则如下所示:

MOVBX,0

MOVCX,LEN

NEXT:

MOVAL,MSR[BX]

MOVES:

MSD[BX],AL

INCBX

LOOPNEXT

四、实验步骤

1.运行Tddebug软件,选择Edit菜单编写实验程序;

2.使用Compile菜单中的Compile和Link对实验程序进行汇编、连接;

3.使用Rmrun菜单中的Run,运行程序,观察运行结果;

4.使用Rmrun菜单中的Debug,调试程序,观察调试过程中,数据传输指令执行后,各寄存器及数据区的内容;

5.更改数据区中的数据,考察程序的正确性。

五、实验报告内容及要求

在应用环境下调试,链接,运行程序。

显示出的程序结果:

六、实验思考

进一步熟悉了Tddebug调试环境和TurboDebugger的使用,

了解和掌握与数据有关的不同寻址方式。

 

实验三数码转换程序实验

一、实验目的

掌握不同进制数及编码相互转换的程序设计方法。

二、实验所用设备

PC微机一台。

三、实验内容

计算机输入设备输入的信息一般是由ASCII码或BCD码表示的数据或字符,CPU用二进制数进行计算或其它信息处理,处理结果的输出又必须依照外设的要求变为ASCII码、BCD码或七段显示码等。

因此,在应用软件中,各类数制的转换和代码的转换是必不可少的。

计算机与外设间的数码转换关系如图3-1所示,数码对应关系如表3-1所示。

图3-1计算机与外设间的数码转换关系

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

十进制数可以表示为:

Dn×10n+Dn-1×10n-1+…+D0×100

=Di×10i其中Di代表十进制数1、2、3…9、0。

上式可以转换为:

ΣDi×10i=((…(Dn×10+Dn-1)×10)+Dn-2)×10+…+D1)×10+D0

由上式可归纳十进制数转换为二进制的方法:

从十进制数的最高位Dn开始作乘10加次位的操作,依次类推,则可求出二进制数结果。

本实验要求将缓冲区中的一个五位十进制数00012的ASCII码转换成二进制数,并将转换结果按位显示在屏幕上。

转换过程的参考流程如图3-2所示。

表3-1数码转换对应关系

 

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

本实验要求将键盘输入的一个五位十进制数54321的ASCII码存放入数据区中,转换为BCD码后,并将转换结果按位分别显示于屏幕上。

若输入的不是十进制数的ASCII码,则输出“FF”。

提示:

一字节ASCII码取其低四位即变为BCD码。

转换部分的实验流程参见3-3。

3.将十六进制数的ASCII码转换为十进制数

十六位二进制数的值域为0-65535,最大可转换为五位十进制数。

五位十进制数可表示为:

ND=D4×104+D3×103+D2×102+D1×10+D0

因此,将十六位二进制数转换为五位ASCII码表示的十进制数,就是求D1-D4,并将它们转化为ASCII码。

图3-2十进制ASCII转换为

二进制数参考流程

图3-3十进制ASCII转换为

BCD码参考流程

本实验要求将缓冲区中存放的000CH的ASCII码转换成十进制数,并将转换结果显示在屏幕上。

转换部分的实验流程参见图3-4。

4.BCD码转换为二进制码

本实验要求将四个二位十进制数的BCD码存放在某一内存单元中,转换出的二进制数码存入其后的内存单元中,转换结束,送屏幕显示。

转换部分的实验流程参见3-5。

四、实验步骤

1.运行Tddebug软件,选择Edit菜单编写实验程序;

2.使用Compile菜单中的Compile和Link对实验程序进行汇编、连接;

3.使用Rmrun菜单中的Run,运行程序,观察运行结果;

4.使用Rmrun菜单中的Debug,调试程序,观察调试过程中,数据传输指令执行后,各寄存器及数据区的内容;

5.更改数据区中的数据,考察程序的正确性。

图3-4将十六进制数的ASCII码转换为十进制数参考流程

图3-5BCD码转换为二进制码

参考流程

五、实验报告内容及要求

根据流程图编写程序并调试,写出程序调试过程及运行情况。

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

程序:

DATASEGMENT

BUFFERDB'00012'

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

LEASI,BUFFER

MOVCX,5

MOVAL,0

BEGIN:

MOVDX,0AH

MOVBL,[SI]

SUBBL,30H

MULDX

ADDAL,BL

INCSI

LOOPBEGIN

MOVCX,8

MOVBL,AL

LOOP1:

ROLBL,1

MOVDL,BL

ANDDL,01H

ADDDL,30H

MOVAH,02H

INT21H

LOOPLOOP1

MOVAX,4C00H

INT21H

CODEENDS

ENDSTART

程序结果为:

00001100

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

DATASEGMENT

BUFFERDB5DUP(0)

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

LEASI,BUFFER

MOVCX,5

MOVAH,1H

MOVBX,0FFH

LOOP1:

INT21H

MOV[SI],AL

INCSI

LOOPLOOP1

MOVAH,02H

MOVDL,0AH

INT21H

MOVDL,0DH

INT21H

MOVCX,5

LEASI,BUFFER

LOOP2:

MOVDI,4

MOVBL,[SI]

CMPBL,'0'

JBERROR

CMPBL,'9'

JAERROR

SUBBL,30H

ROLBL,4

LOOP4:

ROLBL,1

MOVDL,BL

ANDDL,01H

ADDDL,30H

MOVAH,02H

INT21H

DECDI

JNZLOOP4

INCSI

LOOPLOOP2

JMPEND

ERROR:

ANDBL,0FH

ADDBL,'A'

MOVDL,BL

MOVAH,02H

INT21H

INT21H

END:

MOVAX,4C00H

INT21H

CODEENDS

ENDSTART

程序结果:

010*********

3.将十六进制数的ASCII码转换为十进制数

DATASEGMENT

BUFFERDB000CH

RESDB5DUP(?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

LEASI,BUFFER

MOVCX,4

MOVAX,0

MOVBX,0

BEGIN:

MOVDX,16

MOVBL,[SI]

CMPBX,'9'

JNAMARK1

SUBBX,'A'

ADDBX,10

JMPMARK2

MARK1:

SUBBX,'0'

MARK2:

MULDX

ADDAX,BX

INCSI

LOOPBEGIN

MOVBX,10

LEASI,RES+4

LOOP1:

DIVBX

ADDDL,'0'

MOV[SI],DL

DECSI

CMPAX,10

JAELOOP1

ADDAL,'0'

MOV[SI],AL

LEASI,RES

MOVCX,5

MOVAH,02H

LOOP2:

MOVDL,[SI]

INT21H

INCSI

LOOPLOOP2

CODEENDS

ENDSTART

程序结果:

12

4.BCD码转换为二进制码

DATASEGMENT

D1DB12H,34H,56H,78H

C1EQU$-D1

D2DBC1DUP(?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVCH,C1

MOVCL,4

MOVSI,0

MOVBH,10

L1:

MOVAL,D1[SI]

MOVBL,AL

ANDBL,0FH

ANDAL,0F0H

SHRAL,CL

MULBH

ADDAL,BL

MOVD2[SI],AL

INCSI

DECCH

JNZL1

MOVSI,0

MOVCH,C1

L2:

MOVDL,0DH

MOVAH,2

INT21H

MOVDL,0AH

MOVAH,2

INT21H

MOVAL,D2[SI]

MOVDL,AL

ANDDL,0F0H

SHRDL,CL

ADDDL,30H

CMPDL,39H

JNAL3

ADDDL,7

L3:

PUSHAX

MOVAH,2

INT21H

POPAX

ANDAL,0FH

MOVDL,AL

ADDDL,30H

CMPDL,39H

JNAL4

ADDDL,7

L4:

MOVAH,2

INT21H

INCSI

DECCH

JNZL2

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

程序结果为:

0000010011010010

六、实验思考

通过实验,对不同进制数及编码相互转换的程序设计方法有一定的了解和掌握。

实验四运算类程序实验

一、实验目的

1.掌握运算类指令编程及调试方法;

2.掌握运算类指令对各状态标志位的影响及测试方法。

二、实验所用设备

1.PC微机一台。

三、实验内容

80x86指令系统提供了实现加、减、乘、除运算的基本指令,可对表4-1所示的数据类型进行算术运算。

表4-1数据类型算术运算表

1.二进制双精度加法运算

本实验要求计算X+Y=Z,将结果Z输出到屏幕,其中X=001565A0H,Y=0021B79EH。

实验利用累加器AX,先求低十六位和,并存入低址存储单元,后求高16位和,再存入高址存储单元。

由于低位和可能向高位有进位,因而高位字相加语句需用ADC指令,则低位相加有进位时,CF=1,高位字相加时,同时加上CF中的1。

在80386以上微机中可以直接使用32位寄存器和32位加法指令完成本实验的功能。

2.十进制数的BCD码减法运算

本实验要求计算X-Y=Z,其中,X、Y、Z为BCD码,其中X=0400H,Y=0102H。

3.乘法运算

本实验要求实现十进制数的乘法,被乘数和乘数均以BCD码形式存放于内存中,被乘数为54320H,乘数为3H,运算结束后,将乘积在屏幕上显示。

4.用减奇数开平方运算

80x86指令系统中有乘除法指令但没有开平方指令,因此,开平方运算是通过程序来实现的。

用减奇数法可求得近似平方根,获得平方根的整数部分。

我们知道,N个自然数中的奇数之和等于N2,即:

1+3+5=9=32

1+3+5+7=16=42

1+3+5+7+9+11+13+15=64=82

若要做S的开方运算,那麽就可以从S中逐次减去自然数中的奇数1,3,5,7…,一直进行到相减数为0或不够减下一个自然数的奇数为止,然后统计减去自然数的奇数个数,它就是S的近似平方根。

本实验要求利用减奇法计算0040H的开平方值,并将运算结果显示在屏幕上。

四、实验步骤

1.运行Tddebug软件,选择Edit菜单编写实验程序;

2.使用Compile菜单中的Compile和Link对实验程序进行汇编、连接;

3.使用Rmrun菜单中的Run,运行程序,观察运行结果;

4.使用Rmrun菜单中的Debug,调试程序,观察调试过程中,数据传输指令执行后,各寄存器及数据区的内容;

5.更改数据区中的数据,考察程序的正确性。

五、实验报告内容及要求

根据实验要求编写程序并调试,写出程序调试过程及运行情况。

1.二进制双精度加法运算

DATASEGMENT

XDW65A0H,0015H

YDW0B79EH,0021H

ZDW2DUP(?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVCX,2

CLC

MOVSI,0

L1:

MOVAX,X[SI]

ADCAX,Y[SI]

MOVZ[SI],AX

INCSI

INCSI

LOOPL1

MOVBX,Z[2]

CALLLIST_BX

MOVBX,Z

CALLLIST_BX

MOVAH,4CH

INT21H

LIST_BXPROC

MOVCH,4

MOVCL,4

NEXT:

ROLBX,CL

MOVDL,BL

ANDDL,0FH

ADDDL,30H

CMPDL,39H

JLEPRINT

ADDDL,7

PRINT:

MOVAH,2

INT21H

DECCH

JNZNEXT

RET

LIST_BXENDP

CODEENDS

ENDSTART

程序结果:

00371D3E

2.十进制数的BCD码减法运算

DATASEGMENT

XDW0400H

YDW0102H

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

LEASI,X

LEADI,Y

MOVDL,10D

MOVBL,[SI]

MOVAL,[SI+1]

MULDL

ADDBL,AL

MOVDL,10D

MOVCL,[DI]

MOVAL,[DI+1]

MULDL

ADDCL,AL

SUBBL,CL

MOVAL,BL

MOVBL,10D

DIVBL

MOVBH,AL

MOVBL,AH

MOVCX,4

MOVAH,02H

LOOP2:

ROLBX,4

MOVDL,BL

ANDDL,0FH

ADDDL,'0'

CMPDL,'9'

JBPRINT

ADDDL,'A'-('9'+1)

PRINT:

INT21H

LOOPLOOP2

CODEENDS

ENDSTART

程序结果:

0208

3.乘法运算

DATASEGMENT

XDD54320H

YDB03H

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

LEASI,X+2

MOVCX,3

MOVAX,0

LOOP1:

MOVDL,10D

MOVBL,[SI]

ROLBL,4

ANDBL,0FH

MULDX

ADDAX,BX

MOVDL,10D

MOVBL,[SI]

ANDBL,0FH

MULDX

ADDAX,BX

DECSI

LOOPLOOP1

LEADI,Y

MOVBL,[DI]

MULBX

MOVSI,4

MOVBX,AX

MOVCX,DX

MOVAH,02H

LOOP2:

ROLCX,4

MOVDL,CL

ANDDL,0FH

ADDDL,'0'

CMPDL,'9'

JBEPRINT1

ADDDL,'A'-('9'+1)

PRINT1:

INT21H

DECSI

JNZLOOP2

MOVSI,4

LOOP3:

ROLBX,4

MOVDL,BL

ANDDL,0FH

ADDDL,'0'

CMPDL,'9'

JBEPRINT2

ADDDL,'A'-('9'+1)

PRINT2:

INT21H

DECSI

JNZLOOP3

MOVDL,'H'

INT21H

CODEENDS

ENDSTART

程序结果:

00027C90H

4.用减奇数开平方运算

DATASEGMENT

RESDB5DUP('0')

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVBX,0040H

MOVCX,1D

MOV

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

当前位置:首页 > 高等教育 > 农学

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

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