- •5) Язык Ассемблера. Команды пересылки данных
- •1.1 Команда mov
- •1.2 Команда mov для сегментных регистров
- •1.3 Команда загрузки адреса
- •12) Язык Ассемблера.Логические операции
- •Одномерный массив
- •Двумерный массив
- •3.6.1 Реализация с помощью массива
- •3.6.2 Реализация с помощью динамического списка
- •Реализация очереди динамическим списком
- •27) Структуры данных. Неупорядоченные таблицы
- •31. Структуры данных. Древовидная таблица
- •Операция добавления
- •Операция удаления
- •38. Классификация систем программирования
- •46. Загрузчики. Абсолютный загрузчик
12) Язык Ассемблера.Логические операции
Логические операции являются важным элементом в проектировании микросхем имеют много общего с логикой программирования. Команды and, or, xor, test являются командами логических операций. Эти команды используются для сброса и установки битов и для арифметических операций в коде АСКИ. Все эти команды обрабатывают один байт или одно слово в регистре или памяти и устанавливают флаги CF,OF,PF,SF,ZF
Пусть AL содержит 1100 0100 , а BH – 0101 1100
AND-Если оба из сравниваемых битов равны 1, то рез-т равен 1. В остальных случаях 0
AND AL,BH ; Устанавливает в AL 0100 0100
OR – Если хотя бы один из сравниваемых битов равен 1, то рез-т равен 1.
OR BH,AL ;Устанавливает в BH 1101 1101
XOR-Если один из сравниваемых битов равен 0, а другой -1 то рез-т равен 1. Если одинаковые-0
XOR AL,AL Устанавливает в AL 0000 0000
Test-действует как and –устанавливает флаги, но не изменяет биты.
Test BL, 11110000b
Jnz ….
LOOP – цикл. Управляет выполнением группы команд определенное число раз. До начала цикла в регистре СX должно быть загружено число выполняемых циклов. Команда LOOP находится в конце цикла, где она уменьшает значение в регистре СХ на единицу.Если знач . в СХ не равно 0, то команда передает урпавление по адресу , указанному в операнде (прибавляет к регистру IP значение операнда) (модификации-LOOPE/LOOPZ –цикл, если равно или нуль или LOOPNE/LOOPNZ-цикл, если не равно или не нуль)
Команды переходов- JE/JZ, JCXZ,JBE/JNA, JA/JNBE
Команды циклического сдвига
13. Язык ассемблера. Операции сдвига.
Команды сдвига делятся на линейные и циклические.
1 Логический сдвиг
SHL – логический сдвиг влево
SHR – логический сдвиг вправо
1.2 Арифметический сдвиг
SAL – арифметический сдвиг влево
SAR – арифметический сдвиг вправо
Пример:
MOV AL, 0FEH //11111100 = 252
SHR AL, 1 //11111110 = 254
SAR AL, 1 //01111111 = 127
2 Команды циклического сдвига
Делятся на команды простого сдвига и через флаг CF.
1 Команды простого сдвига
ROL–сдвиг влево
ROR–сдвиг вправо
2 Команды циклического сдвига через флаг переноса
RCL–сдвиг влево
RCR–сдвиг вправо
Сначала забирается старое значение флага CF, а потом уже берется новое. Эти команды используются для сдвига длинных чисел.
(новое значение)
15. Команды пересылки и сравнения строк.
Команда LODS загружает строку. Просто помещает из памяти а регистр ал байт, в ax – слово. Адрес, из которого производится загрузка, хранится в паре DS:SI. В зависимости от состояния флага DFоперация также уменьшается или увеличивается в SI на 1 при перемещении байта.
STOS сохранение строки. Сохраняет содержимое AL AXв память. Адреса в памяти всегда содержатся в паре ES:DI. В зависимости от состояния флага Df инструкция так же увеличивается или уменьшается на 1.
Инструкция сравнения строк CMPS. Сравнивает содержимое одного элемента данных с содержимым другого. В зависимости от состояния флага DF, CMPS увеличивает или уменьшает значения в SI DI на 1. Операция завершается при ожидаемом результате сравнения или в случаи, когда в CX оказывается нулевое значение.
19. Команды организации вызова процедур
При организации многомодульной программы необходимо решить 2 проблемы:
Обеспечить обращение к подпрограмме и возврат из подпрограммы.
Обеспечить передачу данных в подпрограмму и обеспечить передачу результата из неё.
Для решения первой проблемы предназначены команды вызова процедуры и возврата из процедуры.
Точка вызова – оператор вызова + следующий оператор
Нужно решить проблему: во время вызова необходимо передать процедуре метку, куда она будет возвращаться.
Для нормальной организации вызова процедуры необходимо произвести вызов процедуры, передать в процедуру адрес возврата и перейти по окончании процедуры по заданному адресу. Для решения этих проблем предназначены команды:
вызов: CALL
возврат: RET
В IBM PC существуют два вызова процедур:
Внутрисегментный (ближний)
Межсегментный (дальний)
Соответственно, существуют команды ближнего/дальнего вызова и ближнего/дальнего возврата. Эти команды используются в паре ближний/дальний.
9.1 Ближний вызов и возврат
CALL ссылка
IP стек
ссылка (хххх) IP
*IP – адрес следующей команды
RET
стек IP
9.2 Дальний вызов и возврат
CALL
CS стек
IP стек
Смещение IP [XXXX IP]
Начало сегмента CS [YYYY CS]
RET
Стек IP
Стек CS
Коды команд для внутрисегментного и межсегментного вызовов различны. Транслятор определяет автоматически код команды по описанию вызываемой процедуры и формирует коды команд в соответствии с типом процедуры.
Структуры данных и алгоритмы их обработки
Необходимо различать структуры данных и структуры хранения данных.
Структуры данных (абстрактные структуры) – это математические модели, предназначенные для представления информации об объектах и о процессах. Структуры данных появились еще во времена Эвклида.
Структуры хранения данных – это структуры представления информации в компьютере, с помощью которых представляются структуры данных.
1 Структуры хранения данных
Скаляр (единичный элемент)
Массив
Запись
Последовательность (файл)
Динамический список*
*Динамический список представляет собой набор связанных записей и на самом деле структурой хранения данных в классическом виде не является. Но, поскольку в современных условиях в языках программирования имеется набор процедур обработки списков, то его иногда рассматривают как структуру хранения данных.
21. Структуры данных. Классификация и основные понятия.
Структуры данных классифицируются по размерности и линейности.
Структура данных является линейной, если для любого элемента структуры, кроме первого и последнего, имеется только один последующий и только один предыдущий элемент, и первый элемент имеет только один последующий, а последний – только один предыдущий. В противном случае структура нелинейная.
По размерности, если структура в процессе обработки не может изменить количества элементов, то она является структурой постоянной длины. Иначе – переменной длины.
Структура данных |
Структура хранения данных |
Классификация |
|
1. |
Скаляр |
Скаляр (единичный элемент) |
линейная фиксированной длины |
2. |
Массив |
Массив |
линейная фиксированной длины |
3. |
Запись – это набор разнотипных поименованных элементов, объединенных в один элемент |
Запись |
линейная фиксированной длины |
4. |
Последовательность |
Файл (последовательность) |
линейная переменной длины |
5. |
Многомерный массив |
Массив) |
линейная фиксированной длины |
6. |
Множества |
Массив (иногда, очень редко, список) |
линейная переменной длины |
7. |
Стек |
Массив или динамический список |
линейная переменной длины |
8. |
Очередь |
||
9. |
Дек |
||
10. |
Таблица |
Массив записей, динамический список |
линейная переменной длины |
11. |
Дерево |
Динамический список, иногда: список на базе массива или массива записей |
нелинейная переменной длины |
12. |
Граф |
Динамический список, редко – список на базе массива |
нелинейная переменной длины |
22. Линейные структуры данных. Массив
Массив – это последовательность пронумерованных однотипных (базовых) элементов, расположенных друг за другом на не переменном участке ОП. Является структурой со случайным доступом. Для доступа к необходимой компоненте к имени массива добавляется индекс.
Для массива определены операции:
Запись (аргумент: значение и номер элемента, результат: отсутствует)
Чтение (выборка)(аргумент: номер элемента, результат: значение выбранного элемента).
Ошибка возникает, если номер элемента выходит за пределы, установленные для массива.