汇编实验五子程序设计_连晓阳

上传人:jiups****uk12 文档编号:40016896 上传时间:2018-05-22 格式:DOC 页数:14 大小:145KB
返回 下载 相关 举报
汇编实验五子程序设计_连晓阳_第1页
第1页 / 共14页
汇编实验五子程序设计_连晓阳_第2页
第2页 / 共14页
汇编实验五子程序设计_连晓阳_第3页
第3页 / 共14页
汇编实验五子程序设计_连晓阳_第4页
第4页 / 共14页
汇编实验五子程序设计_连晓阳_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《汇编实验五子程序设计_连晓阳》由会员分享,可在线阅读,更多相关《汇编实验五子程序设计_连晓阳(14页珍藏版)》请在金锄头文库上搜索。

1、福建农林大学金山学院实验报告福建农林大学金山学院实验报告系: 信息与机电工程 专业: 电子信息工程 年级: 09 姓名: 连晓阳 学号: 092230051 实验课程: 汇编语言 实验室号:_605_ 实验设备号: j2 实验时间: 指导教师签字: 成绩: 实验五实验五 子程序设计子程序设计1实验目的和要求实验目的和要求1、学习子程序的编写,主子程序的调用2、不同模块间程序的调用和调试2实验环境实验环境实验的硬件环境是:IBMPC 机及其兼容机实验的软件环境是:操作系统:DOS 2.0 以上;调试程序:DEBUG.COM;文本编程程序:EDIT.EXE、WPS.EXE;宏汇编程序:MASM.E

2、XE(或 ASM .EXE) ;连接装配程序:LINK .EXE;交叉引用程序:CREF.EXE(可有可无) 。3实验内容及实验数据记录实验内容及实验数据记录1、数据段中的 3 个字符,调用子程序将其逐个显示出来。子程序的功能是显示一个字符。单步执行,观察 IP 的变化DATASEGMENTMAGDB ABCDATAENDSCODESEGMENTASSUMECS: CODE, DS: DATASTART: MOVAX, DATAMOVDS, AXMOVSI, 0MOVCX, 3LL:MOV DL, MAGSICALL MADDINCSILOOPLLMOVAH, 4CHINT21HMADDPRO

3、CMOV AH, 02HINT 21HRETMADDENDPCODEENDSEND START2、阅读 S31.ASM 和 S32.ASM 两个模块中的程序,并分别汇编,然后连接成一个可执行文件 S31.EXE。具体步骤如下:MASM S31.ASM(分别汇编)MASM S32.ASMLINK S31 S32 (将两个文件连接成为一个文件名为 S31)S31.EXE (运行)3、编程:利用主程序调用子程序,比较 BUF1 和 BUF2 缓冲区中不相等的字符,并将不相等的字符显示出来。 (也可以将找到的不相等字符逐个显示,用INT 21H 的 02 功能调用)4、编程:子程序搜索指定字符缓冲区中

4、是否有 n,如果有用 y 替代。调用子程序将 BUF1,BUF2,BUF3 中的 n 全部用 y 替代4算法描述及实验步骤算法描述及实验步骤1 用 doss 运行改程序,用反汇编跟踪如下Call 指针指向了 0019,mov ah,02分布跟踪如下可以看出 ret 后 ip 指向了 0012,sp 又回到了栈底,证实了 call 调用子程序是通过堆栈保护了现场进入子程序,之后在通过 ret 恢复了原状。2.按要求把 s31 s32 分别汇编连接形成一个 s31.exe 文件,如下3 在 doss 下运行一下程序DATA SEGMENTBUF1 DB HapBn eVerndan!LEN=$-B

5、UF1BUF2 DB Happn everndan!DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX, DATA MOV DS, AXLEA SI, buf1 lea di, buf2mov cx,lencall cmpp MOV AH, 4CH INT 21H ;子程序名 cmpp;功能:比较两缓冲区中不相等的字符,并输出;入口参数:buf1 首地址 SI,buf2 首地址 di,循环比较次数 CX;占用寄存器:dlcmpp PROC NEAR ;子程序 l1: mov dl,sicmp dl,dijz nextmov ah

6、,02hint 21hnext: inc siinc diloop l1RET ;子程序返回 cmpp ENDP CODE ENDS END START改程序实现了,比较 BUF1 和 BUF2 缓冲区中不相等的字符,并将不相等的字符显示出来。4.编写一下程序实现子程序搜索指定字符缓冲区中是否有 n,如果有用 y 替代。调用子程序将 BUF1,BUF2,BUF3 中的 n 全部用 y 替代DATA SEGMENTBUF1 DB Evern dog has his dan!,0ah,0dh,$LEN1=$-BUF1BUF2 DB Happn everndan!, $LEN2=$-BUF2DATA

