就是64位的GCC编译器,一种开源的C/C++编译器
i386是intel的较早期的32位处理器的名称,与i486、i586等是一个系列的,这个系列也叫x86。而且保持着...
gcc编译支持arm64, arm32, x86_64,x86自已修改下。 gcc .c ./a.out value1 value2 // test states #include <stdio.h> #include <stdlib.h> #if (defined __aarch64__) || (defined __arm__) // arm #define VF 28 #define CF 29 #define ZF 30 #define SF 31 #else //x86 #define ...
4、gcc 表示是 gcc 工具。
一x86、x86_64、AMD64 x86是指intel的开发的一种32位指令集,从386开始时代开始的,一直沿用至今,是一种cisc指令集,所有intel早期的cpu,amd早期的cpu都支持这种指令集,ntel官方文档里面称为“IA-32” x84_64是x86 CPU开始迈向64位的时候,有2选择:1、向下兼容x86。2、完全重新设计指令集,不兼容x86。AMD抢跑了...
前面章节提到,这种栈帧结构,在x86_64中被抛弃。gcc 在64位编译器中默认不使用rbp保存栈帧地址,即不再保存上一个栈帧地址,因此在x86_64中也就无法使用这种栈回溯方式(不过可以使用-fno-omit-frame-pointer选项保存栈帧rbp)。 【2】DWARF 调试信息标准DWARF(Debugging With Attributed Record Formats)定义了一个.de...
gcc 为什么在arm 开发板上 就是编译的arch64 , 在虚拟机中编译的就是 x86 在开发板上,编译命令如下, 并且程序也是可以运行的。 看看原因。 所以 在板子上编译的是 aarch64 架构的。
%gcc hello.s-c-o hello.o%nm hello.o0000000000000000TmainUprintf nm -> 是names的缩写,nm命令主要是用来列出某些文件中的符号(换句话说就是一些函数和全局变量)。 上面的代码显示的符号对于链接器都是可用的。main出现在目标文件的代码段(T),位于地址0处,也就是说位于文件的开头;printf未定义(U),因为它...
X86-64的出现,给GCC提供了一个绝好的机会,在新的x86-64机器上,放弃保守的假设,进而充分利用x86-64的各种特性,比如:在过程调用中,通过寄存器来传递参数,而不是传统的堆栈。又如:尽量使用条件传送指令,而不是控制跳转指令。 寄存器简介 先明确一点,本文关注的是通用寄存器(后简称寄存器)。既然是通用的,使用并没有...
所以我们现在知道, 在 x86_64/linux/gcc3.2 中, 即使不打开优化选项, 函数的参数也会通过寄存器来传递, 这肯定是阔了的表现(通用寄存器多了). 我试验了多个参数的情况,发现一般规则为, 当参数少于7个时, 参数从左到右放入寄存器: rdi, rsi, rdx, rcx, r8, r9。当参数为 7 个以上时, 前 6 个与前面...