c课件附2杂项

c课件附2杂项

ID:42044322

大小:39.50 KB

页数:3页

时间:2019-09-06

c课件附2杂项_第1页
c课件附2杂项_第2页
c课件附2杂项_第3页
资源描述:

《c课件附2杂项》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、附2杂项问题本附录列举了C/C++编程屮的一些杂项问题。一、混合编程在实际工作屮,常需要将C/C++与汇编语言混介编程,与C/C++为主,在特别需要效率或用C/C++解决不了问题的地方使用汇编。很多操作系统、嵌入式系统、控制系统都是这么做的。标准的C/C++里似乎没有规定C/C++与汇编语言混合编程的语法或标准库,C/C++与汇编语言混合编程应该是属于编译器厂家提供的扩展功能。汇编语言是完全与平台有关的,而不同厂家编译器的编译格式又不一样(比如不同厂家编译器对函数参数入栈/出栈的顺序不一样,有的从左往右,有的从右往左),所以使用不同平台、不同编译器,混合编程的细节方而有较大出入

2、。但是一般的实现方法是相似的,无外乎两种:一种是在C语言中I茨入汇编语言代码。另一种是让c语言从外部调用汇编语言文件。1在C语言中嵌入汇编语言代码很多编译器厂家为C语言扩展了一个关键字:asm(或_asm),用于在C语言中如何嵌入汇编语言代码。有两种格式,一种是单句的,一种是模块的。例1:VC++中asm模块ineludevoidmain(void){cout<<“HELLO”;_asm〃汇编代码块{MOVAX,0x0200MOVDL,7INT0x21};cout<<"Done.An";例2:VC++中单句asmineludevo

3、idmain(void){cout<<“HELLO”;_asmMOVAX,0x0200;_asmMOVDL,7;_asmINT0x21;};2C语言从外部调用汇编语言文件当汇编语言行数较多时,使用嵌入式汇编语言代码就不合适了。可以让C语言文件从外部调用汇编语言文件。这时就需要在汇编和C之间进行一些数据的传递,最简便的办法就是使用全局变量,比如使用extern关键字定义全局变量。3.关键问题混合编程应注意的主要问题是:参数传递问题,该问题与不同厂家编译器的编译格式有很人关系(比如不同厂家编译器对函数参数入栈/出栈的顺序不一样,有的从左往右,有的从右往左),必需事先了解你使用的编译

4、器的编译格式。汇编语言代码不能破坏C语言占用的CPU寄存器信息,这个问题完全与平台有关,要求你对所用的平台有深入了解。混合编程中的汇编语言代码一般最好用来操作外设寄存器,尽可能少与CPU寄存器信息打交道。二.C/C++多线程编程进程的管理一•般由操作系统來做,而线程常常是程序员可控的(操作系统教材告诉我们:线程有用八级的和系统级的),同学们应在掌握线程一般特性的基础上,至少会使用一种开发环境编写简单的多线程程序。JAVA语言本身儿乎不支持多线程,JAVA对多线程的支持是通过类库(比如Thread类)进行的。C/C++语言本身也不支持多线程,而口C/C++也不支持多线程,但是大多

5、数编译器厂家都提供了扩展的线程库,有的是以函数库形式,有的是与类的形式。需要的时候根据你使用的开发环境去查找这些库就可以了。三、C/C++数据炸编程I川、程序入口地址绑定,函数入口地址绑定,变量地址绑定在C/C++与硬件有关的实际编程中,常有这样的要求:•将程序入口绑定在一个绝对地址中,程序只能从该地址启动,比如ROM程序。•将函数入口绑定在一个绝对地址中:同上。•将某一变量绑定在一个绝对地址中:比如一些设备寄存器、端口是地址固定的,对其操作的变量或常量地址也应是固定的。上述要求有的可以用标准的C/C卄实现,有的是与平台有关的,由编岸器厂商(尤其是嵌入式系统)实现。下面举儿个例

6、子说明怎样解决这些问题。(1)程序入口绑定在一个绝対地址中C/C++默认的编译方式是地址相对的,比如Windows下的.exe文件,它在编译完成片程序的入口地址是相对的。在运行时,操作系统按内存情况给这个进程分配合适的空间。但Windows下的.com文件是绝对地址绑定,将Windows平台卜C/C++编译成.com就可以将程序入口绑定在一个固定地址中,但极少有人在Windows平台下这样做。在一些嵌入系统中,提供类似以下指令:ttpragmalocation二OxXXXX//定义程序入口还有的编译器提供以下at指令:unsignedCHARxdatayour_data_at_

7、Ox1234(2)函数入口绑定在一个绝对地址中在一些嵌入系统屮,提供类似以下指令:voidfuction(vid)@z,myseg,z(3)某-•变量绑定在一个绝对地址中用标准C/C++可以实现,首先这种变量要定义为全局或static变量,然后借助丁•类型转换:unsignedchara;unsignedchar*p=(unsignedchar*)100h;//类烈转换是必需的a=*p〃取地址100h的值a=,c,;*p=a;〃a赋新值后,送冋100h上而的代码地址是演示性的(真实的地址与平

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。