三九宝宝网宝宝教育教学论文

如何把汇编程序嵌入到C语言中

02月17日 编辑 39baobao.com

[请问如何自学嵌入式如何学习嵌入式c语言]嵌入式比单片机高级的多,因为它的上面可以安装操作系统,来实现更加复杂的操作。 嵌入式的概念也很大,包含的许多东西,尤其到了软件这块,分支很多,比如工业控制、图形、网络、手机...+阅读

不同编译器嵌入汇编的方式不一样,具体如下:

一、Turbo C , 也就是所说的TC。

1、使用预处理程序的伪指令#asm和#endasm,#asm用来开始一个汇编程序块,而#endasm指令用于该块的结束。

参考代码:

int mul(int a, int b)

{

/*汇编开始*/

#asm

mov ax,word ptr 8[bp]

imul ax word ptr 10[bp]

#endasm

/*汇编结束。*/

}2、使用asm语句:

格式:asm<;汇编语句>

参考代码:

int mul(int a, int b)

{

asm mov ax,word ptr 8[bp]

asm imul ax word ptr 10[bp]

/*

每个asm对应一句汇编

注意结尾不需要分号

*/

}二、VC++/VS

格式:

__asm 汇编指令 [ ; ]

__asm { 汇编指令 } [ ; ]

asm前面是两条下划线,后面的方括号内容表示分号可有可无。

使用方法:

1、一条一条地用:

__asm mov al, 2

__asm mov dx, 0xD007

__asm out dx, al每行一条汇编, 可以有分号,也可以没有。

2、组成一块地用:

__asm {

mov al, 2

mov dx, 0xD007

out dx, al

}整体作为一个汇编代码块。

3、也可以将多条汇编写在一行:

__asm mov al, 2 __asm mov dx, 0xD007 __asm out dx, al三、GNU GCC

GCC对汇编的支持是最丰富的,简单介绍如下:

1、 用到的关键字:

“__asm__” 表示后面的代码为内嵌汇编,“asm”是“__asm__”的别名。

“__volatile__” 表示编译器不要优化代码,后面的指令保留原样,“volatile”是它的别名。

括号里面是汇编指令。

内嵌汇编语法如下:

__asm__(

汇编语句模板:

输出部分:

输入部分:

破坏描述部分)

一个简单的汇编模板:

int a=10,b;

asm("movl %1, %%eax;

movl %%eax, %0;"

:"=r"(b) /*输出部*/

:"r"(a) /*输入部*/

:"%eax" /*毁坏部*/

);表示C语言里的“b=a;”。

里边r表示使用任意寄存器,%0、%1表示使用两个寄存器,一般只能%0~%9共十个操作数,按输入输出部变量出现顺序进行映射。

寄存器用两个百分号,是因为使用了%0%1这些数字使百分号有了特殊意义,所以在操作数出现的寄存器必须用双百分表示。

毁坏部里边的%eax表示eax寄存器在汇编代码块执行过程中会被改写,在执行前要保护好,这是提交给编译器决定的。

以下为关联文档:

C语言嵌入式C刚开始学的时候,学习用汇编程序写你会对硬件的理解更深些, 当你对硬件比较熟悉的时候,编写这些程序就简单了。你再用C语言写这些程序的时候就会发现用C写的程序是多么的简单,简...

如何在VC 6 0中编辑C语言程序您好SA 团队给出的答案 写一些小程序的新建方法:(建一个win32 console application的程序) 点击file/点击New.../点击projects/点击win32 console application 在右边写上你给...

C语言中如何调用子程序C语言中,子程序是通过函数来实现的,一个函数相当于一个有独立功能的子程序,子程序意在体现着main函数的作用。 函数机制的实现通常需要经过设计、声明和调用来完成的。 所有的...

C语言中如何随机选取数组中的数字程序代码请写出应该是a[2][3]={{1,3,2},{8,0,3}} 吧 #include //cout函数的头文件 #include #include /* srand函数与rand函数的头文件*/ using namespace std; int main() { int a[2][3]=...

c语言题目 c语言程序中当调用函数时哪个正确c语言程序中,当调用函数时,实参和形参各占一个独立的存储单元。 C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存...

C语言程序中没有返回值的函数如何把运算结果返回给主函数的#include <stdio.h> void swap(int*a,int*b) { int t; t=a; a=b; b=t; printf("a=%d b=%d\n",*a,*b);//试试看a,b } main() { int x=10,y=20; printf(" (1)x=%d y=%d\n",x,y); sw...

如何自学Linux下C语言嵌入式编程开发板用友善之臂的吧 mini2440 连3.5寸屏500块钱的样子 有好几张DVD学习光盘 这款口碑比较高 嵌入式Linux操作系统学习规划 ARM+LINUX路线,主攻嵌入式Linux操作系统及其上应...

C语言程序中如何打开文件while(fscanf(fp,"%c",&c),c!=EOF) 应改为 while (fscanf(fp,"%c",&c)!=EOF) 例如: //--------------------------------------------------------------------------- #include <s...

vs2010中如何编写C语言程序File->New->Project 在打开的New Project对话框中最左侧一栏中选择Visual C++下面的CLR,之后在其右侧的区域中选择CLR Empty Application 并在下面的三个文本框中填入工程名...

推荐阅读
图文推荐