南昌大学微型计算机原理与接口技术实验报告.docx

上传人:b****6 文档编号:7389146 上传时间:2023-01-23 格式:DOCX 页数:18 大小:209.36KB
下载 相关 举报
南昌大学微型计算机原理与接口技术实验报告.docx_第1页
第1页 / 共18页
南昌大学微型计算机原理与接口技术实验报告.docx_第2页
第2页 / 共18页
南昌大学微型计算机原理与接口技术实验报告.docx_第3页
第3页 / 共18页
南昌大学微型计算机原理与接口技术实验报告.docx_第4页
第4页 / 共18页
南昌大学微型计算机原理与接口技术实验报告.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

南昌大学微型计算机原理与接口技术实验报告.docx

《南昌大学微型计算机原理与接口技术实验报告.docx》由会员分享,可在线阅读,更多相关《南昌大学微型计算机原理与接口技术实验报告.docx(18页珍藏版)》请在冰豆网上搜索。

南昌大学微型计算机原理与接口技术实验报告.docx

南昌大学微型计算机原理与接口技术实验报告

实验报告

 

实验课程:

微型计算机原理与接口技术

学生姓名:

学号:

专业班级:

自动化081班

2011年6月14日

目录

实验一汇编语言程序设计开发环境

实验二BCD数运算与十进制调整

实验三键盘输入并回显

实验四字符串匹配

