사용자로부터 십진수 문자('0'~'9')만으로 이루어진 문자열을 입력 받고, 이를 해당 정수로 변환하는 프로그램을 만드는 문제인데

문자 '0' 의 아스키 코드 값은 0x30 ~ 문자 '9'의 아스키 코드 값은 0x39 를 이용해서 바꿔야 하는데 어떻게 바꿔야할지 잘 모르겠습니다


minus: mov    eax, ebx

    mov    ecx, 10

    mul    ecx               ; 원래 저장되어있던 수에 10을 곱해줍니다.

   mov    ecx, 0

   mov    ecx, [string+edx] ; edx 는 0부터 시작해서 몇 번째 수인지를 표시하기 위해서 썼습니다. 

; 예를 들면 12345 에서 edx 가 0일 경우 1

   sub    ecx, 0x30

   add    eax, ecx             ; 1234의 경우 (((((0 + 1) * 10 ) + 2) * 10 ) +3) * 10 + 4 의 방법으로 계산합니다

   mov    ebx, eax

   inc    edx                  ; 다음 수를 계산하기 위해서 배열의 다음 항으로 갑니다.

   cmp    byte [string+edx-1], 0 ; 마지막을 null 로 줬습니다. 비교해서 같을 경우 루프를 종료합니다.

   jne    minus

   ...


이런 식의 코드를 짜봤는데 단순히 0x30 을 빼준 다음 저장하는 식으로는 변환이 안 되는 것 같습니다.

어떤 식으로 해야할지 도움 좀 주시면 감사하겠습니다.