Advertisement
utroz

Number System Convert

Jul 2nd, 2011
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; ------------------------
  2. ; Macro Assembler 6.11
  3. ; Number System Convert
  4. ; @author #Utroz(RSC)#
  5. ; Visit: www.Gcoders.info
  6. ; ------------------------
  7.  
  8. CODE__SEG        SEGMENT
  9.         ASSUME CS: CODE__SEG
  10.         ORG 100h
  11.  
  12. PUBLIC @MAIN
  13.  
  14. @MAIN   PROC NEAR
  15.         MOV DX,12345    ;Hex:3039h
  16.     CALL @SIGNAL
  17.     CALL @DEC__PRINT
  18.  
  19.     INT 20h     ;Return to DOS(Exit System).
  20. @MAIN   ENDP
  21.  
  22. @SIGNAL PROC NEAR
  23.     PUSH DX
  24.     CMP DX,8000h    ;IF(DX <=  7FFFh)
  25.     JA NEGATIVE ;GOTO NEGATIVE
  26.  
  27.     MOV DL,2Bh  ;POSITIVE
  28.     JMP Short PRINT
  29.  
  30. NEGATIVE:
  31.     MOV DL,2Dh
  32.  
  33. PRINT: 
  34.     CALL @PRINT
  35.     POP DX
  36.  
  37.     RET
  38.  
  39. @SIGNAL ENDP
  40.  
  41. ;------ DECIMAL ----
  42.  
  43. PUBLIC @DEC__PRINT
  44.  
  45. @DEC__PRINT PROC NEAR
  46.     PUSH AX     ;Save used registers.
  47.     PUSH CX
  48.     PUSH DX
  49.     PUSH SI
  50.  
  51.     MOV AX,DX   ;Move hex to AX.
  52.     MOV SI,10   ;Divisor by 10 using SI.
  53.     XOR CX,CX   ;Stack digits count.   
  54.  
  55. NOT__ZERO:
  56.     XOR DX,DX   ;N word start on zero.
  57.     DIV SI      ;Div value on AX for SI: n/10 / DX = mod.
  58.     PUSH DX     ;Put DX in stack.
  59.     INC CX      ;Increments a CX.
  60.  
  61.     OR AX,AX    ;IF(AX != 0)
  62.     JNZ NOT__ZERO   ;GOTO NOT__ZERO
  63.  
  64. PRINT__LOOP:
  65.     POP DX      ;Take digits in reverse.
  66.     CALL @HEX__CONVERT ;Send to print.
  67.     LOOP PRINT__LOOP
  68.  
  69. END__DEC:
  70.     POP SI
  71.     POP DX
  72.     POP CX
  73.     POP AX
  74.     RET    
  75.  
  76. @DEC__PRINT ENDP
  77. ;----------------
  78.  
  79. ;------ HEXDECIMAL --
  80.  
  81. PUBLIC @HEX__PRINT
  82.  
  83. @HEX__PRINT PROC NEAR
  84.     PUSH CX     ;Save registers
  85.     PUSH DX    
  86.     MOV DH, DL  ;Copy low byte to high byte.
  87.     MOV CL,04h
  88.     SHR DL,CL
  89.  
  90.     CALL @HEX__CONVERT ;First digit.
  91.     MOV DL, DH
  92.     AND DL, 0Fh
  93.  
  94.     CALL @HEX__CONVERT ;Second digit.
  95.     POP DX 
  96.     POP CX
  97.  
  98.     RET
  99.  
  100. @HEX__PRINT ENDP
  101. ;----------------
  102.  
  103. PUBLIC @HEX__CONVERT
  104.  
  105. @HEX__CONVERT   PROC NEAR
  106.     PUSH DX
  107.     CMP DL,10   ; !(DL > 10d)
  108.     JAE HEX     ;IF no
  109.     ADD DL,"0"  ;ADD DL,30 - IF yes(DEC)
  110.     JMP Short PRINT_CHAR   
  111.  
  112.     HEX:
  113.         ADD DL,"A"-10 ;ADD DL,37
  114.  
  115.     PRINT_CHAR:
  116.         CALL @PRINT
  117.         POP DX
  118.  
  119.         RET
  120.  
  121. @HEX__CONVERT   ENDP
  122. ;------
  123.  
  124. PUBLIC @PRINT  
  125.  
  126. @PRINT  PROC NEAR
  127.     PUSH AX
  128.     MOV AH, 02h ;Function 02 a INT 21h.
  129.     INT 21h
  130.     CALL @BEEP_SOUND
  131.     POP AX
  132.     RET
  133.  
  134. @PRINT  ENDP
  135.  
  136. @BEEP_SOUND PROC NEAR
  137.     PUSH DX
  138.     MOV DL,7    ;Play a Beep Sound on print char.
  139.     INT 21h
  140.     POP DX
  141.  
  142.     RET
  143.  
  144. @BEEP_SOUND ENDP
  145.    
  146.  
  147. CODE__SEG   ENDS
  148. END @MAIN
  149.  
  150. ;-------END--------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement