Home >> Resources >> Assembly Language Tutorials >> Source Codes
 

 

.MODEL SMALL
.STACK 64

DATA    SEGMENT
MSG1    DB 'ENTER A DIGIT > $'
NUM     DB 00H
MSG2    DB '!=(hexadecimal) $'
MSG3    DB 'INVALID INPUT or OVERFLOW $'
DATA    ENDS

CODE    SEGMENT
        ASSUME CS:CODE,DS:DATA
START:  CALL CLS            ;clears screen   
        MOV DX,0000H       
        CALL CURSOR         ;set cursor at (0,0) for number
        MOV AX,DATA
        MOV DS,AX
        CALL INPUT
        CALL CLS
        MOV DX,0000H
        CALL CURSOR

        CMP NUM,30H
        JC  INVALID
        CMP NUM,39H
        JNC INVALID
        SUB NUM,30H

        MOV CL,NUM          ;CX=NUM
        MOV CH,00H          
        MOV AX,0001H        ;AX=1 (AX used to hold factorial value)
        CALL FACT
        PUSH AX
        MOV AL,NUM          ;print number
        CALL PCHAR
        MOV DX,0001H
        CALL CURSOR         ;set cursor at (1,0) for message
        LEA DX,MSG2
        MOV AH,09H
        INT 21H
        POP AX
        PUSH AX
        AND AX,0F000H        
        MOV CL,0CH
        SHR AX,CL           ;first digit
        CALL PCHAR          ;print first digit
        MOV DX,0012H
        CALL CURSOR         ;set cursor at (18,0) for digit2
        POP AX
        PUSH AX
        AND AX,0F00H
        MOV AL,AH           ;second digit
        CALL PCHAR          ;print second digit
        MOV DX,0013H
        CALL CURSOR         ;set cursor at (19,0) for digit3
        POP AX
        PUSH AX
        AND AX,00F0H        
        MOV CL,04H
        SHR AX,CL           ;third digit
        CALL PCHAR          ;print third digit
        MOV DX,0014H
        CALL CURSOR         ;set cursor at (20,0) for digit4
        POP AX
        AND AX,000FH        ;fourth digit
        CALL PCHAR          ;print fourth digit
        JMP HALT

INVALID:LEA DX,MSG3
        MOV AH,09H
        INT 21H
HALT:   MOV AX,4C00H        ;terminate digit
        INT 21H

        ;CLEARS SCREEN
CLS:    MOV AX,0600H
        MOV BH,07H
        MOV CX,0000H
        MOV DX,184FH
        INT 10H
        RET

        ;SETS CURSOR POSITION AT (DL,DH)
CURSOR: MOV AH,02H
        MOV BH,00H
        INT 10H
        RET

INPUT:  LEA DX,MSG1
        MOV AH,09H
        INT 21H

        MOV AH,01H
        INT 21H
        MOV NUM,AL
        RET

FACT:   CMP CX,02H
        JC EXIT
        PUSH CX
        DEC CX
        CALL FACT
        POP CX
        MUL CX
EXIT:   RET

        ;PRINTS CHARACTER AT CURRENT CURSOR POSITION
PCHAR:  ADD AL,30H
        CMP AL,3AH
        JC L1
        ADD AL,07H
L1:     MOV AH,09H
        MOV BX,0007H
        MOV CX,01H
        INT 10H
        RET

CODE    ENDS    
        END START


 

e-Campus ..!!

A dream come true 'Online Campus Recruitment' To reach the crème de la crème from any campus Across India..

Call Centre/BPO Jobs
Placement Papers
Look for the latest Sample papers of any software/Govt. Company here
 

Google