Contents: Introduction to Assembly, Instruction Cycle, Addressing Modes
Trang 1Chapter 3
Assembly language
programming
Trang 23.1 Introduction to Assembly
High level vs Assembly
High level languages Assembly language
• More programmer friendly • Lower level, closer to ISA
• More ISA independent • Very ISA-dependent
• Each high-level statement
translates to several instructions
in the ISA of the computer
• Each instruction specifies a single ISA instruction
• Makes low level programming more user friendly
• More efficient code
Trang 33.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:
⋄ Labels are symbols
Trang 43.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:
⋄ Cannot start in column 1 If it does, it is interpreted as a label
Trang 53.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
⋄ Operands are separated with commas
Trang 63.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)
• Execute (Do it !)
• Write back (Write result of the operation)
Trang 73.3 Addressing Modes
Source Addressing Modes
• Register
• Indexed
• Symbolic (PC Relative)
• Absolute Address
• Indirect Register
• Indirect Auto-increment
• Immediate
Trang 83.3 Addressing Modes
Destination Addressing Modes
• Register
• Symbolic (PC Relative)
• Absolute Address
• Indexed
Trang 93.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
Save a register to another
Trang 103.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
Access an item in memory (eg an array) with a constant offset
Trang 113.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
Access an array of data stored in the program memory
Trang 123.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
Access memory at a known address (eg Peripheral)
Trang 133.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
Use a register as a pointer to memory
Trang 143.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
• Copy a data to somewhere else in 1 instruction
• Stack Popping
Trang 153.3 Addressing Modes
3.3.7 Immediate Mode
Example
mov #0xBEEF, R6
Explanation
Load R6 with 0xBEEF
Usefulness
Initialize a register with a value