Chapter 3 Assembly language programming

3.1 Introduction to Assembly

High level vs. Assembly

Assembly language • Lower level, closer to ISA. • Very ISA-dependent. • Each instruction specifies a single ISA instruction.

High level languages • More programmer friendly. • More ISA independent. • Each high-level statement translates to several instructions in the ISA of the computer.

Microcomputer principles and applications

• Makes low level programming more user friendly. • More efficient code.

3.1 Introduction to Assembly

Assembler syntax

{label[:]} mnemonic {operand list} {;comment}

• Symbols:

⋄ Used as labels, constants, and substitution values and

stored in a symbol table.

⋄ A symbol name is a string of up to 200 alphanumeric characters (A-Z, a-z, 0-9, $, and _), cannot contain embedded blanks, is case sensitive. ⋄ The first character cannot be a number.

• Labels:

Microcomputer principles and applications

⋄ Labels are symbols.

3.1 Introduction to Assembly

Assembler syntax

{label[:]} mnemonic {operand list} {;comment}

• Labels:

⋄ Begined in column 1 and is optionally followed by a colon. ⋄ The value of a label is the current value of the Location

Counter (address within program).

⋄ A label on a line by itself is a valid statement. ⋄ Labels used locally within a file must be unique.

• Mnemonics:

Microcomputer principles and applications

⋄ Cannot start in column 1. If it does, it is interpreted as a label.

3.1 Introduction to Assembly

Assembler syntax

{label[:]} mnemonic {operand list} {;comment}

• Mnemonics:

⋄ Contains one of the following items: Instruction, Assembler

directive, Macro directive, Macro invocation. ⋄ A label on a line by itself is a valid statement. ⋄ Labels used locally within a file must be unique.

• Operands:

⋄ Contains one or more operands. ⋄ An operand may consist of: symbols, constants,

expressions.

Microcomputer principles and applications

⋄ Operands are separated with commas.

3.2 Instruction Cycle

Instruction Fetch (Get what you need to do). Instruction Decode (Understand what you need to do).

• • • First Operand Fetch (Not enough information, get some more). • Second Operand Fetch (Still not enough information, get some

more).

Microcomputer principles and applications

• Execute (Do it !). • Write back (Write result of the operation).

3.3 Addressing Modes

Source Addressing Modes

Microcomputer principles and applications

• Register. • Indexed. • Symbolic (PC Relative). • Absolute Address. • Indirect Register. • Indirect Auto-increment. • Immediate.

3.3 Addressing Modes

Destination Addressing Modes

Microcomputer principles and applications

• Register. • Symbolic (PC Relative). • Absolute Address. • Indexed.

3.3 Addressing Modes

3.3.1 Register Mode

Example:

mov R5, R6

Explanation:

Moves the content or the register R5 into R6 without altering R5.

Usefulness

Microcomputer principles and applications

Save a register to another

3.3 Addressing Modes

3.3.2 Indexed Mode

Example

mov 4(R5), R6

Explanation

• Add 4 to the content of R5 inside the CPU • Fetch the memory address from the forementionned

computation

• Store the value into R6

Usefulness

Microcomputer principles and applications

Access an item in memory (eg. an array) with a constant offset

3.3 Addressing Modes

3.3.3 Symbolic Mode

Example

mov 0x1234, R6

explanation

• Add 0x1234 to the PC to generate the address. • Fetch the memory from the address of the forementionned

computation

• Store the value into R6

Usefulness

Microcomputer principles and applications

Access an array of data stored in the program memory.

3.3 Addressing Modes

3.3.4 Absolute Mode

Example

mov &0xDEAD, R6

Explanation

• Fetch the memory from the address 0xDEAD. • Store the value into R6.

Usefulness

Microcomputer principles and applications

Access memory at a known address (eg. Peripheral).

3.3 Addressing Modes

3.3.5 Indirect Register Mode

Example

mov @R8, R6

Explanation

• Fetch the memory at the address contained in R8. • Store the value into R6.

Usefulness

Microcomputer principles and applications

Use a register as a pointer to memory.

3.3 Addressing Modes

3.3.6 Indirect Autoincrement Mode

Example

mov @R8+, R6

Explanation

• Fetch the memory at the address contained in R8. • Store the value into R6. • Increment R8.

Usefulness

Microcomputer principles and applications

• Copy a data to somewhere else in 1 instruction. • Stack Popping.

3.3 Addressing Modes

3.3.7 Immediate Mode

Example

mov #0xBEEF, R6

Explanation

Load R6 with 0xBEEF

Usefulness

Microcomputer principles and applications

Initialize a register with a value