- •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.
16.Процессор х86: инструкции ввода-вывода.
"in" переводит байт, слово или двойное слово из порта ввода в AL, AX или EAX. Порты ввода-вывода могут быть адресованы либо напрямую, непосредственно с помощью байтового значения, либо непрямо через регистр DX. Операндом-адресатом должен быть регистр AL, AX или EAX. Операндом-источником должно быть число от 0 до 255 либо регистр DX.
in al,20h ; ввод байта из порта 20
in ax,dx ; ввод слова из порта, адресованного регистром DX
"out" переводит байт, слово или двойное слово из порта вывода в AL, AX или EAX. Программа может может определить номер порта, используя те же методы, что и в инструкции "in". Операндом-адресатом должен быть регистр AL, AX или EAX. Операндом-источником должно быть число от 0 до 255 либо регистр DX.
out 20h,ax ; вывод байта в порт 20
out dx,al ; вывод слова в порт, адресованный регистром DX
17.Представление целых чисел: прямой код, дополнительный код, bsd.
Процессор выполняет операции сложения, вычитания, умножения и деления с целыми числами, представленными в дополнительном коде. Дополнительный код означает, что для представления отрицательных чисел используется не их модуль, а дополнение этого модуля до числа с одной единицей за пределами разрядной сетки.
Для байта используется дополнение до 100h, для слова – 10000h, для двойного слова – 100000000h.
Помимо дополнительного кода для представления отрицательных чисел существует прямой код. В этом случае один из битов, обычно старший, отводится под знак числа, а остальные биты – под его модуль. Однако данный формат представления целых чисел не получил широкого распространения, так как в этом формате требуется различная аппаратная реализация для операций сложения и вычитания для знаковых и беззнаковых чисел.
Беззнаковые числа могут быть только положительными и под модуль числа отводятся все биты. Байт без знака может принимать значения от 0 до FFh(255), слово без знака – от 0 до FFFFh (65535), двойное слово без знака – от 0 до FFFFFFFFh(4294967295).
Знаковые числа могут как положительными, так и отрицательными. Если самый старший бит сброшен, то число положительное и представлен его модуль. Если самый старший бит установлен, то число отрицательное и представлено его дополнение.
Например байт 0xE7 в беззнаковом представлении соответствует числу 231, а в знаковом – числу –25 (256-231=25).
Если этот байт сложить с байтом 0x0C(12), то получится 0xF3.
0xF3 без знака означает число 243, а со знаком – число –13.
Т.е. операция сложения, аппаратно реализованная для беззнаковых чисел, дает правильный результат и для знаковых чисел в дополнительном коде. Именно по этой причине большинство процессоров использует дополнительный, а не прямой код.
Байт со знаком для положительных чисел предоставляет диапазон от 0 до 0x7F (127), а для отрицательных – от 0x80(-128) до 0xFF (-1).
Слово со знаком для положительных чисел предоставляет диапазон от 0 до 0x7FFF (32767), а для отрицательных – от 0x8000(-32768) до 0xFFFF (-1).
Двойное слово со знаком для положительных чисел предоставляет диапазон от 0 до 0x7FFFFFFF (2147483647), а для отрицательных – от 0x80000000(-2147483648) до 0xFFFFFFFF (-1).
При выполнении расчетов с целыми числами часто требуется преобразовать либо исходные данные, либо промежуточные результаты вычислений, в особенности перед операцией деления, в число с большей разрядностью. Байт – в слово или двойное слово, слово – в двойное слово или учетверенное слово, двойное слово – в учетверенное слово. Если данные числа беззнаковые, то, поскольку всегда представлен их модуль, данное расширение заключается в заполнении нулями старшей половины.
Например:
int a,b;
unsigned int c,d;
short s,t;
unsigned short u,w;
char m,n;
unsigned char p,q;
asm{
mov al, p
mov ah, 0 // в регистре ax находится слово, равное по величине p
mov ax, w
mov dx, 0 // регистровая пара dx:ax содержит двойное слово, равное w
and eax, 0x0000FFFF // регистр eax содержит двойное слово, равное w
}
Если же числа знаковые, то для положительных чисел производится заполнение старшей половины нулями, а для отрицательных – единицами. Поскольку эта операция встречается довольно часто, то она реализована аппаратно. При этом старший бит операнда источника (младшая половина) копируется во все разряды операнда приемника (старшая половина). Эта операция называется расширением знакового бита и всегда производится только в регистрах данных A и D, поэтому операнды в данной инструкции не требуются:
Источник |
Приемник |
Мнемокод |
Комментарий |
AL |
AX |
CBW |
Байт – Слово |
AX |
DX:AX |
CWD |
Слово – Двойное слово |
AX |
EAX |
CWDE |
Слово – Двойное слово |
EAX |
EDX:EAX |
CDQ |
Двойное слово – Учетверенное слово |
Расширение разрядности можно совместить с копированием данных. При этом разрядность приемника всегда больше разрядности источника. Для такого копирования используются специальные инструкции movsx (sx – Sign eXtention: расширение знаковым битом) и movzx (zx – Zero eXtention: расширение нулем).
Например:
int a,b;
unsigned int c,d;
short s,t;
unsigned short u,w;
asm{
movsx s, al
movzx u, bh
movsx a, ax
movzx c, dx
movsx eax, t
movzx ebx, d
mov ax, t
cwd
mov eax, b
cdq
}
И, наконец, инструкция neg изменяет знак своего единственного операнда на противоположный. Операндом может быть как регистр, так и объект в памяти.