Анимация
JavaScript


Главная  Библионтека 

0 [ 1 ] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87

Кроме функций "abs", "rem" и прочих, в книге используется множество других функций, которые будут определены позже.

При вычислении выражения х < у < z в языке С сначала вычисляется вьфажение х< у, (результат равен 1, если выражение истинно, и О, если выражение ложно), затем полученный результат сравнивается с z. Выражение л:<у<г с операторами сравнения "<" вычисляется как {x<y)&.(y<z).

В языке С есть три оператора цикла: while, do и for. Цикл while имеет вид:

vhilB {выражение) оператор

Перед выполнением цикла вычисляется выражение. Если выражение истинно (не нуль), выполняется оператор. Затем снова вычисляется выражение. Цикл while завершается, когда выражение становится ложным (равным нулю).

Цикл do аналогичен циклу while, однако проверочное условие стоит после оператора цикла, а именно:

do оператор vhile {выражение)

В этом цикле сначала выполняется оператор, затем вычисляется выражение. Если выражение истинно, операторы цикла выполняются еще раз, если выражение ложно, цикл завершается.

Оператор for имеет вид

f or (е/; 2 < 3) оператор

Сначала вычисляется выражение ei - как правило, это оператор присваивания (аналог выражения-инициализации). Затем вычисляется вг - оператор сравнения (или условное выражение). Если значение условного выражения равно нулю (условие ложно), цикл завершается, если не равно нулю (условие истинно), выполняется оператор. Затем вычисляется (тоже, как правило, оператор присваивания), и вновь вычисляется условное выражение ez- Таким образом, знакомый всем цикл "do i=l to n" загшшется как for (i=i; i<=n; i++) (это один из контекстов использования оператора постинкремента).

1.2. Система команд и модель оценки времени выполнения команд

Чтобы можно было хотя бы грубо сравнивать алгоритмы, представим, что они кодируются для работы на машине с набором команд, подобных современным RISC-компьютерам общего назначения (типа Compaq Alpha, SGI MIPS и IBM RS/6000). Это трехадресная машина, имеющая достаточно большое количество регистров общего назначения - не менее 16. Если не оговорено иное, все регистры 32-разрядные. Регистр общего назначения с номером О всегда содержит нули, все другие регистры равноправны и могут использоваться для любых целей.

Для простоты будем считать, что в компьютере нет регистров "специального назначения", в частности, слова состояния процессора или регистра с битами состояний, например "переполнение". Не рассматриваются также команды для работы с числами с плавающей точкой, как выходящие за рамки тематики данной книги.

Б книге описаны два типа RISC: "базовый RISC", команды которого перечислены в табл. 1.2, и "RISC с полным набором команд", в который кроме основных RISC-команд входят дополнительные команды, перечисленные в табл. 1.3.



Таблица 1.2. Базовый набор RISC-команд

Мнемокод команды

Операнды

Описание команды

add, sub, mul.

RT<-RA op RB

div, divu, rem.

remu

Здесь op - сложение (add), вычитание (sub), умножение (mul), знаковое деление (div), беззнаковое деление (divu), остаток от знакового деления (rem) или остаток от беззнакового деления(гети)

addi, muli

RT<-RA ор I

Здесь ор - сложение (addi) или умножение (mulb, I - непосредственно заданное 16-битовое знаковое значение

addis

RT<-RA+(I II 0x0000)

and, or, xor

RT<-RA op RB

Здесь op - побитовое и (and), или (or) или исключающее или (хог)

andi, ori, xori

То же самое, но последний операнд является непосредственно заданным 16-битовым беззнаковым значением

beq, bne, bit,

target

Переход к метке target, если выполнено неко-

ble, bgt, bge

торое условие, т.е. если RT=0, RTjtO, RT<0, RT<0, RT>0 или RTSO соответственно (RT - целое знаковое число)

bt, bf

target

Переход к метке target, если выполнено неко-

торое условие (true/false); аналогичны коман-

дам bne/beq соответственно

cmpeq, cmpne.

RT содержит результат сравнения RA и RB; RT ра-

cmplt, cmple,

вен 0, если условие ложно, и 1, если условие ис-

cmpgt, cmpge,

тинно. Мнемокоды означают: сравнить на равен-

ство, неравенство, меньше, не больше и т.д. как и

cmpltu, cmpleu.

в командах условного перехода. Суффикс "и" в

cmpgtu, cmpgeu

названии обозначает сравнение беззнаковых величин

cmpieq, cmpine.

Аналогичны командам серии cmpeq, но второй опе-

cmpilt, cmpile,

ранд представляет собой непосредственно заданное

cmpigt, cmpige

16-битовое знаковое значение

cmpiequ, cmpineu.

Аналогичны командам серии cmpltu, но вюрой опе-

cmpiltu, cmpileu.

ранд представляет собой иепосредственио заданное

cmpigtu, cmpigeu

16-битовое беззнаковое значение

Idbu, Idh, Idhu,

d(RA)

Загрузка беззнакового байта, знакового полу-

слова, беззнакового полуслова нли слова в RT из ячейки памяти по адресу RA + d, где d - непосредственно заданное знаковое 16-битовое значение



Мнемокод команды

Операнды

Оиисаиие команды

mulhs, mulhu

RT,RA,RB

В RT помещаются старшие 32 бита результата умножения RA н RB (знакового и беззнакового)

RT,RA

В RT помещается побитовое дополнение RA до единицы

shl, shr, shrs

RT, RA, RB

В RT помещается значение RA, сдвинутое влево или вправо; величина сдвига задается шестью младшими битами второго операнда (RB). При выполнении команды shrs освободившиеся биты заполняются содержимым знакового разряда, в остальных командах освободившиеся биты заполняются нулями. (Значение величины сдвига вычисляется по модулю 64)

shli,shri,shrsi

RT, RA, lu

В RT помещается значение RA, сдвинутое влево или вправо на величину, задаваемую пятью младшими битами непосредственно заданного значения I

stb,sth,stw

RS, d{RA)

Сохранение байта, полуслова или слова из регистра RS в ячейку памяти по адресу RA + d, где d - непосредственно заданное 16-битовое знаковое значение

Везде в описаниях команд исходные операнды RA и RB представляют собой содержимое регистров.

В реальной машине обязательно должны быть команды ветвления и обращения к подпрограммам, команды перехода по адресу, содержащемуся в регистре (для возврата из подпрограмм и обработки оператора выбора альтернативы типа switch), а также, возможно, ряд команд для работы с регистрами специального назначения. Конечно же, должны быть привилегированные команды и команды вызова служб супервизора. Кроме того, вероятно наличие команд для работы с числами с плавающей точкой.

Краткое описание некоторых дополнительных команд, которые может иметь RISC-компьютер, приведено в табл. 1.3.

Таблица 1.3. Дополнительные команды полного набора RISC-команд

Мнемокод команды

Операнды

Описание команды

abs, nabs

RT, RA

RT получает абсолютное знаадние (или отрицательное абсолютное значение) RA

andc, eqv, nand, nor, ore

RT, RA, RB

Побитовое и с дополнением, эквиваяентность, отрицание и, отрицание или и или с дополнением

extr

RT, RA, I, L

Извлечение битов от I до I+L-1 из RA и размещение их в младших битах RT; остальные разряды заполняются нулями

extrs

RT, RA, I, L

Аналогична extr, но свободные биты заполняются содержимым бита знака



0 [ 1 ] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87