- •Конспект лекций по дисциплине
- •Часть 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
Псевдокоманда times
Директива TIMES – это псевдокоманда префиксного типа, то есть она используется только в паре с другой командой. Она повторяет последующую псевдокоманду указанное количество раз, подобно директиве DUP из ассемблера Borland TASM.
Применяется эта директива в тех случаях, когда нужно «забить» некоторую область памяти повторяющимся образцом. Следующий код определяет строку, состоящую из 64 повторяющихся «Hello»:
many_hello: times 64 db 'Hello'
Первый аргумент, указывающий количество повторений, может быть и выражением. Например, задачу «разместить строку в области памяти размером в 32 байта и заполнить пробелами оставшееся место» легко решить с помощью директивы TIMES:
buffer db "Hello" ; определяем строку
times 32-($-buffer) db ' ' ; определяем нужное кол-тво пробелов
Выражение 32-($-buffer) возвратит значение 27, потому что $-buffer равно текущей позиции минус позиция начала строки, то есть 5.
Вместе с TIMES можно использовать не только псевдокоманды, но и команды процессора:
times 5 inc eax ; 5 раз выполнить INC EAX
Лекция 8. Команды пересылки данных и логические команды языка Ассемблера
8.1. Команды пересылки данных
Прежде чем изменять каким-либо образом данные, необходимо научиться их сохранять: копировать из регистра в память и обратно. Ведь прежде чем оперировать данными в регистрах, их сначала туда надо поместить.
Команда MOV, хоть название ее и происходит от слова «move» (перемещать), на самом деле не перемещает, а копирует значение из источника в приемник:
MOV приемник,источник
Процессоры семейства х86 позволяют использовать в командах только один косвенный аргумент. Следующая команда копирования значения, находящегося по адресу number_one, в область памяти с адресом number_two, недопустима:
mov [number_two],[number_one] ;НЕПРАВИЛЬНО!!!
Чтобы скопировать значение из одной области памяти в другую, нужно использовать промежуточный регистр:
mov ax,[number_one] ; загружаем в АХ 16-битное
; значение "number_one"
mov [number_two],ах ; а затем копируем его в переменную
; "number_two"
Оба операнда команды MOV должны быть одного размера: например, для копирования значения BL в регистр АХ мы должны «расширить диапазон», то есть скопировать весь ВХ в АХ, а затем загрузить 0 в АХ:
mov ах,bх ; загружаем ВХ в АХ
mov ah,0 ; "сбрасываем" верхнюю часть
; АХ – записываем в нее 0
Можно поступить и наоборот: сначала сбросить весь АХ, а затем загрузить BL в младшую часть АХ (AL):
mov ах,0 ; АН = 0, AL = 0
mov al,bl ; заносим в AL значение BL
Точно так же можно скопировать 16-битное значение в 32-битный регистр.
В официальной документации приведены все допустимые форматы команды MOV:
MOV r/m8,reg8
MOV r/m16,regl6
MOV r/m32,reg32
MOV reg8,r/m8
MOV reg16,r/ml6
MOV reg32,r/m32
MOV reg8,imm8
MOV reg16,imml6
MOV reg32,imm32
MOV r/m8,imm8
MOV r/m16,imml6
MOV r/m32,imm32
8.2. Логические команды языка Ассемблера
К логическим операциям относятся: логическое умножение (И, AND), логическое сложение (ИЛИ, OR), исключающее ИЛИ (XOR) и отрицание (NOT). Все эти инструкции изменяют регистр признаков.
Команда AND
Команда AND выполняет логическое умножение двух операндов: o1 и о2. Результат сохраняется в операнде o1. Типы операндов такие же, как у команды ADD: операнды могут быть 8-, 16- или 32-битными регистрами, адресами памяти или непосредственными значениями.
AND o1, o2
Таблица истинности для оператора AND приведена ниже (табл. 8.1).
Команда OR
Команда OR выполняет логическое сложение двух операндов: o1 и о2. Результат сохраняется в операнде o1. Типы операндов такие же, как у команды AND.
OR o1, o2
Таблица истинности для оператора OR приведена ниже (табл. 8.1).
Команда XOR
Вычисляет так называемое «исключающее ИЛИ» операндов: o1 и о2. Результат сохраняется в о1. Типы операндов такие же, как у предыдущих инструкций. Формат команды:
XOR o1, о2
Таблица истинности для оператора XOR приведена ниже (табл. 8.1). Исключающее ИЛИ обратимо: выражение ((х XOR у) XOR у) снова возвратит х.
Команда NOT
Используется для инверсии отдельных битов единственного операнда, который может быть регистром или памятью. Соответственно команда может быть записана в трех различных форматах:
NOT r/m8 NOT r/m16 NOT r/m32
Таблица истинности для оператора NOT приведена ниже (табл. 8.1).
Табл. 8.1
a |
b |
a AND b |
a OR b |
a XOR b |
NOT a |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |