您的位置:

自制cpuc语言,什么芯片可以用c语言编程

本文目录一览:

用c语言可以实现cpu中央控制器的设计吗

CPU中央控制器设计:

1、用FPGA实现,语言是VHDL或者Verilog HDL,因为CPU讲究的是速度和可靠性,用纯粹的数字硬件电路来实现最好不过了。

2、用嵌入式芯片,比如ARM,然后搭载别人的操作系统,留出需要的接口,这样是用C语言来实现的,但是核心就是操作系统,C来驱动硬件实现控制作用。而最底层的硬件还是用硬件描述语言VHDL或者Verilog HDL来实现的。所以你所指的C语言实现CPU的设计还是基于一定的硬件平台的操作系统,而且已经预留硬件的接口,用C语言编写的驱动和内核而已。

3、单纯的讲CPU大部分是用硬件描述语言,就是1中所述的来设计的。而绝非 在已有的硬件平台下写个驱动和内核,不过现在的好多硬件都可以用C语言来开发,只不过效率没有硬件描述语言高。你说的实现CPU的设计不是没有可能,只不过很少人这么做!

纯手打,如果满意望采纳!

C语言如何适配CPU

c语言是没法操控cpu的,操控cpu只能是汇编,所以写操作系统是没法完全靠c,必须加汇编进去混合编程

C语言 编程实现获取cpu信息

耐心看看啊,运行通过啦,希望对你有帮助啊!

#includestdio.h

unsigned int veax;

unsigned int vebx;

unsigned int vedx;

unsigned int vecx;

//执行CPUID指令

void cpuid(unsigned int veax1)

{

_asm{

mov eax,veax1

cpuid

mov veax,eax

mov vebx,ebx

mov vecx,ecx

mov vedx,edx

}

}

//做移位操作,把寄存器中的ASCII码,以字符形式输出

void LeftMove(unsigned int var)

{

printf("%c",var);

for(int i=0;i3;i++)

{

var=(var;

printf("%c",var);

}

}

//做移位操作,把寄存器中的值以“%d”形式输出

void LM(unsigned int var)

{

printf("%d",var);

for(int i=0;i3;i++)

{

var=(var;

printf("%d",var);

}

}

//得到CPU的生产厂商(当EAX值为0时),依次存放在EBX,EDX,ECX中

void getCpuName()

{

cpuid(0);

LeftMove(vebx);

LeftMove(vedx);

LeftMove(vecx);

printf("\

";

}

//得到CPU的商标,当EAX中的值为0x80000003和0x80000004时分别返回16个字符,组成商标

//依次存放在EAX,EBX,ECX,EDX中

void getCpuBrand()

{

for(int j=0;j2;j++)

{

cpuid(0x80000003+j);

LeftMove(veax);

LeftMove(vebx);

LeftMove(vecx);

LeftMove(vedx);

}

printf("\

";

}

//获得CPU的特性,参数是eax = 1,返回值放在edx和ecx,通过验证edx或者ecx的某一个bit,

//可以获得CPU的一个特性是否被支持。比如说,edx的bit 32代表是否支持MMX,

//edx的bit 28代表是否支持Hyper-Threading,ecx的bit 7代表是否支持speed sted。

void getCpuFeature()

{//由于特性太多,无法一一编写,需要的时候再写,方法是一样的。

}

//获得CPU序列号,获得序列号需要两个步骤,首先用eax = 1做参数,返回的eax中存储序列号的高两个WORD。

//用eax = 3做参数,返回ecx和edx按从低位到高位的顺序存储前4个WORD。

void getCpuSeris()

{

cpuid(1);

LM(veax);

cpuid(3);

LM(vecx);

LM(vedx);

printf("\

";

}

void main()

{

getCpuName();

getCpuBrand();

getCpuSeris();

}

C语言怎么取CPU的各项信息

X86处理器的型号,信息处理器家庭,高速缓存尺寸,时钟速度(频率)和制造商codename 等,存放在处理器的CPU ID寄存器组中。

通过执行CPU ID指令集查询,即可获取处理器的相关信息。CPU ID汇编指令使用使用eax作为输入参数(有时也用到ecx),eax、ebx、ecx、edx作为输出参数。

示例汇编代码如下:

1

2

mov eax, 1

cpuid

在C语言中(VC6以上)实现方法为:

32位模式下,可使用内嵌汇编来调用cpuid指令;64位模式下,VC编译器不支持内嵌汇编,此时可使用微软提供的Intrinsics函数,来执行cpuid指令,该函数支持32位和64位,该函数包含在 intrin.h中。CPUID指令的对应Intrinsics函数为如下两个:

void __cpuid( int CPUInfo[4], int InfoType);

void __cpuidex( int CPUInfo[4], int InfoType, int ECXValue);

其中InfoType参数是CPUID指令的eax参数,即功能ID。ECXValue参数是CPUID指令的ecx参数,即子功能ID。CPUInfo参数用于接收输出的eax, ebx, ecx, edx这四个寄存器。早期的CPUID功能只要一个功能ID参数(eax),这时使用__cpuid函数。后来CPUID的功能扩展,又加了一个子功能ID(ecx)参数,这时用__cpuidex。64位环境下包含 intrin.h后直接调用两个系统库函数即可。

用x86 CPU汇编语言设计一个实现如下C语言语句功能的程序

data segment ;定义数据段,你说浮点数类型,也没讲是双精度还是单精度。我这里用字类型。

x DW 1000 dup(?)

s DW ?

data ends

code segment;定义代码段

assume cs:code,ds:data

start:

mov ax,data

mov ds,ax

mov cx,1000 ;设置循环次数

lea bx,x ;装载数组首地址

mov ax,s

L1: add [bx],ax ;加法操作

add bx,2 ;指针后移,指向下一数组元素。这里因为是字类型,所以后移两个字节。

loop L1

mov ax,4c00h

int 21h

code ends

end start

这段代码超简单。我已经在本机运行过。但是你就这么运行结果都为零。因为你没给我数组的初值。但是这段代码完全实现你想要的功能。你要是还不明白,我也没办法。你用的时候赋初值就行,就那个数据段有 ?的地方换成数据,明白吧。