微机原理实验课设指导书11110Word格式.docx

上传人:b****8 文档编号:22705948 上传时间:2023-02-05 格式:DOCX 页数:132 大小:1.12MB
下载 相关 举报
微机原理实验课设指导书11110Word格式.docx_第1页
第1页 / 共132页
微机原理实验课设指导书11110Word格式.docx_第2页
第2页 / 共132页
微机原理实验课设指导书11110Word格式.docx_第3页
第3页 / 共132页
微机原理实验课设指导书11110Word格式.docx_第4页
第4页 / 共132页
微机原理实验课设指导书11110Word格式.docx_第5页
第5页 / 共132页
点击查看更多>>
下载资源
资源描述

微机原理实验课设指导书11110Word格式.docx

《微机原理实验课设指导书11110Word格式.docx》由会员分享,可在线阅读,更多相关《微机原理实验课设指导书11110Word格式.docx(132页珍藏版)》请在冰豆网上搜索。

微机原理实验课设指导书11110Word格式.docx

例2:

用MASM命令汇编源程序

如果MASM命令显示了类似如上的处理结果,那么,表示源文件HELLO.ASM已成功汇编,并已生了其目标文件HELLO.OBJ。

例3:

如果MASM命令显示了类似如上的处理结果,那么,表示源文件有错,没有生成其目标文件。

在本例中,显示第16行有语法错:

非法的指令操作数。

这时,要用编辑器阅读源程序的第16行,看看输入指令时是否有误。

假如源程序有许多错误,很难记住全部出错位置,用列表文件来辅助查错。

例4:

在汇编源程序的同时,生成其列表文件。

列表文件HELLO.LST是一个文本文件,可用编辑器直接阅读,并可看出其错误的位置和原因。

下面是一个列表文件的实例。

三、连接

编译之后生成的OBJ文件,是一个浮动的目标文件,是不能执行的,必须经过连接这一步骤。

连接的过程就是调用连接程序(LINK.EXE)对OBJ文件进行定位、连接,最后生成扩展名为EXE的可执行文件。

如果需要也可以生成MAP文件。

MAP文件是内存分配文件,它列出了各个逻辑段起末的参考地址和段体长度。

通常没有必要生成MAP文件。

当由源文件汇编成功后,即可用连接程序(LINK.EXE)生成其可执行文件。

例5:

查看连接程序(LINK.EXE)的具体选项。

例6:

用连接程序生成EXE执行文件。

方法1:

这种方法需要确认连接过程中的各种文件名,如果使用文件名的默认值,那么直接按“回车”键即可。

在上面四个文件名中,最重要两个文件名是:

执行文件名和库文件名。

一般情况下,无需更换最终生成的执行文件名;

如果在连接过程中需要其它的库文件,则在显示第三行提示时,输入所需要的库文件名。

若HELLO.ASM源程序中没有设置堆栈段或堆栈段定义时没有指出STACK属性,用连接程序生成EXE执行文件时,最后一行显示一个警告信息,提出本程序没有定义堆栈段。

该警告信息可以不必理会,因为该执行文件是可运行的,在操作系统装入时会自动为其添加一个默认的堆栈段。

方法2:

在文件名后面加上分号“;

”,默认使用各类文件的缺省值。

例7:

用连接程序生成COM执行文件。

按照COM文件的汇编格式设计的源程序,按以下方法生成执行文件。

四、调试和运行

连接生成的EXE文件或COM文件可以直接键入文件名运行。

若当前目录下有同名的.EXE文件和.COM文件,键入不带扩展名时,则执行.COM文件。

例8:

运行HELLO.COM文件。

使用DEBUG调试工具能装入可执行文件进行调试。

DEBUG使用说明见附录Ⅰ。

例9:

装载HELLO.EXE,反汇编后,单步执行一次。

1.2实验

实验一汇编语言程序的格式及开发过程

一、实验目的

1)熟悉并掌握汇编语言源程序的编程格式;

2)掌握命令行方式下汇编语言程序的开发过程;

3)掌握MF平台中汇编语言程序的编写、调试方法。

二、实验设备

PC机一台

三、实验内容

分别在命令行方式和MF2KP环境下编辑、汇编、连接及调试给定的五种格式的程序,运行程序并记录运行结果,通过调试工具检查指令执行后相关寄存器的内容,检查程序执行前后各变量的内容。

读懂程序。

1).EXE文件的编程格式

利用程序开发工具,通常生成.EXE结构的可执行程序。

.EXE结构有独立的代码、数据和堆栈段,还可以有多个代码段或多个数据段。

(1)简化格式

程序的功能:

计算M-N+P

.MODELSMALL

.DATA

MDB30H

NDB20H

PDB40H

.CODE

.STARTUP

MOVBL,M

MOVAL,BL

SUBAL,N

ADDAL,P

.EXIT0

END

(2)完整格式1

显示10行HELLO

DATASEGMENT

MESGDB'

HELLO!

'

0AH,0DH,'

$'

DATAENDS

STACKSEGMENTPARASTACK'

STACK'

DB100DUP(?

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

BEG:

MOVAX,STACK

MOVSS,AX

MOVSP,100

MOVAX,DATA

MOVDS,AX

MOVCX,10

LAST:

MOVAH,9

MOVDX,OFFSETMESG

INT21H

LOOPLAST

MOVAH,4CH

INT21H

CODEENDS

ENDBEG

(3)完整格式2

二进制到十六进制的转换

DATASEGMENT

BUFDW2468H

DATAENDS

MAINPROCFAR

ASSUMECS:

DATA

PUSHDS

SUBAX,AX

PUSHAX

MOVAX,DATA

MOVBX,BUF

MOVCH,4

ROTATE:

MOVCL,4

ROLBX,CL

MOVAL,BL

ANDAL,0FH

ADDAL,30H

CMPAL,3AH

JLPRINTIT

ADDAL,07H

PRINTIT:

MOVDL,AL

MOVAH,2

INT21H

DECCH

JNZROTATE

RET

MAINENDP

CODEENDS

ENDMAIN

2).COM文件的编程格式

.COM程序的所有代码、数据都在一个逻辑段内,不超过64KB。

在程序开发时,.COM文件的编程格式必须符合以下规定:

1.源程序只允许使用一个逻辑段,即代码段,不允许设置堆栈段;

2.程序使用的数据,可以集中设置在代码段的开始或末尾;

3.在代码段偏移地址(有效地址)为100H的单元,必须是程序的启动指令;

4.代码段目标块小于64KB。

按键响铃

.modeltiny

.code

.startup

movdx,offsetstring

movah,9

int21h

movah,01h

movah,02h;

响铃

movdl,07h

.exit0

stringdb‘Pressanykeytocontinue!

$’

end

(2)完整格式

统计键入字符‘0’和字符‘1’的个数。

C_SEGSEGMENT

C_SEG,DS:

C_SEG,ES:

C_SEG

ORG100H

BEGIN:

JMPSTART

MANDB?

WOMANDB?

NUMDW6

START:

MOVCX,NUM

MOVDX,0

INPUT:

MOVAH,1

CMPAL,'

1'

JZMANCNT

0'

JZWOMANCNT

JMPINPUT

MANCNT:

INCDL

JMPNEXT

WOMANCNT:

INCDH

NEXT:

LOOPINPUT

MOVMAN,DL

MOVWOMAN,DH

MOVAH,4CH

INT21H

C_SEGENDS

ENDBEGIN

四、实验步骤和要求

1)命令行方式

(1)开机启动计算机,进入DOS环境,键入F:

(CR)后,再键入CDMASM(CR),然后再键入CDBIN(CR)。

【说明:

(CR)表示回车,以下同,不再说明】

(2)键入EDIT,输入源程序。

按<

Alt>

+F,选择SAVE进行保存(扩展名为.ASM)。

+X退出编辑状态。

(3)键入MASM文件名(CR),进行汇编。

(4)键入LINK文件名(CR),进行链接,生成EXE文件。

(5)文件名(CR)执行程序。

(6)COM编程格式的文件键入LINK文件名/t(CR),进行链接,生成COM文件。

2)MF2KP环境

MF2KP使用方法见附录Ⅱ。

3)按实验报告书的要求完成实验及报告。

实验二基本结构程序设计实验

