fork download
  1. ;Journal Program
  2. ;Factorial of 8-bit hex number using Recursive Procedure
  3. ;(Range of Input 0 to 8 )
  4. DATA SEGMENT
  5. NUMBER DW 0004H
  6. HEX_CHART DB '0123456789ABCDEF'
  7. LSB_OF_RESULT DB ?
  8. MSB_OF_RESULT DB ?
  9. H_ATTACH DB 'H'
  10. MSG DB 'FACTORIAL IS :- $'
  11. DATA ENDS
  12. CODE SEGMENT
  13. ASSUME CS:CODE,DS:DATA
  14. MOV AX,DATA
  15. MOV DS,AX ;Initialization of DS register
  16. LEA DX,MSG
  17. MOV AH,09H
  18. INT 21H
  19. MOV AX,NUMBER
  20. MOV CX,NUMBER
  21. CALL FACTORIAL ;Calling a near procedure to calculate factorial
  22.  
  23. EXIT:MOV MSB_OF_RESULT,AH
  24. MOV LSB_OF_RESULT,AL
  25. MOV AL,MSB_OF_RESULT
  26. AND AL,0F0H
  27. MOV CL,04H
  28. ROR AL,CL
  29. CALL DISP_CHAR ;Calling a Near procedure to display
  30. ;most significand digit of most significand byte
  31. MOV AL,MSB_OF_RESULT
  32. AND AL,0FH
  33. CALL DISP_CHAR ;Calling a Near procedure to display
  34. ;least significand digit of most significand byte
  35.  
  36. MOV AL,LSB_OF_RESULT
  37. AND AL,0F0H
  38. MOV CL,04H
  39. ROR AL,CL
  40. CALL DISP_CHAR ;Calling a Near procedure to display
  41. ;most significand digit of least significand byte
  42. MOV AL,LSB_OF_RESULT
  43. AND AL,0FH
  44. CALL DISP_CHAR ;Calling a Near procedure to display
  45. ;least significand digit of least
  46. ;significand byte
  47. MOV DL,H_ATTACH ;Display H in result
  48. MOV AH,02H
  49. INT 21H
  50. JMP LAST
  51. FACTORIAL PROC NEAR ;Defining a near procedure for factorial
  52. CMP CX,01
  53. JG N1
  54. MOV AX,01
  55. JMP EXIT
  56. N1:CALL CALCULATION ;Calling other near procedure
  57. RET
  58. FACTORIAL ENDP
  59. CALCULATION PROC NEAR
  60. DEC CX
  61. MUL CX
  62. CMP CX,01
  63. JE EXIT
  64. CALL FACTORIAL ;Indirect recursion
  65. RET
  66. CALCULATION ENDP
  67.  
  68. DISP_CHAR PROC NEAR ;Defining a near procedure to display a
  69. ;character
  70. MOV BX,00H
  71. MOV BL,AL
  72. MOV DL,HEX_CHART[BX]
  73. MOV AH,02H
  74. INT 21H
  75. RET
  76. DISP_CHAR ENDP
  77. LAST:MOV AH,4CH ;Termination of a program
  78. INT 21H
  79. CODE ENDS
Success #stdin #stdout 0.03s 26156KB
stdin
Standard input is empty
stdout
;Journal Program
;Factorial of 8-bit hex number using Recursive Procedure
;(Range of Input 0 to 8 )
DATA SEGMENT
 NUMBER DW 0004H
 HEX_CHART DB '0123456789ABCDEF'
 LSB_OF_RESULT DB ?
 MSB_OF_RESULT DB ?
 H_ATTACH DB 'H'
 MSG DB 'FACTORIAL IS :- $'
DATA ENDS
CODE SEGMENT
 ASSUME CS:CODE,DS:DATA
 MOV AX,DATA
 MOV DS,AX ;Initialization of DS register
 LEA DX,MSG
 MOV AH,09H
 INT 21H
 MOV AX,NUMBER
 MOV CX,NUMBER
 CALL FACTORIAL ;Calling a near procedure to calculate factorial
 
 EXIT:MOV MSB_OF_RESULT,AH
 MOV LSB_OF_RESULT,AL
 MOV AL,MSB_OF_RESULT
 AND AL,0F0H
 MOV CL,04H
 ROR AL,CL
 CALL DISP_CHAR ;Calling a Near procedure to display
 ;most significand digit of most significand byte
 MOV AL,MSB_OF_RESULT
 AND AL,0FH
 CALL DISP_CHAR ;Calling a Near procedure to display
 ;least significand digit of most significand byte 
 
 MOV AL,LSB_OF_RESULT
 AND AL,0F0H
 MOV CL,04H
 ROR AL,CL
 CALL DISP_CHAR ;Calling a Near procedure to display
 ;most significand digit of least significand byte
 MOV AL,LSB_OF_RESULT
 AND AL,0FH
 CALL DISP_CHAR ;Calling a Near procedure to display
 ;least significand digit of least 
 ;significand byte
 MOV DL,H_ATTACH ;Display H in result
 MOV AH,02H
 INT 21H
 JMP LAST
 FACTORIAL PROC NEAR ;Defining a near procedure for factorial
 CMP CX,01
 JG N1
 MOV AX,01
 JMP EXIT
 N1:CALL CALCULATION ;Calling other near procedure
 RET
 FACTORIAL ENDP
 CALCULATION PROC NEAR
 DEC CX
 MUL CX
 CMP CX,01
 JE EXIT
 CALL FACTORIAL ;Indirect recursion
 RET
 CALCULATION ENDP
 
 DISP_CHAR PROC NEAR ;Defining a near procedure to display a 
;character
 MOV BX,00H
 MOV BL,AL
 MOV DL,HEX_CHART[BX]
 MOV AH,02H
 INT 21H
 RET
 DISP_CHAR ENDP
 LAST:MOV AH,4CH ;Termination of a program
 INT 21H
CODE ENDS
END