《汇编语言程序设计》实验教学大纲.docx

上传人:b****6 文档编号:8215420 上传时间:2023-01-29 格式:DOCX 页数:21 大小:52.54KB
下载 相关 举报
《汇编语言程序设计》实验教学大纲.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

《汇编语言程序设计》实验教学大纲

《汇编语言程序设计》实验教学大纲

课程号:

080503101301课程类别:

专业基础课

适用专业:

计算机科学与技术专业

课程总学时:

34实验学时:

17

大纲编写人:

\\\编写时间:

2010年6月18日

【实验目标要求】

《汇编语言程序设计》是计算机科学与技术专业必修的专业基础课程。

汇编语言程序设计实验的目标是学习汇编语言程序设计的基本方法和技能,熟练掌握用汇编语言设计、编写、调试和运行程序的方法,汇编语言程序实验的内容与计算机硬件特性联系紧密。

通过上机实验的学习,使学生不仅能加深理解和巩固理论课所学的知识,而且还能了解计算机的底层软件的工作过程,为今后学习后续课程打好良好的基础。

【实验学习要求】

认真阅读《IBM-PC汇编语言程序设计》教材中与实验相关的章节内容,提前做好实验预习,做到在每个实验前明确实验目的、掌握实验的基本内容及操作方法;在实验中正确使用实验设备,认真观察、分析实验结果;实验后要根据要求做好总结,上交实验报告。

具体要求如下:

1.上机前,要作好充分准备,包括程序框图、源程序清单、调试步骤、测试方法、对运行结果的分析等。

2.上机时,要熟悉与实验有关的系统软件(如编辑程序、汇编程序、连接程序、调试程序)的使用方法;在程序调试过程中,有意识的学习及掌握Debug的各种操作命令,以便掌握程序的调试方法及技巧;程序调试完后,须由实验辅导教师在机器上检查运行结果。

3.上机后,应写出实验报告,及时总结。

4.遵守实验室的规章制度,爱护实验设备。

 

【实验计划】

实验序号

实验项目内容

学时

实验一

IBM-PC寻址方式及DEBUG的使用

3

实验二

熟悉指令系统

3

实验三

建立运行汇编语言程序

3

实验四

循环程序设计

2

实验五

分支程序设计

2

实验六

子程序设计

2

实验七

I/O程序设计

2

【实验教材及主要参考资料】

教材:

1.《IBM-PC汇编语言程序设计(第二版)》,沈美明、温冬蝉编著,清华大学出版社,2001.8。

2.《IBM-PC汇编语言程序设计实验教程》,沈美明、温冬蝉、张赤红编著,清华大学出版社,2008.2。

 

【实验任务】

实验一、IBM-PC寻址方式及DEBUG的使用

实验目的:

1.熟悉DEBUG的功能,运行并掌握其常用命令。

2.使用DEBUG,通过数据传送指令观察IBM-PC机各种寻址方式的区别。

实验内容:

1.DEBUG的加载及其常用命令(A、U、R、D、E、T、P、G、Q)的使用情况。

