title: ARM Division by 10 Save remainder and quotient
body: <p>This is a question on homework from CS2400 MSU Denver</p>
  
  <p>Hello,</p>
  
  <p>I have a program that reads keys from the user until they have either entered a non HEX character or entered a max of 8 HEX characters. As keys are entered I maintain a sum of hex values being entered by the user by multiplying the sum register by 16 and adding the new hex value. </p>
  
  <p>This part is all fine and dandy, no help needed. I am having trouble taking this final result, in HEX, and converting it to DEC. I know I need to divide by 10 only I don't know how I can accomplish this. </p>
  
  <p>Please help me determine how to divide by 10 and save the quotient and remainder. Thanks.</p>
  
  <pre><code>AREA HW6, CODE
  ENTRY
  
  Divsor  EQU 10  
  MAIN
  MOV R1, #0          ; Clear register to be used as symbols received     counter
  MOV     R2, #0              ; Clear register to be used as temp result
  LDR R4, =DecStr     ; Load address of DecStr
  LDR R5, =TwosComp       ; Load address of TwosComp
  LDR R6, =RvsDecStr
  BL  READ_CHARS      ; Read characters from the keyboard
  BL  TO_DECIMAL      ; Is R2 negative ?
  SWI     0x11
  
  
  READ_CHARS
  CMP     R1, #8          ; Check if necessary to read another key
  BEQ DONE_READ_CHAR      ; User has entered 8 hex symbols
  
  SWI 4           ; [R0] &lt;--- Key from keyboard (ASCII)
  
  CMP R0, #'0'        ; Verify digit is valid 
  BLO DONE_READ_CHARS 
  
  CMP R0, #'9'        ; Verify digit is valid 
  BHI     CHECK_HEX       
  
  SUB R0, R0, #'0'        ; Obtain Hex equivalent of ASCII char 0-9   
  B   STORE_INPUT     
  
  CHECK_HEX
  CMP     R0, #'A'
  BLO DONE_READ_CHARS         ; Invalid Hex symbol
  CMP R0, #'F'
  BHI DONE_READ_CHARS     ; Invalid Hex symbol    
  
  SUB     R0, R0, #'A'
  ADD R0, R0, #0xA        ; Adding ten to receive Hex equivalent of ASCII A-F
  
  STORE_INPUT
  MOV R3, R2, LSL#4       ; *16
  ADD R2, R3, R0      ; Add valid Hex symbol to temp result
  ADD     R1, R1, #1      ; Increase symbol's recieved counter
  B   READ_CHARS      ; Get next key
  
  DONE_READ_CHARS
  MOV     PC, LR          ; Return to BL READ_CHARS ( MAIN )
  
  TO_DECIMAL
  TST     R2, #2, 2
  BEQ POSITIVE
  STRB    #'-', [R4], #1      ; Store - as first byte in DecStr
  MVN R2, R2          ; [R2] &lt;-  1's complement of R2
  ADD R2, R2, #1      ; [R2] &lt;-  2's complement of R2
  POSITVE
  STR R2, [R5]        ; Store all entered hex values in memory at TwosComp
  
  LDR     R7, [R5]        ; Initial quotient 
  udiv10
  LDRB    R7, [R5], #1        ; Load a byte of TwosComp 
  CMP R7, #0
  BEQ DONE_TO_DECIMAL
  
  DONE_TO_DECIMAL
  MOV PC, LR
  
  AREA data1, DATA    
  TwosComp 
  DCD 0
  
  DecStr  % 12
  
  RvsDecStr
  % 11
  
  ALLIGN
  END
  </code></pre>