汇编语言程序设计的实验环境及上机步骤文档格式.docx

上传人:b****6 文档编号:16248461 上传时间:2022-11-21 格式:DOCX 页数:38 大小:156.14KB
下载 相关 举报
汇编语言程序设计的实验环境及上机步骤文档格式.docx_第1页
第1页 / 共38页
汇编语言程序设计的实验环境及上机步骤文档格式.docx_第2页
第2页 / 共38页
汇编语言程序设计的实验环境及上机步骤文档格式.docx_第3页
第3页 / 共38页
汇编语言程序设计的实验环境及上机步骤文档格式.docx_第4页
第4页 / 共38页
汇编语言程序设计的实验环境及上机步骤文档格式.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

汇编语言程序设计的实验环境及上机步骤文档格式.docx

《汇编语言程序设计的实验环境及上机步骤文档格式.docx》由会员分享,可在线阅读,更多相关《汇编语言程序设计的实验环境及上机步骤文档格式.docx(38页珍藏版)》请在冰豆网上搜索。

汇编语言程序设计的实验环境及上机步骤文档格式.docx

方法一:

在Windows中操作

用资源管理器打开源程序目录C:

\ASM,把HELLO.ASM拖到MASM.EXE程序图标上。

方法二:

在DOS命令提示符窗口中操作

选择“开始”→“程序”→“附件”→“命令提示符”,打开DOS命令提示符窗口,然后用CD命令转到源程序目录下,接着输入MASM命令:

I:

>

C:

<

回车>

CD\ASM<

\ASM>

MASMHELLO.ASM<

操作时的屏幕显示如图2所示。

图2在DOS命令提示符窗口中进行汇编

不管用以上二个方法中的哪个方法,进入MASM程序后,都会提示让你输入目标文件名(Objectfilename),并在方括号中显示默认的目标文件名,建议输入目标文件的完整路径名,如:

\ASM\HELLO.OBJ〈回车〉。

后面的两个提示为可选项,直接按回车。

注意,若打开MASM程序时未给出源程序名,则MASM程序会首先提示让你输入源程序文件名(Sourcefilename),此时输入源程序文件名HELLO.ASM并回车,然后进行的操作与上面完全相同。

图3有错误的汇编过程例子

如果没有错误,MASM就会在当前目录下建立一个HELLO.OBJ文件(名字与源文件名相同,只是扩展名不同)。

如果源文件有错误,MASM会指出错误的行号和错误的原因。

图3是在汇编过程中检查出两个错误的例子。

在这个例子中,可以看到源程序的错误类型有两类:

警告错误(WarningErrors)。

警告错误不影响程序的运行,但可能会得出错误的结果。

此例中无警告错误。

严重错误(SevereErrors)。

对于严重错误,MASM将无法生成OBJ文件。

此例中有两个严重错误。

在错误信息中,园括号里的数字为有错误的行号(在此例中,两个错误分别出现在第6行和第9行),后面给出了错误类型及具体错误原因。

如果出现了严重错误,你必须重新进入EDIT编辑器,根据错误的行号和错误原因来改正源程序中的错误,直到汇编没有错为止。

注意,汇编程序只能指出程序的语法错误,而无法指出程序逻辑的错误。

4.用LINK.EXE产生EXE可执行文件

在上一步骤中,汇编程序产生的是二进制目标文件(OBJ文件),并不是可执行文件,要想使我们编制的程序能够运行,还必须用连接程序(LINK.EXE)把OBJ文件转换为可执行的EXE文件。

\ASM,把HELLO.OBJ拖到LINK.EXE程序图标上。

选择“开始”→“程序”→“附件”→“命令提示符”,打开DOS命令提示符窗口,然后用CD命令转到源程序目录下,接着输入LINK命令:

LINKHELLO.OBJ<

操作时的屏幕显示如图4所示。

图4把OBJ文件连接成可执行文件

不管用以上二个方法中的哪个方法,进入LINK程序后,都会提示让你输入可执行文件名(Runfile),并在方括号中显示默认的可执行文件名,建议输入可执行文件的完整路径名,如:

\ASM\HELLO.EXE〈回车〉。

注意,若打开LINK程序时未给出OBJ文件名,则LINK程序会首先提示让你输入OBJ文件名(ObjectModules),此时输入OBJ文件名HELLO.OBJ并回车,然后进行的操作与上面完全相同。

如果没有错误,LINK就会建立一个HELLO.EXE文件。

如果OBJ文件有错误,LINK会指出错误的原因。

对于无堆栈警告(Warning:

NOSTACKsegment)信息,可以不予理睬,它不影响程序的执行。

如链接时有其它错误。

须检查修改源程序,重新汇编、连接,直到正确。

5.执行程序

建立了HELLO.EXE文件后,就可以直接在DOS下运行此程序,如下所示:

