Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Глава 4.doc
Скачиваний:
0
Добавлен:
02.08.2019
Размер:
96.77 Кб
Скачать
    1. Преобразование программы в машинные коды

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

Во многих компьютерах, называемых Компьютерами с Сокращенной системой команд (RISC-Reduced Instruction Set Computers) для увеличения быстродействия используются только элементарные команды:

  1. Доступ к памяти. Загрузить (load) содержимое слово памяти в регистр и сохранить (store) содержимое регистра в слове памяти.

  2. Арифметические команды типа сложить (add) и вычесть (sub). Они выполняются над содержимым двух регистров или регистра и слова памяти. Результат остается в регистре. Например, команда

add R1, N

складывает содержимое слово памяти N с содержимым регистра R1 и оставляет результат в регистре.

  1. Сравнить и перейти. ЦП может сравнить два значения, находящихся в регистрах и в зависимости от результата (равно, больше и т. д.) указатель команды изменяется. Например:

jump_ed R1, L1

…….

L1: …….

заставляет ЦП продолжать вычисление с команд с меткой L1, если R1=0 (ноль). В противном случае вычисление продолжается со следующей команды.

В компьютерах известных как CISC (Complex Instruction Set Computers) определен. Сложный набор команд, позволяющий упростить программирование на языке ассемблера и конструкцию компилятора.

Повторение. Память – это набор ячеек, в которых хранятся данные. Каждая ячейка памяти называется словом память и имеет адрес. Каждое слово память состоит из фиксированного числа битов: 16,32 или 64 битов. Современные ПК способны загружать и сохранять 8-битовые байты или двойные слова из 64 битов.

Примеры использования адресации в командах для С:

Пример 1. Способ непосредственной адресации, при которой операнд является частью команды. Значением операнда может быть адрес переменной (косвенная адресация):

load R2, #54 - загрузить значения 54 в регистр R2.

load R4, & N - загрузить адрес N в регистр R4.

Пример 2. Способ абсолютной адресации, в котором используется «символический» адрес переменной:

load R4, 43 -загрузить содержимое адреса 43 в R4.

load R3, I - загрузить содержимое переменной I в R3.

Пример 3. Использование индексных регистров. Индексные регистры не обязательно обособлены от регистров, используемых для вычислений.

load R2, 18 (R1) - загрузить в регистр R2 содержимое слова памяти, находящегося по адресу, равному сумме 18 и содержимому индексного регистра R1 (18+addr(R1), где addr(R1) - обозначение индексного регистра, скорее всего, даже суммы (add) индексного регистра (r))

add<-r=addr.

load R2, (R3) - загрузить содержимое addr(R3)+0 в R2 .Содержимое регистра R3 используется просто как адрес слова памяти, содержимое которого загружается в R2.

Пример 4. Использование команд при представлении выражения:

а*(b+с)

load R1, b

load R2, c

add R1, R2 – Сложить в ис. Результат занести в R1.

load R2, a

mult R1, R2 – Умножить а на b+c. Результат занести в R1.

Поскольку компьютеры – двоичные машины, распознающие только нули и единицы, то каждая команда, например, представленная в приведенных выше примерах, должна быть преобразована к двоичному цифровому виду. Одним из первых программных средств был символический ассемблер. Ассемблер берет программу, написанную на языке Ассемблера в символьном виде, и транслирует символы в двоичное представление, пригодное для выполнения на ПК.

16

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