【问题标题】:Various Types of "Code" (Machine, Binary etc)各种类型的“代码”(机器、二进制等)
【发布时间】:2015-01-02 02:54:19
【问题描述】:
所以,经过数小时的研究,我得出的结论是我不太了解。
-
二进制和机器码/操作码:
机器码就是CPU能理解的东西,机器码本身是纯二进制做的对吗?
以000010 00000 00000 00000 10000 000000 为例。这是跳转到 1024 的机器代码。该机器代码由二进制组成。那是对的吗?
000010是一个OPCode,一个机器码指令,由二进制组成,对吗?
-
汇编语言
汇编语言为操作码提供助记符对吗?那么对于000010,汇编程序助记符是J 或JMP 对吗?
汇编器组装成什么?它会产生原始机器代码吗?原始机器代码的文件扩展名是什么?汇编是如何执行的?
-
目标代码/目标文件
有人能解释一下这些是什么吗?这些是汇编的输出吗?谢谢大家!
【问题讨论】:
标签:
assembly
binary
machine-code
【解决方案1】:
机器码就是CPU能理解的东西,机器码本身是纯二进制的对吗?
是的,但操作码因 CPU 而异。
Intel 80386+架构的指令由以下字节组成:
Instruction Prefix 0 or 1 Byte
Address-Size Prefix 0 or 1 Byte
Operand-Size Prefix 0 or 1 Byte
Segment Prefix 0 or 1 Byte
Opcode 1 or 2 Byte
Mod R/M 0 or 1 Byte
SIB, Scale Index Base (386+) 0 or 1 Byte
Displacement 0, 1, 2 or 4 Byte (4 only 386+)
Immediate 0, 1, 2 or 4 Byte (4 only 386+)
它会产生原始机器码吗?
是的。
原始机器码的文件扩展名是什么?
在 Linux 中,可执行文件不需要文件扩展名。但是必须设置可执行文件的文件属性。
在 DOS 中,我们可以使用 COM 文件,它们只包含操作码。在 EXE 文件中提供了更多关于操作系统如何启动可执行文件的信息。
汇编是如何执行的?
对于 x86 架构,在通电后对 PC 硬件进行自检后,BIOS 会将引导扇区从引导驱动器加载到内存中并开始执行内部的操作码。
从操作系统的角度来看,操作系统正在从已知文件系统加载可执行文件并开始执行操作码。
CPU 的一部分是 CPU 寄存器。其中一些用作地址计数器,它们指向放置下一个要执行的操作码的内存位置。如果这些操作码中的一个最终被执行,那么地址计数器将向前移动到下一个操作码......等等。