от ASCII до обычных номеров - PullRequest
2 голосов
/ 23 июня 2010

У меня есть вопрос по сборке, возможно ли преобразовать код чисел ASCII (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) без 10 compares and branches, как

if(input == 48) return 0;
...

(я говорю о коде на сборке!) Заранее спасибо

Ответы [ 3 ]

6 голосов
/ 23 июня 2010

return input-'0';

Это, конечно, учитывая, что ввод - это цифра.Вы можете проверить это следующим образом, в C:

if (input> = '0' && input <= '9') .... </p>

2 голосов
/ 23 июня 2010

Просто вычтите 48 (значение ASCII для символа 0).

SUB EAX, 48

Точный синтаксис зависит от конкретного процессора и используемого ассемблера.

1 голос
/ 23 июня 2010

Я вообще не ассемблер, но это предполагает, что вы можете использовать

sub     ebx, 48

, чтобы вычесть 48 из кода ascii, хранящегося в соответствующем регистре.Конечно, это предполагает сборку Intel, но я полагаю, что другие имеют аналогичную функциональность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...