HELLO〈回车〉

程序运行结束后,返回DOS。

如果运行结果正确,那么程序运行结束时结果会直接显示在屏幕上。

如果程序不显示结果,我们如何知道程序是否正确呢?

例如,这里的HELLO.EXE程序并未显示出结果,所以我们不知道程序执行的结果是否正确。

这时,我们就要使用TD.EXE调试工具来查看运行结果。

此外,大部分程序必须经过调试阶段才能纠正程序执行中的错误,调试程序时也要使用TD.EXE。

有关如何使用TD.EXE程序的简要说明请读者参阅TD简要使用说明和TD使用入门的10个HowTo。

实验一数据传送

一、 

实验目的

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

2.2.利用TurboDebugger调试工具来调试汇编语言程序。

二、 

实验预习要求

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

2.预习TurboDebugger的使用方法(见附录二):

a)a) 

如何启动TurboDebugger;

b)b) 

如何在各窗口之间切换;

c)c) 

如何查看或修改寄存器、状态标志和存储单元的内容;

d)d) 

如何输入程序段;

e)e) 

如何单步运行程序段和用设置断点的方法运行程序段。

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

三、 

实验任务

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

练习程序段如下:

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

出栈程序段请自行编写(用不同的出栈顺序)。

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

(1)MOV[BX],[SI]

(2)MOVAH,BX

(3)MOVAX,[SI][DI]

(4)MOVBYTEPTR[BX],2000H

(5)MOVCS,AX

(6)MOVDS,2000H

步骤:

(1).编辑语句:

发现只有第五个指令没有发现错误,但并不代表它没有错,经过以下验证可以发现第五个指令也有错误:

选择忽略后发现运行结果错误,并未完成指令:

原因:

CS是代码段寄存器,CS如果被修改程序就无法执行。

所以无法改正。

(2).改正这些错误指令:

(3).运行:

4.设置各寄存器及存储单元的内容如下:

(BX)=0010H,(SI)=0001H

(10010H)=12H,(10011H)=34H,(10012H)=56H,(10013H)=78H

(10120H)=0ABH,(10121H)=0CDH,(10122H)=0EFH

说明下列各条指令执行完后AX寄存器中的内容,并上机验证。

(1)MOVAX,1200H

(2)MOVAX,BX

(3)MOVAX,[0120H]

(4)MOVAX,[BX]

(5)MOVAX,0110H[BX]

(6)MOVAX,[BX][SI]

(7)MOVAX,0110H[BX][SI]

5.将DS:

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

2020H单元中存放。

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

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

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

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

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

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

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

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

图1.5第7题图

四、 

实验报告要求

1.写明本次实验内容和实验步骤。

2.整理出运行正确的各题源程序段和运行结果。

3.写出第3题中改正后的正确指令。

4.小结TurboDebugger的使用方法。

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

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

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

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

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

1. 

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

表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

程序段2:

MOVAX,0A0AH

ADDAX,0FFFFH

MOVCX,0FF00H

ADCAX,CX

SUBAX,AX

INCAX

ORCX,0FFH

ANDCX,0F0FH

MOV[10H],CX

程序段3:

MOVBL,25H

MOVBYTEPTR[10H],4

MOVAL,[10H]

MULBL

程序段4:

MOVWORDPTR[10H],80H

MOVBL,4

MOVAX,[10H]

DIVBL

程序段5:

MOVAX,0

DECAX

ADDAX,3FFFH

ADDAX,AX

NOTAX

SUBAX,3

ORAX,0FBFDH

ANDAX,0AFCFH

SHLAX,1

RCLAX,1

实验三串操作

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

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

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

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

CLD

MOVDI,1000H

MOVAX,55AAH

MOVCX,10H

REPSTOSW

上述程序段执行后:

(1)从DS:

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

(2)(DI)=?

(CX)=?

,并解释其原因。

2. 

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

MOVSI,1000H

MOVDI,2000H

MOVCX,20H

REPMOVSB

程序段执行后:

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

(2)(SI)=?

(DI)=?

,并分析之。

3. 

在以上两题的基础上,再输入以下三个程序段并依次运行之。

REPZCMPSW

程序段1执行后:

(1)ZF=?

根据ZF的状态,你认为两个串是否比较完了?

(2)(SI)=?

MOV[2008H],4455H

程序段2执行后:

MOVAX,4455H

REPNZSCASW

程序段3执行后:

根据ZF的状态,你认为在串中是否找到了数据4455H?

4. 

从DS:

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

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

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

1.整理出完整的实验程序段和运行结果,对结果进行分析。

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

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

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

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

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

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

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

输入以下程序段并用F8键单步运行,执行INT21H指令时,在键盘上按“5”键。

MOVAH,1

INT21H

