.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 32 bit number: $" ;message to be displayed on the screen to input 1st no. MESS2 DB "Enter 2nd 32 bit number: $" ;message to be displayed on the screen to input 2nd no. MESS3 DB " Difference is: $" ;message to be displayed on the screen to display sum. .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 CALL REGS ;procedure to clear EBX,EDX CALL NUMB ;procedure to input 32bit no. PUSH EBX ;storing the number in stack CALL LINE ;line break ;---------- SECOND NUMBER ------------ MOV DX, OFFSET MESS2 ;offset of mess2 passed in DX CALL MSG ;procedure to display message CALL REGS ;procedure to clear EBX,EDX CALL NUMB ;procedure to input 32bit no. PUSH EBX ;storing the number in stack CALL LINE ;line break ;---------- SUBTRACTION CODE ------------ MOV DX, OFFSET MESS3 ;offset of mess3 passed in DX CALL MSG ;procedure to display messagePOP EDX POP EBX ;retrive 2nd number POP EDX ;retrive 1st number CMP EDX,EBX ;compare 1st & 2nd number JAE JUMP9 ;if EDX > EBX then jump MOV ECX,EBX ;swaping of EDX & EBX MOV EBX,EDX MOV DL,0C4H ;loading code for minus sign sign MOV AH,02 ;display the sign INT 21H MOV EDX,ECX MOV ECX,00H ;clear ECX register JUMP9:SUB EDX,EBX ;subtract two numbers MOV EBX,EDX ;store the result in EBX ;---------- OUTPUT DIFFERENCE ----------------- JUMP8: MOV CL,28 ;counter for nibble shift MOV EBP,0F0000000H ;register for nibble selection JUMP16: MOV EDX,EBX ;retrive difference AND EDX,EBP ;select nibble SHR EDX,CL ;shift nibble to LSB nibble location CALL OUTPUT ;procedure to display sum SHR EBP,4 ;shift register contents for other nibble selection SUB CL,4 ;decrement counter JNZ JUMP16 ;check counter status MOV EDX,EBX ;retrive difference AND EDX,EBP ;select nibble CALL OUTPUT ;procedure to display sum ;------------ 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 REGS PROC NEAR MOV EBX,00H MOV EDX,00H RET REGS ENDP OUTPUT PROC NEAR ;---------- convert to ascii --------- CMP DL,09 JBE JUMP10 ADD DL,07H JUMP10: ADD DL,30H MOV AH,02 INT 21H RET OUTPUT ENDP NUMB PROC NEAR ;-------------- INPUT NUMBER ----------- MOV CX,7 JUMP0: MOV AH,01 INT 21H SUB AL,30H CMP AL,09 JBE JUMP1 SUB AL,07H JUMP1: ADD BL,AL SHL EBX,4 LOOP JUMP0 MOV AH,01 INT 21H SUB AL,30H CMP AL,09 JBE JUMP2 SUB AL,07H JUMP2: ADD BL,AL RET NUMB ENDP end ;end of program