一、实验目的

1)掌握顺序、分支、循环程序结构设计的基本思想;

2)掌握转移指令的使用以及根据实际问题构成程序分支的方法;

3)掌握实现循环控制指令的使用以及根据实际问题构成循环程序结构的方法。

进行顺序、分支、循环三种基本结构的程序设计并调试、运行,要求记录调试过程并记录运行结果。

1)顺序程序设计——查表法实现一位16进制数转换为ASCII码显示。

参考程序:

.modelsmall

.stack256

.data

ASCIIdb30h,31h,32h,33h,34h,35h

db36h,37h,38h,39h

db41h,42h,43h,44h,45h,46h

Hexdb0bh

.code

movbx,offsetASCII

moval,hex

andal,0fh

xlat

movdl,al

movah,2

end

2)分支程序设计——求符号函数Y的值。

符号函数:

XDB-5

YDB?

CODESEGMENT

ASSUMEDS:

DATA,CS:

CODE

MOVAX,DATA

MOVDS,AX

CMPX,0

JGEA1

MOVY,-1

JMPEXIT

A1:

JGA2

MOVY,0

A2:

MOVY,1

EXIT:

MOVAH,4CH

INT21H

ENDSTART

程序流程图:

3)循环程序设计——冒泡法排序

假设内存中BUF单元开始有若干个单字节无符号数,要求把它们按数值大小,从小到大重新排列。

算法描述:

①排序的关键问题是进行数的比较,首先设置一个交换标志(FLAG单元),每一轮比较开始,首先令交换标志FLAG=O,然后进行若干次相邻两单元的数的比较。

每次比较之后,把小数存入低地址单元,大数存入高地址单元。

只要发生—次数据交换,就令交换标志FLAG=1,如果没有进行数据交换,则FLAG应保持不变。

第一轮比较之后,最大数存入数组的末地址单元。

②每一轮比较结束,检查交换标志位,若FLAG=1进行下一轮比较,FLAG=0表示排序结束。

③N个数,第一轮比较N-1次,第二轮比较N-2次……。

datasegment

flagdb?

bufferdB7,2,9,3,6,1,4,5,8

ctequ$-buffer

dataends

codesegment

assumecs:

code,ds:

data

main:

movax,data

movds,ax

movdi,ct-1

lop1:

movcx,di

movbx,0

movflag,0

lop2:

movaL,buffer[bx]

cmpaL,buffer[bx+1]

jnacont

movflag,1

xchgaL,buffer[bx+1]

movbuffer[bx],aL

cont:

addbx,1

looplop2

cmpflag,0

jzover

decdi

jnzlop1

over:

movax,4c00h

int21h

codeends

endmain

按实验报告书的要求完成实验及报告。

实验三综合程序设计实验

1)掌握子程序的定义、调用与返回;

2)掌握应用子程序进行程序设计的方法;

3)了解模块化程序设计方法。

子程序结构程序设计并调试、运行;

模块化程序的连接及调试运行。

1)子程序设计———数制转换

从键盘输入10个有符号十进制数转换为补码表示的二进制数值送缓冲区。

子程序完成:

输入有符号10进制数,转换为补码表示的二进制数值。

负数用“-”引导,正数直接输入或用“+”引导;

子程序用AX寄存器传递出口参数。

.modelsmall

count=10

arraydwcountdup(0)

movcx,count

movbx,offsetarray

again:

callread

mov[bx],ax

incbx

calldpcrlf

loopagain

readproc

pushbx

pushcx

pushdx

xorbx,bx

xorcx,cx

movah,1

cmpal,’+’

jzread1

cmpal,’-’

jnzread2

movcx,-1

read1:

movah,1

read2:

cmpal,’0’

jbread3

cmpal,’9’

jaread3

subal,30h

shlbx,1

movdx,bx

addbx,dx

movah,0

addbx,ax

jmpread1

read3:

cmpcx,0

jzread4

negbx

read4:

movax,bx

popdx

popcx

popbx

ret

readendp

dpcrlfproc

MOVDL,0DH

MOVAH,02

INT21H

MOVDL,0AH

RET

dpcrlfendp

2)模块化程序设计———菜单程序设计

