Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика (Автосохраненный).docx
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
130.86 Кб
Скачать

Способы адресации

КОП А

Операнд может быть 3 типов.

  1. Может стоять какое-то конкретное значение. Напр. ADD x,6 (х=х+6)

  2. Некий адрес. Тогда ADD x,y (значение берется из ячейки памяти по данному адресу. X=x+y)

  3. По адресу хранится не значение, а адрес, в котором хранится значение

ADD x,[y] (x=x+y^)

В зависимости от способа адресации исполнительный адрес определяется различным образом

Режим (способ) адресации

Обозначение

Плюсы

Минусы

Непосредственная адресация

(операндом является конкретное значение)

Нет обращения к памяти.

Негибкость.

Прямая адресация

ЕА = А

Исполнительный адрес указывается явно

Простота

Ограниченное адресуемое пространство

Регистровая адресация

ЕА = R (r – имя некого регистра)

Нет обращения к памяти

Ограниченное адресуемое пространство

Косвенная адресация (основной способ)

Исполнительный адрес = [A]

Большой объем адресуемого пространства (напр. Для Pentium = 2^32 адресов)

Два обращения к памяти. Проигрыш в быстродействии

Косвенная Адресация через регистр

ЕА = [R]

Большой объем адрес. Пространства

Два обращения к памяти

Адресация со смещением

-относительная

-адресация через регистр базы

-индексная адресация

-…

EA = PC + A (PC – регистр с адресом текущей команды)

ЕА = [R] + A

(адресация относительно начала программы. В регистре стоит начало.)

ЕА = [A] + R (исп. При адресации эл-тов массива)

EA = [A] + [R]

Большая гибкость и эффективность

Сложность

Стековая адресация

ЕА = S (s – вершина стека)

Мало обращения к памяти

Ограниченная возможность применения

Иллюстрация работы стековой адресации.

PUSH X

Y

PUSH Y

Z

Z

ADD

POP Z

Формат машинной команды – это как в ячейке памяти хранится маш. Команда, код операции, способ адресации, адреса операндов и т.д.

Проектирование системы команд компьютера

Это самый важный этап разработки нового процессора

Команда, в отличие от операнда, занимает несколько ячеек в памяти

Длина команды кратна длине ячейки команды

Распределение полей в команде:

  1. Сколько бит под опер.

  2. Компромисс между увеличением числа операций и отведения места под операнды.

Основы языка Ассемблера (автокод)

Появился в 50е коды и представляет собой способ символической записи машинных команд

Ассемблер разрабатывается для любого процессора.

Программы на языке Ассемблера тоже компилируются и переводятся в машинные команды

Ассемблер используется для защиты от взломов и наоборот.

На ассемблере пишутся вставки для языков высокого уровня, там, где нужно наиболее высокое быстродействие.

Написание вставки на ассемблере позволяет максимально оптимизировать кол-во и последовательность машинных команд.

Характеристики ассемблера

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

  2. Ассемблер – это первый язык программирования

Функции ассемблера

  1. Распределение памяти

  2. Перевод команд в коды

  3. Поиск ошибок

  4. Построение «объектного модуля» в машинных кодах

  5. Построение листинга

  6. Ассемблер использует все вышеперечисленные способы адресации.

  7. В ассемблере каждая команда пишется на отдельной строке

  8. В ассемблере так же используются процедуры и ф-ии.

  9. В отличие от обычных языков у процедур нет параметров

  10. Искусство написания программ на ассемблере – это умение использовать разные способы адресации, регистры и так называемые прерывания для обращения к внешним устр-вам.

  11. Программа состоит из модулей, а модули из сегментов.

  12. Сегментов – 4, они имеют свои названия для каждой программы. (Сегмент – это «кусок памяти») DSEG – сегмент данных SSEG – сегмент стека CSEG – программный сегмент ESEG – сегмент общего назначения. (для данных)

Начало каждого сегмента располагается в спец. Сегментах

Помимо обычных команд в Ассемблере есть так называемые «псевдокоманды», которые служат для размещения или определения данных.

A SEGMENT начало сегмента А

A ENDS Конец сегмента А

B PROC Начало процедуры В

B ENDP Конец процедуры B

По сложности написания разница между маш. Кодом и ассемблером такая же, как между Ассемблера и языком высокого уровня

----

Написать программу вычисления выражения (А + В) * 5

A SEGMENT

2-адресная

ADD a,b

MUL a,5

A ENDS

3-адресная

ADD a,b,r

MUL r,5,r

1-адресная

LOAD a

ADD b

MUL 5

STOR r

0-адресная

PUSH a

PUSH b

ADD

EA = s

Push 5

MUL

POP r

Для 0,1,2,3 адресной машины.

Данные находятся в ОЗУ, начиная с язейки 0120

Вопрос: в какую ячейку ОЗУ будет записан резл. Следующей операции и чему он будет равен, если в ячейке Х по адресу 002 находится 5?

  1. Mov x,7

В ячейке 0122 будет записано 7

  1. Mov [x],x в ячейке 0125 будет записано 5

  2. Mov [x],7 в ячейке 0125 будет записано 7

Сегмент данных находится, начиная с ячейки 0120

Модельные программы

x+y ? z

if ((x+y) >= z) печать (‘+’)

else печать (‘-‘)

Программа на автокоде

SSEG SEGMENT STACK ; сегмент стека

DB 256 DUP ; мы отводим память под 256 байт

SSEG ENDS ; конец сегмента

DSEG SEGMENT ; сегмент данных

X DB 5

Y DB 3

Z DB 10

DSEG ENDS ; конец сегмента данных

CSEG SEGMENT ; сегмент программы

ASSUME CS:CSEG, DS:DSEG, SS:SSEG ; регистры, в которые мы заносим начало каждого сегмента

START PROC FAR ; начало описания программы

PUSH DS ; DS, AX – регистры.

PUSH AX

MOV DS DSEG

CALL MAIN ; вызов главной процедуры

RET ; выход из процедуры

START ENDP ; программа старт закончена

MAIN PROC NEAR

MOV AH,6 ;загрузка программы вывода на экран содержимого регистра DL

MOV BH,x; загрузим в регистр BH значение х

MOV BL,y; в BL - y

ADD BH,BL ; (x+y) в регистровой адресации

MOV BL,z ; загрузили z в регистр в BL

CMP BH,BL ; x+y ? z

JL LAB ; переход на метку лаб, если х+у меньше z

MOV DL,’+’; печать + при х+у >= z

JMP DONE

LAB: MOV DL,’-‘ ; печать – если х+у меньше z

DONE: INT 21H; вызов ОС путем прерывания для печати символа на экран.

(int – команда ассемблера для вызова ОС)

RET

MAIN ENDP

CSEG ENDS

END START; программа старт запускается на выполнение (переход на начало исполняемого кода)

Для выполнения специфических действий, напр ввода-вывода, надо занести в определенные регистры определенные значения