• Forum
  • Lounge
  • What programming language is Assembly wr

What programming language is Assembly written in?

For example, the x86 family of Intel has different microarchitectures, instruction set architectures, and different chips(i.e. microprocessors).

Who or how is the Assembly for it or machine instructions developed?

With a hardware description language?

For example, i.e., the machine code instructions the chip understands would have to be designed BEFORE the Assembly code will assemble to their binary opcode equivalents for the bits/transistors.

Also, I assume the chips have some firmware on them for parsing purposes.

But I'm sure some here know more than I.
Assembly is simply a mnemonic for the binary commands that a CPU knows. One assembly instruction is translated into one opcode. So I guess the answer to your question is none. Unless you count hardware.
Assembly code has different syntax(i.e. Intel).

A specification of the instructions correlate to different opcodes, so it has to be a specific language, and someone must design that specification.

So back to my point ... did Intel invent their Assembly syntax?

What about AT&T syntax?

Someone is obviously programming user-level assemblers.

Assembly represents opcodes, but those opcodes are channeled through circuit logic, which is done by a hardware description language, which is done by hardware engineering, and address circuit logics, diodes, transistors, gates, and arrays of electronic components. There has to be a specification.
Last edited on
Are you asking who developed assembly syntax, or how assembly languages are compiled on hardware?
Assembly is assembled into machine code. What we call machine code is actually not machine code, but a higher level language. Machine code gets translated into microcode (which literally is machine code, but not what we call machine code) before being executed by the CPU. What goes on in this domain is different for different CPU vendors and micro-architectures, and they keep the process secret. This is where different X86-64 CPU's have the opportunity to handle the same X86-64 machine code differently.
Last edited on
Here's what I found:

Opcode mnemonics and extended mnemonics:

Instructions (statements) in assembly language are generally very simple, unlike those in high-level language. Generally, a mnemonic is a symbolic name for a single executable machine language instruction (an opcode), and there is at least one opcode mnemonic defined for each machine language instruction. Each instruction typically consists of an operation or opcode plus zero or more operands. Most instructions refer to a single value, or a pair of values. Operands can be immediate (value coded in the instruction itself), registers specified in the instruction or implied, or the addresses of data located elsewhere in storage. This is determined by the underlying processor architecture: the assembler merely reflects how this architecture works. Extended mnemonics are often used to specify a combination of an opcode with a specific operand, e.g., the System/360 assemblers use B as an extended mnemonic for BC with a mask of 15 and NOP ("NO OPeration" - do nothing for one step) for BC with a mask of 0.

Extended mnemonics are often used to support specialized uses of instructions, often for purposes not obvious from the instruction name. For example, many CPU's do not have an explicit NOP instruction, but do have instructions that can be used for the purpose. In 8086 CPUs the instruction xchg ax,ax is used for nop, with nop being a pseudo-opcode to encode the instruction xchg ax,ax. Some disassemblers recognize this and will decode the xchg ax,ax instruction as nop. Similarly, IBM assemblers for System/360 and System/370 use the extended mnemonics NOP and NOPR for BC and BCR with zero masks. For the SPARC architecture, these are known as synthetic instructions[7]

Some assemblers also support simple built-in macro-instructions that generate two or more machine instructions. For instance, with some Z80 assemblers the instruction ld hl,bc is recognized to generate ld l,c followed by ld h,b.[8] These are sometimes known as pseudo-opcodes.

Mnemonics are arbitrary symbols; in 1985 the IEEE published Standard 694 for a uniform set of mnemonics to be used by all assemblers. The standard has since been withdrawn.
Topic archived. No new replies allowed.