- •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.
18.Процессор х86: инструкции сложения, сложения с переносом.
Операция сложения целых чисел имеет мнемокод add и требует наличия двух операндов одинакового размера – приемника и источника. Результат выполнения, в данном случае сумма операндов, помещается в приемник. После выполнения операции в регистре флагов устанавливаются или сбрасываются флаги z (нуль), s (знак) , c (перенос) и o (переполнение). Признаком выхода результата за пределы разрядной сетки, а следовательно, получения неправильного результата является для знаковых операндов установка флага переполнения, а для беззнаковых – флага переноса.
Например:
unsigned int c,d;
short s,t;
char m;
unsigned char p;
asm{
mov ax, s
add ax, -5
add t, ax
mov ecx, c
add d, ecx
mov al, m
mov bl, p
add al, bl // Неверно !!!
mov al, m // Следует делать так
cbw
movzx bx, p
add ax, bx
}
На практике часто возникает необходимость использования целых чисел повышенной разрядности. Хранение таких чисел в памяти и загрузка и выгрузка в регистры по частям не представляют проблемы. Для выполнения операции сложения таких чисел, осуществляемой по частям, предусмотрена операция adc – сложение с переносом. При выполнении этой инструкции вычисляется сумма не двух слагаемых (приемника и источника), а трех – приемника, источника и флага переноса. При этом младшие части операндов складываются при помощи инструкции add, а все последующие – при помощи инструкции adc.
Например, реализация хранения в памяти и сложения 48-разрядных чисел:
typedef unsigned char myint[6];
myint A,B,C;
. . .
// вычисление C = A + B
asm{
mov ax, word ptr A
mov bx, word ptr A+2
mov cx, word ptr A+4
add ax, word ptr B
adc bx, word ptr B+2
adc cx, word ptr B+4
mov word ptr C, ax
mov word ptr C+2, bx
mov word ptr C+4, cx
}
19.Процессор х86: сложение чисел в формате bcd.
20.Процессор х86: инструкции вычитания, вычитания с заемом.
Операция вычитания очень похожа на операцию сложения и имеет мнемокод sub. Для вычитания чисел повышенной разрядности используется операция вычитания с заемом, также очень похожая на сложение с переносом.
21.Процессор х86: инструкции умножения.
Операция умножения, помимо того, что имеет реализации для одно-, двух- и четырехбайтовых сомножителей, также имеет различные реализации для знаковых и беззнаковых сомножителей и помимо этого может быть одно-, двух- и трехоперандной.
В первых моделях процессоров х86 было реализовано только однооперандное умножение. Требовалось только задать операнд-источник, который мог быть регистром или объектом в памяти. Приемником при однооперандном умножении всегда является аккумулятор или точнее регистры данных A и D. А так как при целочисленном умножении произведение как правило много больше сомножителей, то под приемник всегда отводится вдвое больше места, чем под источник. Инструкция умножения беззнаковых чисел имеет мнемокод mul, а знаковых – imul.
Например:
unsigned int d;
short s;
char m;
asm{
imul m // регистр ax содержит произведение m и al
imul s // регистровая пара dx:ax содержит произведение s и ax
mul d // регистровая пара edx:eax содержит произведение d и eax
}
В тех случаях, когда заранее известно, что результат умножения не выйдет за пределы разрядной сетки сомножителей, используется двух- и трехоперандное умножение. Это происходит в основном при вычислении сдвигов до нужных элементов массива при индексной адресации.
При двухоперандном умножении приемником может быть только регистр (не обязательно аккумулятор), а источником – регистр, объект в памяти или непосредственное значение.
При двухоперандном умножении приемником может быть только регистр (не обязательно аккумулятор), первым источником – регистр или объект в памяти, вторым источником – только непосредственное значение.
Например:
struct s{
int t;
char sx[20];
};
s ms[200];
int I;
asm{
mov edi, i
imul edi, 24 // edi содержит сдвиг до i-го элемента массива ms
}