У меня есть вопрос по сборке, возможно ли преобразовать код чисел ASCII (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) без 10 compares and branches, как
compares and branches
if(input == 48) return 0; ...
(я говорю о коде на сборке!) Заранее спасибо
return input-'0';
Это, конечно, учитывая, что ввод - это цифра.Вы можете проверить это следующим образом, в C:
if (input> = '0' && input <= '9') .... </p>
Просто вычтите 48 (значение ASCII для символа 0).
SUB EAX, 48
Точный синтаксис зависит от конкретного процессора и используемого ассемблера.
Я вообще не ассемблер, но это предполагает, что вы можете использовать
sub ebx, 48
, чтобы вычесть 48 из кода ascii, хранящегося в соответствующем регистре.Конечно, это предполагает сборку Intel, но я полагаю, что другие имеют аналогичную функциональность.