微机接口实验报告.docx

上传人:b****6 文档编号:8987435 上传时间:2023-02-02 格式:DOCX 页数:21 大小:605.67KB
下载 相关 举报
微机接口实验报告.docx_第1页
第1页 / 共21页
微机接口实验报告.docx_第2页
第2页 / 共21页
微机接口实验报告.docx_第3页
第3页 / 共21页
微机接口实验报告.docx_第4页
第4页 / 共21页
微机接口实验报告.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

微机接口实验报告.docx

《微机接口实验报告.docx》由会员分享,可在线阅读,更多相关《微机接口实验报告.docx(21页珍藏版)》请在冰豆网上搜索。

微机接口实验报告.docx

微机接口实验报告

 

武汉大学

微机接口实验报告

 

 

实验一数据传送

一、实验目的

1.熟悉8086指令系统的数据传送指令及8086的寻址方式。

2.利用EMU调试工具来调试汇编语言程序。

二、实验预习要求

1.复习8086指令系统中的数据传送类指令和8086的寻址方式。

2.预习EMU的使用方法:

3.按照题目要求预先编写好实验中的程序段。

三、实验任务

1.通过下述程序段的输入和执行来熟悉EMU的使用,并通过显示器屏幕观察程序的执行情况。

练习程序段如下:

MOVBL,08H

MOVCL,BL

MOVAX,03FFH

MOVBX,AX

MOVDS:

[0020H],BX

2.用以下程序段将一组数据压入(PUSH)堆栈区,然后通过不同的出栈顺序出栈,观察出栈后数据的变化情况。

压栈程序段如下:

MOVAX,0102H

MOVBX,0304H

MOVCX,0506H

MOVDX,0708H

PUSHAX

PUSHBX

PUSHCX

PUSHDX

出栈段程序:

POPCX

POPDX

POPBX

POPAX

RET

3.指出下列指令的错误并加以改正,上机验证之。

(1)MOV[BX],[SI]

存储器操作数不可直接传递,改为MOV[BX],SI

(2)MOVAH,BX

操作数字长不相同,改为MOVAH,BH

(3)MOVAX,[SI][DI]

基址変址寻址时,不允许两变址寄存器组合在一起,改为

MOVAX,[BX][DI]

(4)MOVBYTEPTR[BX],2000H

字长不同,改为MOVWORDPTR[BX],2000H

(5)MOVCS,AX

段寄存器CS内容不通过MOV指令改写

(6)MOVDS,2000H

不能用立即数直接给段寄存器赋值,改为

MOVAX,2000H

MOVDS,AX

5.将DS:

1000H字节存储单元中的内容送到DS:

2020H单元中存放。

试分别用8086的直接寻址、寄存器间接寻址、变址寻址、寄存器相对寻址传送指令编写程序段,并上机验证结果。

(1)直接寻址

MOVAX,[1000H]

MOV[2010H],AX

(2)寄存器间接寻址

MOVBX,1000H

MOVAX,[BX]

MOV[2020H],AX

(3)变址寻址

MOVSI,1000H

MOVAX,[SI]

MOV[2020H],AX

(4)寄存器相对寻址

MOVAX,[1000H]

MOVBX,1000H

MOV1020H[BX],AX

6.设AX寄存器中的内容为1111H,BX寄存器中的内容为2222H,DS:

0010H单元中的内容为3333H。

将AX寄存器中的内容与BX寄存器中的内容交换,然后再将BX寄存器中的内容与DS:

0010H单元中的内容进行交换。

试编写程序段,并上机验证结果。

MOVAX,1111H

MOVBX,2222H

MOV[0010H],3333H

MOVDX,BX

MOVBX,AX

MOVAX,DX

MOVDX,BX

MOVBX,[0010H]

MOV[0010H],DX

7.设(DS)=1000H,(ES)=2000H,有关存储器的内容如图1.5所示。

要求将DS段的内容传送到AX寄存器,ES段的内容传送到BX寄存器,试编写程序段。

MOV[1000H],0EEFFH

MOVES:

[2000H],0CCDDH

MOVAX,[1000H]

MOVBX,ES:

[2000H]

四、实验报告要求

小结EMU的使用方法:

1.首先选择是建立.COM文件还是.EXE文件。

这取决于是要编写运行一个程序段还是可执行程序。

本节均是验证程序段。

故采用.COM文件。

实验二算术逻辑运算及移位操作

一、实验目的

1.熟悉算术逻辑运算指令和移位指令的功能。

2.了解标志寄存器各标志位的意义和指令执行对它的影响。

二、实验预习要求

1.复习8086指令系统中的算术逻辑类指令和移位指令。

2.按照题目要求在实验前编写好实验中的程序段。

三、实验任务

1.实验程序段及结果表格如表1.2:

标志位

CF

ZF

SF

OF

PF

AF

程序段1:

MOVAX,1018H

MOVSI,230AH

ADDAX,SI

ADDAL,30H

MOVDX,3FFH

ADDAX,BX

MOV[20H],1000H

ADD[20H],AX

PUSHAX

POPBX

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

程序段2:

MOVAX,0A0AH

ADDAX,0FFFFH

MOVCX,0FF00H

ADCAX,CX

SUBAX,AX

INCAX

ORCX,0FFH

ANDCX,0F0FH

MOV[10H],CX

0

0

0

0

0

0

0

0

0

0

0

0

1

0

0

0

1

1

1

0

0

0

1

1

1

0

0

0

1

0

0

1

0

0

1

0

0

0

0

0

0

0

0

0

1

0

1

0

0

0

0

0

1

0

0

0

0

0

1

0

程序段3:

MOVBL,25H

MOVBYTEPTR[10H],4

MOVAL,[10H]

MULBL

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

程序段4:

MOVWORDPTR[10H],80H

MOVBL,4

MOVAX,[10H]

DIVBL

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

程序段5:

MOVAX,0

DECAX

ADDAX,3FFFH

ADDAX,AX

NOTAX

SUBAX,3

ORAX,0FBFDH

ANDAX,0AFCFH

SHLAX,1

RCLAX,1

0

0

0

0

0

0

0

0

1

0

1

1

1

0

0

0

0

1

0

0

0

0

1

1

0

0

0

0

1

1

0

0

1

0

1

0

0

0

1

0

0

0

0

0

1

0

0

0

1

0

0

1

1

0

1

1

2.用BX寄存器作为地址指针,从BX所指的内存单元(0010H)开始连续存入三个无符号数(10H、04H、30H),接着计算内存单元中的这三个数之和,和放在0013H单元中,再求出这三个数之积,积放0014单元中。

写出完成此功能的程序段并上机验证结果。

程序如下:

MOVBX,0010H

MOV[BX],10H

MOV[0001H][BX],04H

MOV[0002H][BX],30H

MOVAL,[BX]

ADDAL,[0001H][BX]

ADDAL,[0002H][BX]

MOV[0003H][BX],AL

MOVAL,BL

MUL[0001H][BX]

MUL[0002H][BX]

MOV[0004H][BX],AX

3.写出完成下述功能的程序段。

上机验证你写出的程序段,程序运行的最后结果(AX)

(1)传送15H到AL寄存器;

(2)再将AL的内容乘以2;

(3)接着传送15H到BL寄存器;

(4)最后把AL的内容乘以BL的内容。

程序如下:

MOVAL,15H

MOVDX,2

MULDX

MOVBL,15H

MULBL

RET

4.写出完成下述功能的程序段。

上机验证你写出的程序段,程序运行后的商=?

(1)传送数据2058H到DS:

1000H单元中,数据12H到DS:

1002H单元中;

(2)把DS:

1000H单元中的数据传送到AX寄存器;

