汇编语言实验教案.docx
- 文档编号:5506567
- 上传时间:2022-12-17
- 格式:DOCX
- 页数:20
- 大小:21.63KB
汇编语言实验教案.docx
《汇编语言实验教案.docx》由会员分享,可在线阅读,更多相关《汇编语言实验教案.docx(20页珍藏版)》请在冰豆网上搜索。
汇编语言实验教案
《汇编语言程序设计》
实验教案
目录
实验一、汇编语言上机过程和Debug常用调试命令……………..…..……3
实验二、循环程序设计1…………………………………………………….………..…5
实验三、循环程序设计2…………………………………………..………..…………...7
实验四、分支程序设计……………………………………..……………………..…….10
实验五、子程序设计………………………………………..…………………….……….12
实验一汇编语言上机过程和Debug常用调试命令
一.实验目的:
学习程序设计的基本方法和技能,熟练掌握用汇编语言设计、编写、调试和运行程序的方法。
二.实验题目:
熟悉与实验有关的系统软件(如编辑程序、汇编程序、连接程序和调试程序等)的使用方法。
在调试过程中,学习及掌握debug程序的各种操作命令。
三.问题描述:
试编写一程序:
比较两个字符串string1和string2所含的字符是否相同,若相同则显示‘match’;否则,显示‘nomatch’。
四.方法说明:
a)使用ws、tc或EDIT编辑程序来建立源文件,然后存盘,使系统返回DOS。
b)用汇编程序masm(或asm)对源文件汇编产生目标文件obj
如:
汇编指示出错则需重新调用编辑程序修改错误,直至汇编通过为止。
c)用连接程序link产生执行文件EXE.
d)执行程序,可直接从DOS执行程序。
e)使用debug程序调试程序的方法。
五.实验步骤:
1.调用字处理程序EDIT建立文件
d:
\edit文件名。
Asm
datareasegment
string1db‘movethecursorbackward.’
string2db‘movethecursorbackward.’
mess1db‘Match..’,13,10,’$’
mess2db‘Nomatch!
..’,13,10,’$’
datareaends
prognamsegment
mainprocfar
assumecs:
prognam,ds:
datarea,es:
datarea
start:
pushds
subax,ax
pushax
movax,datarea
movds,ax
moves,ax
leasi,string1
leadi,string2
cld
movcx,25
repzcmpsb
jzmatch
leadx,mess2
jmpshortdisp
match:
leadx,mess1
disp:
movah,09
int21h
ret
mainendp
prognamends
endstart
2.对源文件汇编产生目标文件obj
D:
\masm文件名。
Asm
3.用连接程序link产生执行文件exe
D:
\link文件名。
Obj
4.执行程序
D:
\文件名
5.使用debug程序调试程序的方法。
d>debug文件名.exe
_
1.用G命令运行程序
2.用U命令显示程序
3.学会设置断点。
4.学会查看数据段的内容情况
5.用E命令修改数据区的字符串。
6.用A命令把数据区的内容恢复原状
7.T命令逐条跟踪程序的执行。
8.学会使用F命令、R命令、Q命令等等。
六、选作题目:
将以buf1为起始地址的字节存储区中的内容传送到以buf2为起始地址的字节存储区中
七、重点和难点:
(1)用汇编语言设计、编写、调试和运行程序的方法,熟练掌握与实验有关的系统软件(如编辑程序、汇编程序、连接程序和调试程序等)的使用方法。
(2)程序的理解,系统功能的调用。
八、注意事项:
i.编辑源程序时,扩展名(asm)一定要写上。
ii.汇编源程序时,源程序一定要是汇编程序,用连接程序link连接的是目标程序(obj),连接成功后,产生可执行文件。
iii.学会找数据段地址。
iv.如果用U命令时,代码段地址不断增加,如要从头显示,可用U00(00为偏移地址)。
v.E2929为偏移地址
vi.F29l9‘forward.’2029为偏移地址.L为要修改的长度。
20是空格的asc||码。
实验二循环程序设计1
一.实验目的:
学会用循环结构进行程序编程。
二.实验题目:
用表格形式显示ASC||字符SMASC||
三.实验要求:
按15行*16列的表格形式显示ASC||码为10H----100H的所有字符,即以行为主的顺序及ASC||码递增的次序依次显示对应的字符。
每16个字符为一行,每行中的相邻两个字符之间用空白符(ASC||为0)隔开。
四.方法说明:
(1)显示每个字符可使用功能号为02的显示输出功能调用,使用方法如下:
movah,02h
movdl,0ah
int21h
本题中可把dl初始化为10H,然后不断使其加1(用INC指令)以取得下一个字符的ASC||码。
(2)显示空白符时,用其ASC||码0置入dl寄存器,每行结束时,用显示回车(ASC||为0dh)和换行符(ASC||为oah)来结束本行并开始下一行。
(3)由于逐个显示相继的ASC||字符时,需要保存并不断修改dl寄存器的内容,而显示空白、回车、换行符时也需要使用dl寄存器,为此可使用堆栈来保存相继的ASC||字符。
具体用法是:
在显示空白或回车,换行符前用指令
pushdx把dl的内容保存到堆栈中去。
在显示空白或回车,换行符后用指令
popdx恢复dl寄存器的原始内容。
五.选作题目:
设有50个从1开始连续的数,编程序统计它们的偶数和,最后将结果放在名字为sum的字存储单中。
六、重点和难点:
1.程序编程用到双重循环,显示一行字符是内循环;最后结果显示15行,显示15行用到外循环。
2.显示回车(asc||为0dh)和换行符(asc||为0ah),最好先回车(asc||为0dh)再换行符(asc||为0ah)不然在显示第二个字符串时可能会把第一个字符串覆盖。
七.程序清单:
codesegment
mainprocfar
assumecs:
code
start:
pushds;压栈
subax,ax;清零
pushax
movbl,00h;空白符
movcx,100
movdl,10h;初始输出10h
disp:
movah,02h
int21h;显示输出第一个
incbl;空白
incdl;设置下一个元素
pushdx;推入堆栈
movdl,20h
movah,02h
int21h;显示输出
popdx
cmpbl,10h;比较确定是否已经输出15行元素
jeline;若还未完成输出,则跳转至line,继续进行下一行元素的输出
loopdisp
jmpshortexit
line:
pushdx
movbl,00h;空白
movdl,0dh;回车
movah,02h
int21h
movdl,0ah;换行
movah,02h
int21h
popdx
jmpshortdisp
exit:
ret
mainendp
codeends
endstart
八.注意:
1.系统功能的调用
2.空白符的显示,每行结束时,显示回车(ASC||为0dh)和换行符(ASC||为oah)来结束本行并开始下一行。
实验三循环程序设计2
一.实验目的:
学会用循环程序设计进行程序编程。
二.实验题目:
查找匹配字符串SEARCH
三.问题要求:
程序接收用户键入的一个关键字以及一个句子。
如果句子中不包含关键字则显示’nomatch’;如果句子中包含关键字则显示‘match’,且把该字在句子中的位置用十六进制数显示出来,要求程序的执行过程如下:
enterkeyword:
abc
entersentence:
wearestudyingabc
matchatlocation:
11Hofthesentence
entersentence:
xyz,ok?
nomatch
entersentence:
^c
四.方法说明:
程序可由三部分组成:
(1)输入关键字和一个句子,分别存入相应的缓冲区中,可用功能调用0AH。
(2)在句子中查找关键字。
1.关键字和一个句子中相应字段的比较可使用串比较指令,为此必须定义附加段,但附加段和数据段可以定义为同一段,以便于串指令的使用,这样,相应的寄存器内容也有了确定的含义,如下:
SI寄存器为关键字的指针
DI寄存器为句子中正相比较的字段的指针
CX寄存器存放关键字的字母个数(长度)
2.整个句子和关键字的比较过程可以用一个循环结构来完成。
循环次数为:
(句子长度--关键字长度)+1在计算循环次数时,如遇到句子长度小于关键字长度的情况则应转向显示“nomatch”,循环中还需要用到BX寄存器,它用来保存句子中当前正在比较字段的首地址。
(3)输出信息:
用功能调用09h分“找到”或“找不到”两种情况分别显示不同的信息。
在“找到”时,还要求显示出匹配字符串在句子中的位置,在“找到”时BX寄存器的内容为匹配字符串的首地址,将此值减到句子的首地址,再将差值加1即是所要的匹配字符串在句子中的位置,可将位置转换为十六进制数从屏幕上显示出来。
00010001
00000001
五.选作题目:
已知在数据区中DATA1和DATA2开始分别存放N个字节数据,请编写一个程序检查两数据块中的数据是否相同,若完全一致,则将标志单元EAG置FFH,否则置0.
六.重点和难点:
(1)输入关键字和一个句子,分别存入相应的缓冲区中
(2)在句子中查找关键字的位置
(3)该关键字在句子中的位置用十六进制数显示出来
七.程序清单:
datasegment
str1db80,?
80dup(?
)
str2db80,?
80dup(?
)
hlo1db13,10,'enterketword:
$'
hlo2db13,10,'entersentence:
$'
mes1db13,10,'matchatlocation:
$'
mes2db13,10,'nomatch!
$'
mes3db'hofthesentence,$'
tabdb'0123456789abcdef'
dataends
progsegment
mainprocfar
assumecs:
prog,ds:
data,es:
data
start:
pushds
movax,0
pushax
movax,data
movds,ax
moves,ax
next:
leadx,hlo1
movah,9
int21h
leadx,str1
movah,10;803abc===========
int21h
leadx,hlo2
movah,9
int21h
leadx,str2
movah,10;806weare
int21h
moval,str2+1
subal,str1+1
incal
movbl,al
movbh,1
leasi,str2+2
movdx,si
cld
movah,1
find:
movsi,dx
leadi,str1+2
movcl,str1+1
repzcmpsb
jzmath
incdx
incbh
decbl
jnzfind
nmth:
leadx,mes2
movah,9
int21h
jmpnext
ret
math:
leadx,mes1
movah,9
int21h
moval,bh
andal,0f0h
movcl,4
shral,cl
movah,0
movsi,ax
movdl,tab[si]
movah,2
int21h
moval,bh
andal,0fh
movah,0
movsi,ax
movdl,tab[si]
movah,2
int21h
leadx,mes3
movah,9
int21h
jmpnext
ret
mainendp
progends
endstart
八.注意:
1.功能调用0AH的使用。
2.整个句子和关键字的比较过程可以用一个循环结构来完成。
循环次数为:
(句子长度--关键字长度)+1
3.在“找到”时BX寄存器的内容为匹配字符串的首地址,将此值减到句子的首地址,再将差值加1即是所要的匹配字符串在句子中的位置,
实验四分支程序设计
在实际应用的程序中,通常遇到根据某一条件是否成立来进行逻辑判断,以便确定程序的下一步执行,这就形成了分支结构程序,在汇编语言程序设计中,分支结构程序设计是一种很重要的程序设计方法.
一.实验目的:
学会用分支程序设计进行程序编程。
二.实验题目:
分类统计字符个数
三.实验要求:
程序接收用户键入的一行字符(字符个数不超过80个,该字符串用回车符结束),并按字母、数字及其它字符分类计数,然后将结果存入以letter、digit和other为名的存储单元中。
四.方法说明:
程序可采用0AH功能调用把键入字符直接送到缓冲区中,然后再逐个取出分类计数,也可采用01H功能调用在接收字符后先分类计数然后再存入缓冲区中。
程序需进入debug运行并查看计数结果。
五.选作题目:
设在变量ADR为起始地址的字节存储单元中存放一组有符号数据,编写程序分别统计
1.正数的个数
2.负数的个数
3.0的个数
六.重点和难点:
(1)按字母、数字及其它字符分类计数
(2)将结果存入以letter、digit和other为名的存储单元中
七.程序清单:
datasegment
letterdb0
digitdb0
otherdb0
dataends
codesegment
mainprocfar
assumecs:
code,ds:
data
start:
movletter,0
movdigit,0
movother,0
input:
movah,01h
int21h
cmpal,0dh
jzexit
cmpal,'a'
jbok
cmpal,'z'
jaoth
dkh:
incletter
jmpinput
ok:
cmpal,'A'
jbhello
cmpal,'Z'
jbdkh
jaoth
hello:
cmpal,'0'
jboth
cmpal,'9'
jaoth
incdigit
jmpinput
oth:
incother
jmpinput
exit:
movah,4ch
int21h
mainendp
codeends
endstart
八.注意:
1.程序如采用0AH功能调用把键入字符直接送到缓冲区中,应逐个取出分类计数
2.如采用01H功能调用,在接收字符后先分类计数然后再存入缓冲区中
3.如程序没有输出,需进入debug运行并查看计数结果
实验五子程序设计
子程序(过程)是程序设计中常用的方法.子程序结构是模块化程序设计的重要工具。
设计子程序主要考虑参数传递的方法,参数传递是主程序和子程序之间的接口。
一.实验目的:
学会用子程序设计进行程序编程。
二.实验题目:
查找电话号码phone
三.实验要求:
i.要求程序建立一个可存放50项的电话号码表,每项包括人名(20个字符)及电话号码(8个字符)两部分;
ii.程序可接收输入人名及相应的电话号码,并把它们加入电话号码表中;
iii.凡有新的输入后,程序应按人名对电话号码表重新排序;
iv.程序可接收需要查找电话号码的人名,并从电话号码表中查出其电话号码,再在屏幕上以如下格式显示出来。
nametel
********
四.实验提示:
程序采用子程序结构,主程序的主要部分如下:
.显示提示符‘inputname:
’;
.调用子程序input_name接收人名;
.调用子程序stor_name把人名存入电话号码表tel_tab中;
.显示提示符‘inputatelephonenumber:
’;
.调用子程序inphone接收电话号码,并把它存入电话号码表tel_tab中;
.如输入已结束则调用name_sort子程序对电话号码表按人名排序;
.显示提示符‘DOyouwantatelephonenumber?
(y/n)’;
.回答N则退出程序;
.回答Y则再显示提示符‘name?
’;
.调用子程序input_name接收人名;
.调用子程序name_search在电话号码表中查找所要的电话号码;
.调用子程序printline按要求格式显示人名及电话号码;
.重复查号提示符直至用户不再要求查号为止。
五.选作题目:
编制一程序,要求接收从键盘输入的一个班的学生成绩,并存放于50字的grade数组中,其中grade+i保存学号为i+1的学生的成绩.然后根据grade中的学生成绩,把学生名次填入50字的rank数组中,其中rank+I的内容是学号为I+1学生的名次,再按学号顺序把名次从终端上显示出来.
六.重点和难点:
(1)程序可建立一个存放50项的电话号码表,每项包括人名(20个字符)及电话号码(8个字符)两部分;
(2)程序可接收输入人名及相应的电话号码,并把它们加入电话号码表中;
(3)凡有新的输入后,程序应按人名对电话号码表重新排序;
(4)程序可接收需要查找电话号码的人名,并从电话号码表中查出其电话号码,再在屏幕上显示出来。
七.程序清单:
datasegment
bufnamedb40,?
38dup(0),13,10,'$'
buftabdb20,?
20dup(0)
hello1db13,10,'pleaseinputname:
$'
hello2db13,10,'pleaseinputatlephonenumber:
$'
hello3db13,10,'[(i..inputdata)\\(f..findtel.)\\(e..exit)]','$'
hellddb13,10,'nametelphone',13,10,'$'
tboverdb13,10,'tablealreadyover','$'
tbtopdb?
tbnumdb?
tabledb50dup(20dup(0),8dup(0))
dataends
progsegment
mainprocfar
assumecs:
prog,ds:
data,es:
data
start:
pushds
movax,0
pushax
movax,data
movds,ax
moves,ax
movtbtop,0
begin:
leadx,hello3
movah,09h
int21h
movah,01h
int21h
cmpal,'i'
jnzdisp
input:
moval,tbtop
cmpal,50
jnctabov
callinname
callintele
callstore
jmpshortbegin
disp:
cmpal,'f'
jnznext
callinname
callfind
jmpshortbegin
next:
cmpal,'e'
jzexit
jmpshortbegin
exit:
ret
tabov:
leadx,tbover
movah,09h
int21h
jmpshortbegin
mainendp
innameprocnear
pushdx
leadx,hello1
movah,9
int21h
leadx,bufname
movah,10
int21h
popdx
ret
innameendp
inteleprocnear
pushdx
leadx,hello2
movah,9
int21h
leadx,buftab
movah,10
int21h
popdx
ret
inteleendp
storeprocnear
pushcx
pushsi
pushdi
movah,tbtop
moval,28
mulah
leadi,table
adddi,ax
pushdi
leasi,bufname+2
movcl,bufname+1
movch,0
repmovsb
popdi
adddi,20
leasi,buftab+2
movcl,buftab+1
movch,0
repmovsb
inctbtop
popdi
popsi
popcx
ret
storeendp
findprocnear
pushbx
pushcx
pushsi
pushdi
moval,tbtop
movtbnum,al
leasi,table
movbx,si
cld
finds:
leadi,bufname+2
movsi,bx
movcl,bufname+1
movch,0
repzcmpsb
jzfinde
addbx,28
jmpfinds
finde:
leadx,helld
movah,9
int21h
movsi,bx
leadi,bufname+2
movcx,28
repmovsb
leadx,bufname+2
movah,9
int21h
findx:
popdi
popsi
po
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 实验 教案