资源描述:
《子程序与模块化程序设计.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、课程实验报告课程名称:汇编语言程序设计实验名称:实验地点:南一楼804室指导教师:李专专业班级:学号:姓名:同组学生:报告日期:成绩:计算机科学与技术学院目录1实验目的与要求12实验内容13实验过程23.1实验目的23.1.1设计思想23.1.2源程序代码23.2实验目的63.2.1设计思想63.2.2源程序代码63.3实验结果124实验体会121实验目的与要求(1)掌握子程序参数传递的3种方式,特别是利用堆栈传递参数的方法;(2)掌握模块化程序设计的方法;(3)进一步熟悉TD的使用,并加深对常用DOS功能调用的理解;2实验内容任务:编写程序实现类似C语言函数scanf()和printf(
2、)的功能:先从键盘输入一个N1进制的有符号字符串,再以N2进制的形式显示出来,N1和N2由键盘输入。例如:InputN1:16↙InputN2:10↙Inputstring:-7FFF↙Output:-32767(屏幕显示)提示:首先需要一个子程序将N1进制的字符串转换为二进制数,然后还需要一个子程序将二进制数转换为N2进制的字符串。要求:(1)用子程序scanfAsm实现将N1进制的字符串转换为二进制的有符号数:子程序参数:DS:[SI]指向字符串的首地址(可能有正负号,字符串以0结尾)BASE=N1(BASE是由主程序在数据段中用DB定义的变量)(AX)=转换结果(2)用子程序prin
3、tAsm实现将二进制有符号数转换为N2进制的字符串,调用printAsm的方法如下:PUSH需要转换的二进制数PUSHN2;将二进制数转换为该数制的字符串PUSH缓冲区段地址;转换结果保存在该缓冲区中PUSH缓冲区偏移地址CALLFARPTRprintAsmADDSP,8(3)主程序、子程序scanfAsm、子程序printAsm分别定义在模块mainIO.asm、scanfAsm.asm、printAsm.asm中;(4)画出2个子程序流程图,给出寄存器、存储单元的分配方法;(5)对于每种数制,至少输入正负数字符串各一个进行测试。3实验过程3.1实验目的用子程序scanfAsm实现将N1
4、进制的字符串转换为二进制的有符号数3.1.1设计思想用一个check函数检查输入的字符串中是否存在非法的字符,如果全部通过,则通过一个循环将其转换为二进制的字符,保存在ax中。3.1.2源程序代码.386datasegmentuse16tip1db'InputError!'rfdb0ah,0dh,'$'markdb?basedw?dataendsstacksegmentuse16stackdb20dup(?)stackends;check,寄存器传参,判断输入字符是否符和进制数;cl为进制,ch为字符,;正确时,返回ch为实际数,;错误时,输出tip1,并返回doscodesegmentu
5、se16assumecs:code,ds:data,ss:stackcheckprocfarsubch,'0'cmpch,10jgel1;不是数字字符跳转l4:;比较ch是否在0-clcmpch,0jgel2jmpexit2;输入字符小于0l2:cmpch,cljgel3jmpexit1l3:;输入字符大于进制数jmpexit2l1:;输入字符为字母时subch,'A'-'0';判断是否为字母cmpch,0jgel6jmpexit2;不为字母l6:cmpch,26;26个大写字母jgel5;输入字符不是大写字母addch,10;'A'代表10jmpl4l5:;判断字符是否为小写字母subc
6、h,'a'-'A'cmpch,0jgel7jmpexit2l7:cmpch,26jll8jmpexit2l8:addch,10jmpl4exit1:;正确时调用retexit2:;错误时调用movax,datamovds,axleadx,tip1movah,9int21hpopcx;清除栈ipmovah,4chint21hcheckendppubliccheck;scanfAsm,堆栈传参,入栈顺序,ds,si,wordptrbase;DS:[si],指向字符串首地址,可有正负号,字符串以0结尾;Base=n1(db);输出ax为转换结果scanfAsmprocfarpushbpmovbp
7、,sppushsipushcxpushbxpushdspushesmovax,datamovds,ax;获取参数movcx,[bp+6]movsi,[bp+8]movax,[bp+10]moves,axxorax,axmovbase,cxmovmark,0;用于判断是否为负数;获取第一个字符,判断是否为符号;不是符号则继续,是符号则跳过movch,byteptres:[si]cmpch,'-'jnesl1incsimov