- •1.Архитектуры вычислительных систем.
- •2.Архитектура многопроцессорных систем.
- •3.Классификация вычислительных систем.
- •4.Классификация процессоров.
- •5.Регистровая модель процессора x86.
- •6.Режимы работы процессора 80386.
- •1.Реальный режим
- •2. Защищенный режим
- •7.Процессор х86: непосредственная и регистровая адресация.
- •8.Процессор х86: прямая адресация и прямая со сдвигом.
- •9.Процессор х86: косвенная адресация и косвенная со сдвигом.
- •10.Процессор х86: индексная адресация и индексная с масштабированием.
- •11.Размещение в памяти многомерных статических массивов и доступ к их элементам.
- •15.Процессор х86: инструкции копирования данных.
- •16.Процессор х86: инструкции ввода-вывода.
- •17.Представление целых чисел: прямой код, дополнительный код, bsd.
- •18.Процессор х86: инструкции сложения, сложения с переносом.
- •19.Процессор х86: сложение чисел в формате bcd.
- •20.Процессор х86: инструкции вычитания, вычитания с заемом.
- •21.Процессор х86: инструкции умножения.
- •22.Процессор х86: инструкция деления.
- •23.Процессор х86: операции расширения знакового бита.
- •24.Процессор х86: поразрядные логические инструкции, использование масок.
- •25.Процессор х86: инструкции сдвига. Умножение и деление на константы.
- •26.Процессор х86: инструкции цикла. Отличие от циклах в языках высокого уровня.
- •27.Процессор х86: Ожидание готовности пу с тайм-аутом на основе цикла.
- •28.Процессор х86: безусловный переход и виды меток.
- •29.Процессор х86: вызов процедуры и прерывания (рамка стека функции в с).
- •30.Процессор х86: инструкции условного перехода.
- •31.Процессор х86: строковый примитив копирования данных.
- •32.Процессор х86: строковые примитивы сравнения данных, сканирования данных и заполнения данных.
- •33.Сегменты реального и защищенного режима. Глобальная и локальная таблицы дескрипторов.
- •34.Механизм преобразования линейного адреса в физический в процессоре x86.
- •46.Математический сопроцессор: инструкции вычисления функций.
- •47. Математический сопроцессор: инструкции сравнения и условный переход по результатам сравнения
- •48.Математический сопроцессор: регистры управления и состояния.
- •49.Математический сопроцессор: исключения и их маскирование.
- •50. Дисковые накопители. Логическая и физическая геометрия жесткого диска, линейная адресация.
- •51. Разделы жесткого диска. Осуществление загрузки.
- •53. Стек tcp/ip и его соответсвие 7 уровневой модели osi iso.
- •54.Пример передачи и приема пакета в стеке tcp/ip.
- •55. Ip и mac адреса. Служба arp. Классы ip адресов.
- •56.Маршрутизация и таблицы маршрутизатора.
- •57.Доменные имена и служба dns.
- •58.Статические и динамические ip адреса. Служба dhcp.
26.Процессор х86: инструкции цикла. Отличие от циклах в языках высокого уровня.
В процессоре х86 аппаратно реализован цикл со счетным параметром. В качестве счетчика цикла используется регистр ecx. Инструкция цикла имеет мнемокод loop. В нижеследующем примере участок кода, заключенный между меткой lpm и инструкцией loop lpm, будет выполнен 100 раз:
mov ecx, 100
lpm:
. . .
. . .
loop lpm
В ходе выполнения инструкции loop содержимое регистра ecx аппаратно уменьшается на единицу и после этого сравнивается с нулем. Поэтому, если перед началом цикла регистр ecx обнулить, то цикл выполнится 10000000h (4294967296) раз.
В программах, осуществляющих обмен данными с периферийными устройствами для организации тайма-аута используются инструкции цикла с дополнительной проверкой флага нуля loopz и loopnz или их эквиваленты loope и loopne.
При выполнении инструкции loopz/loope переход на метку осуществляется при одновременном выполнении двух условий: содержимое регистра ecx не равно 0 и флаг нуля установлен.
При выполнении инструкции loopnz/loopne переход на метку осуществляется при одновременном выполнении двух условий: содержимое регистра ecx не равно 0 и флаг нуля сброшен.
27.Процессор х86: Ожидание готовности пу с тайм-аутом на основе цикла.
28.Процессор х86: безусловный переход и виды меток.
Инструкции управления ходом вычислительного процесса подразделяются на инструкции безусловного перехода, условного перехода, цикла, вызова функции (процедуры), возврата из функции (процедуры).
Инструкция безусловного перехода имеет мнемокод jmp, сокращение от jump - прыжок, и имеет один операнд – адрес перехода, задаваемый обычно при помощи метки.
В тексте программы на ассемблере меткой можно пометить любую инструкцию. Для именования меток используются те же правила, что и для задания имен переменных: последовательность из букв и цифр, начинающаяся с буквы. Компилятор создает таблицу меток, в которую помещает идентификаторы меток и адреса инструкций, которые отмечены данными метками, а затем в тексте программы во всех инструкциях управления ходом вычислительного процесса заменяет идентификаторы меток их значениями, т.е. адресами инструкций, на которые будет осуществляться переход. Например, если в тексте программы имеется следующий код, и инструкция, помеченная меткой m1, окажется размещенной по адресу 50637844h, то инструкция jmp m1, будет эквивалентной jmp 50637844h.
int vm,a,b;
. . .
. . .
m1: mov eax, a
. . .
jmp m1 // непосредственная
mov ebx, b
. . .
jmp eax // регистровая
. . .
jmp dword ptr [edx] // косвенная
. . .
jmp dword ptr vm // прямая
. . .
Метки могут быть трех типов: дальние, ближние и короткие. Дальняя метка состоит из двух частей: сегмента и адреса в данном сегменте, ближняя метка содержит адрес в текущем сегменте кода, а короткая – содержит не абсолютный адрес, а относительный. Относительный адрес – это расстояний в байтах до точки перехода, т.е. это число со знаком, которое прибавляется к текущему значению программного счетчика. Дальние метки применялись в основном в 16-разрядном реальном режиме и в настоящее время в прикладном программировании не используются. Поэтому термин «ближняя» вышел из употребления и, когда говорят просто метка, то имеют в виду ближнюю метку. В примере, представленном выше, метка m1 рассматривается как ближняя. Короткие метки позволяют создавать позиционно-независимый код, т.е. код, который можно без изменения адресов перехода поместить в любое место адресного пространства процесса. Современные оптимизирующие компиляторы, как правило, генерируют короткие метки, и, более того, многие операционные системы требуют, чтобы прикладные программы использовали только короткие метки. Таким образом, в нашем примере, если инструкция mov ebx, b имеет адрес 50637944h, оптимизирующий компилятор сгенерирует инструкцию jmp –100h.