PDA

Показать полную графическую версию : Арифметические выражения


Forpost
26-05-2012, 20:35
Здравствуйте.
Сначала распишу всё задание полностью:
1. Необходимо в программе C# считать файл, на каждой строке которого находится арифметическое выражение.
2. Затем необходимо сгенерировать код на ассемблере, который бы вычислял каждое выражение.
3. Откомпилировать программу и запустить, как ехе файл.

Теперь, что касается ассемблера.
Необходимо на ассемблере решать арифметические выражения вида:
А := K + 4 * (10-8) / 8
P := A + 8

A,K,P - это переменные, которые мы получаем из файла
4,8,10 - числа
+-*/ - арифметические знаки
() скобки

Как я вижу решение этого задания:
Разбиваем выражение на элементарные действия, т.е.
Сначала в А заносим значение 10-8, затем 4 умножаем на значение в А и т.д.

Однако, для того, чтобы реализовать само присваивание, умножение, деление - необходимы шаблоны на ассемблере, которые буду вставлять в нужное место. Если мои рассуждения верны, то прошу помощи в данных шаблонах. Если же нет - подскажите, пожалуйста, как можно реализовать поставленную задачу.
И ещё, как себя поведет ассемблер, если мы будем суммировать переменную, которая была не объявлена? Как в примере переменная "К", ещё надо будет заменять на ноль или выдавать ошибку?

ferget
26-05-2012, 21:32
2. Затем необходимо сгенерировать код на ассемблере, который бы вычислял каждое выражение. »
не понятно, это как? создать .asm файл? а каким компилятором его потом собирать будете?

Forpost
26-05-2012, 22:00
а каким компилятором его потом собирать будете
Не решил ещё тасмом наверное. Это не было оговорено, значит можно любым.

XPEHOMETP
28-05-2012, 13:16
Как в примере переменная "К", ещё надо будет заменять на ноль или выдавать ошибку? »
Изначально обнулите все используемые переменные, потом проблем не будет. Разве что если не захотите на них делить. Или брать от них логарифм.

Forpost
28-05-2012, 18:12
Изначально обнулите все используемые переменные, потом проблем не будет. Разве что если не захотите на них делить. Или брать от них логарифм.
Спасибо именно так и сделаю.
Однако, вопрос о том, какие куски кода на асме смогут выполнить арифметические действия остался открытым.
Необходимо создание асмовского файла, который бы вычислял арифметические выражения.
За помощь - готов рассчитаться!

ferget
28-05-2012, 19:53
A,K,P - это переменные, которые мы получаем из файла »
вот это не понятно, получаем 3 переменные? или 1 и рассчитываем

Forpost
28-05-2012, 20:47
Мы получаем несколько строк с арифметическими выражениями.
Т.е. рассчитали и записали в А, затем во втором выражении применяем значение А.
Однако, зная преподавателя, могут быть выражения с подковыркой, т.е. с переменной которая не объявлена ранее. Её я убуду вылавливать ещё в С# и заменять на 0.

ferget
28-05-2012, 23:43
в приципе понятно, формируем массив строк на каждую арифметическую операцию, разбираем выражение и записываем соответствующую строку

допустим, сложить два числа


.data
a dd 1 ; первое число

b dd 4 ; второе число

c dd 0 ; результат сложения

.code
start:
mov eax,a

add eax,b

mov c,eax
end start




© OSzone.net 2001-2012