测试报告 北航本科编译原理大作业.docx

上传人:b****3 文档编号:5455572 上传时间:2022-12-16 格式:DOCX 页数:23 大小:18.30KB
下载 相关 举报
测试报告 北航本科编译原理大作业.docx_第1页
第1页 / 共23页
测试报告 北航本科编译原理大作业.docx_第2页
第2页 / 共23页
测试报告 北航本科编译原理大作业.docx_第3页
第3页 / 共23页
测试报告 北航本科编译原理大作业.docx_第4页
第4页 / 共23页
测试报告 北航本科编译原理大作业.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

测试报告 北航本科编译原理大作业.docx

《测试报告 北航本科编译原理大作业.docx》由会员分享,可在线阅读,更多相关《测试报告 北航本科编译原理大作业.docx(23页珍藏版)》请在冰豆网上搜索。

测试报告 北航本科编译原理大作业.docx

测试报告北航本科编译原理大作业

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1