.MODEL SMALL .386 .STACK 20H .DATA MESS1 DB "ENTER DECIMAL NUMBER: $" MESS2 DB "EQUIVALENT BINARY NUMBER: $" MESS3 DB "TO CONTINUE PRESS 'Y' OR TO TERMINATE PRESS 'N'$" MESS4 DB "ENTER CHOICE: $" .CODE .STARTUP GO: CALL LINE MOV DX,OFFSET MESS1 CALL PRINTMSG CALL NUM SUB AL,30H CMP AL,09H JBE LL JMP GO LL:XOR DX,DX MOV BL,08H MOV CX,3 CNV:TEST AL,BL JNZ L1 ADD DX,0 JMP L2 L1:ADD DX,1 L2:SHL DX,4 SHR BL,1 LOOP CNV TEST AL,BL JNZ L3 ADD DX,0 JMP L4 L3:ADD DX,1 L4: MOV BX,DX CALL LINE MOV DX,OFFSET MESS2 CALL PRINTMSG CALL OUTPUT CALL LINE MOV DX,OFFSET MESS3 CALL PRINTMSG CALL LINE MOV DX,OFFSET MESS4 CALL PRINTMSG CALL NUM .IF AL=='Y' JMP GO .ELSE JMP FNSH .ENDIF FNSH: .EXIT LINE PROC NEAR ;---------- NEW LINE ------------- MOV DL,0AH MOV AH,02 INT 21H RET LINE ENDP PRINTMSG PROC NEAR MOV AH,09H INT 21H RET PRINTMSG ENDP NUM PROC NEAR MOV AH,01H INT 21H RET NUM ENDP OUTPUT PROC NEAR ;---------- OUTPUT----------------- MOV CL,12 ;counter for nibble shift MOV BP,0F000H ;register for nibble selection JUMP16: MOV DX,BX ;retrive sum AND DX,BP ;select nibble SHR DX,CL ;shift nibble to LSB nibble location CALL CONVERT ;procedure to display sum SHR BP,4 ;shift register contents for other nibble selection SUB CL,4 ;decrement counter JNZ JUMP16 ;check counter status MOV DX,BX ;retrive sum AND DX,BP ;select nibble CALL CONVERT ;procedure to display sum RET OUTPUT ENDP CONVERT PROC NEAR ;---------- convert to ascii --------- ADD DL,30H MOV AH,02 INT 21H RET CONVERT ENDP END