Advertisement
AVONnadozie

SUBROUTINE TO CONVERT CHARACTERS IN MEMORY TO A DECIMAL

Mar 23rd, 2013
290
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;***********************************************************************************************************
  2. ;*                       AUTHOR: ANUEBUNWA VICTOR OGECHUKWU                                                *
  3. ;*                                                                                                         *
  4. ;*               SUBROUTINE TO CONVERT CHARACTERS IN MEMORY TO A DECIMAL VALUE                             *
  5. ;* Subroutine CHAR2INTR converts characters in memory to a decimal value and stores it in AX.              *
  6. ;* i.e '1','2','3','4' in memory ==> 1234 in AX                                                            *
  7. ;* ............................................HOW TO USE................................................. *
  8. ;* (1) Load the starting address of the memory into SI register.                                           *
  9. ;* (2) Call CHAR2INTR.                                                                                     *
  10. ;***********************************************************************************************************
  11.  
  12. ;         SAMPLE PROGRAM
  13. .MODEL SMALL
  14. .STACK
  15. .DATA
  16.     AVON DB ?
  17. .CODE
  18. START:      MOV AX, @DATA
  19.             MOV DS, AX
  20.            
  21.             MOV AH, 3FH
  22.             LEA DX, AVON
  23.             INT 21H                 ;Reads characters into memory, using AVON as a starting address
  24.            
  25.             LEA SI, AVON            ;Loads starting address into SI
  26.             CALL CHAR2INTR          ;Calls CHAR2INTR to convert characters to a decimal value
  27.             MOV DX, AX              ;Puts decimal value into DX
  28.             MOV AH, 02H
  29.             INT 21H                 ;Displays character whose ASCII code equals the decimal value
  30.            
  31.             MOV AH, 4CH
  32.             INT 21H
  33.  
  34. ;Subroutine CHAR2INTR
  35. CHAR2INTR PROC
  36.             PUSH BX
  37.             PUSH CX
  38.             PUSH DX
  39.             PUSH SI
  40.             PUSHF
  41.            
  42.             MOV AX, 0000H
  43.             MOV CX, 0000H
  44. CLOOP1:     MOV AX, [SI]            ;Loads character currently pointed to into AX
  45.             CMP AL, '9'
  46.             JNLE XCLOOP1            ;Exits loop if character is not less or equal to '9'
  47.             CMP AL, '0'
  48.             JNGE XCLOOP1            ;Exits loop if character is not greater or equal to '0'
  49.             INC CL              ;Else, Keeps count of the number of characters being processed
  50.             INC SI              ;Moves pointer to the next character
  51.             SUB AL, 30H         ;Converts character to digit
  52.             PUSH AX             ;Pushes digit to stack
  53.             JMP CLOOP1          ;continues loop
  54.  
  55. XCLOOP1:    MOV BX, 0001H
  56.             MOV DX, 0000H
  57. CLOOP2:     CMP CL, 0               ;Checks number of characters processed
  58.             JE XCLOOP2          ;Exits loop if no character was processed i.e CL = 0
  59.             POP AX              ;Else, pops digit from stack to AX
  60.             MUL BL              ;Multiplies digit with it's PLACEMENT-VALUE. RECALL: unit = 1, tens = 10, hundreds = 100 ...
  61.             ADD DX, AX          ;Adds (digit * PLACEMENT-VALUE)s together. RECALL: 234 = (4 * 1) + (3 * 10) + (2 * 100) where 1,10,100 represent their PLACEMENT-VALUES
  62.             MOV AX, 10             
  63.             MUL BL              ;Multiplies current PLACEMENT-VALUE by 10 to advance to the next PLACEMENT-VALUE.
  64.             XCHG AX, BX         ;Puts result from multiplication back to BX
  65.             DEC CX              ;Reduces count
  66.             JMP CLOOP2          ;Loop continues
  67.            
  68. XCLOOP2:    MOV AX, DX              ;Moves converted value to AX
  69.            
  70.             POPF
  71.             POP SI
  72.             POP DX
  73.             POP CX
  74.             POP BX
  75.             RET
  76. CHAR2INTR ENDP
  77. ;End of Subroutine CHAR2INTR
  78.  
  79. END START
  80. ;                               \|||/                                            
  81. ;          .-.________          (o o)                        ________.-.                    
  82. ;     ----/ \_)_______)  +-oooO--(_)---------------------+  (_______(_/ \----              
  83. ;        (    ()___)     | Get more Codes At:            |    (___()     )                  
  84. ;             ()__)      |                               |     (__()                        
  85. ;     ----\___()_)       | www.showmecodes.blogspot.com  |      (_()___/----                
  86. ;                        +-----------------------Ooo-----+                                  
  87. ;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement