因此,经过数小时的研究,我得出结论,我不太了解。
二进制和机器代码/操作码:
机器代码是CPU理解的,机器代码本身是纯二进制正确的吗?
举个例子000010 00000 00000 00000 10000 000000
。这是机器码跳转到1024.这个机器代码由二进制组成。那是对的吗?
000010
是一个OPCode,一个机器码指令,由二进制组成,正确吗?
汇编语言
汇编语言为OpCodes提供的助记符是否正确?那么对于000010
,汇编程序助记符是J
还是JMP
正确?
汇编程序汇集到什么程序?它是否生成原始机器代码?原始机器代码的文件扩展名是什么?如何执行装配?
目标代码/目标文件
有人可以解释一下这些是什么吗?这些是装配的输出吗?谢谢大家!
答案 0 :(得分: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寄存器。其中一些是作为地址计数器工作,它们指向一个存储位置,在该存储位置放置下一个执行操作码。如果最终执行了其中一个操作码,则地址计数器将前进到下一个操作码......依此类推。