Sunteți pe pagina 1din 27

PROGRAMS

ARITHMETIC INSTRUCTIONS
UNSIGNED NOS. CONSIST OF THE DATA BITS WITH NO BIT RESERVED FOR SIGN. THE NOS. ARE 00 TO FFH.

ADDITION OF UNSIGNED NOS.


ADD A, SOURCE ;A=A+SOURCE

THE INSTRUCTION AFFECTS AF, CF, P THE AFFECT OF ADDITION ON FLAGS MOV ADD A, #0F5H A, #0BH ;A=F5 HEX ;A=F5+0B=00

CY=1

P=0

AC=1

ASSUME THAT RAM LOCATIONS 40 TO 44H HAVE THE FOLLOWING DATA. WRITE A PROGRAM TO ADD ALL THESE. AT THE END OF THE PROGRAM, REGISTER A SHOULD CONTAIN LOW BYTE AND R7 THE HIGH BYTE.

40=(7D) 41=(EB) 42=(03) 43=(C5) 44=(30)

ASSUME THAT RAM LOCATIONS 40 TO 44H HAVE THE FOLLOWING DATA. WRITE A PROGRAM TO ADD ALL THESE. AT THE END OF THE PROGRAM, REGISTER A SHOULD CONTAIN LOW BYTE AND R7 THE HIGH BYTE.
40=(7D) 41=(EB) 42=(03) 43=(C5) 44=(30) MOV MOV CLR MOV ADD JNC INC R0, #40H R2, #5H A R7, A A, @R0 BYPAS R7 ;LOAD POINTER ;LOAD COUNTER ;A=0 ;CLEAR R7 ;ADD BYTE POINTED TO ;A BY R0 ;IF CY=0 DONT ADD TO ;COUNTER OF CY ;UPDATE COUNTER ;OF CY ;INCREMENT POINTER ;REPEAT ;STAY HERE

AI:

BYPAS: INC DJNZ HI: SJMP

R0 R2, AGAIN HI

WRITE APROGRAM TO ADD TWO SIXTEEN BIT NUMBERS. THE NUMBERS ARE 3CE7H AND 3B8DH. STORE THE SUM IN R7 AND R6; R6 SHOULD HAVE LOWER BYTE.

WRITE APROGRAM TO ADD TWO SIXTEEN BIT NUMBERS. THE NUMBERS ARE 3CE7H AND 3B8DH. STORE THE SUM IN R7 AND R6; R6 SHOULD HAVE LOWER BYTE.

CLR MOV ADD

C A, #0E7H A, #8DH

MOV R6, A MOV A, #3CH ADDC A, #3BH

MOV

R7, A

;CY=0 ;LOAD LOW BYTE ;ADD LOW BYTE; A=74H, ;CY=1 ;SAVE LOW BYTE ;LOAD HIGH BYTE ;ADD WITH CARRY ;3BH+3CH+1H=78H ;SAVE HIGH BYTE

BCD NUMBERS

UNPACKED BCD NUMBERS


THE LOWER BITS OF NUMBER REPRESENT BCD NUMBER, REST OF THE BITS ARE 0. 00001001 AND 00000101 ARE UNPACKED BCD 9 AND 5 RESPECTIVELY.

PACKED BCD NUMBERS


A SINGLE BYTE HAS TWO BCD NUMBERS. ONE IS IN LOWER NIBBLE AND THE OTHER IN UPPER NIBBLE. 01011001 IS PACKED BCD FOR 59H. AFTER BCD ADDITION AN INSTRUCTION DA IS REQD. TO ENSURE THAT THE RESULT IS IN BCD.
7

USE DA INSTRUCTION

MOV MOV ADD

A, #47H ;A=47H FIRST BCD B, #25H ;B=25H SECOND BCD A, B ;HEX ADDITION A=6CH

DA

;ADJUST FOR BCD


;ADDITION A=72H

ASSUME THAT 5 BCD DATA BYTES ARE STORED IN RAM LOCATIONS STARTING AT 40H. WRITE A PROGRAM TO FIND THE SUM OF THESE. THE RESULT MUST BE IN BCD
40=(71) 41=(11) 42=(65) 43=(59) 44=(37)

ASSUME THAT 5 BCD DATA BYTES ARE STORED IN RAM LOCATIONS STARTING AT 40H. WRITE A PROGRAM TO FIND THE SUM OF THESE. THE RESULT MUST BE IN BCD
40=(71) 41=(11) 42=(65) 43=(59) 44=(37)

REP:

BYP:

MOV MOV CLR MOV ADD DA JNC INC INC DJNZ

R0, #40H R2, #05H A R7, A A, @R0 BYP R7 R0 R2, REP

