.model small ;.model directive is to specify len of our program ;.386 ;80386 microprocessor directive library is installed .data ;.data means we are using data segment register MESS1 DB "Enter 1st 8 digit BCD number: $" ;message to be displayed on the screen to input 1st no. MESS2 DB "Enter 2nd 8 digit BCD number: $" ;message to be displayed on the screen to input 2nd no. MESS3 DB " Sum is: $" ;message to be displayed on the screen to display sum. ERR DB "INVALID ENTRY!! Enter the complete no. again $" N1 DB 4 DUP(?) N2 DB 4 DUP(?) ARR DB 4 DUP(?) .code ; .code means our program code follows here .startup ; now the program starts MOV DX, OFFSET MESS1 ;offset of mess1 passed in DX CALL MSG ;procedure to display message MOV CX,04 MOV DI,0 RD1:CALL NUMB ;procedure to input 32bit no. MOV N1[DI],BL INC DI LOOP RD1 CALL LINE ;line break ;---------- SECOND NUMBER ------------ MOV DX, OFFSET MESS2 ;offset of mess2 passed in DX CALL MSG ;procedure to display message MOV CX,04 MOV DI,0 RD2:CALL NUMB ;procedure to input 32bit no. MOV N2[DI],BL INC DI LOOP RD2 ;procedure to input 32bit no. CALL LINE ;line break ;---------- ADDITION CODE ------------ MOV DX, OFFSET MESS3 ;offset of mess3 passed in DX CALL MSG ;procedure to display messagePOP EDX DEC DI MOV CX,03 MOV AL,N1[DI] ADD AL,N2[DI] ;add two 32bit numbers DAA ;store the result in EBX MOV ARR[DI],AL L2: DEC DI MOV AL,N1[DI] ADC AL,N2[DI] ;add two 32bit numbers DAA ;store the result in EBX MOV ARR[DI],AL LOOP L2 JNC JUMP8 ;jump if sum is 32bit no. ;XOR EDX,EDX ;clear EDX MOV DL,01H ;copy carry in DL if sum is > 32bit no. CALL OUTPUT ;procedure to display carry ;---------- OUTPUT SUM ----------------- JUMP8: ;XOR EBX,EBX MOV CX,04 MOV DI,00 L7: MOV DL,ARR[DI] AND DL,0F0H SHR DL,4 CALL OUTPUT ;procedure to display sum MOV DL,ARR[DI] AND DL,0FH ;check counter status CALL OUTPUT INC DI ;procedure to display sum LOOP L7 ;------------ THE END -------------- .exit ;exit to DOS LINE PROC NEAR ;---------- NEW LINE ------------- MOV DL,0AH MOV AH,02 INT 21H RET LINE ENDP MSG PROC NEAR ;---------- TYPE MESSAGE ------------- MOV AH,09H INT 21h RET MSG ENDP OUTPUT PROC NEAR ;---------- convert to ascii --------- ADD DL,30H MOV AH,02 INT 21H RET OUTPUT ENDP NUMB PROC NEAR ;-------------- INPUT NUMBER ----------- L1: MOV AH,01 INT 21H SUB AL,30H CMP AL,09 JBE JUMP1 CALL LINE MOV DX, OFFSET ERR CALL MSG JMP L1 JUMP1: MOV BL,AL SHL BX,4 MOV AH,01 INT 21H SUB AL,30H CMP AL,09 JBE JUMP2 CALL LINE MOV DX, OFFSET ERR CALL MSG JMP L1 JUMP2: ADD BL,AL RET NUMB ENDP end ;end of program