测试报告 北航本科编译原理大作业.docx
- 文档编号:5455572
- 上传时间:2022-12-16
- 格式:DOCX
- 页数:23
- 大小:18.30KB
测试报告 北航本科编译原理大作业.docx
《测试报告 北航本科编译原理大作业.docx》由会员分享,可在线阅读,更多相关《测试报告 北航本科编译原理大作业.docx(23页珍藏版)》请在冰豆网上搜索。
测试报告北航本科编译原理大作业
C0扩充文法编译器测试报告
学号:
________37230118____________
姓名:
______罗杨______________
2010年1月16日
1测试样例一(正确)
测试样例
intfib(intk)
{
if(k==0)
return
(1);
if(k==1)
return
(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
includeC:
\RadASM\Masm32\include\kernel32.inc
includeC:
\RadASM\Masm32\include\msvcrt.inc
includelibC:
\RadASM\Masm32\lib\msvcrt.lib
includelibC:
\RadASM\Masm32\lib\kernel32.lib
includeC:
\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:
moveax,dwordptr[ebp+08h]
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
moveax,1
addesp,100h
popebp
ret04h
@l2:
moveax,dwordptr[ebp+08h]
subeax,1
movebx,eax
moveax,ebx
pusheax
callfib
movdwordptr[ebp-010h],eax
moveax,dwordptr[ebp+08h]
subeax,2
movebx,eax
moveax,ebx
pusheax
callfib
movdwordptr[ebp-018h],eax
moveax,dwordptr[ebp-010h]
addeax,dwordptr[ebp-018h]
movebx,eax
moveax,ebx
addesp,100h
popebp
ret04h
fibendp
start:
pushebp
movebp,esp
subesp,100h
invokecrt_printf,SADD("Pleaseentern:
")
invokecrt_scanf,SADD("%d"),addrdwordptr[ebp-04h]
invokecrt_printf,SADD("Fib(n)is:
")
moveax,dwordptr[ebp-04h]
pusheax
callfib
movdwordptr[ebp-0ch],eax
moveax,dwordptr[ebp-0ch]
movdwordptr[ebp-08h],eax
invokecrt_printf,SADD("%d"),dwordptr[ebp-08h]
addesp,100h
popebp
invokeExitProcess,NULL
addesp,100h
popebp
invokeExitProcess,NULL
endstart
执行结果
正确
2测试样例二(正确)
测试样例
voidmain()
{
inti,n,sum,sum2,temp;
printf("Pleaseenterthetotalcount:
");
scanf(n);
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,stdcall optioncasemap: none includeC: \RadASM\Masm32\include\windows.inc includeC: \RadASM\Masm32\include\kernel32.inc includeC: \RadASM\Masm32\include\msvcrt.inc includelibC: \RadASM\Masm32\lib\msvcrt.lib includelibC: \RadASM\Masm32\lib\kernel32.lib includeC: \RadASM\Masm32\include\macros.asm .data .code start: pushebp movebp,esp subesp,100h invokecrt_printf,SADD("Pleaseenterthetotalcount: ") invokecrt_scanf,SADD("%d"),addrdwordptr[ebp-08h] moveax,0 movdwordptr[ebp-0ch],eax moveax,0 movdwordptr[ebp-010h],eax moveax,0 movdwordptr[ebp-04h],eax @l5: moveax,dwordptr[ebp-04h] cmpeax,dwordptr[ebp-08h] jge@label0_1 movdwordptr[ebp-018h],1 jmp@label0_2 @label0_1: movdwordptr[ebp-018h],0 @label0_2: cmpdwordptr[ebp-018h],0 jz@l6 moveax,dwordptr[ebp-04h] addeax,1 movdwordptr[ebp-04h],eax invokecrt_scanf,SADD("%d"),addrdwordptr[ebp-014h] moveax,dwordptr[ebp-0ch] addeax,dwordptr[ebp-014h] movedi,eax moveax,edi movdwordptr[ebp-0ch],eax moveax,dwordptr[ebp-014h] movecx,dwordptr[ebp-014h] imulecx movesi,eax moveax,esi addeax,dwordptr[ebp-010h] movebx,eax moveax,ebx movdwordptr[ebp-010h],eax jmp@l5 @l6: invokecrt_printf,SADD("Sum=") invokecrt_printf,SADD("%d"),dwordptr[ebp-0ch] invokecrt_printf,SADD("Avg=") moveax,dwordptr[ebp-0ch] cdq movecx,dwordptr[ebp-08h] idivecx movdwordptr[ebp-028h],eax invokecrt_printf,SADD("%d"),dwordptr[ebp-028h] invokecrt_printf,SADD("Var=") moveax,dwordptr[ebp-010h] cdq movecx,dwordptr[ebp-08h] idivecx movdwordptr[ebp-02ch],eax moveax,dwordptr[ebp-0ch] cdq movecx,dwordptr[ebp-08h] idivecx movdwordptr[ebp-030h],eax moveax,dwordptr[ebp-030h] movesi,eax moveax,dwordptr[ebp-030h] movecx,dwordptr[ebp-030h] imulecx movebx,eax moveax,dwordptr[ebp-02ch] subeax,ebx movdwordptr[ebp-03ch],eax invokecrt_printf,SADD("%d"),dwordptr[ebp-03ch] addesp,100h popebp invokeExitProcess,NULL addesp,100h popebp invokeExitProcess,NULL endstart 执行结果 正确 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,stdcall optioncasemap: none includeC: \RadASM\Masm32\include\windows.inc includeC: \RadASM\Masm32\include\kernel32.inc includeC: \RadASM\Masm32\include\msvcrt.inc includelibC: \RadASM\Masm32\lib\msvcrt.lib includelibC: \RadASM\Masm32\lib\kernel32.lib includeC: \RadASM\Masm32\include\macros.asm .data .code start: pushebp movebp,esp subesp,100h invokecrt_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],eax invokecrt_printf,SADD("%d"),dwordptr[ebp-014h] invokecrt_printf,SADD("A-B=") moveax,dwordptr[ebp-04h] subeax,dwordptr[ebp-08h] movdwordptr[ebp-018h],eax invokecrt_printf,SADD("%d"),dwordptr[ebp-018h] invokecrt_printf,SADD("A*B=") moveax,dwordptr[ebp-04h] movecx,dwordptr[ebp-08h] imulecx movdwordptr[ebp-01ch],eax invokecrt_printf,SADD("%d"),dwordptr[ebp-01ch] invokecrt_printf,SADD("A/B=") moveax,dwordptr[ebp-04h] cdq movecx,dwordptr[ebp-08h] idivecx 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] pushecx 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=") movecx,dwordptr[ebp-0ch] pushecx movecx,dwordptr[ebp-010h] pushecx flddwordptr[esp+4] fsubdwordptr[esp] fstpdwordptr[ebp-028h] addesp,8 flddwordptrdwordptr[ebp-028h] subesp,08h fstpqwordptr[esp] invokecrt_printf,SADD("%f") invokecrt_printf,SADD("C*D=") movecx,dwordptr[ebp-0ch] pushecx movecx,dwordptr[ebp-010h] pushecx flddwordptr[esp+4] fmuldwordptr[esp] fstpdwordptr[ebp-02ch] addesp,8 flddwordptrdwordptr[ebp-02ch] subesp,08h fstpqwordptr[esp] invokecrt_printf,SADD("%f") invokecrt_printf,SADD("C/D=") movecx,dwordptr[ebp-0ch] pushecx movecx,dwordptr[ebp-010h] pushecx flddwordptr[esp+4] fdivdwordptr[esp] fstpdwordptr[ebp-030h] addesp,8 flddwordptrdwordptr[ebp-030h] subesp,08h fstpqwordptr[esp] invokecrt_printf,SADD("%f") addesp,100h popebp invokeExitProcess,NULL addesp,100h popebp invokeExitProcess,NULL endstart 执行结果 正确 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,stdcall optioncasemap: none includeC: \RadASM\Masm32\include\windows.inc includeC: \RadASM\Masm32\include\kernel32.inc includeC: \RadASM\Masm32\include\msvcrt.inc includelibC: \RadASM\Masm32\lib\msvcrt.lib includelibC: \RadASM\Masm32\lib\kernel32.lib includeC: \RadASM\Masm32\include\macros.asm .data _adword? _bdword? _cdword? _ddword? _edword? .code start: pushebp movebp,esp subesp,100h invokecrt_scanf,SADD("%f"),addr_a movecx,_a pushecx movecx,3FC00000h pushecx flddwordptr[esp+4] fadddwordptr[esp] fstpdwordptr[ebp-04h] addesp,8 invokecrt_printf,SADD("input+1.5") flddwordptrdwordptr[ebp-04h] subesp,08h fstpqwordptr[esp] invokecrt_printf,SADD("%f") invokecrt_scanf,SADD("%f"),addr_b moveax,2 movdwordptr[esp-4],eax filddwordptr[esp-4] fstpdwordptr[esp-4] moveax,dwordptr[esp-4] movebx,eax moveax,10 movdwordptr[esp-4],eax filddwordptr[esp-4] fstpdwordptr[esp-4] moveax,dwordptr[esp-4] movesi,eax invokecrt_printf,SADD("input*2-lastinput/10") flddwordptrdwordptr[ebp-018h] subesp,08h fstpqwordptr[esp] invokecrt_printf,SADD("%f") addesp,100h popebp invokeExitProcess,NULL endstart 执行结果 正确 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; } else d=d+5; } printf(c); } 程序输出 屏幕输出67108918,此为溢出值 目标代码 .386 .modelflat,s
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 测试报告 北航本科编译原理大作业 北航 本科 编译 原理 作业