实验五子程序设计(计算N!

实验六中断程序设计

 

实验一汇编语言程序设计开发环境

实验目的:

1、熟悉汇编语言设计开发环境

2、巩固对程序基本结构的认识

3、学会使用debug命令查看结果

实验步骤:

1、打开电脑在系统选择界面,选择DOS操作系统

2、通过键盘输入TC,进入TC操作界面。

在TC操作见面,新建文件,将实验程序写入文件中,然后保存为.asm文件。

退出TC操作界面

2、在DOS操作界面,写入masm,和刚才的ASM文件名,产生目标文件

4、调用link文件,链接目标文件,产生可执行文件

5、键入DEBUGEX_MOVS。

debug一短划线来回答。

我们的目的是要察看我们程序的运行结果,因此我们希望启动程序运行后应停在返回DOS以前,为此我们可先用反汇编命令U来确定我们所要的断点地址。

实验内容:

要求:

把40个字母a的字符串从源缓冲区传送到目的缓冲区。

程序如下:

datasegment;definedatasegment

source_bufferdb40dup('a')

dataends

extrasegment;defineextrasegment

dest_bufferdb40dup(?

extraends

codesegment;definecodesegment

mainprocfar;mainpartofprogram

assumecs:

code,ds:

data,es:

extra

start:

;startingexecutionaddress

;setupstackforreturn

pushds;saveolddatasegment

subax,ax;putzeroinAX

pushax;saveitonstack

;setDSregistertocurrentdatasegment

movax,data;datasegmentaddr

movds,ax;intoDOSregister

;setESregistertocurrentextrasegment

movax,extra;extrasegmentaddr

moves,ax;intoESregister

;MAINPARTOFPROGRAMGOESHERE

leasi,source_buffer;putoffsetaddrofsource

;bufferinSI

leadi,dest_buffer;putoffsetaddrofdest

;bufferinDI

cld;setDFflagtoforward

movcx,40;putcountinCX

repmovsb;moveentirestring

ret;returntoDOS

mainendp;endofmainpartofprogram

codeends;endofcodesegment

endstart;endassembly

上机调试结果如下:

1、输入指令masmex_movs输出结果如下:

2、用LINK产生exe文件

3、程序的执行,用反汇编命令U来确定所要设定的断点地址

4、用G命令使程序运行,查看运行结果

实验心得:

通过此次实验,了解了汇编语言的上机环境以及上机过程,同时学会了如何通过指令来处理调试程序以及查找、修改程序中的错误,最终得到我们想要的实验结果。

 

实验二、BCD数运算与十进制调整

实验目的:

1、熟悉BCD码的基本知识

2、熟悉汇编语言BCD码多字节加减法基本指令的使用方法;

3、掌握BCD码调整指令的使用方法。

实验原理:

BCD码也叫8421码就是将十进制的数以8421的形式展开成二进制。

BCD码的运算规则:

BCD码是十进制数,而运算器对数据做加减运算时,都是按二进制运算规则进行处理的。

这样,当将BCD码传送给运算器进行运算时,其结果需要修正。

修正的规则是:

当两个BCD码相加,如果和等于或小于1001(即十进制数9),不需要修正;如果相加之和在1010到1111(即十六进制数0AH~0FH)之间,则需加6进行修正;如果相加时,本位产生了进位,也需加6进行修正。

这样做的原因是,机器按二进制相加,所以4位二进制数相加时,是按“逢十六进一”的原则进行运算的,而实质上是2个十进制数相加,应该按“逢十进一”的原则相加,16与10相差6,所以当和超过9或有进位时,都要加6进行修正。

实验内容:

4位BCD码相加,实验程序如下:

STACKSEGMENTSTACK

DB100DUP(?

STACKENDS

DATASEGMENT

X1DB4DUP(?

X2DB4DUP(?

X3DB5DUP(?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

MAINPROC

MOVAX,DATA

MOVDS,AX

MOVBX,OFFSETX1

MOVCX,4

NEXT1:

CALLINPUT

ANDAL,0FH

MOV[BX],AL

INCBX

LOOPNEXT1

MOVAH,2

MOVDL,'+'

INT21H

MOVBX,OFFSETX2

MOVCX,4

NEXT2:

CALLINPUT

ANDAL,0FH

MOV[BX],AL

INCBX

LOOPNEXT2

MOVAH,2

MOVDL,'='

INT21H

MOVSI,OFFSETX1+3

MOVDI,OFFSETX2+3

MOVBX,OFFSETX3+4

MOVCX,4

ORCX,CX

NEXT3:

MOVAL,[SI]

ADCAL,[DI]

AAA

MOV[BX],AL

DECSI

DECDI

DECBX

LOOPNEXT3

MOVAL,0

ADCAL,AL

MOV[BX],AL

MOVCX,5

NEXT4:

MOVDL,[BX]

ADDDL,30H

MOVAH,2

INT21H

INCBX

LOOPNEXT4

MOVAH,4CH

INT21H

MAINENDP

INPUTPROC

AGAIN:

MOVAH,8

INT21H

CMPAL,'0'

JBAGAIN

CMPAL,'9'

JAAGAIN

MOVAH,2

MOVDL,AL

INT21H

RET

INPUTENDP

CODEENDS

ENDMAIN

调试结果如下:

1235和5689是从键盘中输入的4位非压缩的BCD码,06294为调整后的相加结果。

实验心得:

加深了自己对BCD码得认识,对其运算法则有了更深刻的了解。

巩固了自己的基础理论知识,通过实验,我对汇编语言编程也有了一定的了解,不像以前那样生疏。

实验三、键盘输入与回显

实验目的:

1、熟悉DOS功能的9号功能,从键盘输入并在显示器上显示字符串

2、熟悉DOS功能调用指令INT21H

实验原理:

1、单字符输入

功能号1、7和8都可以接收键盘输入的单字符串,输入字符以ASCII码形式存放在累加器AL中。

其中7号和8号功能无回显。

2、字符串输入

输入字符串可以通过调用DOS功能的0AH号功能实现。

3、单字符显示

在显示器上显示的内容都是字符形式,如果是数字,则一定是其对应的ASCII码。

要将一个字符串送到显示器显示,可调用DOS功能的2、6、9号功能实现。

其中2、6用于显示单个字符,功能9显示一个字符串。

4、字符串显示

要在显示器上显示字符串,可调用DOS功能的9号功能,该功能要求被显示的字符串必须以“$”字符作为结束符,否则会引起屏幕混乱。

5、返回DOS

用4CH号功能返回DOS的程序段:

MOVAH,4CH

INT21H

实验内容:

从键盘读入一串字符,在字符串尾插入一个“$”,并显示该字符。

实验程序如下:

DATASEGMENT

JICUNDB?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVAH,1

INT21H

MOVJICUN,AL

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

运行结果如下:

实验心得:

在字符串显示的功能调用中,要求被显示的字符串必须以“$”字符结尾,在调试中忽略了这个问题,造成了屏幕混乱。

 

实验四、字符串匹配

实验目的:

1.掌握变量的基本使用方法。

2.掌握字符串的输入输出方法的使用。

3.掌握数据段的定义方式。

实验内容:

编程接收用户从键盘键入的一个关键字以及一个句子,如果句子中不包含关键字则显示‘Nomatch!

’,如果句子中含有关键字则显示‘Match!

’,并把该字在句子中的位置用十六进制数显示出来。

实验程序如下:

DATASEGMENT

STR1DB'NHALLO$'

NEQU$-STR1

MESSDB'NOMATCH!

$'

DATAENDS

DATA1SEGMENT

STR2DB'HELLOA$'

MEQU$-STR2

DATA1ENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,ES:

DATA1

START:

MOVAX,DATA

MOVDS,AX

MOVAX,DATA1

MOVES,AX

MOVAL,N

CMPAL,M

JNZEXIT

LEASI,STR1

LEADI,STR2

MOVCL,N

MOVCH,0

CLD

REPECMPSB

JNZEXIT

LEADX,STR1

JMPL1

EXIT:

LEADX,MESS

L1:

MOVAH,9

INT21H

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

运行结果如下:

实验心得:

本实验中在进行字符串比较时从字符串长度和个对应的字符两方面来比较。

先判断字符串的长度,长度不相同,则字符串不匹配;若长度相同,再逐个比较相对应的字符,只有两字符串完全相等时,才输出字符串信息,否则显示“NOMATCH!

 

实验五、子程序设计(计算N!

实验目的:

1、通过调用求N!

的子程序求一个数的阶乘

2、掌握子程序的设计方法,调用方法,返回方法

3、学会一种算法:

递归调用

实验内容:

堆栈保护及递归算法,用递归算法计算3!

,实验程序如下:

DATASEGMENT

NDW3

RESULTDW?

DATAENDS

STACKSEGSEGMENT

DW128DUP(0)

TOSLABELWORD

STACKSEGENDS

CODESEGMENT

MAINPROCFAR

ASSUMECS:

CODE,DS:

DATA,SS:

STACKSEG

START:

MOVAX,STACKSEG

MOVSS,AX

MOVSP,OFFSETTOS

PUSHDS

SUBAX,AX

PUSHAX

MOVAX,DATA

MOVDS,AX

MOVBX,N

PUSHBX

CALLFACT

POPRESULT

RET

MAINENDP

FACTPROCNEAR

PUSHAX

PUSHBP

MOVAX,[BP+6]

CMPAX,0

JNZFACT1

INCAX

JMPEXIT

FACT1:

DECAX

PUSHAX

CALLFACT

POPAX

MOVDX,[BP+6]

MULDX

EXIT:

MOV[BP+6],AX

POPBP

POPAX

RET

FACTENDP

CODEENDS

ENDSTART

程序运行结果如下:

程序中要计算的是3!

,在数据段查看的结果如下图:

 

查看堆栈段:

实验心得:

这个程序,输入只能是3以下而且输出也是ASCⅡ,所以在算完之后要在屏幕上显示,还要转换成ASCⅡ,否则就是乱码

 

实验六、中断程序设计

实验目的:

1、熟悉中断的相关知识;

2、熟悉中断向量的功能调用;

3、掌握中断处理程序的设计方法。

实验内容:

编写一个程序实现每10S响铃一次,并在屏幕上显示“Thebellisringing!

实验程序如下:

DSEGSEGMENT

COUNTDW1

MESSDB‘THEBELLISRINGING!

’,0DH,0AH,’$’

DSEGENDS

CSEGSEGMENT

MAINPROCFAR

ASSUMECS:

CSEG,DS:

DSEG

START:

PUSHDS

SUBAX,AX

PUSHAX

MOVAX,DSEG

MOVDS,AX

MOVAL,1CH

MOVAH,35H

INT21H

PUSHES

PUSHBX

PUSHDS

MOVDX,OFFSETRING

MOVAX,SEGRING

MOVDS,AX

MOVAX,251CH

INT21H

POPDS

INAL,21H

ANDAL,11111110B

OUT21H,AL

STI

MOVDI,2000

DELAY1:

MOVSI,3000

DELAY2:

DECSI

JNZDELAY2

DECDI

JNZDELAY1

POPDX

POPDS

MOVAL,1CH

MOVAH,25H

INT21H

RET

MAINENDP

RINGPROCFAR

PUSHDS

PUSHAX

PUSHCX

PUSHDX

MOVAX,DSEG

MOVDS,AX

STI

DECCOUNT

JNZEXIT

MOVDX,OFFSETMESS

MOVAH,09H

INT21H

MOVDL,07H

MOVAH,02H

INT21H

MOVCOUNT,182

EXIT:

CLI

POPDX

POPCX

POPAX

POPDS

IRET

RINGENDP

CSEGENDS

ENDSTART

 

程序运行结果如下:

实验心得:

本实验做的是中断程序设计,通过此次实验,对中断服务子程序的设计有了更深的了解。

这是我们做的最后一个实验,通过这几次实验,我的运用汇编语言编程的能力有了很大的提高,获益颇丰。

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

当前位置:首页 > PPT模板 > 其它模板

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

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