- •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.
10.Процессор х86: индексная адресация и индексная с масштабированием.
Адресация с индексированием похожа на адресацию со сдвигом и также бывает прямая и косвенная. Но в отличие адресации со сдвигом смещение относительно базового адреса задается не в виде константы, а помещается в регистр и может вычисляться в ходе выполнения программы. В качестве индексных регистров обычно используются ESI и EDI, но могут использоваться и регистры общего назначения. Так как содержимое индексного регистра может модифицироваться во время выполнения программы, то такая адресация, как правило, используется для доступа к элементам массива. При программировании на ассемблере важно помнить, что в индексный регистр помещается не индекс элемента массива, а смещение в байтах до нужного элемента от начала массива. Если размер элемента массива равен 2,4 или 8, то масштабный множитель можно поместить прямо в квадратные скобки. При работе с многомерными массивами необходимо вычислять обобщенный приведенный индекс, который, например, для двумерных массивов выглядит как произведение номера текущей строки и числа элементов в строке сложенное с номером текущего столбца. Пример индексной адресации:
int m[100];
short n[40][50];
…………
MOV EDI, 12
MOV EAX, dword ptr m[EDI*4] // m[12]
MOV EBX, 4*50*2+7*2 //4 строки по 50 элементов размером 2 байта каждый
// плюс 7 элементов в текущей строке
MOV AX, word ptr n[EBX]
LEA EDX, n[EBX]
MOV CX, [EDX] //n[4][7]
Допускается формировать исполнительный адрес из 3 и даже четырех составляющих, то есть включать в поле операнда идентификатор глобальной переменной (адрес базы, к которой будет прибавляться смещение), два регистра и константу. Сумма содержимого этих двух регистров и константы и будет определять смещение добавляемое к базе.
11.Размещение в памяти многомерных статических массивов и доступ к их элементам.
15.Процессор х86: инструкции копирования данных.
"mov" переносит байт, слово или двойное слово из операнда-источника в операнд-адресат. Этот мнемоник может передавать данные между регистрами общего назначения, из этих регистров в память, обратно, но не может перемещать данные из памяти в память. Он также может передавать непосредственное значение в регистр общего назачения или в память, сегментный регистр в регистр общего назначения или в память, регистр общего назначения в сегментный регистр или в память, контрольный или отладочный регистр в регистр общего назначения и назад. "mov" может быть ассемблирована только если размер операнда-источника и размер операнда-адресата совпадают. Ниже приведены примеры каждой из перечисленных комбинаций:
mov bx,ax ; из регистра общего назначения в регистр общего назначения
mov [char],al ; из регистра общего назначения в память
mov bl,[char] ; из памяти в регистр общего назначения
mov dl,32 ; непосредственное значение в регистр общего назначения
mov [char],32 ; непосредственное значение в память
mov ax,ds ; из сегментного регистра в регистр общего назначения
mov [bx],ds ; из сегментного регистра в память
mov ds,ax ; из регистра общего назначения в сегментный регистр
mov ds,[bx] ; из памяти в сегментный регистр
mov eax,cr0 ; из контрольного регистра в регистр общего назначения
mov cr3,ebx ; из регистра общего назначения в контрольный регистр
"xchg" меняет местами значения двух операндов. Инструкция может поменять два байтовых операнда, операнды размером в слово и размером в двойное слово. Порядок операндов не важен. В их роли могут выступать два регистра общего назначения либо регистр общего назначения и адрес в памяти. Например:
xchg ax,bx ; меняет местами два регистра общего назначения
xchg al,[char] ; регистр общего назначения и память
"push" уменьшает значение указателя стекового фрейма (регистр ESP), потом переводит операнд на верх стека, на который указывает ESP. Операндом может быть память, регистр общего назначения, сегментный регистр или непосредственное значение размером в слово или двойное слово. Если операнд - это непосредственное значение и его размер не определен, то в 16-битном режиме по умолчанию он обрабатывается как слово, а в 32-битном режиме как двойное слово. Мнемоники "pushw" и "pushd" - это варианты этой инструкции, которые сохраняют соответственно слова и двойные слова. Если на одной строке содержится несколько операндов (разделенных пробелами, а не запятыми), компилятор проассемблирует цепь инструкций "push" с этими операндами. Вот примеры с одиночными операндами:
push ax ; сохраняет регистр общего назначения
push es ; сохраняет сегментный регистр
pushw [bx] ; сохраняет память
push 1000h ; сохраняет непосредственное значение
Инструкция "pusha" сохраняет в стек содержимое восьми регистров общего назначения. У неё нет операндов. Существует две версии этой инструкции: 16-битная и 32-битная. Ассемблер автоматически генерирует версию, соответствующую текущему режиму, но, используя мнемоники "pushaw" или "pushad",это можно изменить для того, чтобы всегда получать, соответственно, 16- или 32-битную версию. 16-битная версия этой инструкции сохраняет регистры общего назначения в таком порядке: AX, CX, DX, BX, значение регистра SP перед тем, как был сохранен AX, далее BP, SI и DI. 32-битная версия сохраняет эквивалентные 32-битные регистры в том же порядке.
"pop" переводит слово или двойное слово из текущей верхушки стека в операд-адресат и после уменьшает ESP на указатель на новую верхушку стека. Операндом может служить память, регистр общего назначения или сегментный регистр. Мнемоники "popw" и "popd" - это варианты этой инструкции, восстанавливающие соответственно слова и двойные слова. Если на одной строке содержится несколько операндов, разделенных пробелами, компилятор ассемблирует цепочку инструкций с этими операндами.
pop bx ; восстанавливает регистр общего назначения
pop ds ; восстанавливает сегментный регистр
popw [si] ; восстанавливает память
"popa" восстанавливает регистры, сохраненные в стек инструкцией "pusha", кроме сохраненного значения SP (или ESP)? который будет проигнорирован. У этой инструкции нет операндов. Чтобы ассемблировать 16 или 32-битную версию этой инструкции, используйте мнемоники "popaw" или "popad".