Команды ЭВМ содержат информацию в формате, представленном на рис.4.
Код операции
Адрес 1-го операнда
Адрес 2-го операнда
Адрес 3-го операнда
Рис. 4
Код операции определяет элементарную операцию, которую должен выполнить процессор (сравнить, сложить, умножить и т.п.).
Адреса 1-го и 2-го операндов - это адреса аргументов, участвующих в операции, заданной в поле кода операции.
Адрес 3-го операнда - адрес ячейки памяти, в которую должен быть помещен результат операции.
Любая программа, написаннаяна языке высокого уровня, для выполнения ее на ЭВМ должна быть переведена в машинные команды. Процесс перевода программы, написанной - на языке высокого уровня, в машинные команды называется процессом трансляции. Трансляция осуществляется специальными программами - трансляторами.
Рассмотрим, как будет выглядеть программа в машинных кодах вычисления выражения:
Yi,=(a´(xi+b))/(xi-c),
где a, b, c, d- const; xi= d ´ i; 1 < i < n; i = 1, 2,..., п.
Для облегчения анализа поставленной задачи напишем алгоритм вычисления выражения на языке высокого уровня. При этом будем стремиться разбить вычисление этого выражения на простейшие элементарные операции (в одной строчке одна операция). Программа вычисления выражения на С, включающая в себя ввод исходных данных, будет выглядеть следующим образом:
#include <stdio.h>
main()
{ int a, b, c, x, d, i = 0, e = 1, n, у; /* Переменные исходных данных */
int prl,pr2; /* Переменные промежуточных результатов */
scanf("%d%d%d%d%d", &a, &b. &c, &d, &n); /* Ввод данных */
do /* Список элементарных операций */
{
i=i+e; /* Сложение */
x=i*d /* Умножение */
prl =x+b; /* Сложение */
prl = prl * a; /* Умножение */.
pr2=x-c; /*Вычитание*/
у=рrl/pr2; /* Деление */
prntf("%d",y); /* Печать */
}
while (i <= n); /* Сравнение и условный переход */
return(0); /* Останов (конец) */
}
Пусть каждой элементарной операции, встречающейся в теле цикла, соответствует двухразрядный восьмеричный код (табл. 1).
Таблица 1
Список элементарных операций
Код операции (КОП)
Список элементарных операций
Код операции (КОП)
Сложение
Умножение
Вычитание
Деление
Печать
Сравнение Условный переход
Останов
Предположим, что все операнды (исходные данные и переменные) хранятся в памяти, начиная с ячейки с номером 1008. Расположим их в памяти в порядке объявления в программе (табл. 2).
Таблица 2
Адрес ячейки памяти
операнд
Адрес ячейки памяти
Операнд
a
i
b
e
c
n
x
prl
d
pr2y
Пусть тело цикла программы располагается в памяти ЭВМ, начиная с ячейки памяти под номером 500. Представим тело цикла в виде схемы (табл. 3), а справа от каждого блока запишем адрес ячейки памяти, в которой располагается соответствующая элементарная операция. Используя принятую нами кодировку кодов операций и расположение операндов в памяти ЦВМ, закодируем команды в соответствии с табл. 1. Примем следующее допущение: если отсутствует операнд или результат операции, то адрес операнда или результата операции равен нулю. Операция условного перехода в качестве первого операнда имеет адрес перехода, а в качестве второго операнда - адрес следующей за командой условного перехода ячейки памяти.
Таблица 3
Схема алгоритма
Адрес ячейки памяти
Код операции
Адрес 1-го операнда А1
Адрес 2-го операнда А2
Адрес 3-го операнда А3
и
Оператор "while (j <= n); " занимает две ячейки памяти, так как он содержит две элементарные операции: сравнение и условный переход.
Расположение программы вычисления выражения в памяти ЭВМ представлено в табл. 4.