Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Калькулятор 
:(
    Опции темы
Оленьк@
Дата 10.12.2005, 03:13 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











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

Хотя бы с чего мне начать, а то я совсем не представляю как его сделать!!!
smile
  Вверх
Chingachguk
Дата 10.12.2005, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: 11
Всего: 18



А энто на асме надо делать, точно ? ;)


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
Janus
Дата 10.12.2005, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 186
Регистрация: 26.9.2005

Репутация: нет
Всего: 1



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

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

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

      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.

Стек организовывать не надо, он уже есть. Знакам операций можно присваивать фиктивные значения. А можно сделать что-то вроде второго стека - но тогда придется повозиться с макросами, которые все это будут реализовывать.
--------------------
Проект "Репликатор" 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0446 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.