(1)运行结束后,(AL)=?

它是哪一个键的ASCII码?

(2)重复运行以上程序段,并分别用“A”、“B”、“C”、“D”键代替“5”键,观察运行结果有何变化?

2.在DS:

1000H开始的内存区域设置如下键盘缓冲区:

DS:

1000H5,0,0,0,0,0,0

然后输入以下程序段并用F8键单步运行,执行INT21H指令时,在键盘上键入“5”、“4”、“3”、“2”、“1”、〈回车〉这六个键。

LEADX,[1000H]

MOVAH,0AH

程序段运行完后,检查DS:

1000H开始的内存区域:

(1)DS:

1001H单元的内容是什么?

它表示了什么含义?

(2)从DS:

1002H开始的内存区域中的内容是什么?

其中是否有字符“1”的ASCII码?

为什么?

3.输入以下程序段并运行之。

MOVDL,‘A’

MOVAH,2

(1) 

观察屏幕上的输出,是否显示了“A”字符?

(2) 

分别用“#”、“X”、“Y”、“$”、“?

”代替程序段中的“A”字符,观察屏幕上的输出有何变化。

(3) 

分别用0DH、0AH代替程序段中的“A”字符,观察屏幕上的输出有何变化。

(4) 

用07H代替程序段中的“A”字符,观察屏幕上有无输出?

计算机内的扬声器是否发出“哔”的声音?

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

上机验证之。

5. 

按6行×

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

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

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

提示:

程序段包括两层循环,内循环次数为16,每次内循环显示一个字符和一个空格字符;

外循环次数为6,每个外循环显示一行字符并显示一个回车符(0DH)和一个换行符(0AH)。

1.整理出运行完整的实验程序和运行结果。

2.回答题目中的问题。

3.说明系统功能调用的10号功能对键盘缓冲区格式上有何要求。

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

分别放在什么寄存器中?

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

实验五直线程序设计

1、学习8086汇编语言程序的基本结构和程序设计的基本方法。

2、熟悉在PC机上建立、汇编、链接、调试和运行8086汇编语言程序的全过程。

1、 

认真阅读预备知识中汇编语言的上机步骤的说明,熟悉汇编程序的建立、汇编、连接、执行、调试的全过程。

2、 

复习BCD码运算的调整指令。

3、根据本实验的编程提示和程序框架预先编写汇编语言源程序。

4、有兴趣的同学请自行编写出后面的实验习题。

直线程序简介

直线程序是控制流仅有一个走向的程序,它主要用于解决一些无需进行判断分支,也无需循环简单的简单问题。

实验内容

设a、b、c、d四个数分别以压缩的BCD码形式存放在内存NUM开始的四个单元,计算(a+b)-(c+d),然后把结果显示在屏幕上。

改变a,b,c,d内容,然后重新汇编、连接并运行程序,检查其结果与手工计算是否相符。

下面是几组实验用的数据:

1、a=09,b=16,c=04,d=17

2、a=38,b=41,c=29,d=34

3、a=70,b=23,c=42,d=41

4、a=63,b=73,c=62,d=50

五、 

调试提示

源程序编制完后,先静态检查,无误后,对源程序进行汇编连接,生成可执行文件。

先将程序在DOS下运行,如正确,则改变a,b,c,d的值反复验证,如不正确,则将程序调入TD中进行调试。

六、 

实验习题

若改变a,b,c,d的值如下:

1、a=90,b=34,c=33,d=44

2、a=12,b=19,c=25,d=33

观察结果,改进程序使结果正确。

七、 

整理出完整的实验程序和使用不同实验数据时的运行结果,对结果进行解释。

(选做)完成实验习题。

3. 

简要说明汇编语言程序设计的步骤和每个步骤使用哪种软件工具,生成什么类型的文件。

实验六分支及循环程序设计

1、1、学习提示信息的显示及键盘输入字符的方法。

2、2、掌握分支程序和循环程序的设计方法。

1、1、复习比较指令、转移指令、循环指令的用法。

2、根据编程提示,编出汇编语言源程序。

3、有兴趣的同学请编写出实验习题中的程序。

分支程序和循环程序简介

分支程序是根据不同条件执行不同处理过程的程序。

分支程序的结构有两种:

—种是二分支,—种是多分支。

它们的共同特点是在满足某一条件时,将执行多个分支中的某—分支。

循环程序

在屏幕上显示提示信息“Pleaseinput10numbers:

”,提示用户输入10个数(数的范围在0~99之间),然后从键盘上读入这10个数。

接着对这10个数从小到大进行排序,并统计0~59、60~79、80~99的数各有多少。

最后在屏幕上显示排序后的数(每个数之间用逗号分隔)并显示统计的结果。

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

当前位置:首页 > 小学教育 > 英语

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

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