Assembly language program to read in a (three-or-more-digit) positive integer as a string and convert the string to the actual value of the integer.
Specifically, create a subroutine to read in a number. Treat this as a string, though it will be composed of digits. Also, create a subroutine to convert a string of digits to an integer.
Do not have to test for input where someone thought i8xc was an integer.
I am doing it like this. Please help.
.section .data
  
String:
     .asciz "1234"
Intg:
     .long 0
  
.section .text
     .global _start
_start:  
     movl    $1, %edi
     movl    $String, %ecx
character_push_loop:
     cmpb $0, (%ecx)
     je conversion_loop
     movzx (%ecx), %eax        # move byte from (%ecx) to eax
     pushl %eax                # Push the byte on the stack
     incl %ecx                 # move to next byte
     jmp character_push_loop   # loop back
conversion_loop:
     popl    %eax            # pop off a character from the stack
     subl    $48, %eax       # convert to integer
     imul    %edi, %eax      # eax = eax*edi 
     addl    %eax, Intg     
     imul    $10, %edi
     decl    %ecx
     cmpl    $String, %ecx   # check when it get's to the front %ecx == $String
     je      end             # When done jump to end
     jmp     conversion_loop
end:   
     pushl   Intg
     addl    $8, %esp         # clean up the stack
     movl    $0, %eax         # return zero from program
     ret
Also, I am unable to get the output. I am getting a Segmentation Fault. I am not able to find out what is the error in my code.
 
     
    