;CREATE POINTER ;INTIALISE COUNTER ;A=0 ;R7=0 ;ADD DATA POINTED BY R0 TO A ;ADJUST FOR BCD ;DO NOT INCREMENT R7 ;INCREMENT COUNT OF CARRY ;POINT TO NEXT LOCATION ;REPEAT UNTIL R0 EQUALS 0
10

SUBTRACTION OF UNSIGNED NUMBERS


MAJORITY OF MICROPROCESSORS HAVE TWO DIFFERENT INSTRUCTIONS FOR SUBTRATION: SUB AND SUBB (SUBTRACT WITH BORROW). 8051 HAS ONLY SUBB. TO PERFORM SUB, THE USER HAS TO ENSURE THAT CY=0 PRIOR TO USING SUBB. SUBB WHEN CY=0 TWOS COMPLEMENT TECHNIQUE IS USED FOR SUBTRACTION. THE STEPS INVOLVED ARE 1. 2. 3. 4. TAKE 2s COMPLEMENT OF SUBTRAHEND ADD IT TO THE MINUEND (A). COMPLEMENT THE CARRY AFTER SUBTRACTION IF CY=1, THEN RESULT IS NEGATIVE AND IN 2S COMPLEMENT FORM.
11

THE STEPS INVOLVED WITH THE SUBTRACTION

CLR MOV MOV SUBB

C A, #3FH R3, #23H A, R3

;MAKE CY=0 ;LOAD 3FH INTO A (A=3F) ;LOAD 23H INTO R3 (R3=23H) ;SUBTRACT A R3 AND PLACE ;RESULT IN A

A = 3F R3 = 23 1C

0011 1111 0010 1111

0011 1111 +1101 1101 ( 2s COMPLEMENT) 1 0001 1100 0 CF=0 ( STEP 3) AC=0

CY=0

AND

12

ANALYSE THE PROGRAM TO OBSERVE SUBTRACTION


CLR MOV SUBB JNC CPL INC MOV C A, #4CH ;A=4CH A, #6EH ;SUBTRACT 6E FROM A NEXT ;IF CY=0 GOTO NEW A ;COMPLEMENT CY TO GET 1s ;COMPLEMENT A ;ADD ONE TO GET 2s COMPLEMENT R1, A ;SAVE A IN R1

NEXT:

4C - 6E - 22

0100 0110

1100 1110 2s COMP= 1001 0

0100 1100 0010 1101 1110

CY = 1, THE RESULT IS NEGATIVE AND IN 2s COMPLEMENT FORM


13

SUBB WHEN CY=1


THIS INSTRUCTION IS USED FOR MULTIBYTE NUMBERS AND TAKES CARE OF BORROW OF LOWER OPERAND. THE ADDRESSING MODES FOR SUBB ARE SUBB A, Rn SUBB A, DIRECT SUBB A, @Ri SUBB A, #DATA Rn IS R7 TO R0, DIRECT IS INTERNAL DATA RAM 0 TO 127 OR A SFR (128 TO 255) @Ri IS 8 BIT INTERNAL DATA RAM (0 TO 255) ADDRESSED THRU R1 OR RO

14

WRITE A PROGRAM TO SUBTRACT A TWO BYTE DATA 1296H FROM 2762H.

15

WRITE A PROGRAM TO SUBTRACT A TWO BYTE DATA 1296H FROM 2762H.

CLR MOV SUBB MOV MOV SUBB MOV

C A, #62H A, #96H R7 ,A A, #27H A, #12H R6, A

;CY=0 ;A=62H ;62H-96H=CCH, CY=1 ;SAVE RESULT ;A=27H ;27H-12H-1=14H, CY=0 ;SAVE THE RESULT

16

UNSIGNED MULTIPLICATION
MUL AB ;A*B, PLACE THE 16 BIT RESULT IN B AND A ;LOWER BYTE IN A AND UPPER BYTE IN B

MOV MOV MUL

A #25H B, #65 AB

;A=25H ;B=65H ;25H*65h=E99H. B=0EH AND A=99H

17

DIVISION OF UNSIGNED NUMBERS

DIV

AB

;DIVIDE A BY B ;AFTER DIV QUOTIENT IN A ;REMAINDER IN B

MOV MOV DIV

A, #95 B, #10 AB

;A=95H ;B=10 ;A=09 AND B=05

18

WRITE A PROGRAM (A) TO MAKE P1 AN INPUT PORT, (B) TO GET DATA BYTE OF HEX DATA IN THE RANGE OF 00 TO FFH FROM P1 AND CONVERT IT TO DECIMAL. SAVE THE DIGITS IN R7, R6, AND R5 WITH LEAST SIGNIFICANT IN R7.P1 MAY BE HAVING DIGITAL OUTPUT OF A TO D CONVERTER.

19

WRITE A PROGRAM (A) TO MAKE P1 AN INPUT PORT, (B) TO GET DATA BYTE OF HEX DATA IN THE RANGE OF 00 TO FFH FROM P1 AND CONVERT IT TO DECIMAL. SAVE THE DIGITS IN R7, R6, AND R5 WITH LEAST SIGNIFICANT IN R7.P1 MAY BE HAVING DIGITAL OUTPUT OF A TO D CONVERTER. MOV MOV MOV MOV DIV MOV MOV DIV MOV MOV A, #0FFH P1, A A, P1 B, #10 AB R7, B B, #10 AB R6, B R5, A ; ;P1 IS INPUT ;READ DATA FROM P1 ;B=0AH ;DIVIDE BY 10 ;SAVE LOWEST DIGIT ; ;DIVIDE BY 10 ONCE MORE ;SAVE NEXT DIGIT ;SAVE THE MOST SIGNIFICANT ;DIGIT B=0AH=10 A=19 QUOT. B=3 LOWEST DIGIT A=2 QUOT. B=5 MIDDLE DIGIT 2 HIGH DIGIT
20

A=FDH=253 DIV AB FD/0A 19/0A

SIGNED NUMBERS AND ARITHMETIC OPERATIONS

D7
Sign

D6

D5

D4

D3

D2

D1

D0

Magnitude

POSITIVE NUMBERS
NEGATIVE NUMBERS

0 TO 255
-128 TO +127

21

WHILE USING THE SIGNED NUMBER SYSTEM, THE OV FLAG INDICATES THE EXISTANCE OF ERROR. THE CPU APPRECIATES 0s AND 1s AND IGNORES THE CONVENTION OF POSITIVE AND NEGATIVE NUMBERS
MOV MOV ADD A, #+96 R1, #70 A, R1 ;A= 0110 0000 (A=60H) ;R1= 0100 0110 (R1=46H) ;A= 1010 0110 ;A= A6H = -90 DECIMAL ;WHICH IS WRONG AND INVALID

+96 0110 0000 + +70 0100 0110 + 166 1010 0110 The OV Flag is SET

AND OV=1

1. When there is a CARRY from D6 to D7 but no CARRY out fro D7 2. CARRY out from D7 but no CARRY from D6 to D7.
22

MOV MOV ADD

A, # -128 R4, #-2 A,R4

;A=0000 0000 ;R4=1111 1111 ;A=0111 1110

A=80H R4=FEH A=+7EH, INVALID

-128 1000 0000 + -2 1111 1110 - -130 0111 1110

OV=1

MOV MOV ADD

A, # -2 R1, # -5 A, R1

;A= ;R1= ;A=

1111 1111 1111

1110 1011 1001

A=FEH R1=FBH A= -F9H OV=0

-2 1111 1110 + -5 1111 1011 -7 1111 1001 AND OV=0

23

READ AND TEST P1 TO SEE WHETHER IT HAS THE VALUE 45H. IF IT HAS, SEND 99H TO P2; OTHERWISE, IT IS CLEARED.

24

READ AND TEST P1 TO SEE WHETHER IT HAS THE VALUE 45H. IF IT HAS, SEND 99H TO P2; OTHERWISE, IT IS CLEARED.

MOV MOV MOV MOV XRL JNZ

P2, #00 P1, #0FFH R3, #45H A, P1 A, R3 EXIT

;CLEAR P2 ;P1 IS AN INPUT PORT ;R3=45H ;READ P1 ;JUMP IF A HAS VALUE ;OTHER THAN 0

EXIT:

MOV -----

P2, #99H

25

ASSUME THAT P1 IS AN INPUT PORT CONNECTED TO A TEMPERATURE SENSOR. WRITE A PROGRAM TO READTHE TEMPRATURE AND TEST FOR A VALUE 75. THE TEMPERTURE BE PLACED IN REGISTERS AS FOLLOWS
IF IF IF T=75 T<75 T>75 THEN THEN THE A=75 R1=T R2=T

26

ASSUME THAT P1 IS AN INPUT PORT CONNECTED TO A TEMPERATURE SENSOR. WRITE A PROGRAM TO READTHE TEMPRATURE AND TEST FOR A VALUE 75. THE TEMPERTURE BE PLACED IN REGISTERS AS FOLLOWS
IF IF IF T=75 T<75 T>75 THEN THEN THE A=75 R1=T R2=T
;P1 IS INPUT ;READ P1 TEMP. ;JUMP IF A NOT EQUAL 75 ;A=75, EXIT ;IF CY=0 THEN A>75 ;CY=1, A<75, SAVE IN R1 ;AND EXIT ;A>75, SAVE IN R2

MOV MOV CJNE SJMP OVER: JNC MOV SJMP NEXT: MOV EXIT: ----

P1, #0FFH A, P1 A, #75, OVER EXIT NEXT R1, A EXIT R2, A

27

S-ar putea să vă placă și