从程序的结构形式来说,一个模块是由END语句作为结束的一个完整程序。

在多模块程序设计过程中,可对各个源程序模块单独进行汇编产生相应的各目标模块,最后再由连接程序将各目标模块连接来构成一个完整的可执行程序。

为了解决模块间的过程调用和变量引用,汇编程序提供了两个属性伪指令:

外部名引用EXTRN和全局变量说明PUBLIC。

(1)外部名引用伪指令:

EXTRN

格式:

EXTRN标号:

类型[,…]

功能:

用EXTRN伪指令说明的标号,称为外部名,它指示在本模块中使用该标号,但是这个标号的定义是在要连接的其它模块中进行的。

这个标号可以是过程名,也可以是变量名。

类型则是指标号的类型。

一般都放在模块的最前面。

用EXTRN伪指令说明的外部名,必须在另一个模块中用PUBLIC伪指令定义为全局的变量或过程名。

(2)全局变量说明伪指令:

PUBLIC

PUBLIC标号[,…]

在一个模块中只有用PUBLIC说明的标号,才能够被其它模块做为外部名加以引用。

该名字必须在本模块中有定义。

PUBLIC语句可以在模块中的任何一行出现。

菜单程序设计的菜单界面如下:

它有三个选择项,用户键入:

1——在屏幕左上角显示一串字符HELLO

2——在屏幕左上角显示一串字符END

3——返回DOS

设计思路:

本菜单程序分三个模块实现

①主模块(文件名MAIN.ASM)

主模块的功能是在屏幕中央显示菜单界面,并且接受用户选择。

如果用户按下数字键l,即转向第一个子模块的入口SS1;

如果用户按下数字键2,即转向第一个子模块的入口SS2;

如果用户按下数字键3,返回DOS。

②第一个子模块文件名SUB1.ASM

该子模块的功能是:

从标号SSl入口,清屏幕,并且在左上角显示一串字符HELLO;

用户键入任意键后,转主模块标号BEG,重新显示菜单界面。

③第二个子模块文件名SUB2.ASM

从标号SS2入口,清屏幕,并且在左上角显示一串字符END;

FILENAMEMAIN.ASM

PUBLICAGAIN,MESG1,MESG2,MESG

EXTRNSS1:

FAR,SS2:

FAR

DATASEGMENT;

定义数据段

MESG1DB'

HELLO'

0DH,0AH,'

MESG2DB'

END'

MESGDB10DUP(0AH),'

Pleasestrikeanykey$'

N=25

TOPDB5DUP(0AH)

DBN+6DUP('

'

),'

MAINMENU'

0DH,0AH

DBNDUP('

---------------------'

|1:

DISPLAYHELLO|'

|2:

DISPLAYEND|'

|3:

RETURNDOS|'

DBN+3DUP('

CHOICE(1,2,3):

$'

DATAENDS;

数据段结束

CODESEGMENTBYTEPUBLIC'

CODE'

ASSUMECS:

MOVDS,AX

AGAIN:

MOVAX,2

INT10H

MOVAH,9

MOVDX,OFFSETTOP

CMPAL,'

JNZNEXT1

JMPSS1

NEXT1:

2'

JNZNEXT2

JMPSS2

NEXT2:

3'

JNZAGAIN

ENDBEG

------------------------------------------------------

FILENAMESUB1.ASM

PUBLICSS1

EXTRNMESG1:

BYTE,NEXT:

NEAR

CODE

SS1:

MOVAX,2

MOVDX,OFFSETMESG1

JMPNEXT

CODEENDS

END

-----------------------------------------------------

FILNAMESUB2.ASM

PUBLICSS2,NEXT

EXTRNMESG2:

BYTE,MESG:

BYTE

EXTRNAGAIN:

SS2:

INT10H

MOVDX,OFFSETMESG2

MOVDX,OFFSETMESG

MOVAH,1

INT16H

JZLAST

MOVAH,0CH

JMPAGAIN

模块化程序编译、连接说明:

分别汇编各模块生成MAIN.OBJ、SUB1.OBJ、SUB2.OBJ后,以“+”连接各模块进行连接,如:

LIN

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

当前位置:首页 > 高等教育 > 军事

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

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