汇编
文章平均质量分 91
龙图腾
驱动工程师真心喜欢学习真心喜欢技术
展开
-
在 Visual C++ 中使用内联汇编- -
在 Visual C++ 中使用内联汇编- - 使用内联汇编可以在 C/C++ 代码中嵌入汇编语言指令,而且不需要额外的汇编和连接步骤。在 Visual C++ 中,内联汇编是内置的编译器,因此不需要配置诸如 MASM 一类的独立汇编工具。这里,我们就以 Visual Studio .NET 2003 为背景,介绍在 Visual C++ 中使用内联汇的相关知识(如果是早期的版本,可能转载 2012-09-15 18:09:06 · 1287 阅读 · 0 评论 -
原子操作的实现 ARM的SWP和LDREX STREX指令
早期的ARM指令集(V6前)提供SWP指令,该指令可原子交换寄存器和内存数据,用于实现信号量操作。 如下面这个例子: sem_wati:MOV R1,#0 LDR R0,=SEMSWP R1,R1,[R0] ;取出信号量,并设置其为0CMP R1,#0 ;判断是否有信号BEQ sem_wait ;若没有信号,则等待 SWP指令的缺点是会lock总线,转载 2012-10-19 12:12:19 · 2820 阅读 · 0 评论 -
GCC链接脚本
对于.lds文件,它定义了整个程序编译之后的连接过程,决定了一个可执行程序的各个段的存储位置。虽然现在我还没怎么用它,但感觉还是挺重要的,有必要了解一下。先看一下GNU官方网站上对.lds文件形式的完整描述:SECTIONS {...secname start BLOCK(align) (NOLOAD) : AT ( ldadr ){ contents } >region :p转载 2012-10-23 15:13:16 · 1219 阅读 · 0 评论 -
x86和arm架构原子操作的区别
x86和arm在原子操作上有些差别,下面一代码的形式来说明区别:首先比较单核: 由于x86是CISC指令集,允许在一条指令里进行两次内存操作,所以对i++,i__这些操作在单核条件下是原子,当然必须得是显示使用addl r,%1这种,就可在一条指令里完成读,写操作。 而arm属于RISC指令集,在一次指令执行期间只能有一次内存操作,所以像i++,i--这些转载 2012-10-19 14:48:00 · 1177 阅读 · 0 评论 -
arm gcc内嵌汇编
arm gcc内嵌汇编=============================高级语言可以实现大部分编程功能,但是当我们需要对特定代码进行优化,写启动代码,或者操作特定硬件,或需要直接用CPU指令等等操作的时候我们需要用到汇编。但是我们只想在高级语言(比如C语言)中的某些特定部分插入某些汇编指令,这时候,我们就需要用高级语言提供的内嵌汇编功能。我们以arm gcc为例,用arm gcc进原创 2012-10-19 14:33:49 · 711 阅读 · 0 评论 -
LDREX and STREX
最近看linux关于atomic的实现的代码(asm/atomic.h)发现大量使用了LDREX和STREX(ARM体系结构),现将这两个指令的用法总结如下。详细用法 http://www.keil.com/support/man/docs/armasm/armasm_cihbghef.htm Syntax:LDREX{cond} Rt, [Rn {, #offset}]S转载 2012-10-19 10:37:31 · 1401 阅读 · 0 评论 -
ARM_GCC内嵌汇编
关于这篇文档对于基于ARM的RISC处理器,GNU C编译器提供了在C代码中内嵌汇编的功能。这种非常酷的特性提供了C代码没有的功能,比如手动优化软件关键部分的代码、使用相关的处理器指令。这里设想了读者是熟练编写ARM汇编程序读者,因为该片文档不是ARM汇编手册。同样也不是C语言手册。这篇文档假设使用的是GCC 4 的版本,但是对于早期的版本也有效。GCC asm 声明让我们以一转载 2012-09-17 16:11:39 · 1298 阅读 · 0 评论 -
ARM linux常用汇编语法
=============================汇编语言每行的语法: lable: instruction ; comment段操作: .section 格式: .section 段名 [标志] [标志]可以是如下: a 允许段 w 可写段 x 可执行段 常见段名: data, bss, text, rodata段,我们也可以定义我原创 2012-09-17 22:28:46 · 1237 阅读 · 0 评论 -
ARM所有常用指令的实例与说明
ARM所有常用指令的实例与说明:程序跳转类指令:====================BX, 语法: bx Rn 此指令执行程序跳转,执行后,cpu从Rn这个寄存器里面所存的内存地址处开始继续执行。由于是跳转,因此也会同时刷新管道线。另外,如果此Rn的最低位为1的话,随后的指令将被译作thumb指令,如果最低位为0的话,随后的指令将被译作arm32位指令。因此,原创 2012-09-17 22:30:25 · 4535 阅读 · 0 评论 -
arm gcc内嵌汇编
arm gcc内嵌汇编=============================高级语言可以实现大部分编程功能,但是当我们需要对特定代码进行优化,写启动代码,或者操作特定硬件,或需要直接用CPU指令等等操作的时候我们需要用到汇编。但是我们只想在高级语言(比如C语言)中的某些特定部分插入某些汇编指令,这时候,我们就需要用高级语言提供的内嵌汇编功能。我们以arm gcc为例,用arm gcc进原创 2012-09-17 22:27:03 · 4450 阅读 · 0 评论 -
嵌入式 C 中嵌套汇编的格式
在使用gcc编译的时候,可以在C语言程序中嵌套汇编指令,这样极大的方便在高级语言中使用跟配件相关的指令。(1) 在gcc中嵌套的汇编指令跟纯汇编文件的语法有一点不一样,在gcc中嵌套指令的格式是固定的: __asm__(code : output operand list : input operand list : clobber list);转载 2012-09-15 17:47:56 · 1141 阅读 · 0 评论