Assembly Language

Download Report

Transcript Assembly Language

15-348 Embedded Systems
Lecture 5
January 25th , 2016
Road Map
What have we done
 Gotten familiar with embedded hardware
 Bit manipulation in C
 Input and Output using I/O ports
What we plan on doing
 Programming in Assembly Language
What you should do
 Read pages 60-79 from the textbook
Registers in 9S12
 CCR – Condition Code Register
S








X H
I
N Z
V C
8-bit condition code
S – Stop Bit: Used to enable stop mode for power saving
X – Interrupt Mask:
I – Interrupt Mask:
C – Carry Flag: Set when carry out from D7
V – Overflow Flag: Set for signed overflow
Z – Zero Flag: Set when result is zero
N – Negative Flag: Set when result is negative
H – Half-byte carry Flag: Set when carry from D3 to D4
Registers in 9S12
Two 8-bit accumulators
Register A
Register B
Register D
Two 16-bit index registers (X and Y)
16-bit stack pointer SP
16-bit program counter PC
Memory Structure of MC9S12C128
0x0000
0x0400
0x0000 – 0x03FF
1K Register Space
0x0400 – 0x1000
~4K RAM
0x1000
0x4000
0x4000 – 0xFF00
~128K ROM (EEPROM)
0xFF00
0xFFFF
0xFF00 – 0xFFFF
Vector Space
Using the RAM
RAM 4K Bytes
Global Variables
Available Memory
Stack Pointer
Stack
Stack grows down
Using ROM
Fixed Constants
Fixed Constants
PC
Machine Code
Vector Table





Strings
Calibration values
ID numbers
Finite State Machines
Device Address
What is assembly language
Machine code in human readable format
 Human readable is of course relatively speaking
E.g.
DDRT
Assembly Language
equ $0x0240
ldaa #$0F
staa DDRT
Real Machine code
860F7A0240
Equivalent Machine code
860F
7A0240
Assembly Format
Each field separated by whitespace
[Label]
Instruction
[Operands] [Comments]
PORTA
equ
$0000
Inp
ldaa
PORTA
; read input
Label
clra
deca
; decrement a
bne
Label
The operand field depends on the operation
Assembly Instructions
Two main kinds of instructions
 Operations
 Assembler Directives
DDRT
equ $0x0240  Assembler Directive
ldaa #$0F  Load Operation
staa DDRT  Store Operation
Load instructions
ldaa
ldab
ldd
ldx
ldy
lds
load accumulator a
load accumulator b
load register d
load index register x
load index register y
load Stack Pointer
16 bit move
Addressing modes (load what?)
ldaa
#w Load the value w in a
ldaa
U
Load the value at address U
All load instructions set the N and the Z bit
in CCR
Store instructions
staa
U
stab
std
stx
sty
sts
All store instructions set the N and the Z
bit in CCR
Example
C code:
DDRB = 0x45;
PORTB = 0x23
Assembly Code:
LDAA
STAA
LDAB
STAB
#$45
$03 ; DDRB is address 3
#$23
$01 ; PORTB is address 1
More addressing modes
[Y-4]
Indexed
staa
staa
-4,Y
$40,Y
Reg a  Address Y- 4
Reg a [Y+$40]
Auto inc/dec Indexed
staa
staa
staa
1, Y+
4, Y+
4, +Y
Reg a[Y] and Y = Y+1
Reg a[Y] and Y = Y+4
Reg a[Y + 4] and Y = Y+4
More addressing modes
Accumulator Offset Indexed
ldab #4
ldy
#2345
staa B,Y ;store contents of a at 2349
Arithmetic Operations
8-bit Add
adda
#w
; RegA=RegA + w
adda
U
; RegA = RegA +[U]
addb
#w
; RegB=RegB + w
addb
U
; RegB = RegB +[U]
Add instructions sets the N, Z, V, and C
bits in CCR
16-bit add
addd
addd
Example:
ldd
addd
std
#W
#U
; RegD = RegD + W
; RegD = RegD + [U]
$1234
#1000
$1238
Example
C code:
byte a = 23;
byte b = 12;
PORTA = a + b
Assembly Code:
LDAA #23
ADDA #12
STAA $00
; PORTA is address 0
Subtract
suba
cmpa
tsta
#w
#w
;RegA = RegA – w
Only
; RegA – w
Used to
set CCR
; RegA – 0
cpd
subd
deca
incb
#W
U
; RegD – W
; RegD – [U]
; RegA = RegA -1
; RegB = RegB +1
Multiply
mul
; RegD = RegA * RegB
ldaa
ldab
mul
#3
#100
; RegA = 3
; RegB = 100
; RegD = 300
Divide
idiv
; RegX = RegD/RegX
; RegD = RegD%RegX
ldd #53
ldx #12
idiv
; RegX = 4, RegD = 5
Shift Operations
asla
asld
asrb
lsra
lsrb
rola
rora
Roll left using C bit from CCR
Roll right using C bit from CCR
Example
C code:
int i = 23;
PORTA = i >> 2;
Assembly Code:
LDAD #23
ASRD
ASRD
STAB $00
; PORTA is address 0
Branch operations
bcc
bcs
beq
bne
bmi
bpl
8-bit signed bra
16-bit signed jmp
target
target
target
target
target
target
target
target
;Branch to target if C=0
;Branch to target if C=1
;Branch to target if Z=1
;Branch to target if Z=0
;Branch to target if N=1
;Branch to target if N=0
;Branch to target always
;Branch to target always
More branch instructions
Following instructions must follow a
subtract instruction
bge,bgt,ble,blt
Example
if(G2 == G1)
isEqual();
Given two variable G1 and G2, write
assembly code for the above code:
ldaa
suba
bne
bsr
skip:
G1
G2
skip
isEqual
Example
Implement the following C code in
assembly
int main() {
int i;
byte sum = 12;
for(i = 0; i <10; i++)
sum = sum + 1;
}