Assembly Language Programs.. (8086)

 

These programs have been tested in EMU 8086 v2.57.............

1. LCM of 2 Octal Numbers

2. LCM of "n" numbers

3. Count from 0 - 765 in base 8

4. HCF of "n" numbers

5. 32 bit X 32 bit Multiplication



 
FIND THE LCM OF TWO OCTAL NUMBERS
 

MOV SI,1000H 
MOV AX,[1000H] 
CALL NUM2HEX ADD SI,02H 
MOV AX,[1002H] 
CALL NUM2HEX 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
;;      FIND THE LCM OF THE 2 NUMBERS     ;; 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  
  MOV AX,[1000H] 
  MOV BX,[1002H] 
  CMP AX,BX 
  JG OK 
  XCHG AX,BX 
  MOV DI,AX 
OK: 
   XOR DX,DX 
   DIV BX 
   CMP DX,0H 
   JNZ INCR 
   JMP HEX2NUM 
INCR: 
   MOV AX,DI 
   ADD AX,2CH 
   MOV DI,AX 
   JMP OK 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
;;        HEX TO OCTAL CONVERSION         ;; 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
HEX2NUM:  
   MOV [1004H],DI 
   MOV AX,DI 
   MOV DI,AX 
   MOV CL,08H 
   DIV CL 
   XOR AH,AH 
   MUL CL 
   ADD [1004H],AX 
   ; 
   MOV AX,DI 
   MOV CH,40H 
   DIV CH 
   MUL CL 
   MOV CH,10H 
   MUL CH 
   ADD [1004H],AX 
   ; 
   MOV AX,DI 
   MOV CX,200H 
   XOR DX,DX 
   DIV CX 
   MUL CL 
   MOV CX,100H 
   MUL CX 
   ADD [1004H],AX 
   HLT 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
;;        OCTAL TO HEX CONVERSION         ;; 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
NUM2HEX:   
	MOV DI,AX 
   MOV CL,10H 
   DIV CL 
   XOR AH,AH 
   MOV CL,08H 
   MUL CL 
   SUB [SI],AX 
   ; 
   MOV AX,DI 
   XOR DX,DX 
   MOV CX,100H 
   DIV CX 
   XOR AH,AH 
   MOV CL,08H 
   MUL CL 
   MUL CL 
   SUB [SI],AX 
   ; 
   MOV AX,DI 
   XOR DX,DX 
   MOV CX,1000H 
   DIV CX 
   MOV CL,08H 
   MUL CL 
   MUL CL 
   MUL CL 
   SUB [SI],AX 
   RET 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
;;        FIND THE ANSWER AT [SI]         ;; 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
   


LCM OF N NUMBERS
;
 	 MOV CX,05H ;;;;; MOV CX,<N-1> ; this one for 6 numbers ;;;;
	 MOV SI,0H
OUTER_LOOP:
     
   PUSH CX
   XOR DX,DX
   AGAIN:
   MOV AX,[SI]
   MOV CX,[SI+02H]
   CMP AX,CX
   JA NO_SWAP
   XCHG AX,[SI+02H]
   XCHG CX,[SI]
NO_SWAP:
   CMP DX,0H ; These lines..to ensure that we take the next multiple correctly..
   JNE CNT ; Try stepping the program by commenting these lines.. 
   MOV BX,AX ; You will understand why I did this. 
   CNT:
   CWD
   DIV CX 
   CMP DX,0H 
   JNZ NEXT_MULTIPLE
   
   MOV AX,[SI]
   MOV [SI+02H],AX
   ADD SI,02H
   POP CX
   LOOP OUTER_LOOP
   HLT
NEXT_MULTIPLE:
     
   MOV DX,0FH
   ADD [SI],BX
   JMP AGAIN


Count upto 765 in base 8
;
;
; Answer lies in [2002] [2001] [2000]


Next:
 	 MOV AL,[2000H]
	 INC AL
	 CMP AL,08H
	 JNE 765_Check
	 MOV BYTE[2000H],0H
	 JMP Second


765_Check:
	 CMP BYTE[2000H],05H
	 JNE Continue_1
	 CMP BYTE[2001H],06H
	 JNE Continue_1
	 CMP BYTE[2002H],07H
	 JZ Terminate


Continue_1:
	 MOV [2000H],AL
	 CALL Display
	 JMP Next


Second:
	 MOV AL,[2001H]
	 INC AL
	 CMP AL,08H
	 JNE Continue_2
	 MOV BYTE[2001H],0H
	 JMP Third


Continue_2:
	 MOV [2001H],AL
	 JMP Next


Third:
	 MOV AL,[2002H]
	 INC AL
	 CMP AL,08H
	 JNE Continue_3
	 MOV BYTE[2002H],0H
	 JMP Next


Continue_3:
	 MOV [2002H],AL
	 JMP Next


Terminate:
	 HLT


Display:
	 NOP
	 ; Write the code to Display here......
	 RET
    

 



HCF of "n" numbers 

opcode    mnemonics 
BE0020   MOV SI,2000
  8B04   MOV AX,[SI]
A30010   MOV [1200],AX
B90400   MOV CX,0004
A10010   MOV AX,[1200]
8B5C02   MOV BX,[SI+02]
  39D8   CMP AX,BX
  7702   JA 1017
  87C3   XCHG AX,BX
    99   CWD
  F7F3   DIV BX
83FA00   CMP DX,+00
  7406   JZ 1025
  89D8   MOV AX,BX
  89D3   MOV BX,DX
  EBF2   JMP 1017
891E0012 MOV [1200],BX
83C602   ADD SI,+02
  E2DD   LOOP 100B
    F4   HLT
; hcf for n numbers (n-1) in CX
; numbers startting from [2000] onwards
; answer lies in [1200] & BX
     


32 bit x 32 bit Multiplication 
     
     	ADDRESS OPCODE MNEMONIC
		1000 B92000 	MOV CX,0020
       1003 31F6 		XOR SI,SI
       1005 31ED 		XOR BP,BP
       1007 8B1E0012 	MOV BX,[1200]
       100B 8B160212 	MOV DX,[1202]
       100F A10412 	MOV AX,[1204]
       1012 8B3E0612 	MOV DI,[1206]
       1016 F8 		CLC
       1017 D1DF 		RCR DI,1
       1019 D1D8 		RCR AX,1
       101B 7311 		JNB 102E
       101D F8 		CLC
       101E 011E0020 	ADD [2000],BX
       1022 11160220 	ADC [2002],DX
       1026 11360420	ADC [2004],SI
       102A 112E0620 	ADC [2006],BP
       102E F8 		CLC
       102F D1D3 		RCL BX,1
       1031 D1D2 		RCL DX,1
       1033 D1D6 		RCL SI,1
       1035 D1D5 		RCL BP,1
       1037 E2DD 		LOOP 1016
       1039 F4 		HLT
		;
       ; Load first 32 bit number in [1200]
       ; Load second 32 bit number in [1204]
       ; RESULT STORED AT [2000] - [2007]
       ; IMPORTANT !! 
       ; BEFORE EXECUTION CLEAR THE CONTENTS OF THE RESULT
       ; ie, initialise [2000] - [2007] to zero
       ;
       ; ALL THE BEST, !!

 .:: thanks ::.
________________