Есть ли способ обнаружить недопустимые символы при использовании функции ReadHex в сборке (masm32)? - PullRequest
0 голосов
/ 16 июня 2020

Я хотел создать программу, которая получает новое значение, если входное значение (32-битное шестнадцатеричное) неверно. Для этого было очень полезно использовать функцию ReadHex, но я понятия не имею, как определять недопустимые символы.

Я попытался ввести недопустимые символы, чтобы посмотреть, что это делает в регистре EAX, но недопустимые символы рассматриваются как 0.

ex) 4FZC становится 4F0C

Ответы [ 2 ]

1 голос
/ 16 июня 2020

К моменту возврата ReadHex шансов обработать недопустимые символы больше не будет. ReadHex не имеет встроенной обработки недопустимых символов. В любом случае, вы не можете использовать ReadHex, если хотите какую-либо недопустимую обработку символов.

Рассмотрите возможность создания собственной версии ReadHex поверх предоставленной Irvine ReadString.

Прочитать ввод (как строку), проверить символы, преобразовать из шестнадцатеричного в двоичный. Проверка будет состоять из сравнения кода ASCII предоставленных символов с 0..9, a..f и A..F. См. таблицу кодов ASCII , чтобы увидеть коды цифр / букв. Цифры 0x30..0x39, строчные буквы 0x61..0x66, прописные 0x41..0x46.

Сборочный лог c для проверки символы будут go рука вместе с logi c of , конвертирующим из шестнадцатеричного в двоичный. Если вы хотите преобразовать символы ASCII в двоичные, вам уже нужно записать logi c для проверки того, является ли это числом, или A..F, или a..f. Вы должны добавить к проверке случай «ничего из этого», и это будет ваш лог-код «не шестнадцатеричный» c.

Можете ли вы продолжить?

0 голосов
/ 16 июня 2020

Обычно я использую 256-байтовую таблицу поиска, чтобы преобразовать «0» в «9», «A» в «F» и «a» в «f» в шестнадцатеричное. Для остальных записей можно установить значение> = 0x10, чтобы указать недопустимый шестнадцатеричный ввод.

...