嵌入汇编与CPUID指令

本文深入介绍了嵌入式汇编的基础知识,包括如何分配和使用寄存器,以及如何将C代码中的变量映射到寄存器。文章详细讲解了CPUID指令的用途,如检测CPU支持的功能,获取处理器签名和高速缓存信息。通过实例展示了如何执行和解析CPUID指令,以获取处理器的Vendor ID、功能位、高速缓存描述符等信息。
摘要由CSDN通过智能技术生成

一.嵌入汇编基础

嵌入式汇编语言存在怎样分配和使用寄存器,以及把C代码中的变量应该存放在哪个寄存器中。

嵌入式汇编的一般形式:

__asm__ __volatile__ ("<asm routine>" : output : input : modify);

__asm__表示汇编代码的开始,__volatile__(这是可选项)含义是避免“asm”指令被删除、移动或组合;

"<asm routine>"为汇编指令部分,"movl %%cr0,%0\n\t"。数字前加前缀“%“,如%1,%2等表示使用寄存器的样板操作数(在GCC内联汇编语句的指令部中,加上前缀'%'的数字 (如%0,%1) 表示的就是需要使用寄存器的"样板"操作数.指令部中使用了几个样板操作数,就表明有几个变量需要与寄存器相结合 )。可以使用的操作数总数取决于具体CPU中通用寄存器的数量,如Intel可以有8个。由于样板操作数的前缀使用了”%“,因此,在用到具体的寄存器时就在前面加两个“%”,如%%cr0。

输出部分

:"=r" (__dummy)

“=r”表示相应的目标操作数(指令部分的%0)可以使用任何一个通用寄存器,并且变量__dummy 存放在这个寄存器中,但如果是:

:“=m”(__dummy)

“=m”就表示相应的目标操作数是存放在内存单元__dummy中。

主要的约束字母及其含义

字母

含义

m, v,o

表示内存单元

R

表示任何通用寄存器

Q

表示寄存器eax, ebx, ecx,edx之一

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值