программа для LC3 на ассемблере

Как вы преобразуете любой введенный пользователем символ в соответствующее десятичное значение? У меня просто были проблемы с запуском.

Программа должна достичь следующих целей:

  1. Программа принимает символы с клавиатуры.

  2. Если символ представляет собой цифру (от «0» до «9»): a) Преобразуйте символ в соответствующее десятичное значение. Другими словами, «0» становится нулем, «1» становится 1, ... «9» становится 9. Назовем это значение R (от «длина серии»). б) Дождитесь другого символа (используя GETC). c) Вывести на консоль R копий этого символа. ) г) Вернитесь к шагу 1.

  3. В противном случае, если используется символ Enter/Return (ASCII #10): напечатайте перевод строки (ASCII #10) на консоль и вернитесь к шагу 1.

  4. В противном случае, если символ другой, остановите программу.


person user3469170    schedule 27.03.2014    source источник


Ответы (1)


Вы конвертируете символ десятичной цифры в число, вычитая из него «0» (= 0x30). Для шестнадцатеричных цифр (от «A» до «F»): если символ больше «@», вы вычитаете из него 0x37 («A» -> 0x0a). Для шестнадцатеричных цифр (от «a» до «f»): если значение все еще больше 15, вы вычитаете из него 0x20. Или вы можете использовать таблицу для сопоставления. 256 байт - это не очень большая таблица.

  • Вы устанавливаете результат (переменная, регистр,...) равным нулю
  • Вы читаете символ за символом в цикле
  • Вы конвертируете символ в новый номер (из одной цифры)
  • если это недопустимый шестнадцатеричный символ, верните переменную - все готово
  • иначе переменная = переменная * 16 + новый номер
  • умножение на 16 можно выполнить сдвигом влево на 4 разряда
person turboscrew    schedule 28.03.2014