(3)把AX寄存器的内容算术右移二位;

(4)再把AX寄存器的内容除以DS:

1002H字节单元中的数;

(5)最后把商存入字节单元DS:

1003H中。

程序如下:

MOV[1000H],2058H

MOV[1002H],12H

MOVAX,[1000H]

MOVCL,2

SARAX,CL

DIV[1002H]

MOV[1003H],AL

RET

5.下面的程序段用来清除数据段中从偏移地址0010H开始的12个字存储单元的内容(即将零送到这些存储单元中去)。

(1)将第4条比较指令语句填写完整(划线处)。

MOVSI,0010H

NEXT:

MOVWORDPTR[SI],0

ADDSI,2

CMPSI,(填写18)

JNENEXT

HLT

(2)假定要按高地址到低地址的顺序进行清除操作(高地址从0020H开始),则上述程序段应如何修改?

程序如下:

MOVSI,0020H

NEXT:

MOVWORDPTR[SI],0

SUBSI,2

CMPSI,18

JNENEXT

HLT

6.输入并运行表1.3中的程序段,把结果填入表右边的空格中,并分析结果,说明本程序段的功能是什么。

程序段

字单元(1A00H)=

字单元(1A02H)=

MOV[1A00H],0AA55H

MOV[1A02H],2AD5H

SHLWORDPTR[1A02H],1

CMP[1A00H],8000H

CMC

RCLWORDPTR[1A02H],1

RCLWORDPTR[1A00H],1

55

00

55

D5

55

AA

55

AA

55

AA

55

55

AA

55

功能是将第一个数除以2,第二个数乘以4

四、实验报告要求

1.简要说明ADD、SUB、AND、OR指令对标志位的影响。

ADD:

对6个状态标志位都会影响;SUB:

影响与ADD指令影响完成相同;

AND:

影响6个标志位,并使CF=OF=0;OR:

影响6个标志位,并使CF=OF=0

2.简要说明一般移位指令与循环移位指令之间的主要区别。

一般移位:

将操作数右移m位,同时每移一位,左边的符号位保持不变,移出的最低位进入标志位CF。

对于有符号数和无符号数而言,算术右移相当于除以2.;

循环移位:

循环移位指令的操作数形式与移位指令相同,如果仅移动一次,可以用1表示;如果需要移位多次,则需用CL寄存器表示移位次数。

实验三算术逻辑运算及移位操作

一、实验目的

1.熟悉串操作指令的功能。

2.了解串操作指令的使用方法。

二、实验预习要求

1.复习8086指令系统中的串操作类指令。

2.按照题目要求在实验前编写好实验中的程序段。

三、实验任务

1.输入以下程序段并运行之,回答后面的问题。

CLD

MOVDI,1000H

MOVAX,55AAH

MOVCX,10H

REPSTOSW

(1)从DS:

1000H开始的16个字单元的内容是什么?

(2)(DI)=?

(CX)=?

,并解释其原因。

2.在上题的基础上,再输入以下程序段并运行之,回答后面的问题。

MOVSI,1000H

MOVDI,2000H

MOVCX,20H

REPMOVSB

(1)从DS:

2000H开始的16个字单元的内容是什么?

(2)(SI)=?

(DI)=?

(CX)=?

,并分析之。

3.从DS:

1000H开始存放有一个字符串”Thisisastring”,要求把这个字符串从后往前传送到DS:

2000H开始的内存区域中(即传送结束后,从DS:

2000H开始的内存单元的内容为”gnirtsasisiht”),试编写程序段并上机验证之。

#MAKE_COM#

ORG100H

JMPSTART

STRDB'THISISASTRING',13,10

START:

LEASI,STR

MOVDI,1000H

MOVCX,10H

CLD

REPMOVSB

MOVCX,10H

MOVSI,1000H

MOVDI,200FH

AGAIN:

CLD

LODSB

STD

STOSB

LOOPAGAIN

四、实验报告要求

