107
[工学]6 ARM汇编语言与嵌入式C混合编程.ppt
[工学]6 ARM汇编语言与嵌入式C混合编程

第六章

汇编语言与嵌入式c 汇编语言与嵌入式c 混合编程

内容提要
6.1 6.2 6.3 6.4 6 4 6.5 6.6 嵌入式c编程规范 嵌入式c程序设计中的位运算 嵌入式c程序设计中的几点说明 嵌入式c程序设计格式 c 过程调用标准atpcs与aapcs arm汇编语言与嵌入式c混合编程

6.1 嵌入式c编程规范
在当前的嵌入式开发中,嵌入式c语言是最 为常见的程序设计语言,对于程序员来说, 能够完成相应功能的代码并不一定是优秀 的代码。 优秀的代码还要具备易读性、易维护性、 具有可移植和高可靠性。

6.1.1 嵌入式c程序书写规范
排版规则如下: (1)程序块要采用缩进风格编写 (2)较长的语句(例如超过80个字符)要分成多行书写 (3)循环、判断等语句中若有较长的表达式或语句,则 要进行适应的划分 (4)若函数或过程中参数较长,也要进行适当的划分。 (5)一般不要把多个短语句写在一行中 (6)程序块的分界符语句的大括号“{”与“}”一般独占一 行并且在同一列

