实验2汇编语言程序上机过程讲课稿.docx
《实验2汇编语言程序上机过程讲课稿.docx》由会员分享,可在线阅读,更多相关《实验2汇编语言程序上机过程讲课稿.docx(14页珍藏版)》请在冰点文库上搜索。
实验2汇编语言程序上机过程讲课稿
实验2-汇编语言程序上机过程
南昌大学汇编语言程序设计实验报告
学生姓名:
学号:
专业班级:
实验类型:
□验证□综合□设计□创新实验日期:
实验成绩:
实验2汇编语言程序上机过程
一.实验目的
熟练掌握汇编语言程序的编辑、调试和运行的过程和方法。
了解汇编语言程序的汇编、运行环境。
二.实验内容
1.掌握常用的编辑工具软件(如WORD、EDIT)、MASM和LINK的使用;
2.伪指令:
SEGMENT,ENDS,ASSUME,END,OFFSET,DUP;
3.利用的INT21H的1号功能实现键盘输入的方法;
三.实验要求
1.仔细阅读有关伪指令SEGMENT,ENDS,ASSUME,END,OFFSET,DUP的内容;
2.了解利用的INT21H的1号功能实现键盘输入的方法,了解.EXE文件和.COM文件的区别及用INT21H4C号功能返回系统的方法;
3.阅读下面程序段。
四.实验环境
PC微机
DOS操作系统或Windows操作系统
MASM.EXE,LINK.EXE,DEBUG.COM或宏汇编集成环境
五.实验步骤
1、按步骤完成下列程序的编译、连接、运行及调试等过程:
datasegment
messagedb'Thisisasampleprogramofkeyboardanddisplay'
db0dh,0ah,'Pleasestrikethekey!
',0dh,0ah,'$'
dataends
stacksegmentparastack'stack'
db50dup(?
)
stackends
codesegment
assumecs:
code,ds:
data,ss:
stack
start:
movax,data
movds,ax
movdx,offsetmessage
movah,9
int21h
again:
movah,1
int21h
cmpal,1bh
jeexit
cmpal,61h
jcdisplay
cmpal,7ah
jadisplay
andal,11011111b
display:
movdl,al
movah,2
int21h
jmpagain
exit:
movah,4ch
int21h
codeends
endstart
实验步骤:
1.用用文字编辑工具(记事本或EDIT)将源程序输入,其扩展名为.ASM。
2.用MASM对源文件进行汇编,产生.OBJ文件和.LST文件。
若汇编时提示有错,用文字编辑工具修改源程序后重新汇编,直至通过。
3.用TYPE命令显示1产生的.LST文件。
4.用LINK将.OBJ文件连接成可执行的.EXE文件。
5.在DOS状态下运行LINK产生的.EXE文件。
即在屏幕上显示标题并提示你按键。
每按一键在屏幕上显示二个相同的字符,但小写字母被改成大写。
按ESC键可返回DOS。
若未出现预期结果,用DEBUG检查程序。
6.将程序修改,使得用户键入除小写字母以外的其他字符(除ESC键),输出提示信息“Illegalcharacterisstriked,Pleaseinputagain!
”,并要求重新输入。
datasegment
messagedb'thisisasampleprogramofkeyboardanddisplay'
db0dh,0ah,'pleasestrikethekey!
',0dh,0ah,'$'
message2db'Illegalcharacterisstriked,Pleaseinputagain!
'
db0dh,0ah,'pleasestrikethekey!
',0dh,0ah,'$'
dataends
stacksegmentparastack'stack'
db50dup(?
)
stackends
codesegment
assumecs:
code,ds:
data,ss:
stack
start:
movax,data
movds,ax
movdx,offsetmessage
movah,9
int21h
again:
movah,1
int21h
cmpal,1bh
jeexit;如果输入是esc就退出
cmpal,61h
jcdisplay2;如果输入小于"a"
cmpal,7ah
jadisplay2;如果输入大于"z"
andal,11011111b
display:
movdl,al;直接输出
movah,2
int21h
jmpagain
display2:
movax,data;如果不是小写字母输出“重新再输”指令
movds,ax
movdx,offsetmessage2
movah,9
int21h
jmpagain
exit:
movah,4ch
int21h
codeends
endstart
2.下面程序任务是完成查表求一个十以内整数的平方,程序有错误,请进行纠正并调试运行。
DATASEGMENT
TABLEDB0,1,4,9,16,25,36,49,64,81
HEXDW5;待查的整数
RESULTDW?
DATAENDS
CDSEGMENT
ASSUMECS:
CODE,DS:
DAT
START:
MOVAX,DATA
MOVDS,AX
MOVBX,TABLE
MOVAX,HEX
ADDBX,AX
MOVAX,[BX]
MOVRESULT,AX
MOVAH,4CH
INT21H
CDENDS
ENDSTART
实验步骤
1、将该文件存成.asm文件,将其生成可执行文件。
2、编译该程序,找出错误。
并纠正。
datasegment
tabledw0,1,4,9,16,25,36,49,64,81;“db”应该改成“dw”
hexdw5;待查的整数
resultdw?
dataends
codesegment;“cd”应该改成“code”
assumecs:
code,ds:
data;“dat”应该改成“data”
start:
movax,data
movds,ax
movbx,table
movax,hex
addbx,ax
movax,[bx]
movresult,ax
movah,4ch
int21h
codeends;“cd”应该改成“code”
endstart
3、连接、运行看程序是否能得到正确结果。
若不行,用Debug加载该可执行文件,单步调试,观察各寄存器变化及RESULT单元的值。
找出问题。
4、重复汇编语言程序的上机过程,使程序能正确得到结果。
5、修改源程序,选用换码指令XLAT完成本程序相同的功能。
datasegment
tabledb0,1,4,9,16,25,36,49,64,81;把“dw”改成“db”
hexdb5;待查的整数
resultdb?
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
leabx,table;把table地址给bx
moval,hex
xlat;应用换码指令XLAT
movresult,al
movah,2
int21h
movah,4ch
int21h
codeends
endstart
曾经出现错误:
经检查,是由于红色字体部分漏写导致程序陷入循环无法出来。
补写上后成功运行。
6、补充此程序的输入和输出功能。
使得程序能任意输入数据,平方值也能以十进制显示在屏幕上。
datasegment
tabledw0,1,4,9,16,25,36,49,64,81
dataends
stacksegmentparastack'stack'
db100dup(?
)
stackends
codesegment
assumecs:
code,ds:
data,ss:
stack
start:
movax,data
movds,ax
moves,ax
begin:
movah,1
int21h
cmpal,1bh
jeexit;如果输入是ESC键则退出
cmpal,30h
jcbegin
cmpal,39h
jabegin;如果输入值大于9小于0则重输
subal,30h;输入值减去30h这样就变成了十进制的数字
movbx,table
pushcx
shlal,1
movah,al
incah
xlat
movcl,al
moval,ah
xlat
movch,al
movax,cx
popcx
callcr_lf
callout_ax
callcr_lf
jmpbegin
exit:
movah,4ch
int21h
out_axprocnear
pushbx
movdl,0
callout_asc
movbl,100
divbl
movdl,al
callout_asc
moval,ah
xorah,ah
movbl,10
divbl
movdl,al
callout_asc
movdl,ah
callout_asc
popbx
ret
out_axendp
out_ascprocnear
adddl,30h
callout_dl
ret
out_ascendp
cr_lfprocnear
movdl,10
callout_dl
movdl,13
callout_dl
ret
cr_lfendp
out_dlprocnear
pushax
movah,02h
int21h
popax
ret
out_dlendp
codeends
endstart
六.实验报告要求
汇编,连接及调试时产生的错误,其原因及解决办法,要求你修改的程序的清单(修改后)和调试记录;各实验中的关键数据截图。
七.简答题
1.若在源程序中把INT21H的'H'省去,会产生什么现象?
从原来的int21h去掉h后就会变成int21,因为输入默认是10进制,不加h就会变成调用中断15h了。
2.把INT21H中4CH号功能改为INT20H,行不行?
不行,会出现程序无法响应的问题。
八.实验小结
1.了解了伪指令SEGMENT,ENDS,ASSUME,END,OFFSET,DUP的用法并且熟练应用
2.了解利用的INT21H的1号功能实现键盘输入的方法,
movah,1
int21h
了解输出显示输出的方法,
movdl,x
movah,2
int21h
了解用INT21H4C号功能返回系统的方法,
movah,4ch
int21h
3.知道了如何调试程序,当出现好几个错误的时候,很有可能是改掉前面一个错,接下来的错误都没有了,还有就是发现自己写的程序找不出问题时,可以参考书上的程序做个范例,看看自己和书上的框架是不是错了还是怎样的错误。
总之,当程序报错时,一定要很耐心的去修改,也可以和同伴互相交流讨论一下有可能出错的地方,相互学习改进。