Assembly language

By Martin McBride, 2017-04-30
Tags: none
Categories: none

We have looked at machine code, which represents the instructions a CPU can read an execute directly.

Assembly language is a way to make machine code a bit easier to read. This also makes it a bit easier and quicker to write and debug.

You use a program called an assembler to convert the assembly language.

Mnemonics

The basic idea of assembly language is to use a short keyword (called a mnemonic) to represent each instruction, rather than the binary number that the CPU understands.

Mnemonic means a system such as a pattern of letters, ideas, or associations which assists in remembering something.

So for example, we might use the keyword LDX to mean "load a value into the X register". So instead of the hexadecimal byte values:

A2 20

we would have the assembly language code:

LDX #$20

This might not exactly be quite as easily readable as Python or Basic, but it is a lot better than pure binary.

Other features of assembly language

This code is just to show what assembly language looks like. The majority of programmers never write any code in assembly language!

Here is a short listing of assembly code to calculate Fiboncci numbers:

        LDA #$02  ;a = 2
        STA $01   ;stores a

loop1:  LDX $01   ;x = a
        ADC $00   ;a += x
        STA $01   ;stores a
        STX $00   ;stores x
        DEY       ;y -= 1
        BNE loop1 ;jumps back to loop1 if Z bit != 0

This indicates some extra features most assemblers support:

  • Comments. Anything after the semicolon in a line is a comment, and is ignored by the assembler.
  • Labels. loop1 is a label, and marks a location in memory.

Labels are very useful. The BNE instruction (branch if not equal) jumps to a particular location if the previous calculation gave a non-zero result. It is similar to a while loop. We want to jump back to the location of the LDX instruction. Using a label, we can get the assembler to automatically calculate the address.

Properties of assembly language

As you have seen, each instruction in assembly language maps directly onto an instruction in machine code. So assembly language is still considered a low level programming language. But it is an advancement over raw machine code, so it is termed a 2nd generation language.

Like machine code, assembly language can be used to create highly efficient code which executes quickly, uses as little memory as possible, and can directly access the computer's hardware devices.

The instruction set is specific to the type of processor, and code would not be easily ported to a computer with a different type of processor.

See also

Sign up to the Creative Coding Newletter

Join my newsletter to receive occasional emails when new content is added, using the form below:

Popular tags

555 timer abstract data type abstraction addition algorithm and gate array ascii ascii85 base32 base64 battery binary binary encoding binary search bit block cipher block padding byte canvas colour coming soon computer music condition cryptographic attacks cryptography decomposition decryption deduplication dictionary attack encryption file server flash memory hard drive hashing hexadecimal hmac html image insertion sort ip address key derivation lamp linear search list mac mac address mesh network message authentication code music nand gate network storage none nor gate not gate op-amp or gate pixel private key python quantisation queue raid ram relational operator resources rgb rom search sort sound synthesis ssd star network supercollider svg switch symmetric encryption truth table turtle graphics yenc