Changes

Jump to: navigation, search

Machine Language

20 bytes removed, 12:46, 7 January 2014
no edit summary
[[Assembly Language]] (or just "Assembly") is closely related to machine language, but uses a [[Symbolic|symbolic]] representation of instructions and memory locations and is therefore easier to write and read. A compiler for assembly language is called an [[Assembler|assembler]], and a tool to convert machine code to assembly is called a [[Disassembler|disassembler]].
Assembly is [[Portable|architecture-specific]] but allows precise control over the exact instructions which will be executed by the CPU. It is therefore used for the most basic functions of the bootloader and operating system kernel, the lowest-level operating system devices drivers, and code where performance is critical. However, assemblers do not usually perform [[Compiler Optimizations|optimizations]], so C code which has been optimized by a good compiler will often perform as well as or better than assembly code unless it is very painstakingly written.
== Relationship to Other Languages ==
'''Interpreted languages''', such as bash, are not converted into machine code, but blocks of machine code within the interpreter are selectively invoked to perform the operations stated in the program or script.
'''Compiled languages''', such as C, are converted into machine language instructions by the [[Compiler|compiler]]. The machine language code is stored in a separate [[Object file|object file]] for later execution.
Interpretation and compilation represent the two extreme cases of conversion to machine code. There are intermediate approaches between interpreting and compiling:
* Bytecode compilers and interpreters compile source code into a "bytecode" which is like an architecture-independent machine code. The instructions in the bytecode are effectively instructions for a virtual machine that doesn't exist. Therefore, they cannot be directly executed by any CPU, but they can be interpreted much more quickly than the original source code because they have already been partially processed. Java and Python both utilize bytecode in the most common implementations.
* Just-in-time (JIT) interpreters/compilers take source code or bytecode and compile it into machine code on-the-fly. This has three advantages over traditional compilation: (1) the distributed software can be in an architecture-neutral form, (2) any portion of the code which will not be executed is not compiled, and (3) more information is available to the compiler about the execution environment when the compilation is being performed. JIT execution is typically faster than interpretation, but slower than traditional (pre-)compilation, because the compilation step occurs at run time.

Navigation menu