Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб3и4_Арх.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
297.98 Кб
Скачать

6.2 Формальний опис мови програмування:

<Програма>::=

Program < ім'я_програми >

[Constant

< список змінних і їх значень >]

begin

<список команд>

end

< список змінних і їх значень >::=

< ім'я змінної >=< значення змінної > | [<список змінних і їх значень >]

<список команд>::=<команда>

| [<список команд>]

<команда>::=

< номер операції >:< ім'я команди> <операнд А>, <операнд В>, !< номер обчислюваного операнда > to < номер наступної операції >

< ім'я команды>::= < ідентифікатор команди >[< ознака константи >]

< ознака константи >::=”*”

<операнд>::= < змінна > | < заступник >

< заступник >::=”_”

< змінна >::= < ім'я змінної > | < значення змінної > [<ознака константи >]

< ім'я змінної >, < ім'я програми >::=”a”..”z”, “A”..”Z”, “0”.. ”9”, “_”

< ідентифікатор команди >::=out, add, sub, mul, div, sqr, sqrt, cmpe, cmpl, cmpm, cmpme, cmple, if, ifnot, x2, xn, eq1, eq2

< коментар >::=”;”

Примітки:

  1. Заступник операнда («_») ставиться на місце того операнда, який обчислюється на одному з попередніх кроків

  2. Константа позначається як «*»

  3. Після операндів в команді ставиться символ «!» і після нього – номер обчислюваного операнда, потім слово to і номер наступного операнда.

  4. Порядок введення і пристрій введення визначається при компіляції автоматично.

  5. Номер операнда А – 0, номер операнда В – 1.

  6. Асемблер не чутливий до регістра.

  7. Кожна команда або опис однією змінною повинно розташовуватися в окремому рядку, допускаються порожні рядки.

6.3 Приклад програми на асемблері циклів і умовних переходів з прикладу

Програма на асемблері алгоритму, представленого в п. 8 даного опису:

program example

constant

A=1

B=3

C=-2

D=3

begin

1: add a, b, !0 to 3

2: add c, d, !1 to 3

3: mul* _, _, !1 to 4

4: cmple 1,_, !0 to 5

5: xn _, 3*, !1 to 6

6: ifnot 2, _, !0 to 16

7: if 2, _, !0 to 9

8: if 1, _, !0 to 10

9: add _, 2*, !0 to 11

10: add _, 1*, !0 to 12

11: x2 _, 7*, !0 to 13

12: x2 _, 8*, !0 to 14

13: x2 _, 6*, !0 to 15

14: eq1 _, 1*, !1 to 15

15: eq2 _, _, !0 to 4

16: out _ , 2, !0 to 16

end

7. Приклад програмування послідовно-паралельних алгоритмів

Етапи виконання:

1. Виразити задані функції в ЯПФ.

2. Привласнити кожній операції унікальний номер, визначитися з початковими даними. Номери повинні бути унікальні для всіх функцій, а не тільки в межах однієї. Тут необхідно приділити особливу увагу декільком моментам:

  • Будь-яка команда в системі є двооперандною, тобто для її виконання необхідно 2 операнди. Операнди або вводяться з пристроїв введення, або обчислюються в попередній команді. Крім того, операнди мають відповідне поле, зване «Номер операнда». У команді один операнд повинен мати номер «0», а другий номер «1». Інакше програма буде виконана некоректно або не буде виконана зовсім. При створенні команди (якщо керуюче слово і обидва операнди з різними номерами поступили в систему) операнди віддаляються з відповідних блоків, за винятком констант.

  • Константа оголошується відповідним полем у форматі операндів - поле «константа». Для керуючих слів це поле означає приналежність до класу констант обчислюваного командою операнда. Проте необхідно пам'ятати, що команда може мати тільки одну константу їх двох операндів (оскільки інакше команда завжди знаходитиметься в стані готовності).

  • Для спрощення програмування згодом операнди з номерами «0» розміщуйте до лівого входу графічного блоку відповідної команди, а з номерами «1» - до правого. Константи позначаються зірочкою у відповідного входу/виходу.

3. Визначити дані для обчислення функції.

4. Скласти список слів, що управляють, і слів даних відповідно до ЯПФ функцій і формату акторов і слів даних.

5. Записати програму враховуючи порядок введення (стежити за тим, щоб керуюче слово йшло перед словом даних).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]