3/7/2013
Arithmetic,logic Instruction and Programs
Define the range of numbers possible in PIC unsigned data
Code addition and subtraction instructions for unsigned data
Perform addition of BCD
Code PIC unsigned data multiplication instructions and
programs for division
Code PIC Assembly language logic instructions
Code PIC rotate instructions
Arithmetic Instructions
Signed Number Concepts and Arithmetic Operations
Logic and Compare Instructions
Rotate instruction and data serialization
BCD and ASCII Conversion
1
3/7/2013
Unsigned numbers are defined as data in which all the
bits are used to represent data
No bits are set aside for neg. or pos. sign
Addition of unsigned numbers
ADDLW k
ADDWF fileReg, d, a
ADDWFC (adding two 16-bit numbers)
What happens to flag register?
ADD 3CE7H and 3B8DH
Store the sum in fileReg locations 6 and 7, where
location 6 should have the lower bye.
2
3/7/2013
DAW, Decimal Adjust WREG
Works only with WREG
Add 6 to the lower or higher nibble if needed
After execution,
◦ If the lower nibble is greater than 9, or if DC =1, add 0110 to the
lower nibble.
◦ If the upper nibble is greater than 9, or if C = 1, add 0110 to the
upper nibble.
Doesn’t require the use of arithmetic instructions prior the
DAW execution
Subtracter circuit is cumbersome. (Why?)
PIC performs the 2’s complement then uses adder circuit to
the result.
Take one Clock Cycle
There are four sub instructions
◦ SUBLW k (k – WREG)
◦ SUBWF f d ( destination = fileReg – WREG)
Result may be negative (N=1 and C=1)
◦ The result is left in 2’s complement
6
3
3/7/2013
MOVLW 0x23 Subtract 4C – 6E
SUBLW 0x3F MYREG EQU 0x2
MOVLW 0x4C
MOVWFMYREG
MOVLW0x6E
SUBWF MYREG,W
BNN NEXT
NEGF WREG
NEXT
MOVWFMYREG
PIC supports byte-by-byte multiplication
One of the operand must be in WREG
After multiplication, the result is stored in PRODH and
PRODL (16 bit)
Example
◦ MOVLW 0x25
◦ MULLW 0x65
4
3/7/2013
There is no single instruction for the division of
byte/byte numbers.
You need to write a program
◦ Repeated subtraction
◦ The numerator is place in a fileReg
◦ Denominator is subtracted from it repeatedly
◦ The quotient is the number of times we subtracted
◦ The reminder is in fileReg upon completion
10
5
3/7/2013
11
The MSB is set aside for the sign (0 or -)
The rest, 7 bits, are used for the magnitude.
To convert any 7-bit positive number to negative use
the 2’s complement
You have 128 negative numbers and 127 positive
numbers
12
6
3/7/2013
Widely used instructions
◦ ANDLW k
◦ ANDFW FileReg, d
◦ IORLW k
◦ IORFW FileReg, d
◦ XORLW k
◦ XORFW FileReg, d
Effect only Z and N Flags
13
COMF FileReg,d
◦ Takes the 1’s complement of a file register
◦ Effect only Z and N Flags
NEGF FileReg
◦ Takes the 2’s complement of a file register
◦ Effect all Flags
Example
◦ MYREG EQU 0x10
◦ MOVLW 0x85
◦ MOVWF MYREG
◦ NEGF MYREG
14
7
3/7/2013
These instructions take 1/2 cycle(s)
15
Write code to determine if data on PORTB contains the value
99H. If so, write letter ‘Y’ to PORTC; otherwise, make
PORTC=‘N’
CLRF TRISC
MOVLW A'N‘
MOVWF PORTC
SETF TRISB
MOVLW 0x99
CPFSEQ PORTB
BRA OVER
MOVLW A'Y‘
MOVWF PORTC
OVER ……….
16
8
3/7/2013
Rotate fileReg Right or Left (no Carry)
◦ RRNCF fileRed, d
◦ RLNCF fileRed, d
◦ affect the N and Z flag
Rotate Right or Left through Carry flag
◦ RRCF fileRed, d
◦ RLCF fileRed, d
◦ affect the C, N and Z flag
17
Write a program to transfer value 41H serially via RB1. Put
one High at the start and end Send LSB
Solution
RCNT EQU 0x20 BSF PORTB,1
MYREG EQU 0x21 AGAIN RRCF MYREG,F
BCF TRISB,1 BNC OVER
MOVLW 0x41 BSF PORTB,1
BRA NEXT
MOVWF MYREG
OVER BCF PORTB,1
BCF STATUS,C NEXT DECF RCNT,F
MOVLW 0x8 BNZ AGAIN
MOVWF RCNT BSF PORTB,1
18
9
3/7/2013
Write a program to bring in a byte of data serially via pin RC7
and save it in file register location 0x21. The byte comes in
with the LSB first.
RCNT EQU 0x20 BSF STATUS,C
MYREG EQU 0x21 BTFSS PORTC,7
BSF TRISC,7 BCF STATUS,C
MOVLW 0x8 RRCF MYREG,F
DECF RCNT F
MOVWF RCNT
BNZ AGAIN
AGAIN BTFSC PORTC,7
19
Swap the lower nibble and the higher nibble
In the absence of a SWAPF instruction, how would you
exchange the nibbles? How many rotate instruction do
you need?
20
10
3/7/2013
Assume that register WREG has packed BCD. Write a
program to convert packed BCD to two ASCII numbers and
place them in in file register locations 6 and 7.
BCD_VAL EQU 0x29 MOVWF L_ASC
L_ASC EQU 0x06 MOVLW BCD_VAL
H_ASC EQU 0x07 ANDLW 0xF0
MOVLW BCD_VAL SWAPF WREG W
IORLW 0x30
ANDLW 0x0F
MOVWF H_ASC
IORLW 0x30
21
11