• Register
• MOV • Power Up
• Stack
• PSW
• Register banks
Register Banks
1. General purpose, 8 bit
o A: (Accumulator), B 1. General purpose, 8 bit
o R0,R1, R2, R3, R4, R5, R6, R7
2. 16-bit, specifically used as pointers
o DPTR: (data pointer) : as 8-bit DPH, DPL (data pointer hi/low)
o PC: (Program Counter)1. Syntac:
Mov dest, src
o Think assignment statement: dest:=src;2. Dest src are called Operands
o Dest can be A, B, R0...R7, DPH, DPL
o Src can be A, B, R0...R7, or an immediate
3. Immediate = constant value, e.g as #12
Assembler idiosyncrasy with immediates
1. Default base: decimal
o #12 (assumed to be decimal)
o Can be hex: #12H (hex 12, = dec 18)2. However the char after # must be '0'.. '9'
o #FFH is invalid (since 'F' is not in '0'..'9'
o Solution: #0FFH (add a useless '0')
Immidiates vs direct (addressing mode)
o A= 0x17; #17H is literal
2. Mov a, 17
o A= * ((char *)17) 17 is an address
3. Big differenceo R0,...R7 => Register mode
o #17 => Immediate mode;
o 17 => direct mode (address -- where?)
Add instruction
1. ADD A, source
o Note: A is hardwired cannot use anything else
o Meaning: A:= A + source;
2. Source itself can be any R-Value operad
o Immediate, direct, register
How to write R2:= 0x25 + 0x35
1. Key: need to involve the accumulator A
2. MOV A, 25H ;; A: = 0x25;ADD A, 34H ;; A: = A + 0x34;
MOV R2, A ;; R2:= A;
3. Would be incorrect (in 8051) to try
MOV R2, 25H ;; this part is ok
ADD R2, 34H ;; must use A, not R2
4. Since the sum is constant, could doMOV R2, 59H ;; eval. by assembler
Assembly Language
1. Directives
o Commands to the assembler
e.g., starting address, allocate memory,...
2. (assembly) instructions
o Correspond to machine instructions
3. Labels
o Symbolic names that mark addresses
4. Comments
Example Program (2-1)
ORG 0H :start address
MOV R5, #25HMOV R7, #34H
MOV A, #0
ADD A, R5
ADD A, R7
ADD A, #12H
HERE: SJMP HEREEND ; some may be. END
Mnemonic
• A symbol that helps you remember
• example: phone number
o 2 = A, B, C 3 = D, E, F 4 = G, H, I
o doesn't need to be exact; can approximate
• Opcodes and directives are mnemonics
o MOV ~~ "move"
o JMP ~~ "jump" etc
Try this out
• Save assembly program as plain text file Name file.a51
• asem file.a51 ;;type this as a command
=> if correct, says no erross
• Output files -- simple case, sigle file
o .hex file: hex-formatted binary file
o .lst file: "listing" (before/after views)
.lst file by assmebler
Addr Machine code Assembly Source
0000 7D 25 Mov R5, #25H
0002 7D 34 Mov R7, #34H
0004 7F 00 Mov A, #0
0006 2D ADD A, R5
0007 2F ADD A, R7
0008 24 12 ADD A, #12H
000A 80 FE HERE: SJMP HERE
More assembler features
• Literal: in other bases
o Binary: add B after: 0000 1010B
• DB: define byte (or string, whatever data)
o store the data in program memory
o label is optional, not required!
• EQU: constant declaration (macro)o inlined when used. requires a macro name
Example of DB vs EQU
• DATA1: DB "Hello world"
DATA2: DB 25
=> both accupy space in (code) memory
• COUNT EQU 25 ;;occupies no space!
MOV R3, #COUNT
=> macro expansion into MOV R3, #25
- Sum = same as an Xor
- Carry = same as And
• Full adder
-Take Carry from prev bit
-Consists of two half adders
• Then connect them in a chain
• Forunately, VHDL can do bitvector add
PSW: program status word
• 8 bit register containing flags
o indicating status of the processor
CY (C bit) PSW.7 Carry flag
AC PSW.6 Auxiliary carry. for BCD arithmetic
F0, - PSW.5 (user)
RS1 PSW.4 Register bank select
RS0 PSW.3 Register bank select
OV PSW.2 Overflow
P PSW.0 Parity: even or odd # of i's in A
CY flag (C-bit)
• Carry out of the highest-order adder
o Does not mean overflow!!
Example: 0x01 + 0xFF = 0x00 with C= 1
(corresponds to 1 + (-1) = 0.)
o Carry or borrow, both have C=1
• Carry bit can be set, cleared, movedo CLR C ;; clear the C bit, means := 0
SETB C ;; set the C bit, means := 1
OV-flag (overflow)
• Overflow: too big/too small to represent
• ADD:
o Both operands same sign, sum different
e.g., both +, sum-; or both -, sum +
o Cannot overflow when operands mix + -
Because the sum is beween the two
• SUB:
o Opposite condition of ADD
Outcome of a signed A + B
• A and B have different signs
o Can't overflow. Because either
A≤ Sum ≤ B or B ≤ sum ≤ A
o V (overflow bit) is always '0' in this case.
• A and B have same signs
o Sum has same sign as A, B => No overflow
o Sum has a different sign => Overflow! (V='1')
Example of Overflow in signed addition
• Both A, B positive, Sum negative
• The status bits are
o V = 1 (overflow), C = 0 (no carry out),
o N = 1 (negative), Z = 0 (not zero)
Example of overflow in signed addition (cont'd)
• Both A, B negative, Sum positive
• The status bits are
o -V = 1 (overflow), C=1 (carry)
o N = 0 (not negative), z = 0 (not zero)
• Sum does not include the carry bit!!
Examples of NOT Overflow in signed addition
• A, B have different signs
• Overflow is not the same as arithmetic carry
o Truncating at the top is a feature, not a bug!
o C = 1 (ignored), V= 0, N = 0, Z = 0
Examples of unsigned addition
• MSB of A, B both = 0, MSB of Sum = 1
• the status bits are
o V = 0 (overflow), C = 0 (no carry out0,
o N = 0 (not negative), Z = 0 (not zero)
Examples of Overflow in unsigned additon (Cont'd)
• MSB of both A, B= 1, MSB of Sum = 0
• The status bits are
o V = 1 (overflow), C = 1 (carry)
o N = 0 (not negative), Z = 0 (not zero)
• Sum does not include the carry bit
Signed Subtract
• A - B = A + (-B)
o Take 2's complement of B (flip all bits, add 1)
o VHDL also provides the -operator
• N, Z, C, V bits
o C = "borrow", 1 when sign bit:
o if A, B same sign => V='0'
o if A, B diff signs and Res diff sign from A => V='1'
Examples of signed subtraction
• Positive A, Positive B, Negative Result
• The status bits are
o V = 0 (overflow), C = 1 (borrow).
o N = 1 (negative), Z = 0 (not zero).
Examples of overflow in signed subtraction
• Positive A, Negative B, Negative Result
• The status bits are
o V = 1 (overflow), C = 1 (borrow).
o N = 1 (negative), Z = 0 (not zero).
Unsigned Subtract
• A - B = A + (-B)
o Take 2's complement of B, add as before
o VHDL also provides the -operator
• N, Z, C, V bits
o N always '0' (unsigned).
o C = "borrow". Same as signed version
'1' when the MSB = table here
A 0 0 0 1
B 0 1 1 1
Res 1 1 0 1
o V unsigned = C unsigned
Examples of overflow in unsigned subtraction
• Both A, B Positive, Res negative
• C = 1 (ignored), V = 1, N = 0, Z = 0
A 0 0 0 1
B 0 1 1 1
Res 1 1 0 1
Register banks and Scratchpad memory
• Four register banks [ 00-lFH]
o 8 registers per bank (8 bytes/bank)
o bank 1 is stack
• Bit-addressable (16 bytes) [20-2FH]
• Scratchpad (Byte-addressable) [30-7FH]
• Total 128 bytes [00-7FH]
Register bank selection
• Register can be from 1 of 4 banks
o Depending on PSW.4, PSW.3
• Example
o MOV R0, #12H
Where is R0?
• Answer: depends on which bank!
o Could be address 00H, 08H, 10H, or 18H
Instruction for setting banks
• "Set a bit" (means assign the bit to 1)
o SETB PSW.4
• "Set a bit" (means assign the bit to 0)
o CLR PSW.3
• So, together, PSW.4 = 0, PSW.3 = 1
=> selects bank a
Two ways of accessing the same registers
• Register mode:
o Use R0, R1 ...name
o Current bank
o Need bank switching
• Direct mode:
o Use the RAM address of the register!
o 00 for R0 of bank 1, 12 for R2 of bank 3
Examples
• Register addressing:
SET B PSW.4
CLR PSW.3
MOV R3, #99H
• Direct addressing:
MOV 13, #99H
Stack
• Fundamental data structure in programming
o Return address of a call
o space for local (auto) variables
• Implicitly addressed
o PUSH (add element to stack)
o POP (remove element from stack)
• Need: stack pointer (SP) -- register in 8051
8051 architecture-supported stack
• 8-bit Stack Pointer SP
o Initialized to 07H on power up
=> points to just before R0 of bank1
• Grows from lower to higher address
o PUSH: pre-increment: stack [++SP]=d;
o POP: post-decrement: d=stack [SP--];
• Opposite from stacks on other CPUs!!
Synax of PUSH/Pop instructions
• PUSH 6
o This doesn't mean PUSH #6
o It means PUsh content of R6 to stack!
• POP 2
o Means pop the top element of stack to R2
o Reason: think "RAM Address"
Range of value for SP
• [07 - 1FH] (register bank 1, 2, 3)
o On power-up SP = 07H
o Should not go lower;
Could go up to 1FH (R7 of bank3)
• [30 - 7FH] (scratchpad memory)
• NOT [20 - 2FH] -- bit addressable area
Other use of stack : call /Return
• Call instruction
o pushes return address onto stack then go to target
• Return instruction
o pops return address then go to target
• Interrupt: hardware pushes return address
• Return-from-interrupt instruction