假设我有以下asm程序,exit.s
:
.section .text
.globl _start
_start:
movl $1, %eax
movl $0, %ebx
int $0x80
当我运行以下命令来构建目标文件时:
$ as exit.s -o exit.o
这到底在做什么,为什么需要这样做?摘自《从头开始编程》一书:
目标文件是使用机器语言编写的代码,但尚未完全组合在一起。
我认为这就是汇编语言本身的重点?那么汇编程序(exit.s)和目标文件(exit.o)之间的区别是什么。不能同时被计算机读取,例如在第一行进行十六进制转储:
0000000 2e 73 65 63 74 69 6f 6e 20 2e 74 65 78 74 0a
000000f
为什么计算机无法直接理解?
答案 0 :(得分:0)
这到底在做什么
那就是将程序集(人类可读的文本)组装(翻译)成机器代码(机器可读的二进制文件)。
为什么需要
因为CPU无法执行文本,所以它们只能执行机器代码。
为什么计算机无法直接理解?
首先,第一行是汇编程序的指令,而不是指令。这些行告诉汇编程序如何进行汇编,而不是什么进行汇编。
其次,设计和构建执行文本汇编的CPU绝对是可能的,但根本没有优势:设计难度大,构建难度大,执行速度慢,程序的大小可能是程序的3倍,4倍。当前的机器代码...如您所见,这种方式并不是很有效。