第一篇:实验二语言与C语言混合编程
实验二汇编语言与C语言混合编程
一、教学目的和要求
熟悉ADS1.2开发环境编译、下载、调试程序的基本过程; 掌握C和汇编语言混合编程方法。
掌握ATPCS中的寄存器及参数传递规则。
二、实验内容
1、分别编写C程序和汇编程序,要求在C程序中调用汇编程序实现字符串拷贝功能。C程序中设定源字符串及目的字符串;汇编程序实现拷贝功能。
2、分别编写C程序和汇编程序,要求在汇编程序中调用C程序实现4个整型数的求和运算。汇编程序实现变量的赋值及C函数的调用;C程序实现求和运算。
3、编写C程序内嵌汇编语句,对两个整型数a、b进行求和运算,和值存放到变量c中。
(1)要求main()函数完成变量赋值及a、b、c数值信息输出;内嵌汇编语句实现求和计算。
(2)要求C程序中main()函数完成变量赋值及a、b、c信息打印,add()函数实现加法
运算;main()函数中的内嵌汇编调用C函数add()进行求和运算。
三、思考题
1、什么是ATPCS?它有哪些规则?
2、C程序调用汇编程序需要进行哪些设置?参数如何传递?
3、汇编程序调用C程序需要进行哪些设置?参数如何传递?
4、C程序中内嵌的汇编语句有何限制?用什么关键字表示内嵌汇编?
第二篇:C语言编程
#include(stdio.h)
main()
{ int question[4]={-1,-1,-1,-1},i=0,j=0,k=0,A=0,B=0,answer[4]={0};
char again='y';
while(again=='y'){ srand((int)time(0));
while(i4){ k=(int)rand()%10;
for(j=0;ji;j++)if(k==question[j]){ k=-1;break;}
if(k==-1)continue;question[i]=k;i++;}/*while i*/
for(i=8;i0;i--)/*还有8次机会*/
{ A=0;B=0;printf(“n你还剩下%d次机会。”,i);
printf(“n请输入四个0-9之间的数字,中间用空格隔开n”);for(j=0;j4;j++)scanf(“%d”,&answer[j]);
for(j=0;j4;j++)
for(k=0;k4;k++)
{ if(answer[j]==question[k]){ if(j==k)A++;else B++;} }/*for*/
if(A==4){ again='0';
printf(“n你赢了,还继续猜吗?(y/n)”);
while(again!='y'&&again!='n')
scanf(“...%c”,&again);break;}/*if*/
printf(“n%dA%dB”,A,B);if(i==1){ again='0';
printf(“n你输了,正确答案是”);
for(j=0;j4;j++)
printf(“%dt”,question[j]);
printf(“n还继续吗?(y/n)”);
while(again!='y'&&again!='n')scanf(“%c”,&again);
printf(“%c”,again);break;}/*if*/ }/*for changce*/ }/*while again*/ printf(“感谢您玩这个游戏。”);}
第三篇:C语言与语言混合编程DSP设计(推荐)
实验2:C与汇编语言混合编程
一.实验目的
掌握一种典型的C语言与汇编语言的混合编程方法。
二.实验设备
PC兼容机一台,操作系统为Windows2000,安装Code Composer Studio 4.2软件。
三.实验原理
1.C语言和汇编语言混合编程技术
在CCS环境中,工程可以同时包含C语言程序和汇编语言程序。在软件开发工作中,通常以C程序为主,在C程序框架中加入汇编语言程序模块。不同模块可采用不同语言设计,尽量少用汇编语言设计程序。通常对于下述模块采用汇编设计:
(1)强调处理速度的模块。
(2)中断程序设计时设置中断向量表。
(3)当需要绕开C编译器的规定,进行特殊操作时。比如:C语言规定,程序不能访问程序代码区,而系统功能需要进行类似访问时可采用限制较小的汇编语言程序设计。2.进行混合编程的方法
(1)用C语言完成设计后,运用CCS的软件仿真功能,充分测试程序,找到影响程序运行速度的瓶颈。
(2)通过仿真尽可能缩小模块。
(3)将找到的模块单独写成C语言子程序,存入独立的文件中。
(4)采用CCS产生与该模块C语言程序相对应的汇编程序。(5)观察需要优化的模块的汇编结果,进行人工优化。
(6)最后运用人工优化后形成的汇编程序模块,代替原来的C语言模块,进行编译。
四.实验步骤
1.启动Code Composer Studio。2.建立工程lab2。
3.建立lab2.c,输入以下内容:
int a,b,c;main(){
} a=3;b=4;while(1){ c=a+b;
}
4.建立lab2.cmd,输入以下内容:
lab2.obj-stack 1024-sysstack 1024 MEMORY {
} DARAM: o=0x100, l=0x7f00 DARAM2: o=0x8000, l=0x7f00 SECTIONS {
}.text: {} > DARAM.stack: {} > DARAM.sysstack: {} > DARAM.cinit: {} > DARAM2.pinit: {} > DARAM2.bss: {} > SARAM
5.建立配置文件lab2.ccxml(选择C55xx Simulater模式)。6.点击调试(DEBUG)工具按钮 7.运行程序,观察结果。
8.第一次修改程序,将主程序中所关心的算法部分单独建立一个子程序模块。
(1)修改算法部分(本实验中为加法运算)为单独的子程序:首先将“c=a+b;”语句修改成“c=add(a,b);”,在程序头上,变量定义之前加上一行“int add(int x,int y);”,在程序末尾,添加如下子程序:
int add(int x,int y){
return x+y;} 这样,将算法搬移到一个C语言的子程序模块中实现。
(2)点击按钮,完成编译、链接、下载程序,进入DEBUG界面。运行程序,观,编译、链接、下载程序,进入DEBUG界面。
察运行结果,判断子程序是否能完全与原程序一样完成算法。
9.第二次修改程序,为所关心的算法模块单独建立一个C文件。
(1)将子程序移入add1.c:打开一个新的空的源文件窗口,将main函数后的子程序复制到窗口中;注释main函数后面的子程序(在子程序前一行加“/*”,在子程序结尾行后加“*/”);将新窗口中的内容保存为文件add1.c。
(2)将add1.c加入工程,编译、链接、下载、运行,检查结果,保证运算无误。10.第三次修改程序,将C模块换为汇编模块。
(1)首先,利用汇编器选项(-k)由算法模块C程序自动产生相应的汇编程序。执行菜单命令ProjectProperties,弹出对话框,进行如下设置: ①选择菜单③单击选择复选框②选择此项④单击确定设置⑤完成设置
(2)重新编译、下载、运行程序并观察结果。打开所生成的add1.asm,删除其中的冗余项。
(3)将工程中的add1.c换成add1.asm。
(4)重新编译、下载、运行程序并观察结果。11.第四次修改程序,对汇编模块进行优化。(1)对add1.asm进行优化。
(2)重新编译、下载、运行程序并观察结果。(3)重复(1)、(2),使add1.asm尽量优化。
12.退出CCS。
五.实验结果
六.问题与思考
(1)如何获得C程序相应的汇编代码?除了本实验讲述的方法,你还能想到什么方法?
第四篇:c语言编程练习
本实验所有题目均要求使用指针。
1.写一函数,将一个3*3的整型矩阵转置。
2.将两个按升序排列的数组合并成一个数组,并使合并后的数组也按升序排列。要求:(1)输入两个数组(按升序);
(2)将两个数组合并成第三个数组;(有能力的同学可以将第二个数组合并到第一个数组中)
第五篇:c语言实验二实验报告
一、实验目的1、2、3、4、掌握关系表达式和逻辑表达式的使用。掌握选择结构程序设计的一般方法。熟练使用if语句进行程序设计。
掌握使用switch语句实现多分支选择结构。
二、实验内容 有一分段函数如下:
编写程序,输入(x实数)的值,输出以如下格式:x=??.??,y=??.??(即小数部分保留2位)程序代码:
#include “stdio.h” int main(){ float x,y;scanf(“%f”,&x);if(x<1)
y=x*x;if(x>=1&&x<10)
y=5*x-1;
if(x>=10)
y=2*x+4;printf(“x=%.2f,y=%.2fn”,x,y);return 0;}
2、从键盘输入三个实数,输出最大数和最小数。样例输入:1.23 3.45 5.67 样例输出:5.67 1.23 程序代码:
#include “stdio.h” int main(){ float a,b,c,max,min;scanf(“%f%f%f”,&a,&b,&c);if(a>b){max=a;min=b;} else {max=b;min=a;} if(a>c)
if(b>c){min=c;}
else {min=b;}
else {max=c;} printf(“%.2f %.2fn”,max,min);return 0;}
3、读入3个非零的double数后,判别这三个值是否可以表示一个三角形的三条边。样例输入1:1.23 1.23 1.23 样例输出1:yes.样例输入2:5.23 3.45-12.34 样例输出2:no.程序代码: #include “stdio.h” int main(){ double a,b,c;scanf(“%lf%lf%lf”,&a,&b,&c);if(a>0&&b>0&&c>0)
if(a+b>c&&b+c>a&&a+c>b)
printf(“yes.n”);
else printf(“no.n”);
else printf(“no.n”);
return 0;}
4、读入3个非零整数后,判别这三个值是否可以表示一个直角三角形的三条边。样例输入1:3 4 5 样例输出1:yes.样例输入2:5 6 1 样例输出2:no.程序代码:
#include “stdio.h” int main(){ int a,b,c;scanf(“%d%d%d”,&a,&b,&c);if(a>0&&b>0&&c>0)
if(a+b>c&&b+c>a&&a+c>b)
if(a*a+b*b==c*c||b*b+c*c==a*a||a*a+c*c==b*b)
printf(“yes.n”);
else printf(“no.n”);
else printf(“no.n”);
else printf(“no.n”);
return 0;}
5、编程设计一个简单的计算器程序,要求根据用户从键盘输入的表达式:
操作数1 运算符op操作数2
计算表达式的值,指定的运算符为加(+)、减(-)、乘(*)、除(/)。
样例输入1:21.23+12.56 样例输出1:21.23+12.56=33.79 样例输入2:1*2
样例输出2:1.00*2.00=2.00 在做除法运算时,若操作数2为0,则输出:除数为0
程序代码:
#include “stdio.h” int main(){ float x,y;char ch;scanf(“%f%c%f”,&x,&ch,&y);switch(ch){ case '+':printf(“%.2f+%.2f=%.2fn”,x,y,x+y);break;case '-':printf(“%.2f-%.2f=%.2fn”,x,y,x-y);break;case '*':printf(“%.2f*%.2f=%.2fn”,x,y,x*y);break;
case '/':if(y==0)
{printf(“除数为0n”);}
else printf(“%.2f/%.2f=%.2fn”,x,y,x/y);break;} return 0;}
6、描述
某产品生产成本c=c1+m*c2,其中c1为固定成本,c2为单位产品可变成本,m为生产数量。当m<10000时,c1=20000元,c2=10元;当m≥10000时,c1=40000元,c2=5元; 编写一个程序,其功能为:根据输入的生产数量,输出总生产成本及单位生产成本。输入 生产数量
输出
生产数量 总生产成本 单位可变成本 样例输入 6000 样例输出 6000 80000 10
程序代码:
#include “stdio.h” int main(){ int m,c1,c2,c;scanf(“%d”,&m);if(m<10000){c1=20000;c2=10;} else {c1=40000;c2=5;} c=c1+c2*m;printf(“%d %d %dn”,m,c,c2);return 0;}
7、描述
根据键盘输入的一个字符所属类别,判别它属于:大写字母(输出:1)、小写字母(输出:2)、数字字符(输出:3)、其它字符(输出:4)。
输入
一个字符 输出
字符类别号
样例输入
A 样例输出 程序代码
#include “stdio.h” int main(){ char ch;scanf(“%c”,&ch);if(65<=ch&&ch<=90)
printf(“1n”);
else if(97<=ch&&ch<=122)
printf(“2n”);else if(47<=ch&&ch<=58)
printf(“3n”);else
printf(“4n”);return 0;}
8、描述
实现如下分段函数:
输入
是一个实型数据。输出
以如下格式输出:x=0.250,y=5.250(即输出一律保留3位小数)样例输入 0.250 样例输出 x=0.250,y=5.250 程序代码
#include “stdio.h” int main(){ float x,y;scanf(“%f”,&x);if(x<3){y=x+5;} else if(x==3){y=2*x;} else if(x<10){y=6*x-4;} else {y=3*x-11;} printf(“x=%.3f,y=%.3fn”,x,y);return 0;}
三、实验体会
通过选择结构这一章的学习,我了解了关系表的事和逻辑表达式的使用以及选择结构程序设计的一般方法。知道了if语句的使用和switch语句多分支选择结构。经过这一章的学习,我对c语言程序设计有了更大的兴趣,希望能带给我以后更大的学习乐趣。