计算机除了一个和零之外什么都不懂。但是我想知道如何将源代码或指令集转换成1和0的详细信息。exe文件只包含1和0吗?
答案 0 :(得分:8)
微处理器instruction set中的每种操作都由操作码指定,操作码表示为1和0的模式。 compiler或interpreter将源语言中的代码转换为由machine code组成的代码。
例如,使用此代码,其中变量x
被赋值为50:
x = 50;
编译器可能会将其转换为以下汇编语言,其中AX寄存器(对于x
变量)使用MOV指令设置值50(以十六进制表示):< / p>
mov ax, 0x32
如果MOV
的操作码 0xA0 且AX寄存器的代码为 0xB ,那么二进制的机器代码将如下所示:
10100000 00001011 00110010
答案 1 :(得分:4)
您需要研究Compilers
答案 2 :(得分:2)
是。 .exe本质上是一个包含0和1的二进制文件格式(它还包含运行程序的其他重要操作系统信息)
CPU附带某些基本操作的规范,如SUM,MOV等。这些是CPU知道的唯一操作。编译器的工作是解释2 + 3
之类的东西并将其转换为CPU可以解释的内容(SUM和标志检查溢出等等。)。
因此,在本质上编写像2 + 3
这样的高级代码时,这只是编写大量汇编代码的一种较短的方式(这只是二进制文件的人类可读版本)。
答案 3 :(得分:0)
编译代码时,编译器在Assembly中创建等效项,然后运行到处理器。汇编程序将汇编程序转换为二进制文件。
每个高级指令(用您的编程语言)作为与之关联的汇编指令。这些汇编指令可以高度优化(因此GCC和其他编译器,优化标志)。