- •Конспект лекций по дисциплине
- •Часть 1. Устройство и общая архитектура персонального компьютера Лекция 1. Основные понятия и определения дисциплины
- •1.1. Что такое персональный компьютер
- •1.2. Зачем необходим персональный компьютер радиоинженеру?
- •1.3. Персональные компьютеры, совместимые с ibm pc
- •1.4. Конструктивные особенности персональных компьютеров
- •Настольные компьютеры
- •Малогабаритные компьютеры
- •Промышленные и инструментальные компьютеры
- •Лекция 2. Общая структура персонального компьютера
- •2.1. Центральный процессор cpu
- •2.2. Элементы памяти
- •2.3. Периферийные устройства
- •2.4. Устройства ввода-вывода и коммуникаций
- •2.5. Адаптеры, контроллеры и иерархия подключений периферийных устройств
- •Лекция 3. Архитектура пэвм ibm pc и способы подключения внешних устройств
- •3.1. Функциональная схема пэвм ibm pc/xt Шинная организация персональных компьютеров
- •Организация системных шин pc/xt
- •3.2. Способы подключения внешнего устройства к компьютеру
- •Включение через последовательный порт
- •Включение через параллельный порт
- •Включение в системную шину
- •Подключение через современные интерфейсы
- •3.3. Программное обеспечение
- •Лекция 4. Архитектура системной платы современного
- •4.1. Шинно-мостовая архитектура
- •4.2. Хабовая архитектура
- •4.3. Архитектура HyperTransport
- •4.4. Чипсеты и системные платы
- •Лекция 5. Центральный процессор современных pc. Структура и режимы работы
- •5.1. Архитектура и микроархитектура процессоров
- •5.2. Режимы работы процессоров
- •5.3. Программная модель процессоров x86
- •Регистры общего назначения
- •Индексные регистры
- •Сегментные регистры
- •Регистры состояния и управления
- •Лекция 6. Структура программы на языке Ассемблера
- •6.1. Организация сегментов
- •6.2. Директивы управления сегментами и моделями памяти
- •6.3. Структура программ на ассемблере masm
- •Лекция 7. Основы программирования на языке Ассемблера
- •7.1. Структура команды языка Ассемблера
- •7.2. Операнды команд языка Ассемблера
- •7.3. Способы адресации памяти языка Ассемблера
- •7.4. Псевдокоманды языка Ассемблера
- •Псевдокоманды db, dw и dd
- •Псевдокоманда equ
- •Псевдокоманды resb, resw и resd
- •Псевдокоманда times
- •Лекция 8. Команды пересылки данных и логические команды языка Ассемблера
- •8.1. Команды пересылки данных
- •8.2. Логические команды языка Ассемблера
- •8.3. Массивы битов (разрядные матрицы)
- •Лекция 9. Команды целочисленной арифметики в языке Ассемблера
- •9.1. Арифметические команды сложения и вычитания
- •Инструкции сложения add и вычитания sub
- •Команды инкрементирования inc и декрементирования dec
- •9.2. Команды для работы с отрицательными числами
- •9.3. Арифметические команды умножения и деления
- •Команды mul и imul
- •Команды div и idiv
Команды инкрементирования inc и декрементирования dec
Команда INC добавляет, a DEC вычитает единицу из единственного операнда. Допустимые типы операнда – такие же, как у команд ADD и SUB, а формат команд таков:
inc O1 ; o1 = o1 + 1
dec O1 ; o1 = o1 - 1
Ни одна из этих инструкций не изменяет флаг CF.
Увеличение на единицу значения регистра AL выглядит следующим образом:
add al,l ; AL = AL + 1
inc al ; AL = AL + 1
Увеличение на единицу значения 16-битной переменной number:
inc word [number] ; мы должны указать размер
9.2. Команды для работы с отрицательными числами
Система команд процессора 80386 включает в себя несколько команд, предназначенных для работы с целыми числами со знаком. Первая из них – команда NEG (negation, отрицание):
NEG r/m8
NEG r/m16
NEG r/m32
Используя NEG, можно преобразовывать положительное целое число в отрицательное и наоборот. Инструкция NEG имеет только один операнд, который может быть регистром или адресом памяти. Размер операнда – любой: 8, 16 или 32 бита.
neg еах ; изменяет знак числа, сохраненного в ЕАХ
neg bl ; то же самое, но используется 8-битный
; регистр BL
neg byte [number] ; изменяет знак 8-битной переменной number
Расширение диапазона целого беззнакового числа делалось просто: мы просто копировали число в больший регистр, а расширенное “место” заполняли нулями. При работе с целыми числами со знаком мы должны заполнить это место старшим битом преобразуемого числа. Так мы можем сохранять положительные и отрицательные числа при расширении их диапазона. Расширение диапазона числа со знаком называется знаковым расширением.
Процессор имеет несколько специальных команд, предназначенных для знакового расширения. Эти команды не имеют операндов, они выполняют действия над фиксированными регистрами.
Команда CBW
Команда CBW копирует седьмой (старший) бит регистра AL в регистр АН, расширяя таким образом оригинальное значение регистра AL в значение со знаком регистра АХ (значение АН становится равно 0x00 или 0xFF = 11111111b, в зависимости от старшего бита AL).
Команда CWDE
Команда CWDE копирует старший бит АХ в верхнюю часть (старшую часть) ЕАХ, расширяя таким образом оригинальное значение АХ в двойное слово со знаком, которое будет помещено в регистр ЕАХ.
Команда CWD
Команда CWD копирует старший бит АХ в регистр DX, расширяя таким образом оригинальное значение АХ в пару регистров со знаком DX:AX.
Команда CDQ
Команда CDQ копирует старший бит ЕАХ в регистр EDX, расширяя таким образом оригинальное значение ЕАХ в пару регистров со знаком EDX:EAX.
; переменной – word
9.3. Арифметические команды умножения и деления
Дополнительный код делает возможным сложение и вычитание целых чисел со знаком и без знака с помощью одних и тех же команд ADD и SUB. Но к умножению и делению это не относится: умножение выполняется командой MUL, а деление – командой DIV. Для умножения и деления чисел со знаком служат отдельные команды – IMUL и IDIV. Операнды этих инструкций такие же, как у MUL и DIV.
Операции умножения и деления имеют свою специфику. В результате умножения двух чисел мы можем получить число, диапазон которого будет в два раза превышать диапазон операндов. Деление целых чисел – это операция целочисленная, поэтому в результате образуются два значения: частное и остаток.
С целью упрощения реализации команд умножения и деления эти команды спроектированы так, что один из операндов и результат находятся в фиксированном регистре, а второй операнд указывается программистом.
Подобно командам ADD и SUB, команды MUL, DIV, IMUL, IDIV изменяют регистр признаков.