2014-02-22 4 views
1

십진법을 ascii로 변환하려면 48을 추가하고 ascii를 십진수로 변환하려면 48을 뺄 수는 있지만 다음 코드는 왜이 동일한 변환을 수행합니까?ASCII에서 십진수로 변환하는 NASM 어셈블리

; moving the first number to eax register and second number to ebx 
; and subtracting ascii '0' to convert it into a decimal number 
mov eax, [number1] 
sub eax, '0' 

; add '0' to to convert the sum from decimal to ASCII 
add eax, '0' 
+0

숫자가 아닌 숫자에 대해 이야기해야합니다. –

+0

'eax '의 숫자가'0 '과'9 '사이의 10 진수 한자리 인 한 작동합니다. ASCII '0'- '0'은 숫자 '0'이므로, ASCII '1'- '0'은 숫자 '1'이며, 계속 이와 같이됩니다. 더 큰 숫자가 있다면 숫자로 변환 할 것입니다. – lurker

+0

참조 : https://duckduckgo.com/asciitable.html –

답변

1

동일 48'0' 작품 '0'가 ASCII에서, 참으로 48되면, 문자0의 코드 포인트이기 때문이다.

는 따라서 이러한 프로그램은 모두 동일합니다

sub al, 48   ; decimal 
sub al, '0'   ; character code 
sub al, 30h   ; hex 
sub al, 0x30  ; hex again 
sub al, 60q   ; octal 
sub al, 00110000b ; binary 

명심이 방법은 0에서 포함 9에 값에 대해 작동합니다. 9 이상의 값을 처리하려면 값을 개별 자릿수로 분해하고 한 번에 하나씩 처리해야합니다.

관련 문제