机器语言
机器码是用机器语言编写的计算机程序。它使用特定计算机架构的指令集。它通常以二进制编写。机器码是最低级别的软件。其他编程语言被翻译成机器码,以便计算机能够执行它们。
一条指令告诉进程要执行什么操作。每条指令由一个操作码(操作代码)和操作数组成。操作数通常是内存地址或数据。指令集是一个计算机可用的操作码的列表。机器码就是汇编代码和其他编程语言被编译为或解释为的东西。
程序构建者将代码变成另一种语言或机器码。机器代码有时被称为本地代码。这是在谈论只在某些计算机上工作的东西时使用的。
编写机器代码
机器代码可以用不同的形式编写。
- 使用一些开关。这产生了一个1和0的序列。这在计算机的早期被使用。自20世纪70年代以来,它已不再被使用。
- 使用Hex编辑器。这允许使用操作码而不是命令的编号。
- 使用汇编程序。汇编语言比操作码更简单。它们的语法比机器语言容易理解,但比高级语言难。汇编器会自行将源代码翻译成机器代码。
- 使用高级编程语言可以使程序使用更容易阅读和书写的代码。这些程序被翻译成机器代码。翻译可以分许多步骤进行。Java程序首先被优化成字节码。然后在使用时被翻译成机器语言。
早期微型计算机的前面板,有用于输入机器代码的开关
机器码的典型指令
通常在一个指令集中发现有许多种指令。
- 算术运算。加法,减法,乘法,除法。
- 逻辑运算。连合、分离、否定。
- 作用于单个比特的操作。将比特向左或向右移位。
- 作用于内存的操作:将一个值从一个寄存器复制到另一个寄存器。
- 比较两个值的操作:大于、小于、等于。
- 结合其他操作的操作:加法、比较和复制,如果等于某个值(作为一个操作),如果一个寄存器为零,则跳到程序中的某个点。
- 作用于程序流的操作:跳到某个地址。
- 转换数据类型的操作:例如,将32位整数转换为64位整数,将浮点值转换为整数(通过截断)。
许多现代处理器对一些命令使用微代码。更复杂的命令倾向于使用它。这通常是在CISC架构下进行的。
说明
每个处理器或处理器系列都有自己的指令集。指令是对应于可以给机器的不同命令的比特模式。因此,指令集是针对使用(大部分)相同架构的一类处理器的。
较新的处理器设计通常包括前辈的所有指令,并可能增加额外的指令。有时,较新的设计会停止使用或改变指令代码的含义(通常是因为新的用途需要它),影响代码的兼容性;即使是几乎完全兼容的处理器也可能对一些指令表现出稍微不同的行为,但这很少是一个问题。
系统也可能在其他细节上有所不同,如内存安排、操作系统或外围设备。由于一个程序通常依赖于这些因素,不同的系统通常不会运行相同的机器代码,即使使用相同类型的处理器。
大多数指令有一个或多个操作码字段。它们指定了基本的指令类型。其他字段可能给出操作数的类型、寻址模式等。也可能有一些特殊指令包含在操作码中。这些指令被称为即时指令(immediates)。
处理器设计可以在其他方面有所不同。不同的指令可以有不同的长度。同时,它们也可以有相同的长度。让所有指令具有相同的长度可以简化设计。
例子
MIPS架构的指令长度为32位。本节有代码的例子。指令的一般类型是在op(操作)字段。它是最高的6位。J型(跳跃)和I型(立即)指令完全由op给出。R型(寄存器)指令包括字段funct。它决定了代码的具体操作。这些类型中使用的字段是:。
6 5 5 5 6位 [ op | rs | rt | rd | shamt| funct ] R型 [ op | rs | rt | address/immediate ] I型 [ op | target address ] J型rs, rt, 和rd表示寄存器操作数,shamt给出一个移位量。地址或立即字段直接包含一个操作数。
例如:将寄存器1和2相加。将结果放在寄存器6中。它被编码了。
[ op | rs | rt | rd | shamt| funct] 0 1 2 6 0 32 十进制 000000 00001 00010 00110 00000 100000 二进制将一个值载入寄存器8中。从寄存器3中列出的位置之后的68个单元的存储单元中取出。
[ op | rs | rt | address/immediate ] 35 3 8 68 十进制 100011 00011 01000 00000 00001 000100 二进制跳转到地址1024。
[ op | 目标地址 ] 2 1024 十进制 000010 00000 00000 00000 10000 000000 二进制相关页面
- 二进制数字系统
- 量子计算机
- 指令集
- 简化指令集计算机
问题和答案
问:什么是机器码?答:机器码是用机器语言编写的计算机程序,使用特定计算机架构的指令集,通常以二进制编写。
问:什么是最低级别的软件?
答:机器码是最低层次的软件。
问:其他编程语言是如何由计算机执行的?
答:其他编程语言被翻译成机器码,计算机可以执行。
问:机器码中的指令是由什么组成的?
答:机器码中的指令由一个操作码(操作码)和操作数组成。操作数通常是内存地址或数据。
问:什么是指令集?
答:指令集是一个计算机可用的操作码的列表。
问:程序生成器对代码做什么?
答:程序编制者把代码变成另一种语言或机器码。
问:机器码的另一个名称是什么?
答:机器码有时被称为本地代码,在谈论只在某些计算机上工作的东西时使用。