什么样算网站需要备案,centos7装wordpress,织梦模板大全,ps做游戏下载网站有哪些本文来自《程序员的自我修养》
编译过程是把预处理完的文件进行一系列词法分析#xff0c;语法分析#xff0c;语义分析以及优化后生成相应的汇编文件代码。
现在版本的GCC把预编译和编译两个步骤合并为一个步骤。
gcc -S HelloWorld.c HelloWorld.sint main()
{//test/* …本文来自《程序员的自我修养》
编译过程是把预处理完的文件进行一系列词法分析语法分析语义分析以及优化后生成相应的汇编文件代码。
现在版本的GCC把预编译和编译两个步骤合并为一个步骤。
gcc -S HelloWorld.c HelloWorld.sint main()
{//test/* test */return 0;
} .file HelloWorld.c.text.globl main.type main, function
main:
.LFB0:.cfi_startprocendbr64pushq %rbp.cfi_def_cfa_offset 16.cfi_offset 6, -16movq %rsp, %rbp.cfi_def_cfa_register 6movl $0, %eaxpopq %rbp.cfi_def_cfa 7, 8ret.cfi_endproc
.LFE0:.size main, .-main.ident GCC: (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0.section .note.GNU-stack,,progbits.section .note.gnu.property,a.align 8.long 1f - 0f.long 4f - 1f.long 5
0:.string GNU
1:.align 8.long 0xc0000002.long 3f - 2f
2:.long 0x3
3:.align 8
4:
------------
对于C语言的代码来说这个预编译和编译的程序是cc1,
对于C来说对应的程序是cc1plus;
实际上gcc这个命令只是这些后台程序的封装它会根据不同的参数要求去调用预编译编译程序cc1,汇编器as,链接器ld.
--------------
汇编器将汇编代码转变为机器可以执行的指令每一个汇编代码几乎都对应一条机器指令所以汇编器的汇编过程相对于编译器来说比较简单没有复杂的语法没有语义不需要做指令优化
只是根据汇编指令和机器指令的对照表一一翻译即可。
gcc -c HelloWorld.s -o HelloWorld.o把汇编代码转为机器指令。
----------
机器指令是计算机能够直接理解和执行的最基本的命令。它们通常以二进制形式存在是硬件与软件交互的桥梁。每一条机器指令都对应着处理器上的一个特定的操作比如数据传输、算术计算、控制操作等。
以下是机器指令的一些基本特点 二进制格式机器指令通常由一系列的二进制数表示这些二进制数可以被计算机的CPU直接解读。 操作码每条机器指令都包含一个操作码Opcode它指定了CPU要执行的操作类型如加法、减法、移动数据等。 操作数大多数指令还包括一个或多个操作数这些操作数指定了数据的位置例如寄存器、内存地址或者指令中直接包含的常数。 指令长度不同架构的CPU其机器指令的长度可能不同。有的指令可能是固定长度的而有的可能是变长的。 执行顺序机器指令通常按照它们在存储器中的顺序执行除非遇到跳转指令或者其他改变执行流程的指令。
以下是一些常见的机器指令类型
数据传输指令如MOV移动数据用来在寄存器与内存之间或者寄存器之间传输数据。算术指令如ADD加法、SUB减法、MUL乘法、DIV除法等用于执行数学运算。逻辑指令如AND、OR、NOT、XOR等用于执行逻辑运算。控制流指令如JMP跳转、JE等于时跳转、JNE不等于时跳转等用于改变程序的执行顺序。
程序员通常使用高级编程语言来编写程序然后通过编译器或解释器转换成机器指令计算机才能执行这些程序。机器指令直接与硬件相关因此它们在不同的计算机架构之间通常是不同的。
-------------
MOV 既可以作为机器指令也可以作为汇编指令。
在汇编语言中MOV 是一个汇编指令它用于指示处理器将数据从一个位置移动到另一个位置。当程序员编写汇编语言程序时他们使用 MOV 这样的助记符来表示他们想要执行的数据移动操作。
当汇编语言程序被汇编器assembler转换成机器代码时MOV 汇编指令会被翻译成对应的机器指令。这个机器指令是处理器可以直接执行的二进制编码它具体表示了移动数据的操作。
所以MOV 在汇编语言层面是一个汇编指令而在机器代码层面则对应一个或多个具体的机器指令。不同的处理器架构可能会有不同的机器指令来执行 MOV 操作。例如在 x86 架构中MOV 汇编指令会对应于一个特定的机器指令操作码而在 ARM 架构中它可能对应于不同的机器指令操作码。