(注意:

微机进入DEBUG状态下之后,一切立即数和地址数据均被默认为十六进制数,在输入时数的后面不加后缀“H”。

2.将数据段中的两个数求和,结果保存在数据段中。

源程序、机器语言程序如下:

CS:

0100Al0000MOVAX,[0000]

CS:

010303060200ADDAX,[0002]

CS;0107A30400MOV[0004],AX

CS:

010ACBRETF

数据段内容如下:

DS:

000023012500;两个已知数

3.在Debug中编制简单的汇编程序片断,并调试运行,得出结果。

实验主要步骤:

1.在DOS或Windows的命令行窗口执行命令Debug.exe,进入Debug程序环境,熟悉Debug各个命令的用法。

2.实验步骤

(1)用E命令键人上述机器语言程序和数据段的初值。

—EDS:

00023012500

—EDS:

0062A2A2A(2A为*,是为便于查看数据段内容而设置)

—ECS:

100A1000003060200

—ECS:

107A30400CB

(2)用D命令检查数据段、代码段内容。

—DDS:

0

—DCS:

100

(3)用T命令逐条执行上述程序,注意观察每条指令执行后相应寄存器的变化。

(4)用U命令反汇编本程序。

—U10010A

(5)用R命令修改IP的内容为0100重新执行上述程序。

—RIP

显示:

IP010A

0100

(6)用G命令运行程序。

—G=CS:

0100107

观察:

IP=AX=

—G=CS:

010010A

观察:

IP=AX=

3.自己试着写段程序:

-A100↙

16C6:

0100DB‘1234567890‘↙

16C6:

010ACLD↙

16C6:

010BMOVSI,100↙

16C6:

010EMOVDI,200↙

16C6:

0111MOVCX,A↙

16C6:

0114REPMOVSB↙

16C6:

0116↙

-G=10A116↙;运行上述程序(起始地址10AH,结束地址116H)。

-D100LA↙;显示DS:

100开始10个字节内容

16C6:

01003132333435363738-3930‘1234567890

-DES:

200LA↙显示ES:

100开始10个字节内容

16C6:

02003132333435363738-3930‘1234567890

4.写出实验报告。

实验二、熟悉指令系统

实验目的:

1.熟悉8088/8086的指令书写格式、功能。

2.能熟练运用数据传递、算术、逻辑三类指令。

实验内容:

1.用DEBUG调试程序功能编程序计算(W—(X×Y+Z—540))/X。

其中X、Y、Z、W均为16位带符号数,要求上式计算结果的商存人AX寄存器中,余数存人DX寄存器。

掌握算术指令的用法。

2.用DEBUG编程并查看逻辑指令的运行结果,掌握逻辑指令的用法。

3.熟悉其它几组指令的功能和用法,并区分字、字节操作。

实验主要步骤:

1.预先编制程序片段,实现(W—(X×Y+Z—540))/X,将计算结果的商存人AX寄存器中,余数存人DX寄存器。

参考程序代码如下:

DATASEGMENT

XDW1200H

YDW0034H

ZDW0F045H

WDW034AH

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,X

IMULY

MOVCX,AX

MOVBX,DX

MOVAX,Z

CWD

ADDCX,AX

ADCBX,DX

SUBCX,540

SBBBX,0

MOVAX,W

CWD

SUBAX,CX

SBBDX,BX

IDIVX

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

2.可以在Debug程序中使用E命令为变量X、Y、Z、W设置初值。

3.使用A命令汇编程序片段,并用G或T命令执行,用R或D命令查看结果。

4.使用A命令汇编几条逻辑指令,并运行,查看结果。

5.写出实验报告。

 

实验三、建立运行汇编语言程序

实验目的:

1.掌握汇编语言程序格式及其它命令的作用。

2.掌握汇编、连接、运行汇编程序的全过程,并能检查修攙程序简单错误。

实验内容:

1.编写程序,比较两个字符串STRINGl和STRING2所含的字符是否相同。

若相同,则显示'Match';否则,显示'Nomatch'。

2.编辑、汇编、连接这个汇编语言源程序,形成.EXE文件。

3.通过DEBUG调试运行该可执行文件,查看运行结果。

实验主要步骤:

1.根据要求编制汇编源程序。

参考程序如下:

DATASEGMENT

STRINGlDB‘Movethecursorbackward.’

STRING2DB‘Movethecursorbackward.’

MESSlDB‘Match.’,13,10,‘$’

MESS2DB‘NOMatch!

’,13,10,‘$’

DATAENDS

PROGSEGMENT

ASSUMECS:

PROG,DS:

DATA,ES:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVES,AX

LEASI,STRINGl

LEADI,STRING2

CLD

MOVCX,25

REPZCMPSB

JZMATCH

LEADX,MESS2

JMPSHORTDISP

MATCH:

LEADX,MESSl

DISP:

MOVAH,09

1NT21H

MOVAH,4CH

INT21H

PROGENDS

ENDSTART

2.使用记事本或其它字处理软件(Edit.exe)编辑该源文件。

3.使用Masm、Link程序汇编、连接该文件,形成可执行的.EXE文件。

参考步骤如下:

(1)调用全屏幕编辑程序EDlT建立ASM文件。

C>EDIT

输入实验内容1的源程序并以SAMPLE.ASM为文件名将文件存盘。

(2)用汇编程序MASM对源文件SAMPLE.ASM汇编并产生目标文件SAMPLE.OBJ。

C>MASMSAMPLE

如汇编指示有错误,则需重新调用编辑程序修改程序中的错误,直至汇编通过为止。

(3)用连接程序LINK产生执行文件SAMPLE.EXE。

C>LINKSAMPLE

(4)执行程序。

可直接从DOS状态执行程序。

C>SAMPLE

显示器上显示出程序的运行结果。

Match.

4.也可以使用Debug调试运行这个.EXE文件,并查看运行结果。

对实验内容修改两个字符串的内容,使它们互不相同,再观察程序的运行结果。

5.写出实验报告。

 

实验四、循环程序设计

实验目的:

1.加深对循环程序的理解。

2.能构造出正确的循环结构并能实现较复杂的算法。

实验内容:

1.编制程序,要求如下:

从键盘接收一个四位的16进制数,在终端上显示与它等值的二进制数。

实验主要步骤:

1.根据要求,画出程序框图,写出汇编源代码。

参考程序如下:

Begin:

MOVBX,0;用于存放四位的16进制数

MOVCH,4

MOVCL,4

INPUT:

SHLBX,CL;将前面输入的数左移4位

MOVAH,1;从键盘取数

INT21H

CMPAL,30H;<0吗?

JBINPUT;不是"0~F"的数重新输入

CMPAL,39H;是"0~9"吗?

JAAF;不是,转"A~F"的处理

ANDAL,0FH;转换为:

0000B~1001B

JMPBINARY

AF:

ANDAL,11011111B;转换为大写字母

CMPAL,41H;又

JBINPUT;不是"A~F"的数重新输入

CMPAL,46H;>F吗?

JAINPUT;不是"A~F"的数重新输入

ANDAL,0FH;转换为1010B~1111B

ADDAL,9

BINARY:

ORBL,AL;将键盘输入的数进行组合

DECCH

JNZINPUT

MOVCX,16;将16位二进制数一位位地转换成ASCII码显示

DISP:

MOVDL,0

ROLBX,1

RCLDL,1

ORDL,30H

MOVAH,2;进行显示

INT21H

LOOPDISP

STOP:

RET

2.上机编辑源程序,并汇编、连接、调试运行,查看结果。

3.写出实验报告。

 

实验五、分支程序设计

实验目的:

1.加深对分支程序的理解,掌握分支程序的结构。

熟悉运算类指令对标志位的状态影响以及标志位状态的表示方法;掌握条件转移、无条件转移指令的使用方法。

2.掌握分支程序设计、编写、调试和运行的方法。

实验内容:

1.试编写小程序:

对键盘输入的小写字母用大写字母显示出来。

参考程序段如下:

Begin:

MOVAH,1;从键盘输入一个字符

INT21H

CMPAL,'a';输入字符<'a'吗?

JBSTOP

CMPAL,'z';输入字符>'z'吗?

JASTOP

SUBAL,20H;转换为大写字母或ANDAL,11011111B也可以

MOVDL,AL;显示一个字符

MOVAH,2

INT21H

JMPBegin

STOP:

RET

2.编制程序统计学生成绩。

要求如下:

设有10个学生的成绩分别为56、69、84、82、73、88、99、63、100和80分。

试编制程序分别统计低于60分、60~69分、70~79分、80~89分、90~99分及100分的人数存放到s5、s6、s7、s8、s9及s10单元中。

这一题目的算法很简单,成绩分等部分采用分支结构,统计所有成绩则用循环结构完成。

 

实验主要步骤:

1.根据要求,画出程序框图如下图所示,然后写出汇编源代码。

开始

初始化计数单元

初始化循环计数值

初始化首地址

取一个成绩

Y

<60?

S5+1

N

Y

<70?

S6+1

N

Y

<80?

S7+1S7+1

N

Y

<90?

S8+1S8+1

N

N

=100?

S9+1

Y

S10+1

修改地址

N

循环结束?

Y

结束

程序框图

2.上机编辑源程序,并汇编、连接、调试运行,查看结果。

参考程序如下:

;PROGRAMTITLEGOESHERE――result

;************************************

datareasegment;definedatasegment

gradedw56,69,84,82,73,88,99,63,100,80

s5dw0

s6dw0

s7dw0

s8dw0

s9dw0

s10dw0

datareaends

;************************************

prognamsegment;definecodesegment

;----------------------------

mainprocfar;mainpartofprogram

assumecs:

prognam,ds:

datarea

start:

;startingexecutionaddress

;setupstackforreturn

pushds;saveolddatasegment

subax,ax;putzeroinAX

pushax;saveitonstack

;setDSregistertocurrentdatasegment

movax,datarea;datareasegmentaddr

movds,ax;intoDSregister

;MAINPARTOFPROGRAMGOESHERE

movs5,0;initializecounter

movs6,0

movs7,0

movs8,0

movs9,0

movs10,0

movcx,10;initializeloopcountvalue

movbx,offsetgrade;initializefirstaddr

compare:

movax,[bx];getaresult

cmpax,60;<60?

jlfive

cmpax,70;<70?

jlsix

cmpax,80;<80?

jlseven

cmpax,90;<90?

jleight

cmpax,100;=100?

jnenine

incs10

jmpshortchange-addr

nine:

incs9

jmpshortchange-addr

eight:

incs8

jmpshortchange-addr

seven:

incs7

jmpshortchange-addr

six:

incs6

jmpshortchange-addr

five:

incs5

change-addr:

addbx,2

loopcompare

ret;returntoDOS

mainendp;endofmainpartofprogram

;------------------------------

prognamends

;***************************

endstart;endassembly

3.写出实验报告。

 

实验六、子程序设计

实验目的:

1.掌握子程序设计方法,能合理划分子程序。

2.掌握汇编子程序的定义、调用、返回、参数传递等有关问题的实现,以及运行过程中的堆栈、标志位变化情况。

实验内容:

1.编写子程序嵌套结构的程序,把整数分别用二进制和八进制形式显示出来。

主程序BANDO:

把整数变量VAL1存入堆栈,并调用子程序PAIRS;

子程序PAIRS:

从堆栈中取出VAL1,调用二进制显示子程序OUTBIN,显示出与其等效的二进制数;输出8个空格;调用八进制显示子程序OUTOCT显示与其等效的八进制数;调用输出回车及换行符子程序。

实验主要步骤:

1.画出程序流程图,合理划分子程序,正确区分主程序与各子程序的功能与关系。

2.编制主程序与子程序的源代码。

参考程序如下:

DATASEGMENT

VAL1DW?

CRLFDW0DH,0AH,'$'

DATAENDS

CODESEGMENT

BANDOPROCFAR;主程序BANDO

ASSUMECS:

CODE,DS:

DATA

START:

PUSHDS;设置返回DOS

SUBAX,AX

PUSHAX

MOVAX,DATA

MOVDS,AX;给DS赋值

PUSHVAL1

CALLPAIRS

RET

BANDOENDP

PARISPROCNEAR;PARIS子程序

PUSHBP

MOVBP,SP

PUSHBX

MOVBX,[BP+4];从堆栈中取出VAL1

CALLOUTBIN;调用二进制显示子程序

MOVCX,8;显示8个空格

SPACE:

MOVDL,''

MOVAH,2

INT21H

LOOPSPACE

CALLOUTOCT;调用八进制显示子程序

CALLDISP_CRLF

POPBX

POPBP

RET2

PARISENDP

OUTBINPROCNEAR;二进制显示子程序

PUSHBX

MOVCX,16

ONEBIT:

ROLBX,1

MOVDX,BX

ANDDX,1

ORDL,30H;转换为ASCII码

MOVAH,2

INT21H

LOOPONEBIT

POPBX

RET

OUTBINENDP

OUTOCTPROCNEAR;八进制显示子程序

ROLBX,1;16位二进制数包含6位八进制数,最高位仅1位

MOVDX,BX

ANDDX,1

ORDL,30H;转换为ASCII码

MOVAH,2

INT21H

MOVCX,5;余下还有5位八进制数

NEXT:

PUSHCX

MOVCL,3;1位八进制数包含3位二进制数

ROLBX,CL

MOVDX,BX

ANDDX,07H

ORDL,30H;转换为ASCII码

MOVAH,2

INT21H

POPCX

LOOPNEXT

RET

OUTOCTENDP

DISP_CRLFPROCNEAR;显示回车换行子程序

LEADX,CRLF

MOVAH,09H

INT21H

RET

DISP_CRLF

CODEENDS

ENDSTART

3.上机编辑源文件,并汇编、连接、调试运行,随时查看堆栈的变化。

4.编写实验报告。

 

实验七、I/O程序设计

实验目的:

1.熟悉BIOS、DOS中断调用情况,学会如何利用系统功能控制外设的I/O操作

实验内容:

1.分别利用BIOS、DOS中断服务,编程实现对键盘、显示器等的控制。

2.实验编程:

在AX中存放着压缩BCD的十进制数,编程实现把AX中的四位十进制数按照从高位到低位的顺序在屏幕上显示出来(例如若AX=0010001101000101B,则在屏幕上显示“2345”)。

实验主要步骤:

1.根据要求编写汇编源代码,核心代码参考如下:

MOVBX,AX

MOVCL,4

SHRAH,CL

ADDAH,30H

MOVDL,AH

MOVAH,2

INT21H‘显示“2”

MOVAH,BH

ANDAH,0FH

ADDAH,30H

MOVDL,AH

MOVAH,2

INT21H‘显示“3”

MOVAL,BL

MOVCL,4

SHRAL,CL

ADDAL,30H

MOVDL,AL

MOVAH,2

INT21H‘显示“4”

MOVAL,BL

ANDAL,0FH

ADDAL,30H

MOVDL,AL

MOVAH,2

NT21H‘显示“5”

2.上机编辑源文件,汇编、连接、调试运行,查看结果。

3.编写实验报告。

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

当前位置:首页 > 解决方案 > 营销活动策划

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

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