I have to build a Base Converter in 8086 assembly .
The user has to choose his based and then put a number, after then , the program will show him his number in 3 more bases[he bring a decimal number, and after this he will see his number in hex, oct, and bin.
This first question is, how can I convert the number he gave me, from string, to a number?
the sec question is, how can i convert? by RCR, and then adc some variable?
Here is my code:
data segment
  N=8
       ERROR_STRING_BASE DB ,10,13, "               THIS IS NOT A BASE!",10,13, "               TRY AGINE" ,10,13," $"     
        OPENSTRING DB "                      Welcome, to the Base    Convertor",10,13,"                     Please enter your base to convert     from:",10,13,"                   <'H'= Hex, 'D'=Dec, 'O'=oct, 'B'=bin>: $"
  Hex_string DB "(H)" ,10,13, "$"
  Octalic_string DB "(O) ",10,13, "$" 
  Binar_string DB "(B)",10,13, "$"
  Dece_string DB "(D)",10,13, "$"
  ENTER_STRING DB ,10,13, "      Now, Enter Your Number (Up to 4 digits) ",10,13, "$"
     Illegal_Number DB ,10,13, "      !!!  This number is illegal, lets Start     again" ,10,13,"$"
  BASED_BUFFER  DB N,?,N+1  DUP(0)  
  Number_buffer  db N, ? ,N+1 DUP(0)
  TheBase DB N DUP(0)                           
  The_numer DB N DUP(0)
  The_binNumber DB 16 DUP(0)
  data ends
   sseg segment stack
   dw   128  dup(0)
   sseg ends
    code segment
    assume ss:sseg,cs:code,ds:data
    start:  mov ax,data
    mov ds,ax
      MOV DX,OFFSET OPENSTRING ;PUTS THE OPENING SRTING 
      MOV AH,9
      INT 21H
    call EnterBase 
     CALL  CheckBase
     HEXBASE: CALL PRINTtheNUMBER 
     MOV DX,OFFSET Hex_string
     MOV AH,9
     INT 21h 
     JMP I_have_the_numberH 
     oCTALICbASE: CALL PRINTtheNUMBER 
     MOV DX,OFFSET Octalic_string 
     MOV AH,9
     INT 21h  
     JMP I_have_the_numberO          
     BINBASE:CALL PRINTtheNUMBER 
     MOV DX,OFFSET Binar_string
     MOV AH,9
     INT 21h  
     JMP I_have_the_numberB
     DECBASE: CALL PRINTtheNUMBER   
     MOV DX,OFFSET Dece_string
     MOV AH,9
     INT 21h 
     JMP I_have_the_numberD
    I_have_the_numberH: CALL BINcalculation
                CALL OCTcalculation
                CALL DECcalculation 
    I_have_the_numberO: CALL BINcalculation
                CALL DECcalculation
                CALL HEXcalculation
    I_have_the_numberB: CALL OCTcalculation
                CALL DECcalculation
                CALL HEXcalculation
    I_have_the_numberD: CALL BINcalculation
                CALL OCTcalculation
                CALL HEXcalculation
     exit:  mov ax, 4c00h
      int 21h  
     EnterBase PROC
     MOV DX,OFFSET BASED_BUFFER  ; GETS THE BASE 
     MOV AH,10
     INT 21H 
     LEA DX,BASED_BUFFER[2]
     MOV BL,BASED_BUFFER[1]
     MOV BH,0
     MOV BASED_BUFFER[BX+2],0
     LEA SI, BASED_BUFFER[2]
     XOR CX, CX
     MOV CL, BASED_BUFFER[1]
     LEA DI, TheBase
     LOL_OF_BASE:   MOV DL, [SI]
           MOV [DI], DL
           INC SI
           INC DI
           INC AL
        RET
       EnterBase  ENDP   
       CheckBase proc
       CMP  TheBase,'H' 
       JE HEXBASE
       CMP  TheBase,'h'
         JE HEXBASE
       CMP TheBase,'O'
        JE oCTALICbASE
       CMP TheBase,'o'
       JE oCTALICbASE
        CMP TheBase,'B'
         JE BINBASE 
         CMP TheBase,'b'
       JE BINBASE
        CMP TheBase,'D'
       JE DECBASE
        CMP TheBase,'d'
        JE DECBASE
        CMP TheBase, ' ' 
        je ERRORoFBASE 
      ERRORoFBASE: MOV DX,OFFSET  ERROR_STRING_BASE ;PUTS WORNG BASE Illegal_Number 
      MOV AH,9
      INT 21H 
      JMP START      
    CheckBase  ENDP
   PRINTtheNUMBER  PROC 
    MOV DX,OFFSET ENTER_STRING
     MOV AH,9
     INT 21h 
    MOV DX,OFFSET Number_buffer  ; GETS THE number
    MOV AH,10
    INT 21H 
     LEA DX,Number_buffer[2]
     MOV BL,Number_buffer[1]
     MOV BH,0
     MOV Number_buffer[BX+2],0
     LEA SI, Number_buffer[2]
     XOR CX, CX
     MOV CL, Number_buffer[1]
     LEA DI, The_numer 
     xor AL,AL
     LOL_OF_NUMBER_CHECK:   MOV DL, [SI]
                   MOV [DI], DL
                   INC SI
                   INC DI
                   INC AL 
                   CMP AL,5 
                   JE ERRORofNUMBER 
                   LOOP LOL_OF_NUMBER_CHECK 
    RET 
      ERRORofNUMBER: MOV DX,OFFSET  Illegal_Number ;PUTS WORNG BASE         Illegal_Number 
      MOV AH,9
      INT 21H 
      JMP START        
     PRINTtheNUMBER ENDP
      PROC BINcalculation  
          XOR CX,CX
          XOR AX,AX
          MOV CX,4
          MOV AX,16
          LEA SI, The_binNumber[0]
       TheBinarLoop: RCL  The_numer,1
          ADC [SI],0
          INC SI
          LOOP TheBinarLoop
      ENDP
      PROC OCTcalculation
      ENDP
      PROC DECcalculation
      ENDP
      PROC  HEXcalculation
      ENDP
     code  ends
     end start
thanks!
שלו לוי

 
     
     
    