Search This Blog

Monday, April 4, 2011

Program to sort the numbers in DEscending order


        MVI B, 09H   ; SIZE OF ARRAY
START   LXI H, 2000H ; INITIALIZE MEMORY POINTER
MVI C, 09H   ; INNER LOOP COMPARE ONE TERM WITH 9 TERMS
BACK MOV A, M     ; GET NUMBER IN ACCUMULATOR
INX H     ; INCREMENT MEMORY POINTER
CMP M     ; COMPARE
JNC SKIP     ; IF A>M DONT INTERCHANGE
JZ SKIP     ; IF A=M DONT INTERCHANGE
MOV D, M     ; OTHERWISE SWAP
MOV M, A     ;
DCX H        ; INTERCHANGE NUMBERS
MOV M, D     ; 
INX H        ; INCREMENT TO NEXT MEMORY
SKIP DCR C     ; DCR C
JNZ BACK     ; TILL C!=0 CONTINUE
DCR B     ; DCREMENT OUTSIDE COUNTER
JNZ START    ; TILL B!=0
HLT     ;

Program to sort the numbers in ascending order


        MVI B, 09H   ; SIZE OF ARRAY
START   LXI H, 2000H ; INITIALIZE MEMORY POINTER
MVI C, 09H   ; INNER LOOP COMPARE ONE TERM WITH 9 TERMS
BACK MOV A, M     ; GET NUMBER IN ACCUMULATOR
INX H     ; INCREMENT MEMORY POINTER
CMP M     ; COMPARE
JC SKIP     ; IF A<M DONT INTERCHANGE
JZ SKIP     ; IF A=M DONT INTERCHANGE
MOV D, M     ; OTHERWISE SWAP
MOV M, A     ;
DCX H        ; INTERCHANGE NUMBERS
MOV M, D     ; 
INX H        ; INCREMENT TO NEXT MEMORY
SKIP DCR C     ; DCR C
JNZ BACK     ; TILL C!=0 CONTINUE
DCR B     ; DCREMENT OUTSIDE COUNTER
JNZ START    ; TILL B!=0
HLT     ;

Unpack the packed bcd numbers


; GIVEN
; 2000H = 42
; 2001H = 04
; 2002H = 02


LDA 2000H ; LOAD BCD NUMBER IN ACCUMULATOR
ANI F0H   ; MASK LOWER BYTE TO GET A = 40
RRC  ;
RRC  ;
RRC  ;
RRC  ; A = 04
STA 2001H ; STORE 04
LDA 2000H ; LOAD BCD NUMBER
ANI 0FH  ; MASK HIGHER BYTE TO GET A = 02
STA 2002H ; STORE 02
HLT  ;

Pack the 2 unpacked bcd numbers


; GIVEN
; 2000H = 02H
; 2001H = 04H
; 2002H = 42H


LDA 2001H ; LOAD MSB IN ACCUMULATOR 04H
RLC  ;
RLC  ;
RLC  ;
RLC  ; A = 40H
ANI F0H   ; MAKE LSB ZERO
MOV B, A  ; TEMPORARY STORAGE
LDA 2000H ; LOAD LEAST SIGINIFICANT BIT
ADD B     ; ADD 40 AND 02
STA 2002H ; STORE RESULT 
HLT  ;

Program to mask higher nibble


; A = 32
; LOGICALLY AND WITH 0FH
; A = 02


MVI A, 32 ;
ANI 0FH  ;
STA 2000H ;
HLT  ;

Program to mask lower nibble


; A = 32
; LOGICALLY AND WITH F0H 
; A = 30


MVI A, 32H ;
ANI F0H    ;
STA 2000H  ;
HLT   ;

Find 2's complement of number


; 32 = 0011 0010
; 32'S COMPLEMENT
; 1100 1101 = CD
; 2's COMPLEMENT IS 1100 1101 + 1 = 1100 1110 = CE
LDA 2000H ; LOAD THE NUMBER
CMA  ; COMPLEMENT THE NUMBER
ADI 01H   ;
STA 2001H ; STORE THE COMPLEMENT
HLT  ;

Find 1's complement of number


; 32 = 0011 0010
; 32'S COMPLEMENT
; 1100 1101 = CD


LDA 2000H ; LOAD THE NUMBER
CMA  ; COMPLEMENT THE NUMBER
STA 2001H ; STORE THE COMPLEMENT
HLT  ;

Program to Subtract 2 16 bit numbers


; 2000H = 21H
; 2001H = 12H
; 2002H = 21H
; 2003H = 43H
; RESULT = 1221H - 4321H
; = 3100H
; 2004H = 00H LOWER 2 BYTES
; 2005H = 31H HIGHER 2 BYTES


LHLD 2000H ; LOAD FIRST 16 BIT INTO HL PAIR H=12H L=21H
XCHG   ; SAVE IT IN DE PAIR
LHLD 2002H ; LOAD SECOND 16 BIT INTO HL PAIR H=21H L=43H
MOV A, E   ; LOAD LOWER BYTE OF FIRST NUMBER IN ACCUMULATOR
SUB L   ; SUBTRACT 2 LOWER BYTES
MOV L, A   ; STORE RESULT
MOV A, D   ; LOAD HIGHER BYTE INTO ACCUMULATOR
SBB H   ; SUBTRACT HIGHER BYTE OF SECOND NUMBER WITH BORROW OF PREVIOUS SUBTRACTION
MOV H, A   ; A = A - H - CY
SHLD 2004H ; STORE RESULT
HLT   ;

Program to Add 2 16 bit number

This is done using 8 bit registers
--------------------------------

; 2000H = 21H
; 2001H = 12H
; 2002H = 21H
; 2003H = 43H
; RESULT = 1221H + 4321H
; = 5542H
; 2004H = 42H LOWER 2 BYTES
; 2005H = 55H HIGHER 2 BYTES
; METHOD 1


LHLD 2000H ;LOAD FIRST 16 BIT INTO HL PAIR H=12H L=21H
XCHG    ; SAVE IT IN DE PAIR
LHLD 2002H ; LOAD SECOND 16 BIT INTO HL PAIR H=21H L=43H
MOV A, E   ; LOAD LOWER BYTE OF FIRST NUMBER IN ACCUMULATOR
ADD L    ;ADD TWO LOWER BYTES
MOV L, A   ; STORE RESULT IN L. L=42H
MOV A, D   ; LOAD HIGHER BYTE INTO ACCUMULATOR
ADC H    ; ADD 2 HIGHER BYTES ALONG WITH CARRY FROM THE LOWER BYTES
MOV H, A   ;
SHLD 2004H ;
HLT    ;
------------------------------

; METHOD 2
LHLD 2000H ; LOAD FIRST 16 BIT INTO HL PAIR H=12H L=21H
XCHG   ; SAVE IT IN DE PAIR
LHLD 2002H ; LOAD SECOND 16 BIT INTO HL PAIR H=21H L=43H
DAD D   ; ADD 2 16 BIT NUMBERS
SHLD 2004H ; STORE 16 BIT RESULT
HLT   ;

-----------------------------------