汇编实验五子程序设计 连晓阳Word文档下载推荐.docx
- 文档编号:18397667
- 上传时间:2022-12-16
- 格式:DOCX
- 页数:14
- 大小:65.54KB
汇编实验五子程序设计 连晓阳Word文档下载推荐.docx
《汇编实验五子程序设计 连晓阳Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《汇编实验五子程序设计 连晓阳Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。
操作系统:
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替代。
DATASEGMENT
Everndoghashisdan!
0ah,0dh,'
$'
LEN1=$-BUF1
'
LEN2=$-BUF2
CODESEGMENT
ASSUMECS:
START:
MOVDS,AX
LEASI,BUF1
MOVCX,LEN1
CALLCMMP
LEASI,BUF2
MOVCX,LEN2
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;
显示字符串
RET
CMMPENDP
CODEENDS
ENDSTART
5.调试过程
1编译连接改程序
在u命令反汇编
分步执行
2汇编s31,
汇编s32
Links31s32
形成一个s31.exe的文件
3.编写程序,汇编,连接,运行
6.实验结果
1.输出字符串abc
2输入一个数后面显示了十六进制数
3.显示了BUF1和BUF2缓冲区中不相等的字符
4子程序搜索指定字符缓冲区中是否有n,如果有用y替代。
7.总结
学习子程序的编写,主子程序的调用
不同模块间程序的调用和调试
附录:
附源程序:
NAMES31.ASM
不同模块间的段间调用。
从键盘输入2位非压缩BCD数,存入AX寄存器中。
为了将其转换为二进制数,编写一个子程序TRAN。
显示子程序DISP完成将16进制数转换为对应的ASCII码并显示该字符,显示子程序在另一模块S32中。
输入数据为00时结束。
EXTRNDISP:
FAR
CODESEGMENTPARA'
CODE'
CODE
MOVAH,01H
MOVBL,AL
MOVAH,AL
MOVAL,BL
CMPAX,3030H
JEEXIT
CALLNEARPTRTRAN
CALLFARPTRdisp
JMPSTART
EXIT:
MOVAH,4CH
TRANPROCNEAR;
将输入的ASCII码转换成2进制数
ANDAX,0F0FH;
将ASCII码转换成非压缩BCD码,
;
高位在AL中
MOVBL,AH
MOVCL,10D
MULCL
ADDAL,BL
TRANENDP
ENDSTART
NAMES32.ASM
PUBLICDISP
CODE1SEGMENTPARA'
CODE1
DISPPROCFAR
MOVBH,00
MOVCH,4
ROLL:
MOVCL,4
ROLBX,CL
MOVDL,BL
ANDDL,0FH
CMPDL,9
JBENEXT1
ADDDL,07H
NEXT1:
ADDDL,30H
MOVAH,02H
DECCH
JNZROLL
DISPENDP
CODE1ENDS
END
3DATASEGMENT
4
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编实验五子程序设计 连晓阳 汇编 实验 子程序 设计