汇编实验五子程序设计 连晓阳.docx
- 文档编号:5410154
- 上传时间:2022-12-16
- 格式:DOCX
- 页数:14
- 大小:65.54KB
汇编实验五子程序设计 连晓阳.docx
《汇编实验五子程序设计 连晓阳.docx》由会员分享,可在线阅读,更多相关《汇编实验五子程序设计 连晓阳.docx(14页珍藏版)》请在冰豆网上搜索。
汇编实验五子程序设计连晓阳
福建农林大学金山学院实验报告
系:
信息与机电工程专业:
电子信息工程年级:
09
姓名:
连晓阳学号:
092230051实验课程:
汇编语言
实验室号:
_605______实验设备号:
j2实验时间:
指导教师签字:
成绩:
实验五子程序设计
1.实验目的和要求
1、学习子程序的编写,主子程序的调用
2、不同模块间程序的调用和调试
2.实验环境
实验的硬件环境是:
IBM—PC机及其兼容机
实验的软件环境是:
操作系统:
DOS2.0以上;调试程序:
DEBUG.COM;文本编程程序:
EDIT.EXE、WPS.EXE;宏汇编程序:
MASM.EXE(或ASM.EXE);连接装配程序:
LINK.EXE;交叉引用程序:
CREF.EXE(可有可无)。
3.实验内容及实验数据记录
1、数据段中的3个字符,调用子程序将其逐个显示出来。
子程序的功能是显示一个字符。
单步执行,观察IP的变化
DATASEGMENT
MAGDB‘ABC’
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVSI,0
MOVCX,3
LL:
MOVDL,MAG[SI]
CALLMADD
INCSI
LOOPLL
MOVAH,4CH
INT21H
MADDPROC
MOVAH,02H
INT21H
RET
MADDENDP
CODEENDS
ENDSTART
2、阅读S31.ASM和S32.ASM两个模块中的程序,并分别汇编,然后连接成一个可执行文件S31.EXE。
具体步骤如下:
MASMS31.ASM(分别汇编)
MASMS32.ASM
LINKS31S32(将两个文件连接成为一个文件名为S31)
S31.EXE(运行)
3、编程:
利用主程序调用子程序,比较BUF1和BUF2缓冲区中不相等的字符,并将不相等的字符显示出来。
(也可以将找到的不相等字符逐个显示,用INT21H的02功能调用)
4、编程:
子程序搜索指定字符缓冲区中是否有n,如果有用y替代。
调用子程序将BUF1,BUF2,BUF3中的n全部用y替代
4.算法描述及实验步骤
1用doss运行改程序,用反汇编跟踪如下
Call指针指向了0019,movah,02
分布跟踪如下
可以看出ret后ip指向了0012,sp又回到了栈底,证实了call调用子程序是通过堆栈保护了现场进入子程序,之后在通过ret恢复了原状。
2.按要求把s31s32分别汇编连接形成一个s31.exe文件,如下
3在doss下运行一下程序
DATASEGMENT
BUF1DB'HapBneVerndan!
'
LEN=$-BUF1
BUF2DB'Happneverndan!
'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
LEASI,buf1
leadi,buf2
movcx,len
callcmpp
MOVAH,4CH
INT21H
;子程序名cmpp
;功能:
比较两缓冲区中不相等的字符,并输出
;入口参数:
buf1首地址SI,buf2首地址di,循环比较次数CX
;占用寄存器:
dl
cmppPROCNEAR;子程序
l1:
movdl,[si]
cmpdl,[di]
jznext
movah,02h
int21h
next:
incsi
incdi
loopl1
RET;子程序返回
cmppENDP
CODEENDS
ENDSTART
改程序实现了,比较BUF1和BUF2缓冲区中不相等的字符,并将不相等的字符显示出来。
4.编写一下程序实现子程序搜索指定字符缓冲区中是否有n,如果有用y替代。
调用子程序将BUF1,BUF2,BUF3中的n全部用y替代
DATASEGMENT
BUF1DB'Everndoghashisdan!
',0ah,0dh,'$'
LEN1=$-BUF1
BUF2DB'Happneverndan!
','$'
LEN2=$-BUF2
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
LEASI,BUF1
MOVCX,LEN1
CALLCMMP
LEASI,BUF2
MOVCX,LEN2
CALLCMMP
MOVAH,4CH
INT21H
;子程序的功能:
搜索字符串中是否有N字符,如果有用Y替代,并显示字符串
;入口参数为字符串偏移地址SI,字符串长度CX
;将要显示的字符串的偏移地址送DX,用于显示字符串。
这句应在子程序的开始,因为下面
;;语句会改变SI的值
CMMPPROC
MOVDX,SI
CMP1:
CMPBYTEPTR[SI],'n'
JNENOTN
MOVAL,'y'
MOV[SI],AL
NOTN:
INCSI
LOOPCMP1
MOVAH,09H;显示字符串
INT21H
RET
CMMPENDP
CODEENDS
ENDSTART
5.调试过程
1编译连接改程序
在u命令反汇编
分步执行
2汇编s31,
汇编s32
Links31s32
形成一个s31.exe的文件
3.编写程序,汇编,连接,运行
6.实验结果
1.输出字符串abc
2输入一个数后面显示了十六进制数
3.显示了BUF1和BUF2缓冲区中不相等的字符
4子程序搜索指定字符缓冲区中是否有n,如果有用y替代。
调用子程序将BUF1,BUF2,BUF3中的n全部用y替代
7.总结
学习子程序的编写,主子程序的调用
不同模块间程序的调用和调试
附录:
附源程序:
NAMES31.ASM
不同模块间的段间调用。
从键盘输入2位非压缩BCD数,存入AX寄存器中。
为了将其转换为二进制数,编写一个子程序TRAN。
显示子程序DISP完成将16进制数转换为对应的ASCII码并显示该字符,显示子程序在另一模块S32中。
输入数据为00时结束。
EXTRNDISP:
FAR
CODESEGMENTPARA'CODE'
ASSUMECS:
CODE
START:
MOVAH,01H
INT21H
MOVBL,AL
INT21H
MOVAH,AL
MOVAL,BL
CMPAX,3030H
JEEXIT
CALLNEARPTRTRAN
CALLFARPTRdisp
JMPSTART
EXIT:
MOVAH,4CH
INT21H
TRANPROCNEAR;将输入的ASCII码转换成2进制数
ANDAX,0F0FH;将ASCII码转换成非压缩BCD码,
;高位在AL中
MOVBL,AH
MOVCL,10D
MULCL
ADDAL,BL
RET
TRANENDP
CODEENDS
ENDSTART
NAMES32.ASM
PUBLICDISP
CODE1SEGMENTPARA'CODE'
ASSUMECS:
CODE1
DISPPROCFAR
MOVBL,AL
MOVBH,00
MOVCH,4
ROLL:
MOVCL,4
ROLBX,CL
MOVDL,BL
ANDDL,0FH
CMPDL,9
JBENEXT1
ADDDL,07H
NEXT1:
ADDDL,30H
MOVAH,02H
INT21H
DECCH
JNZROLL
RET
DISPENDP
CODE1ENDS
END
3DATASEGMENT
BUF1DB'HapBneVerndan!
'
LEN=$-BUF1
BUF2DB'Happneverndan!
'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
LEASI,buf1
leadi,buf2
movcx,len
callcmpp
MOVAH,4CH
INT21H
;子程序名cmpp
;功能:
比较两缓冲区中不相等的字符,并输出
;入口参数:
buf1首地址SI,buf2首地址di,循环比较次数CX
;占用寄存器:
dl
cmppPROCNEAR;子程序
l1:
movdl,[si]
cmpdl,[di]
jznext
movah,02h
int21h
next:
incsi
incdi
loopl1
RET;子程序返回
cmppENDP
CODEENDS
ENDSTART
4
DATASEGMENT
BUF1DB'Everndoghashisdan!
',0ah,0dh,'$'
LEN1=$-BUF1
BUF2DB'Happneverndan!
','$'
LEN2=$-BUF2
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
LEASI,BUF1
MOVCX,LEN1
CALLCMMP
LEASI,BUF2
MOVCX,LEN2
CALLCMMP
MOVAH,4CH
INT21H
;子程序的功能:
搜索字符串中是否有N字符,如果有用Y替代,并显示字符串
;入口参数为字符串偏移地址SI,字符串长度CX
;将要显示的字符串的偏移地址送DX,用于显示字符串。
这句应在子程序的开始,因为下面
;;语句会改变SI的值
CMMPPROC
MOVDX,SI
CMP1:
CMPBYTEPTR[SI],'n'
JNENOTN
MOVAL,'y'
MOV[SI],AL
NOTN:
INCSI
LOOPCMP1
MOVAH,09H;显示字符串
INT21H
RET
CMMPENDP
CODEENDS
ENDSTART
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编实验五子程序设计 连晓阳 汇编 实验 子程序 设计