1.简要说明执行串操作指令之前应初始化哪些寄存器和标志位。

应预设源串指针DS,SI,目标串指针ES,DI,重复次数CX,及操作方向DF

2.总结串操作指令的用途及使用方法。

实验四字符及字符串的输入和输出

一、实验目的

1.熟悉如何进行字符及字符串的输入输出。

2.掌握简单的DOS系统功能调用。

二、实验预习要求

1.复习系统功能调用的1、2、9、10号功能。

2.按照题目要求预先编写好实验中的程序段。

三、实验任务

1.要在屏幕上显示一个字符串“Hello,world”,写出该字符串变量的定义语句和显示这个字符串的程序段。

上机验证之。

DSEGSEGMENT

STRDB‘Hello,world’,0DH,0AH,’$’

DSEGENDS

CSEGSEGMENT

ASSUMECS:

CSEG,DS:

DSEG

START:

MOVAX,DSEG

MOVDS,AX

LEADX,STR

MOVAH,09H

INT21H

MOVAH,4CH

INT21H

CSEGENDS

ENDSTART

2.按6行×16列的格式顺序显示ASCII码为20H到7FH之间的所有字符,即每16个字符为一行,共6行。

每行中相邻的两个字符之间用空格字符分隔开。

试编写程序段并上机运行验证。

提示:

程序段包括两层循环,内循环次数为16,每次内循环显示一个字符和一个空格字符;外循环次数为6,每个外循环显示一行字符并显示一个回车符(0DH)和一个换行符(0AH)。

程序如下:

#MAKE_EXE#

CODESEGMENT

MAINPROCFAR

ASSUMECS:

CODE

START:

MOVAH,02H

MOVDL,20H

MOVBL,6

E:

MOVCX,16

L:

INT21H

PUSHDX

MOVAH,02H

MOVDL,0

INT21H

MOVAH,02H

MOVDL,0

INT21H

POPDX

INCDL

LOOPL

PUSHDX

MOVAH,02H

MOVDL,0DH

INT21H

MOVAH,02H

MOVDL,0AH

INT21H

POPDX

DECBL

CMPBL,0

JNEAGAIN

JEE

EXIT:

MOVAX,4CH

INT21H

MAINENDP

CODEENDS

ENDSTART

四、实验报告要求

1.1、2、9、10号功能的输入输出参数有哪些?

分别放在什么寄存器中?

 

2.总结一下,如何实现字符及字符串的输入输出。

字符串输入:

MOVAH,0AH;功能号0AH

LEADX,<字符串缓冲区首地址>;字符串在内存中的存放地址(由DS:

DX定)

INT21H

字符串输出:

显示字符串(功能号=9)

   MOVAH,9

   LEADX,<字符串>;DS:

DX待输出字符串的偏移地址

   INT21H

注意:

被显示的字符串必须以’$’结束。

《微机原理与接口技术》软件编程题目

(0)、设MEM1中有一个任意字符串STRING,以ASCII码’$’结尾,假定MEM1中的字符串不会导致数据段的溢出,编写一个程序,在STRING中找到第一次出现“OK”这个字母序列的首地址,如果没有这个序列,则直接返回0,并在显示器(LED)上显示。

程序及结果如下所示:

#MAKE_EXE#

DATASEGMENT

STRINGDB'DGDFEROKGVDF',0DH,0AH,'$'

STRDB'OK'0DH,0AH,'$'

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

LEADX,STR

MOVSI,DX

INCSI

LEADI,STRING

CLDMOVAL,[SI]

SCAN:

REPNESCASB

JZMATCHNO:

MOVDL,'0'

JMPDESPLY;MATCH:

REPZCMPSB

POPDI

POPSI

JZFOUND

JNZNO

JMPSCAN

DESPLY:

MOVAH,02HINT21H

FOUND:

DECDI

HLT

CODEENDS

ENDSTART

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

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

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

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