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

