Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Арифметические выражения (http://forum.oszone.net/showthread.php?t=235421)

Forpost 26-05-2012 20:35 1923065

Арифметические выражения
 
Здравствуйте.
Сначала распишу всё задание полностью:
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 1923079

Цитата:

Цитата Forpost
2. Затем необходимо сгенерировать код на ассемблере, который бы вычислял каждое выражение. »

не понятно, это как? создать .asm файл? а каким компилятором его потом собирать будете?

Forpost 26-05-2012 22:00 1923099

Цитата:

а каким компилятором его потом собирать будете
Не решил ещё тасмом наверное. Это не было оговорено, значит можно любым.

XPEHOMETP 28-05-2012 13:16 1923869

Цитата:

Цитата Forpost
Как в примере переменная "К", ещё надо будет заменять на ноль или выдавать ошибку? »

Изначально обнулите все используемые переменные, потом проблем не будет. Разве что если не захотите на них делить. Или брать от них логарифм.

Forpost 28-05-2012 18:12 1924047

Цитата:

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

ferget 28-05-2012 19:53 1924075

Цитата:

Цитата Forpost
A,K,P - это переменные, которые мы получаем из файла »

вот это не понятно, получаем 3 переменные? или 1 и рассчитываем

Forpost 28-05-2012 20:47 1924096

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

ferget 28-05-2012 23:43 1924200

в приципе понятно, формируем массив строк на каждую арифметическую операцию, разбираем выражение и записываем соответствующую строку

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

Код:

.data
    a dd 1 ; первое число
   
    b dd 4 ; второе число
   
    c dd 0 ; результат сложения
   
.code
start:
    mov eax,a
   
    add eax,b
   
    mov c,eax
end start



Время: 18:52.

Время: 18:52.
© OSzone.net 2001-