- •Вычислительные машины, системы и сети
- •Оглавление
- •Введение
- •Раздел 1. Центральный процессор
- •1.1. Архитектура центрального процессора
- •1.2. Организация памяти и способы адресации
- •1.3. Общая характеристика системы команд
- •1.4. Команды пересылки данных
- •1.5. Арифметические команды
- •1.6. Сдвиги и логические команды
- •1.7. Команды обработки строк данных
- •1.8. Команды передачи управления
- •1.9. Команды управления процессором
- •Раздел 2. Арифметический процессор
- •2.1. Архитектура арифметического процессора
- •2.2. Программная модель арифметического процессора
- •2.3. Система команд арифметического процессора
- •Раздел 3. Эволюция характеристик цп
- •3.1. Архитектура цп Pentium
- •3.2. Программная модель цп Pentium
- •3.3. Система команд ммх-расширения
- •3.4. Система команд sse-расширения
- •Раздел 4. Системные устройства вм
- •4.1. Программируемый контроллер прерываний
- •4.2. Программируемый контроллер пдп
- •4.3. Системный таймер
- •4.4. Системные регистры
- •Раздел 5. Защищенный режим работы вм
- •5.1. Максимальный режим работы цп
- •5.2. Дескрипторы и шлюзы
- •Контрольные вопросы
- •Раздел 6. Язык ассемблера
- •6.1. Программирование на языке ассемблера
- •6.2. Директивы языка ассемблера asm-86
- •6.3. Использование регистров Pentium
- •6.4. Директивы языка ассемблера asm-89
- •6.5. Модели программ, компиляция и отладка
- •Контрольные вопросы
- •Раздел 7. Специфика вычислительных систем
- •7.1. Мультипроцессорные системы
- •7.2. Управление процессами
- •7.3. Семафорные операции
- •7.4. Разделение общих процедур
- •7.5. Управление памятью
- •Контрольные вопросы
- •Раздел 8. Специализированные процессоры и вм
- •8.1. Процессор ввода-вывода
- •8.2. Программная модель процессора ввода-вывода
- •8.3. Система команд процессора ввода-вывода
- •8.4. Процессор операционной системы
- •Контрольные вопросы
- •Раздел 9. Назначение и топология сетей
- •9.1. Особенности и назначение сетей различных типов
- •Топология «звезда».
- •9.2. Кодирование информации
- •9.3. Назначение и структура пакетов
- •9.4. Методы управления обменом
- •9.5. Эталонные модели
- •Контрольные вопросы
- •Раздел 10. Практическая реализация сетей
- •10.1. Адресация в сетях
- •10.2. Основные службы Internet
- •10.3. Особенности web-дизайна
- •10.4. Особенности и тенденции развития Internet
- •Контрольные вопросы
- •Глоссарий
- •Литература
6.3. Использование регистров Pentium
В процессорах Pentium обычные регистры расширены до 32-х разрядов (рис 3.3). Конечно, благодаря программной совместимости можно использовать все 16-разрядные регистры по-прежнему, но дополнительно к этому можно использовать каждый из 32-разрядных регистров общего назначения, причём в любом режиме (не только защищённом). Например:
mov ax,[ebx] ; Поместить в AX значение из памяти
; по адресу DS:EBX
mov dx,[ecx] ; Поместить в DX значение из памяти
; по адресу DS:ECX
mov cx,es:[eax] ; Поместить в CX значение из памяти
; по адресу ES:EAX
Дополнительно к этой возможности введены следующие:
-
Использование константы и регистра:
mov eax,[ecx + 1]
mov bl,[edx + 12345678h]
-
Сумма двух регистров:
mov ebp,[ebx + edi]
mov eax,[ecx + edx]
-
Сумма двух регистров и константы:
mov bl,[edx + eax + 12345678h]
-
Масштаб - автоматическое умножение на 2, 4 или 8 одного из регистров, участвующих в образовании адреса:
mov ax,[ebx * 2]
mov cl,[edx + ebp * 4]
mov esi,[edi + eax * 8 + 12345678h]
При использовании 32-разрядных регистров для адресации в режиме реальных адресов, следует учитывать, что размер сегмента фиксирован и равен 64 Кб. Если процессор сформирует адрес, больший 64 Кб, то процессор зависнет. Например:
mov eax,1234h
mov bl,[eax] ; В регистр BL будет произведена загрузка
; значения с адреса DS:EAX.
mov edx,ffffh
mov bl,[eax + edx] ; Эффективный адрес будет равен
; 1234h + ffffh = 11233h (это больше,
; чем 64 Кб. Процессор зависнет.)
Использование 32-разрядных регистров для адресации памяти в защищённом режиме очень распространено, в основном, из-за того, что размер сегментов может достигать 4 Гб.
Перед тем как создавать программы, использующие MMX- и SSE-расширения, следует убедиться в том, что данный тип ЦП поддерживает эту технологию. Для этого можно выполнить специальную команду cpuid, предварительно поместив в регистр ЕАХ значение 1. После выполнения команды проверка 23-го бита в регистре ЕDХ показывает, поддерживается ли технология ММХ процессором, а 25-го бита – поддерживается ли технология SSE. Ниже приводится текст процедуры на ассемблере, выполняющей эту проверку.
.686
.model flat
.code
check_mmx_sse proc
mov eax, 1
xor bl, bl
cpuid
test edx, 800000h
jz test_sse
inc bl
test_sse: test edx, 2000000h
jz exit
inc bl
inc bl
exit: mov al, bl
ret
check_mmx_sse endp
end
Процедура check_mmx_sse возвращает в регистре AL значение:
-
al = 0 – если MMX и SSE не поддерживаются;
-
al = 1 – поддерживается только MMX;
-
al = 2 – поддерживается только SSE;
-
al = 3 – поддерживается MMX и SSE.
6.4. Директивы языка ассемблера asm-89
При составлении программ для ПВВ используется язык ASM-89. Этот язык также включает операторы двух типов: команды и директивы. На рис. 6.3 приведены примеры форматов команд и директив.
Рис. 6.3. Поля операторов языка ASM-89: a - директив; б - мнемокодов команд
Для определения типов переменных, используемых в программе, предназначены директивы DB и DD, аналогичные директивам АSМ-86. Наряду с ними для резервирования области ОЗУ применяется директива DS, позволяющая только резервировать (без задания начальных значений) произвольное число байтов. Особенности написания мнемокодов команд ПВВ, в зависимости от способов адресации приведены в табл. 6.1.
В программах для ПВВ часто встречаются структуры данных, приведенные на рис. 6.4,а, для организации которых предусмотрена специальная директива STRUC, позволяющая присваивать имена и относительные адреса набору связанных друг с другом переменных, которые называют элементами структуры.
Таблица 6.1
№ п/п |
Способ адресации |
Примеры мнемокода команды |
1 |
По базе |
ADD GC, [GB] |
|
|
ADDBI [PP], 12 |
2 |
Со смещением |
ADDB IX, [GB].5 |
|
|
ADDB ВС, [GC].COUNT |
3 |
Индексная |
ADD [GC+ IX], BC |
4 |
Индексная с автоинкрементом |
ADDI [GC+IX+],5 |
Задание структуры, показанной на рис. 6.4,а, с помощью директивы STRUC имеет вид:
PARMBLOCK STRUCT
TP: DS 4
COMMAND: DS 1
RESULT: DS 1
BUFFER1: DS 4
BUFFER2: DS 2
PARMBLOCK ENDS
Данной структуре присвоено имя РАRМВLОСК и она является блоком параметров, который включает указатель задания TP размерностью 4 байта, параметр COMMAND (1 байт), параметр RESULT (1 байт), два параметра BUFFER1 (4 байта) и BUFFER2 (2 байта). Имя структуры указывается перед директивой STRUC и перед директивой ENDS, определяющей конец структуры.
Рис. 6.4. Размещение параметров структуры в памяти
Важно отметить, что задание структуры. не распределяет конкретные адреса памяти, а лишь определяет взаимное расположение ее элементов. Программа-ассемблер использует имена элементов структуры для определения величины смещения адреса соответствующего элемента от начального адреса структуры. Так, если начальный адрес структуры находится в регистре-указателе параметров РР, то обращение к элементам структуры в программе на языке ассемблера будет иметь вид:
LPD GA, [PP].BUFFERl
MOVBI [РР].RESULT, 0
\
Здесь первая команда загружает содержимое элемента структуры BUFFERl в регистр GA, а вторая команда обнуляет элемент структуры RESULT. Эти же операции можно выполнить и с помощью команд
LPD GA, [PP] . 6
MOVBI [РР]. 5,0
соответственно. Однако организация структуры, позволяющей обращаться к ее элементам по их именам, делает программу более понятной и облегчает ее написание и отладку.
Программа, написанная на языке ASM-89, может включать обращения к программам с помощью команды САLL (или LCALL). Первый операнд этих команд всегда задает адрес памяти, по которому должно быть сохранено значение регистра перед передачей управления вызываемой подпрограмме. Второй операнд этих команд содержит имя подпрограммы, определяющее ее начальный адрес. Возврат из подпрограммы осуществляется, как правило, с помощью команды MOVP, восстанавливающей содержимое регистра ТР из области сохранения. Ниже представлен фрагмент программы, которая использует команду вызова подпрограммы:
SAVE: DS 3 ; задание области сохранения
LPDI GC,SAVE ; загрузка адреса в GC
LCALL [GC],Donna ; вызов подпрограммы Donna
. . . ; тело программы
HLT ; завершение программы
Donna: . . . ; вход в подпрограмму Donna
. . . ; тело подпрограммы
MOVP TP,[GC] ; возврат из подпрограммы
Следует отметить, что подпрограмма Donna не должна изменять содержимое регистра GC, поскольку оно указывает на адрес возврата.
В качестве примера рассмотрим две программы на языке ASM-89. Первая программа предназначена для пересылки блока информации из области памяти с начальным адресом ADR1 в область памяти с начальным адресом АDR2. Число пересылаемых байтов (до 64К байт) задается параметром SIZE. Исходные данные размещаются в памяти в виде простой структуры, представленной на рис. 6.4,б, с начальным адресом, указанным в регистре-указателе PP. Программа имеет вид
1 MEMTRANS SEGMENT
2 PB STRUCT
3 TPRESERV: DS 4
4 ADR1: DS 4
5 ADR2: DS 4
6 SIZE: DS 2
7 PB ENDS
8 LPD GA,[PP].ADR1
9 LPD GB,[PP].ADR2
10 MOV BC,[PP].SIZE
11 MOV CC,0C208h
12 XFER
13 WID 16,16
14 HLT
15 MEMTRANS ENDS
16 END
В строке 1 используется директива SEGMENT, которая указывает на начало программы и присваивает ей имя MEMTRANS. В строках 2 - 7 описывается структура исходных данных, соответствующая рис. 6.4, б. В строках 8, 9 начальные адреса ADRI и ADR2 областей памяти, между которыми осуществляется пересылка данных, загружаются в регистры GA и GB, соответственно. В строке 10 в счетчик байтов ВС загружается число пересылаемых байтов. Для указанных загрузок используется адресация со смещением. Далее, в строке 11, в регистр управления каналом СС загружается константа, которая задает требуемый режим пересылки.