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

如何在C语言中嵌入汇编

02月16日 编辑 39baobao.com

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

在 Visual C++ 中使用内联汇编- - 使用内联汇编可以在 C/C++ 代码中嵌入汇编语言指令,而且不需要额外的汇编和连接步骤。在 Visual C++ 中,内联汇编是内置的编译器,因此不需要配置诸如 MASM 一类的独立汇编工具。这里,我们就以 Visual Studio .NET 2003 为背景,介绍在 Visual C++ 中使用内联汇的相关知识(如果是早期的版本,可能会有些许出入)。 内联汇编代码可以使用 C/C++ 变量和函数,因此它能非常容易地整合到 C/C++ 代码中。它能做一些对于单独使用 C/C++ 来说非常笨重或不可能完成的任务。

一、 优点 使用内联汇编可以在 C/C++ 代码中嵌入汇编语言指令,而且不需要额外的汇编和连接步骤。在 Visual C++ 中,内联汇编是内置的编译器,因此不需要配置诸如 MASM 一类的独立汇编工具。这里,我们就以 Visual Studio .NET 2003 为背景,介绍在 Visual C++ 中使用内联汇的相关知识(如果是早期的版本,可能会有些许出入)。 内联汇编代码可以使用 C/C++ 变量和函数,因此它能非常容易地整合到 C/C++ 代码中。它能做一些对于单独使用 C/C++ 来说非常笨重或不可能完成的任务。 内联汇编的用途包括: 使用汇编语言编写特定的函数; 编写对速度要求非常较高的代码; 在设备驱动程序中直接访问硬件; 编写 naked 函数的初始化和结束代码。

二、 关键字 使用内联汇编要用到 __asm 关键字,它可以出现在任何允许 C/C++ 语句出现的地方。我们来看一些例子: 简单的 __asm 块: __asm { MOV AL, 2 MOV DX, 0xD007 OUT AL, DX } 在每条汇编指令之前加 __asm 关键字: __asm MOV AL, 2 __asm MOV DX, 0xD007 __asm OUT AL, DX 因为 __asm 关键字是语句分隔符,所以可以把多条汇编指令放在同一行: __asm MOV AL, 2 __asm MOV DX, 0xD007 __asm OUT AL, DX 显然,第一种方法与 C/C++ 的风格很一致,并且把汇编代码和 C/C++ 代码清楚地分开,还避免了重复输入 __asm 关键字,因此推荐使用第一种方法。 不像在 C/C++ 中的"{ }",__asm 块的"{ }"不会影响 C/C++ 变量的作用范围。同时,__asm 块可以嵌套,而且嵌套也不会影响变量的作用范围。 为了与低版本的 Visual C++ 兼容,_asm 和 __asm 具有相同的意义。另外,Visual C++ 支持标准 C++ 的 asm 关键字,但是它不会生成任何指令,它的作用仅限于使编译器不会出现编译错误。要使用内联汇编,必须使用 __asm 而不是 asm 关键字。

三、 汇编语言 1. 指令集 内联汇编支持 Intel Pentium 4 和 AMD Athlon 的所有指令。更多其它处理器的指令可以通过 _EMIT 伪指令来创建(_EMIT 伪指令说明见下文)。 2. MASM 表达式 在内联汇编代码中,可以使用所有的 MASM 表达式(MASM 表达式是指用来计算一个数值或一个地址的操作符和操作数的组合)。 3. 数据指示符和操作符 虽然 __asm 块中允许使用 C/C++ 的数据类型和对象,但它不能使用 MASM 指示符和操作符来定义数据对象。这里特别指出,__asm 块中不允许 MASM 中的定义指示符(DB、DW、DD、DQ、DT 和 DF),也不允许使用 DUP 和 THIS 操作符。MASM 中的结构和记录也不再有效,内联汇编不接受 STRUC、RECORD、

以下为关联文档:

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

请举例说明如何在C语言中引用函数引用库函数只要定义了头文件就可以,比如引用库函数printf()和scanf(): #include<stdio.h> void main() { printf("输出函数"); scanf("输入函数"); } 引用自己定义的函数一般需要先声明(...

在C语言中如何绝对值呢方法一:用C语言中自带的绝对值函数表示: 如果a是整数: #include<stdio.h> #include<math.h> int a=100,b; b=abs(a); printf("%d",b); 如果a是浮点数: #include<stdio.h> #include...

在C语言中如何产生随机数假设要生成的随机数是大于等于20且小于等于100的整数 #include<stdio.h> #include<time.h> #include<stdlib.h> void main() { int a,b,x; a=20; b=100; srand((unsigned in...

在c语言中如何获取当前日期#include <time.h&gt; 要添加这个头文件。 time_t rawtime; struct tm * target_time; time ( &rawtime ); //获取当前时间,存rawtime里 target_time = localtime ( &rawtime )...

C学习笔记一 C语言和汇编语言的区别C学习笔记(一) C语言和汇编语言的区别 2016-07-11 09:43 162人阅读 评论(0) 收藏 举报 分类: C学习笔记(13) 版权声明:本文为博主原创文章,未经博主允许不得转载。 C学习笔记(五) C语言...

C语言中定义一个结构体如何在不同的 C文件中使用比如三个.c文件一个.h文件 1. c 2.c 3.c 4.h 这三个头文件都引用4.h include<4.h> 4.h中定义一个结构体类型struct test{}; 1.c中定义一个该结构体类型的全局变量struct tes...

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

如何在C语言中定义一个函数#includelt;stdio.hgt;nbsp;voidnbsp;main()nbsp;{nbsp;intnbsp;max(intnbsp;x,intnbsp;y);nbsp;intnbsp;a,b;nbsp;scanf(“%d%d“,amp;a,amp;b);nbsp;printf(“%d “,max(a...

推荐阅读
图文推荐