Assignment 2 Solution
Assignment 2 Solution
.MODEL SMALL
ORG 0x0100
.STACK 100H
.DATA
MULTIPLICAND DB 0x45 ,0xD5 ,0x17 , 0x12
MULTIPLIER DB 0x45 ,0xAB ,0x90 , 0x87
PRODUCT DB 8 DUP(?)
.CODE
MOV AX,@DATA
MOV DS,AX
MOV SI,3 ; FOR MULTIPLIER
MOV DI,7 ; FOR PRODUCT
MOV CX,4 ; SIZE OF LOOP FOR EACH BYTE OF MULTIPLIER IN
ARRAY
; NEXT MULTIPLIER IS LOOP TO SWITCH BETWEEN VALUES OF
;MULTIPLIER ARRAY
NEXTMULTIPLIER:
PUSH CX ; SAVING CX OF IN STACK
PUSH DI ; SAVING DI OF IN STACK
MOV BX,3 ; FOR MULTIPLICAND
MOV CX,4 ; SIZE OF LOOP FOR EACH BYTE OF MULTIPLICAND IN ARRAY
; NEXT MULTIPLICAND IS LOOP TO SWITCH BETWEEN VALUES OF
;MULTIPLICAND ARRAY
NEXTMULTIPLICAND:
PUSH CX ; SAVING CX OF NEXTMULTIPLICAND LOOP IN STACK
XOR AX,AX ; CLEARING AX
MOV AL,[MULTIPLICAND+BX] ; STORING BYTE OF MULTIPLICAND
MOV DL,[MULTIPLIER+SI] ; STORING BYTE OF MULTIPLIER
MOV CX,8 ; SIZE OF LOOP FOR BYTE MULTIPLICATION
; MAIN CODE FOR MULTIPLICATION USING SHIFT MANIPULATION
COMMANDS
MULTIPLYBYTE: ; LOOP FOR BYTE MULTIPLICATION STARTS HERE
CMP DL,0 ; CHECKING IF MULTIPLIER IS 0 OR NOT
JE END_MULTIPLICATION
CMP AX,0 ; CHECKING IF MULTIPLICAND IS 0 OR NOT
JE END_MULTIPLICATION
SHR DX,1 ; SHIFTING MULTILIER RIGHT TO CHECK IF LSB IS 1 0R 0
JNC SKIP
TEST AX,0 ; RESETTING CF FLAG AFFECTED BY SHR
ADC [PRODUCT+DI],AL
ADC [PRODUCT+DI-1],AH
SKIP:
SHL AX,1 ; SHIFTING MULTIPLICAND LEFT
LOOP MULTIPLYBYTE ; LOOP FOR BYTE MULTIPLICATION ENDS HERE
END_MULTIPLICATION:
DEC DI
DEC BX
POP CX ; RESTORING VALUE OF CX FROM STACK
LOOP NEXTMULTIPLICAND
POP DI ; RESTORING VALUE OF DI FROM STACK
POP CX ; RESTORING VALUE OF CX FROM STACK
DEC SI
DEC DI
LOOP NEXTMULTIPLIER
ENDLOOP:
.EXIT