Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для начинающих > Калькулятор


Автор: Оленьк@ 10.12.2005, 03:13
HI, all!!! Помогите кто может написать калькулятор. Задание звучит примерно так:
Утилита для вычисления простейших арифметических выражений со скобками. Параметры отсутствуют. При нажатии цифрровых клавиш ариф. операций, скобок и точки отображает введенное значение на экране.При нажатии клавиши Enter подсчитывает промежуточное значение. Остальные клавиши игнорируются. Операнды задаются только в десятичной форме. Использовать сопроцессор или формат записи чисел с фикс. запятой. В последнем случае деление можно не реализовывать. Запрашивать данные с помощью AIP функции ReadConsole, выводить данные с помощью функции WriteConsole.

Хотя бы с чего мне начать, а то я совсем не представляю как его сделать!!!
smile

Автор: Chingachguk 10.12.2005, 11:12
А энто на асме надо делать, точно ? ;)

Автор: Janus 10.12.2005, 21:11
Ну типа делаешь распознаватель, управляющий МП - Автомат. Если дано такое задание, то вы должны были это проходить.

На асме тебе нужно реализовать автомат - это сложнее. Вот пример:
Код

Автомат реализован в виде специального вида структуры в памяти. Процедура считывает очередной символ из файла и подает его на вход процедуры (макроса), производящей перевод автомата в следующее состояние. Ниже приведен пример описания двух состояний.

      dw s0
  q0 = $
      db ' ', 13, 10, 'i', 'I', 't', 'T', 's', 'S'
  s0 = $
      dw q0,  q0, q0, q1,  q1,  q7,  q7,  q13, q13

      dw s1
  q1 = $
      db 'm', 'M'
  s1 = $
      dw q2,  q2                        

Описание каждого состояния состоит из трех частей. Сначала идет слово, содержащее относительный адрес (смещение от начала сегмента) начала массива, содержащего состояния, в которые можно перевести автомат.

Затем идет массив байт – допустимых в данном состоянии входных символов. Перед этим массивом стоит описание константы, имеющей значение адреса начала данного массива.

После идет массив состояний, в одно из которых должен перейти автомат. Массив также начинается с описания константы, содержащей его адрес.

Состояние имеет значение не простого номера, а адреса начала массива входных символов для данного состояния – адреса состояния.

Работа с автоматом происходит по следующей схеме. 

1.    Считывается символ из строки.
2.    Из специальной переменной выбирается адрес состояния q. 
3.    По смещению –2 от начала состояния выбирается адрес s. 
4.    Вычисляется длина массива входных символов по формуле l = s – q. 
5.    В массиве входных символов ищется считанный из файла символ. 
6.    Если символ не найден, возникает ошибка, трансляция останавливается. Иначе, переход к шагу 7.
7.    Номер найденного символа m в массиве входных символов состояния умножается на два: k = m * 2.
8.    По адресу s + k выбирается слово – состояние автомата на следующем шаге. Состояние запоминается в специальной переменной.
9. goto шаг 1.

Стек организовывать не надо, он уже есть. Знакам операций можно присваивать фиктивные значения. А можно сделать что-то вроде второго стека - но тогда придется повозиться с макросами, которые все это будут реализовывать.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)