- •4) Пpинципы оpганизации основных аппаpатных сpедств эвм (расслоение памяти, регистр перемещений, прерывания и опрос состояний, буферизация).
- •6) Организация ввода-вывода.
- •7) Методы повышения производительности эвм.
- •9) Микроархитектура современных пэвм. Гиперконвейерная организация процессора.
- •Регистры.
- •Сегментные регистры.
- •17) Основы языка Ассемблер
- •18) Команды логических операций. Сдвиговые команды.
- •19) Цепочечные команды. Префиксы повторения в цепочечных командах.
- •Insb считать из входного порта в приемник по адресу [di]
- •2. Команды умножения (mul, imul)
- •23) Команды условного и безусловного переходов.
- •Формат купу
- •Формат кбпу.
- •Передача параметров в п/п
- •Можно собрать макросы в отдельную библиотеку и писать программы, используя имена макросов в библиотеке.
- •3. Типы класса – имена, фиксированные (code, data, stack).
- •30) Базовая система ввода/вывода bios. Прерывания операционной системы dos. Средства
- •Прерывания ос
Можно собрать макросы в отдельную библиотеку и писать программы, используя имена макросов в библиотеке.
26) Логика и организация пpогpамм. Упрощенные директивы управления сегментами. Модели памяти.
Чтобы правильно писать программы необходимо знать наиболее сложный аспект программирования – управление сегментами. Сегменты разделяются на 2 вида: упрощенные и стандартные.
DOSSEG
.MODEL SMALL
.STACK 200h
.DATA
var1 db 0
var2 dw 0
.CODE
start
END
DOSSEG – используется для группировки сегментов в соответсвии с соглашением фирм Borland и Microsoft.
MODEL
"Ближний код" предусматривает ,что переходы в программе осуществляются с помощью загрузки одного регистра IP, а "дальний код" предполагает, что переходы осуществляются при загрузке CS:IP.
Для данных термин FAR означает использование данных по полному адресу с использованием сегмента данных и сегмент смещения. Термин NEAR предполагает выборку данных, используя только 16-тиразрядное смещение.
FAR ES:[BX]
NEAR [BX]
Существуют следующие модели памяти:
TINY – крошечная. И код программы, и данные размещаются внутри одного и того же сегмента
(64 К). Код и данные имеют ближний тип.
SMALL – малая. Данные в одном сегменте (64 К), а код – в другом. Код и данные имеют ближний тип.
COMPACT – компактная. Код помещается в один сегмент, данные могут превышать размер сегмента. Код ближнего типа, данные – дальнего.
MEDIA – средняя. Код может превышать размер сегмента. Код- дальний, данные – ближний.
LARGE – большая. И код, и данные превышают размер сегмента, оба дальнего типа.
HUGE – огромная. И код, и данные не имеют ограничений, имеют дальний тип.
.STACK директивы, определяющие начало соответствующего
DATA сегмента.
.CODE
END (без .) [метка начала программы] необязательный элемент.
27,28) Стандартные и упрощенные директивы определения сегментов. Модели памяти.
СТАНДАРТНЫЕ ДИРЕКТИВЫ УПРАВЛЕНИЯ СЕГМЕНТАМИ
DGROUP GROUP DATA1 STACK1
ASSUME CS: TEXT1, DS:TEXT2, SS: STACK1
STACK1 SEGMENT PARA STACK "STACK"
db 200h
STACK2 ENDS
_DATA1 SEGMENT WORD PUBLIC "DATA"
var1 db 0
var2db 0
_DATA1 ENDS
_TEXT1 SEGMENT WORD PUBLIC "CODE
start
… сама программа
_TEXT1 ENDS
END start
Количество сегментов одного типа в программе со стандартными директивами управления сегментами (СДУС) моет быть несколько и определяется размерами программы и данных.
Директива <имя> SEGMENT определяет начало сегмента.
<имя> ENDS – конец сегмента
Директива SEGMENT имеет следующий синтаксис:
<имя> SEGMENT [<тип выравнивания>][<тип связи>][<тип класса>].
1. Тип выравнивания показывает компоновщику, с какой границы начинается сегмент.
PAGE – все границы начинаются с адресов, кратных 256 хххх00 - обязательно последний байт нулевой
PARA (параграф) – кратно 16 ххххх0.
WORD – кратно 2 xxxxxEh.
BYTE – кратно 1 xxxxx.
2. Тип связи – сообщает компоновщику, как образуются друг относительно друга сегменты одного класса.
PUBLIC – сегменты, имеющие общее имя и общее имя класса, располагаются в памяти одним непрерывным блоком и для всех сегментов существуют один базовый адрес.
STACK – аналогично PUBLIC, но для стековых сегментов.
COMMON – сегменты, имеющие общее имя и общее имя класса, располагаются в памяти, прерывая друг друга. Общий размер равен размеру наибольшего из сегментов.
MEMORY – сегменты с таким именем располагаются в области старших адресов памяти может быть только один сегмент MEMORY.
AT[адрес] – сегмент располагается по указанному адресу, тип выравнивания по умолчанию PARA.
Пример: DOSSEG SEGMENT AT [0B800h]