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 ::.
________________