资源描述:
《C语言和汇编语言的互调》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验报告课程名称:C语言和汇编语言的互调姓名学号组员实验名称C语言和汇编语言的互调实验内容:(实验原理、实验步骤、数据处理、误差分析、程序算法、系统结构等)一.实验原理C语言参数传递原则1、函数的返回值通过AX寄存器;2、参数通过堆栈传递:参数传递的顺序是最后一个参数先入栈,第一个参数最后入栈;3、在子程序中不对因传递参数而改变的SP进行校正,而在主程序中进行校正。二.实验步骤1、下载TC.RAR到D盘,解压到D:TC目录中;2、把MASM.EXE拷贝到D:TC中;3、在D:TC目录中建立两个文件DtoA.c和T3.asm,分别存放本题的C语言程序和汇编语言程
2、序;4、执行如下命令,编译T3.asm,形成目标文件T3.objmsamT3.asm5、执行如下命令,编译DtoA.c形成DtoA.obj文件,并把DtoA.obj和T3.obj链接,形成可执行文件DtoA.exetccDtoA.cT3.obj6、执行T3.exe。三.流程图四.程序C语言程序#includeexternintCHANGE(int,char*);main(){inta[5]={276,13965,1024,4,32},i,j;charbuffer[32],*p,*position;intcount[]={0,0,0,0,0};pos
3、ition=buffer;for(i=0;i<=4;i++){count[i]=CHANGE(a[i],position);p=position;for(j=0;j<5-count[i];j++){*p='';p++;}position+=5;*position=',';position++;}*position=0;printf("Number=%s",buffer);for(i=0;i<5;i++){printf("%d,",count[i]);}printf("");}汇编语言程序_TEXTsegmentBYTEPUBLIC'CODE'assumeCS
4、:_TEXTpublic_change_changeprocnear;intchange(intvalue,char*buffer)pushbpmovbp,spsubsp,4;定义局部变量的空间[bp-2],[bp-4]pushbxpushcxpushdxpushsipushdimovwordptr[bp-2],0;一个局部变量。赋值0,转换的ASCII码数量movax,[bp+4];value的值movbx,[bp+6];buffer的值movdi,4movcx,10subloop1:xordx,dxdivcx;DXAX/CX,商在AX中,余数在DX中adddl,
5、30hmovbyteptr[bx+di],dlincbyteptr[bp-2];已转换的字符数decdi;下一个字符保存的位置orax,axjnzsubloop1movax,[bp-2];放回结果popdipopsipopdxpopcxpopbxaddsp,4popbpret_changeendp_TEXTendsend五.运行1.编译t3.asmMicrosoft(R)MacroAssemblerVersion5.00Copyright(C)MicrosoftCorp1981-1985,1987.Allrightsreserved.Objectfilename[t
6、3.OBJ]:(形成目标文件T3.obj)Sourcelisting[NUL.LST]:Cross-reference[NUL.CRF]:50160+415408Bytessymbolspacefree0WarningErrors0SevereErrors(编译显示0错误)2.编译dtoa.cD:tc>TlinkT3.objTurboLinkVersion2.0Copyright(c)1987,1988BorlandInternationalWarning:nostackD:tc>debugT3.exe-tAX=0000BX=0000CX=003ADX=0000
7、SP=FFFEBP=0000SI=0000DI=0000DS=142BES=142BSS=143BCS=143BIP=0001NVUPEIPLNZNAPONC143B:00018BECMOVBP,SP-tAX=0000BX=0000CX=003ADX=0000SP=FFFEBP=FFFESI=0000DI=0000DS=142BES=142BSS=143BCS=143BIP=0003NVUPEIPLNZNAPONC143B:000383EC04SUBSP,+04-tAX=0000BX=0000CX=003ADX=0000SP=FFFABP=FFFESI=0000