7、 ENDSCODE SEGMENTASSUME CS: CODE, DS: DATASTART:MOVAX, DATAMOV DS, AXLEA SI, BUF1MOV CX, LEN1CALL CMMPLEA SI, BUF2MOV CX, LEN2CALL CMMPMOV AH, 4CHINT 21H;子程序的功能:搜索字符串中是否有 N 字符,如果有用 Y 替代,并显示字符串;入口参数为字符串偏移地址 SI,字符串长度 CX;将要显示的字符串的偏移地址送 DX,用于显示字符串。这句应在子程序的开始,因为下面;语句会改变 SI 的值CMMP PROCMOV DX, SICMP1:CMP B

8、YTE PTRSI, nJNE NOTNMOV AL, yMOV SI, ALNOTN:INC SILOOP CMP1MOV AH, 09H ;显示字符串INT 21HRETCMMP ENDPCODE ENDSEND START5调试过程调试过程1 编译连接改程序编译连接改程序在在 u 命令反汇编命令反汇编分步执行分步执行2 汇编 s31,汇编 s32Link s31 s32形成一个 s31.exe 的文件3.编写程序,汇编,连接,运行6. 实验结果实验结果1.输出字符串输出字符串 abc2 输入一个数后面显示了十六进制数3.显示了BUF1 和 BUF2 缓冲区中不相等的字符4子程序搜索指定字

9、符缓冲区中是否有 n,如果有用 y 替代。调用子程序将BUF1,BUF2,BUF3 中的 n 全部用 y 替代7. 总结总结学习子程序的编写,主子程序的调用不同模块间程序的调用和调试附录:附源程序:NAME S31.ASM不同模块间的段间调用。从键盘输入 2 位非压缩 BCD 数,存入 AX 寄存器中。为了将其转换为二进制数,编写一个子程序 TRAN。显示子程序 DISP 完成将 16 进制数转换为对应的 ASCII 码并显示该字符,显示子程序在另一模块 S32 中。输入数据为 00 时结束。EXTRN DISP: FARCODESEGMENTPARA CODEASSUMECS: CODEST

10、ART: MOVAH, 01HINT21HMOVBL, ALINT21HMOVAH, ALMOVAL, BLCMPAX, 3030HJEEXITCALLNEAR PTR TRANCALLFAR PTR dispJMPSTARTEXIT:MOV AH, 4CHINT21HTRANPROCNEAR ;将输入的 ASCII 码转换成 2 进制数ANDAX, 0F0FH ;将 ASCII 码转换成非压缩 BCD 码,;高位在 AL 中MOVBL, AHMOVCL, 10DMULCLADDAL, BLRETTRANENDPCODEENDSEND STARTNAMES32.ASMPUBLIC DISPCO

11、DE1 SEGMENTPARA CODEASSUMECS: CODE1DISP PROC FARMOVBL, ALMOVBH, 00MOVCH, 4ROLL:MOVCL, 4ROLBX, CLMOVDL, BLANDDL, 0FHCMPDL, 9JBENEXT1ADDDL, 07HNEXT1: ADDDL, 30HMOVAH, 02HINT21HDECCHJNZROLLRETDISPENDPCODE1 ENDSEND 3 DATA SEGMENTBUF1 DB HapBn eVerndan!LEN =$-BUF1BUF2 DB Happn everndan!DATA ENDSCODESEGME

12、NT ASSUME CS:CODE,DS:DATA START: MOV AX, DATA MOV DS, AXLEA SI, buf1 lea di, buf2mov cx,lencall cmpp MOV AH, 4CH INT 21H ;子程序名 cmpp;功能:比较两缓冲区中不相等的字符,并输出;入口参数:buf1 首地址 SI,buf2 首地址 di,循环比较次数 CX;占用寄存器:dlcmpp PROCNEAR ;子程序 l1: mov dl,sicmp dl,dijz nextmov ah,02hint 21hnext: inc siinc diloop l1RET ;子程序返回

13、 cmpp ENDP CODE ENDS END START4DATA SEGMENTBUF1 DB Evern dog has his dan!,0ah,0dh,$LEN1=$-BUF1BUF2 DB Happn everndan!, $LEN2=$-BUF2DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATASTART: MOVAX, DATAMOV DS, AXLEA SI, BUF1MOV CX, LEN1CALL CMMPLEA SI, BUF2MOV CX, LEN2CALL CMMPMOV AH, 4CHINT 21H;子程序的功能:搜索字符串中是否有 N 字符,如果有用 Y 替代,并显示字符串;入口参数为字符串偏移地址 SI,字符串长度 CX;将要显示的字符串的偏移地址送 DX,用于显示字符串。这句应在子程序的开始,因为下面;语句会改变 SI 的值CMMP PROCMOV DX, SICMP1:CMP BYTE PTRSI, nJNE NOTNMOV AL, yMOV SI, ALNOTN:INC SILOOP CMP1MOV AH, 09H ;显示字符串INT 21HRETCMMP ENDPCODE ENDSEND START

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号