2014-11-05 28 views
1

因此,经过数小时的研究,我得出结论,我不太了解。各种类型的“代码”(机器,二进制等)

  • 二进制代码和机器代码/操作码:

    机器码是什么,是由CPU的理解,机器代码本身是由纯二进制正确的?

    举例来说000010 00000 00000 00000 10000 000000。这是机器代码跳转到1024.该机器代码由二进制组成。那是对的吗?

    000010是一个OPCode,一个机器码指令,由二进制制成,正确吗?

  • 汇编语言

    汇编语言提供了正确的操作码助记符?因此对于000010,汇编器助记符是JJMP是否正确?

    汇编程序汇编到什么程序?它生成原始机器码吗?原始机器码的文件扩展名是什么?程序集是如何执行的?

  • 对象代码/目标文件

    有人能解释这是什么意思?这些是组装的输出吗?谢谢大家!

回答

2

机代码是什么由CPU了解,本机代码本身是由纯二元正确的?

是的,但操作码因CPU而异。

英特尔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正在从bootdrive加载引导扇区到ram中,并开始执行内部的操作码。

从操作系统的角度来看,操作系统正在从已知文件系统加载可执行文件并开始执行操作码。

CPU的一部分是CPU寄存器。其中一些作为地址计数器工作,它们指向一个内存位置,在那里放置下一个要执行的操作码。如果这些操作码中的一个最终被执行,则地址计数器正在向前移动到下一个操作码......等等。