C0扩充文法编译器测试报告模板.docx
《C0扩充文法编译器测试报告模板.docx》由会员分享,可在线阅读,更多相关《C0扩充文法编译器测试报告模板.docx(23页珍藏版)》请在冰豆网上搜索。
C0扩充文法编译器测试报告模板
C0扩充文法编译器测试报告
学号:
________37230118____________
姓名:
______罗杨______________
2010年1月16日
1测试样例一(正确)
测试样例
intfib(intk)
{
if(k==0)
return
(1);
if(k==1)
return(fib(k-1)+fib(k-2));
}
voidmain(){
intn,result;
printf("Pleaseentern:
");
scanf(n);
printf("Fib(n)is:
result=fib(n);
printf(result);
return;
}程序输出
输入一个数字,输出其斐波那契数
目标代码
.386
.modelflat,stdcall
optioncasemap:
none
includeC:
\RadASM\Masm32\include\windows.inc
\RadASM\Masm32\include\kernel32.inc
\RadASM\Masm32\include\msvcrt.inc
includelibC:
\RadASM\Masm32\lib\msvcrt.lib
\RadASM\Masm32\lib\kernel32.lib
\RadASM\Masm32\include\macros.asm
.data
piequ40490FCFh
.code
fibproc
pushebp
movebp,esp
subesp,100h
moveax,dwordptr[ebp+08h]
cmpeax,0
jne@label0_1
movdwordptr[ebp-04h],1
jmp@label0_2
@label0_1:
movdwordptr[ebp-04h],0
@label0_2:
cmpdwordptr[ebp-04h],0
jz@l1
moveax,1
addesp,100h
popebp
ret04h
@l1:
cmpeax,1
jne@label1_1
movdwordptr[ebp-08h],1
jmp@label1_2
@label1_1:
movdwordptr[ebp-08h],0
@label1_2:
cmpdwordptr[ebp-08h],0
jz@l2
@l2:
subeax,1
movebx,eax
moveax,ebx
pusheax
callfib
movdwordptr[ebp-010h],eax
subeax,2
movdwordptr[ebp-018h],eax
moveax,dwordptr[ebp-010h]
addeax,dwordptr[ebp-018h]
fibendp
start:
invokecrt_printf,SADD("Pleaseentern:
")
invokecrt_scanf,SADD("%d"),addrdwordptr[ebp-04h]
invokecrt_printf,SADD("Fib(n)is:
moveax,dwordptr[ebp-04h]
movdwordptr[ebp-0ch],eax
moveax,dwordptr[ebp-0ch]
movdwordptr[ebp-08h],eax
invokecrt_printf,SADD("%d"),dwordptr[ebp-08h]
invokeExitProcess,NULL
endstart
执行结果
正确
2测试样例二(正确)
voidmain()
inti,n,sum,sum2,temp;
printf("Pleaseenterthetotalcount:
sum=0;
sum2=0;
for(i=0;i{scanf(temp);sum=sum+temp;sum2=sum2+temp*temp;}printf("Sum=");printf(sum);printf("Avg=");printf(sum/n);printf("Var=");printf(sum2/n-(sum/n)*(sum/n));return;}程序输出先输入数n,回车,再输入n个数,用回车分隔,最后显示这n个数的和,平均数和方差。目标代码.386.modelflat,stdcalloptioncasemap:noneincludeC:\RadASM\Masm32\include\windows.incincludeC:\RadASM\Masm32\include\kernel32.incincludeC:\RadASM\Masm32\include\msvcrt.incincludelibC:\RadASM\Masm32\lib\msvcrt.libincludelibC:\RadASM\Masm32\lib\kernel32.libincludeC:\RadASM\Masm32\include\macros.asm.data.codestart:pushebpmovebp,espsubesp,100hinvokecrt_printf,SADD("Pleaseenterthetotalcount:")invokecrt_scanf,SADD("%d"),addrdwordptr[ebp-08h]moveax,0movdwordptr[ebp-0ch],eaxmoveax,0movdwordptr[ebp-010h],eaxmoveax,0movdwordptr[ebp-04h],eax@l5:moveax,dwordptr[ebp-04h]cmpeax,dwordptr[ebp-08h]jge@label0_1movdwordptr[ebp-018h],1jmp@label0_2@label0_1:movdwordptr[ebp-018h],0@label0_2:cmpdwordptr[ebp-018h],0jz@l6moveax,dwordptr[ebp-04h]addeax,1movdwordptr[ebp-04h],eaxinvokecrt_scanf,SADD("%d"),addrdwordptr[ebp-014h]moveax,dwordptr[ebp-0ch]addeax,dwordptr[ebp-014h]movedi,eaxmoveax,edimovdwordptr[ebp-0ch],eaxmoveax,dwordptr[ebp-014h]movecx,dwordptr[ebp-014h]imulecxmovesi,eaxmoveax,esiaddeax,dwordptr[ebp-010h]movebx,eaxmoveax,ebxmovdwordptr[ebp-010h],eaxjmp@l5@l6:invokecrt_printf,SADD("Sum=")invokecrt_printf,SADD("%d"),dwordptr[ebp-0ch]invokecrt_printf,SADD("Avg=")moveax,dwordptr[ebp-0ch]cdqmovecx,dwordptr[ebp-08h]idivecxmovdwordptr[ebp-028h],eaxinvokecrt_printf,SADD("%d"),dwordptr[ebp-028h]invokecrt_printf,SADD("Var=")moveax,dwordptr[ebp-010h]cdqmovecx,dwordptr[ebp-08h]idivecxmovdwordptr[ebp-02ch],eaxmoveax,dwordptr[ebp-0ch]cdqmovecx,dwordptr[ebp-08h]idivecxmovdwordptr[ebp-030h],eaxmoveax,dwordptr[ebp-030h]movesi,eaxmoveax,dwordptr[ebp-030h]movecx,dwordptr[ebp-030h]imulecxmovebx,eaxmoveax,dwordptr[ebp-02ch]subeax,ebxmovdwordptr[ebp-03ch],eaxinvokecrt_printf,SADD("%d"),dwordptr[ebp-03ch]addesp,100hpopebpinvokeExitProcess,NULLaddesp,100hpopebpinvokeExitProcess,NULLendstart执行结果正确3测试样例三(正确)测试样例voidmain(){inta,b;floatc,d;printf("Pleaseentertwointergers(A,B):");scanf(a,b);printf("A+B=");printf(a+b);printf("A-B=");printf(a-b);printf("A*B=");printf(a*b);printf("A/B=");printf(a/b);printf("Pleaseentertworealnumbers(C,D):");scanf(c,d);printf("C+D=");printf(c+d);printf("C-D=");printf(c-d);printf("C*D=");printf(c*d);printf("C/D=");printf(c/d);return;}程序输出先输入两个整数,会显示其四则运算结果,再输入两个实数,会显示其浮点数四则运算结果。目标代码.386.modelflat,stdcalloptioncasemap:noneincludeC:\RadASM\Masm32\include\windows.incincludeC:\RadASM\Masm32\include\kernel32.incincludeC:\RadASM\Masm32\include\msvcrt.incincludelibC:\RadASM\Masm32\lib\msvcrt.libincludelibC:\RadASM\Masm32\lib\kernel32.libincludeC:\RadASM\Masm32\include\macros.asm.data.codestart:pushebpmovebp,espsubesp,100hinvokecrt_printf,SADD("Pleaseentertwointergers(A,B):")invokecrt_scanf,SADD("%d"),addrdwordptr[ebp-04h]invokecrt_scanf,SADD("%d"),addrdwordptr[ebp-08h]invokecrt_printf,SADD("A+B=")moveax,dwordptr[ebp-04h]addeax,dwordptr[ebp-08h]movdwordptr[ebp-014h],eaxinvokecrt_printf,SADD("%d"),dwordptr[ebp-014h]invokecrt_printf,SADD("A-B=")moveax,dwordptr[ebp-04h]subeax,dwordptr[ebp-08h]movdwordptr[ebp-018h],eaxinvokecrt_printf,SADD("%d"),dwordptr[ebp-018h]invokecrt_printf,SADD("A*B=")moveax,dwordptr[ebp-04h]movecx,dwordptr[ebp-08h]imulecxmovdwordptr[ebp-01ch],eaxinvokecrt_printf,SADD("%d"),dwordptr[ebp-01ch]invokecrt_printf,SADD("A/B=")moveax,dwordptr[ebp-04h]cdqmovecx,dwordptr[ebp-08h]idivecxmovdwordptr[ebp-020h],eaxinvokecrt_printf,SADD("%d"),dwordptr[ebp-020h]invokecrt_printf,SADD("Pleaseentertworealnumbers(C,D):")invokecrt_scanf,SADD("%f"),addrdwordptr[ebp-0ch]invokecrt_scanf,SADD("%f"),addrdwordptr[ebp-010h]invokecrt_printf,SADD("C+D=")movecx,dwordptr[ebp-0ch]pushecxmovecx,dwordptr[ebp-010h]pushecxflddwordptr[esp+4]fadddwordptr[esp]fstpdwordptr[ebp-024h]addesp,8flddwordptrdwordptr[ebp-024h]subesp,08hfstpqwordptr[esp]invokecrt_printf,SADD("%f")invokecrt_printf,SADD("C-D=")movecx,dwordptr[ebp-0ch]pushecxmovecx,dwordptr[ebp-010h]pushecxflddwordptr[esp+4]fsubdwordptr[esp]fstpdwordptr[ebp-028h]addesp,8flddwordptrdwordptr[ebp-028h]subesp,08hfstpqwordptr[esp]invokecrt_printf,SADD("%f")invokecrt_printf,SADD("C*D=")movecx,dwordptr[ebp-0ch]pushecxmovecx,dwordptr[ebp-010h]pushecxflddwordptr[esp+4]fmuldwordptr[esp]fstpdwordptr[ebp-02ch]addesp,8flddwordptrdwordptr[ebp-02ch]subesp,08hfstpqwordptr[esp]invokecrt_printf,SADD("%f")invokecrt_printf,SADD("C/D=")movecx,dwordptr[ebp-0ch]pushecxmovecx,dwordptr[ebp-010h]pushecxflddwordptr[esp+4]fdivdwordptr[esp]fstpdwordptr[ebp-030h]addesp,8flddwordptrdwordptr[ebp-030h]subesp,08hfstpqwordptr[esp]invokecrt_printf,SADD("%f")addesp,100hpopebpinvokeExitProcess,NULLaddesp,100hpopebpinvokeExitProcess,NULLendstart执行结果正确4测试样例四(正确)测试样例floata,b,c,d;floate;voidmain(){scanf(a);printf("input+1.5",a+1.5);scanf(b);printf("input*2-lastinput/10",b*2-a/10);}程序输出输入一个实数,对其进行实数运算。目标代码.386.modelflat,stdcalloptioncasemap:noneincludeC:\RadASM\Masm32\include\windows.incincludeC:\RadASM\Masm32\include\kernel32.incincludeC:\RadASM\Masm32\include\msvcrt.incincludelibC:\RadASM\Masm32\lib\msvcrt.libincludelibC:\RadASM\Masm32\lib\kernel32.libincludeC:\RadASM\Masm32\include\macros.asm.data_adword?_bdword?_cdword?_ddword?_edword?.codestart:pushebpmovebp,espsubesp,100hinvokecrt_scanf,SADD("%f"),addr_amovecx,_apushecxmovecx,3FC00000hpushecxflddwordptr[esp+4]fadddwordptr[esp]fstpdwordptr[ebp-04h]addesp,8invokecrt_printf,SADD("input+1.5")flddwordptrdwordptr[ebp-04h]subesp,08hfstpqwordptr[esp]invokecrt_printf,SADD("%f")invokecrt_scanf,SADD("%f"),addr_bmoveax,2movdwordptr[esp-4],eaxfilddwordptr[esp-4]fstpdwordptr[esp-4]moveax,dwordptr[esp-4]movebx,eaxmoveax,10movdwordptr[esp-4],eaxfilddwordptr[esp-4]fstpdwordptr[esp-4]moveax,dwordptr[esp-4]movesi,eaxinvokecrt_printf,SADD("input*2-lastinput/10")flddwordptrdwordptr[ebp-018h]subesp,08hfstpqwordptr[esp]invokecrt_printf,SADD("%f")addesp,100hpopebpinvokeExitProcess,NULLendstart执行结果正确5测试样例五(正确)测试样例inta,b,c,d;voidmain(){b=20;a=4;d=1;c=0;while(d!=0){if((10*d+1)>=a*5){c=c+2;a=a*2;d=d-4;}elsed=d+5;}printf(c);}程序输出屏幕输出67108918,此为溢出值目标代码.386.modelflat,st
scanf(temp);
sum=sum+temp;
sum2=sum2+temp*temp;
printf("Sum=");
printf(sum);
printf("Avg=");
printf(sum/n);
printf("Var=");
printf(sum2/n-(sum/n)*(sum/n));
程序输出
先输入数n,回车,再输入n个数,用回车分隔,最后显示这n个数的和,平均数和方差。
invokecrt_printf,SADD("Pleaseenterthetotalcount:
invokecrt_scanf,SADD("%d"),addrdwordptr[ebp-08h]
moveax,0
movdwordptr[ebp-04h],eax
@l5:
cmpeax,dwordptr[ebp-08h]
jge@label0_1
movdwordptr[ebp-018h],1
movdwordptr[ebp-018h],0
cmpdwordptr[ebp-018h],0
jz@l6
addeax,1
invokecrt_scanf,SADD("%d"),addrdwordptr[ebp-014h]
addeax,dwordptr[ebp-014h]
movedi,eax
moveax,edi
moveax,dwordptr[ebp-014h]
movecx,dwordptr[ebp-014h]
imulecx
movesi,eax
moveax,esi
addeax,dwordptr[ebp-010h]
jmp@l5
@l6:
invokecrt_printf,SADD("Sum=")
invokecrt_printf,SADD("%d"),dwordptr[ebp-0ch]
invokecrt_printf,SADD("Avg=")
cdq
movecx,dwordptr[ebp-08h]
idivecx
movdwordptr[ebp-028h],eax
invokecrt_printf,SADD("%d"),dwordptr[ebp-028h]
invokecrt_printf,SADD("Var=")
movdwordptr[ebp-02ch],eax
movdwordptr[ebp-030h],eax
moveax,dwordptr[ebp-030h]
movecx,dwordptr[ebp-030h]
moveax,dwordptr[ebp-02ch]
subeax,ebx
movdwordptr[ebp-03ch],eax
invokecrt_printf,SADD("%d"),dwordptr[ebp-03ch]
3测试样例三(正确)
inta,b;
floatc,d;
printf("Pleaseentertwointergers(A,B):
scanf(a,b);
printf("A+B=");
printf(a+b);
printf("A-B=");
printf(a-b);
printf("A*B=");
printf(a*b);
printf("A/B=");
printf(a/b);
printf("Pleaseentertworealnumbers(C,D):
scanf(c,d);
printf("C+D=");
printf(c+d);
printf("C-D=");
printf(c-d);
printf("C*D=");
printf(c*d);
printf("C/D=");
printf(c/d);
先输入两个整数,会显示其四则运算结果,再输入两个实数,会显示其浮点数四则运算结果。
invokecrt_printf,SADD("Pleaseentertwointergers(A,B):
invokecrt_printf,SADD("A+B=")
addeax,dwordptr[ebp-08h]
movdwordptr[ebp-014h],eax
invokecrt_printf,SADD("%d"),dwordptr[ebp-014h]
invokecrt_printf,SADD("A-B=")
subeax,dwordptr[ebp-08h]
invokecrt_printf,SADD("%d"),dwordptr[ebp-018h]
invokecrt_printf,SADD("A*B=")
movdwordptr[ebp-01ch],eax
invokecrt_printf,SADD("%d"),dwordptr[ebp-01ch]
invokecrt_printf,SADD("A/B=")
movdwordptr[ebp-020h],eax
invokecrt_printf,SADD("%d"),dwordptr[ebp-020h]
invokecrt_printf,SADD("Pleaseentertworealnumbers(C,D):
invokecrt_scanf,SADD("%f"),addrdwordptr[ebp-0ch]
invokecrt_scanf,SADD("%f"),addrdwordptr[ebp-010h]
invokecrt_printf,SADD("C+D=")
movecx,dwordptr[ebp-0ch]
pushecx
movecx,dwordptr[ebp-010h]
flddwordptr[esp+4]
fadddwordptr[esp]
fstpdwordptr[ebp-024h]
addesp,8
flddwordptrdwordptr[ebp-024h]
subesp,08h
fstpqwordptr[esp]
invokecrt_printf,SADD("%f")
invokecrt_printf,SADD("C-D=")
fsubdwordptr[esp]
fstpdwordptr[ebp-028h]
flddwordptrdwordptr[ebp-028h]
invokecrt_printf,SADD("C*D=")
fmuldwordptr[esp]
fstpdwordptr[ebp-02ch]
flddwordptrdwordptr[ebp-02ch]
invokecrt_printf,SADD("C/D=")
fdivdwordptr[esp]
fstpdwordptr[ebp-030h]
flddwordptrdwordptr[ebp-030h]
4测试样例四(正确)
floata,b,c,d;
floate;
scanf(a);
printf("input+1.5",a+1.5);
scanf(b);
printf("input*2-lastinput/10",b*2-a/10);
输入一个实数,对其进行实数运算。
_adword?
_bdword?
_cdword?
_ddword?
_edword?
invokecrt_scanf,SADD("%f"),addr_a
movecx,_a
movecx,3FC00000h
fstpdwordptr[ebp-04h]
invokecrt_printf,SADD("input+1.5")
flddwordptrdwordptr[ebp-04h]
invokecrt_scanf,SADD("%f"),addr_b
moveax,2
movdwordptr[esp-4],eax
filddwordptr[esp-4]
fstpdwordptr[esp-4]
moveax,dwordptr[esp-4]
moveax,10
invokecrt_printf,SADD("input*2-lastinput/10")
flddwordptrdwordptr[ebp-018h]
5测试样例五(正确)
inta,b,c,d;
b=20;
a=4;
d=1;
c=0;
while(d!
=0){
if((10*d+1)>=a*5){
c=c+2;
a=a*2;
d=d-4;
else
d=d+5;
printf(c);
屏幕输出67108918,此为溢出值
.modelflat,st
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1