计算机底层相关
CPU架构、指令集、硬编码(机器码)、汇编之间的关系
在计算机体系结构中,CPU 架构的分类通常依据其指令集架构(ISA)来进行,指令集架构的设计直接影响 CPU 的性能、功耗、指令执行效率等关键因素。根据指令集的设计复杂度,CPU 架构大致可以分为两大类:复杂指令集计算机(CISC)架构和精简指令集计算机(RISC)架构。
- 
    
复杂指令集计算机(CISC,Complex Instruction Set Computing)
复杂指令集计算机架构采用较为复杂的指令集,旨在通过提供多种功能强大的指令来简化编程和减少指令执行次数。CISC 架构的特点是每条指令执行的操作较为复杂,通常涉及多个操作步骤。CISC 架构的设计重点在于减少程序中的指令数量,便于高效地执行复杂的计算任务。
- Intel系列处理器,x86和x86-64架构
 - AMD系列处理器,同样采用x86架构
 
 - 
    
精简指令集计算机(RISC,Reduced Instruction Set Computing)
精简指令集计算机架构强调指令集的简单性和高效性,目的是通过提供较少的、但功能强大的指令来提升指令的执行速度。RISC 架构的指令集通常更简单,且每条指令通常只完成一个操作,因此执行速度较快,但程序通常需要更多的指令来完成同样的任务。
- RISC-V开放指令集架构(ISA)
 - ARM系列处理器
 - 苹果M系列处理器,基于ARM架构进行定制,优化了性能和功耗
 
 
机器码是计算机能够直接理解和执行的二进制代码,它是指令集架构(ISA)中定义的指令在实际硬件中执行的具体编码方式。每种指令集架构都定义了一组操作符、操作数、寻址模式等,机器码则是这些高层次的指令在底层硬件中如何表示的具体方案。
而汇编是将汇编语言(Assembly Language)转化为机器码的过程
由于汇编有不同风格,即存在不同风格的汇编语言(Intel风格 vs AT&T风格)
- Intel风格
    
- 指令格式:操作符 目标, 源
 - 寄存器命名:直接使用寄存器名称,如 EAX、EBX、ECX等
 - 操作数顺序:目标操作数在前,源操作数在后
 - 符号:没有前缀来区分寄存器和内存地址
 
 - AT&T风格
    
- 指令格式:操作符 源, 目标
 - 寄存器命名:寄存器前有 % 符号,如 %eax、%ebx、%ecx 等
 - 操作数顺序:源操作数在前,目标操作数在后
 - 符号:内存地址前通常使用 [] 符号来表示
 
 
因此
- 存在不同的汇编器默认支持不同的汇编风格
    
- GAS(GNU Assembler):默认使用AT&T风格汇编
 - MASM(Microsoft Assembler):默认使用Intel风格汇编
 - NASM(Netwide Assembler):支持多种汇编风格,但一般采用Intel风格
 
 - 存在不同的编译器将高级语言(如 C、C++)转化为不同风格的汇编语言代码
    
- GCC(GNU Compiler Collection)默认使用GAS(GNU Assembler),其汇编语言采用AT&T风格
 - MASM(Microsoft Assembler)配合Microsoft的编译器,生成的是 Intel风格汇编语言
 - Clang在Linux上默认使用GAS,因此生成的汇编代码也是AT&T风格
 
 
不同的汇编风格的代码,如果是在同一架构上,最终会被转换成相同的机器码。