NASM Assembly converting from ASCII to decimal
ascii, assembly, decimal, nasm, type-conversion
Solution
The `'0'` works identically to `48` because `'0'` is the code point for the character `0` which, in ASCII, is indeed `48`.
Hence all of these are equivalent:
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
An keep in mind that this method only works for a value from `0` to `9` inclusive. If you want to handle values above nine, you'll need to decompose the value into individual digits and process them one at a time.
Problem
I know you can add 48 to convert from decimal to ascii or subtract 48 to convert from ascii to decimal, but why does the following code also perform this same conversion? ``` ; 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' ``` and ``` ; add '0' to to convert the sum from decimal to ASCII add eax, '0' ```