书写规范示例:
if (((ptcb->ostcbstat & os_stat_suspend) = = os_stat_rdy) &((ptcb->ostcbstat & os_stat_suspend_x) = = os_stat_rdy_x)) { ... // 程序代码 a } else { ... // 程序代码 b

6.1.2 命名规则
(1)标识符的名称要简明,能够表达出确切的含 义,可以使用完整的单词或通常可以理解的缩 写。 (2)如果
2
[工学]C语言与汇编语言混合编程.doc
7mp[工学]C语言与汇编语言混合编程/>
C 语言与汇编语言混合编程 C 调用由汇编语言编写的子程序 例 1: 汇编子程序 S01A.asm .model small ;采用小型存储模式 .data msg db ´Hello,C and Assembly!´,´$´ .stack 40h .code public _msgshow _msgshow proc far ;过程名加有下划线 mov ah,9 ;小型模式不必设置DS mov dx,offset msg ;寄存器AX和DX无须保护 int 21h ret _msgshow endp end C 主调程序 S01C.C #include <Stdio.h> void main(void) { extern void msgshow(void); printf("This is an example of C & Assembly programming...\n"); msgshow(); getch(); } SET PATH=;;; 汇编 s01a.asm: masm /Ml s01a.asm 编译、链接:tcc –ml –Iinclude –llib s01c.c s01a.obj 在将汇编过程定义为 NEAR 类型时应以 small 模式编译连接,若仍以 LARGE 模式编译连接,则 执行时出现”Abnormal program termination”,且在涉及堆栈参数传递的子程序中会导致 错误的参数访问,在例二中可以体会到。 若汇编模块定义为 large model,则过程应定义为 far 类型,且编译以 large 模式进行。<br />
例二: 例二: s02a.asm public _minx .model small,c .code<br />
_minx<br />
proc far push bp mov bp,sp mov mov cmp jle ;dec mov jmp ax,0 cx,[bp+6] 6 cx,ax ext cx ax,[bp+8] ltest ax,[bp+8
5
[工学]C语言汇编语言混合编程.doc
fka[工学]C语言和汇编语言混合编程

C/C++ 语言和汇编语言混合编程开发 为了充分利用DSP芯片的硬件资源,更好发挥C/C++ 语言和汇编语言进行软 件开发的各自优点,可以将两者有机的结合起来,兼顾两者优点,避免其弊端。 因此,在很多情况下,采用混合编程方法能更好地达到设计要求,完成设计任务。 C/C++语言和汇编语言混合编程的具体方法有以下几种: (1)独立编写C/C++程序和汇编程序,分开编译或汇编形成各自的目标模块,再 用链接器将C/C++模块和汇编模块链接起来,这是一种灵活性较大的方法。但用户 必须自己维护各汇编模块的入口和出口代码,自己计算传递参数在堆栈中的偏移 量,工作量稍大,但能做到对程序的绝对控制,也能满足软件设计结构化的要求。 这是主要讲述的方法。 (2)在C/C++程序中使用汇编程序中定义的变量和常量。 (3)在C/C++程序中直接内嵌汇编语句。这种方法可以在C/C++程序中实现C/C++ 语言无法实现的硬件控制功能,如修改中断控制寄存器、中断标志寄存器等。 (4)在C/C++源程序中使用内部函数直接调用汇编语言语句。 后3种方法由于在C/C++语言中直接嵌入了汇编语言的成分,容易造成程序混 乱,C/C++环境被破坏,甚至导致程序崩溃,而编程者又很难对不良结果进行预期 和有效控制。而如果采用第一种方法,只要遵循<a name="page"></a>
<p class="uli">
<br
83
工学】51单片机C语言编程入门(中科大) 共(83页).pdf
【工学】51单片机C语言编程入门(中科大) 共(83页)
62
[工学]C语言编程题_经典40题附解答[1]1.ppt
[工学]C语言编程题_经典40题附解答[1]1

1、 定义一个带参的宏,使两个参数的值互换,并 、 写出程序,输入两个数作为使用宏时的参数。输出已交 换后的两个值。 # define exchange(a,b,x) x=a; a=b; b=x main( ) { int a , b , x ; printf( “input a and b:”) ; scanf (“%d,%d” , &a , &b ) ; exchange( a , b , x ) ; printf( “ a = %d\n b = %d\n” , a , b ) ; }

2 、编写程序,输入两个整数,求它们相除的余数。 用带参的宏来实现。 # define r(a , b) a%b main( ) { int a , b ; printf( “input a and b:”) ; scanf (“%d,%d” , &a , &b ) ; printf( “%d mod %d = %d\n” , a , b , r( a , b ) ) ; }

3、 分别用函数和带参的宏,从3个数中找出最大值。
int max( int a , int b , int c ) { int x ; x=(a>b)?a:b; x=(x>c)?x:c; return ( x ) ; } # define max( a , b , c , m ) ( m = a > b ? a : b ) > c ? m : c main ( ) 宏展开为: { int x , y , z , m ; (m=x>y?x:y)>z?m :z printf ( “ input x , y , z” ) ; scanf (“%d , %d , %d” , &x , &y , &
43
[工学]天津科技大学2012--2013学年大一C语言程序设计课本课后编程参考答案.doc
[工学]天津科技大学2012--2013学年大一C语言程序设计课本课后编程参考答案//3--1矩形面积 #include<stdio.h> void main() {


float a,b;


float c,area;


printf("n\please input a,b:"); scanf("%f%f",&a,&b); c=(a+b)*2; area=a*b;


printf("c=%f,area=%f\n",c,area); }


//3--2输入三位数,输出它各个数位上的数字


#include<stdio.h> void main()


{


int m,a,b,c;


printf("\nplease input 三位整数:"); scanf("%d",&m); a=m/100;


b=m/10%10; c=m%10;


printf("a=%d,b=%d,c=%d\n",a,b,c); }


//3--3大写字母转换 #include<stdio.h> void main() {


char ch;


printf("\nplease input 大写字母:"); scanf("%c",&ch);


ch=(ch>=´
105
[工学]北京理工大学C语言编程题_答案.pdf
[工学]北京理工大学C语言编程题_答案

c 语言作业题及源码答案
北京理工大学 c 语言作业题

反馈 qq:791808990

c 语言作业题及源码答案(ttcc@bit)

2010

目录
1 温度转换 ..................................................................................................................... 4 2 计算圆柱的侧面积及体积 .....................................................
62
c语言编程题_经典40题(附解答)_工学_高等教育_教育专区.ppt
c语言编程题_经典40题(附解答)_工学_高等教育_教育专区,黄石理工学院c语言,c语言在线解答,c语言,c语言编程软件,c语言入门,c语言教程,c语言程序设计,c语言编译器,计算机二级c语言
38
[工学]C课程设计-第10章 图形函数、系统调用和与汇编语言的接口.ppt
[工学]C课程设计-第10章 图形函数、系统调用和与汇编语言的接口第10章 图形函数、系统调用 和与汇编语言的接口
*重点与难点 10.1 图形函数 10.2 系统调用 10.3 c语言与汇编语言的接口 *本章小结 *作业

重点与难点
重点:图形系统的使用;系统调用和与 汇编语言接口。 难点:系统调用和与汇编语言的接口。

10.1 图形函数
c语言提供了丰富的图形函数,所有 图形函数均包含在头文件graphics.h中。 使用图形库函数必须包含: #include<graphics.h>

图形系统应用
1、初始化图形模式 2、退出图形化模式 3、画图程序举例 4、独立运行的图形程序建立

1、初始化图形模式
int gdriver=detect,gmode; initgraph(&gdriver,&gmode,"d:\\tc"); 譬如:gdriver:vga (9) gmode:vgahi (2) 色调:16色 分辨率:640x480

2、退出图形化模式
closegraph();

3、画图程序举例(例10.1)
#include <graphics.h> #include <conio.h> main() { int gdriver=detect, gmode,errorcode; initgraph(&gdriver, &gmode, "d:\\tc"); errorcode = graphresult(); if( errorcode != grok ){ printf(" graphics system error: %s\n", grapherrormsg( errorcode ) &#
86
[工学]第八章8051内部资源C语言编程.pdf
[工学]第八章8051内部资源C语言编程[工学]第八章8051内部资源C语言编程[工学]第八章8051内部资源C语言编程

向豆丁求助:有没有工学 c语言与汇编语言混合编程?