
- •Конспект лекций по дисциплине
- •Часть 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
7.4. Псевдокоманды языка Ассемблера
Некоторые из команд могут работать с операндом, расположенным в памяти. Классический пример – команда MOV AX, [number], загружающая в регистр АХ значение из области памяти, адрес которой представлен символическим обозначением «number». Но пока не ясно, как связать символическое обозначение и реальный адрес в памяти. Как раз для этого и служат псевдокоманды.
Предложения языка ассемблера делятся на команды и псевдокоманды (директивы). Команды ассемблера – это символические имена машинных команд, обработка их компилятором приводит к генерации машинного кода. Псевдокоманды же управляют работой самого компилятора. На одной и той же аппаратной архитектуре могут работать различные ассемблеры: их команды обязательно будут одинаковыми, но псевдокоманды могут быть разными.
Псевдокоманды db, dw и dd
Чаще всего используется псевдокоманда DB (define byte), позволяющая определить числовые константы и строки. Рассмотрим несколько примеров:
db 0x55 ; один байт в шестнадцатеричном виде
db 0x55,0x56,0x57 ; три последовательных байта: 0x55, 0х56, 0x57
db 'а',0x55 ; можно записать символ в одинарных кавычках
; получится последовательность 0x61, 0x55
db 'Hello',13,10,'$' ; можно записать целую строку
; получится 0x48, 0x65, 0х6С, 0х6С,
; 0x6F, 0xD, 0xA, 0x24
Для определения порции данных размера, кратного слову, служит директива DW (define word):
dw 0x1234 ; 0х34, 0x12
dw 'a' ; 0x61, 0x00: второй байт заполняется нулями
Директива DD (define double word) задает значение порции данных размера, кратного двойному слову:
dd 0x12345678 ; 0х78 0x56 0x34 0x12
dd 1.234567e20 ; так определяются числа с плавающей точкой
А вот так определяется переменная, тот самый «number»:
number dd 0x1 ; переменная number инициализирована
; значением 1
Переменная «number» теперь представляет адрес в памяти, по которому записано значение 0x00000001 длиной в двойное слово.
Псевдокоманда equ
Эта директива определяет константу, известную во время компиляции. В качестве значения константы можно указывать также константное выражение. Директиве EQU должно предшествовать символическое имя:
four EQU 4 ; тривиальный пример
Псевдокоманды resb, resw и resd
Эта группа псевдокоманд позволяет определить неинициализированные данные. Если в первом случае мы заносим данные в память, то сейчас мы просто укажем, сколько байтов нужно зарезервировать для будущих данных.
Память для этих неинициализированных переменных распределяется динамически, а сами данные не содержатся в исполнимом файле. Грубо говоря, предыдущую группу инструкций удобно использовать для определения констант, а эту группу – для переменных.
Для резервирования памяти служат три директивы: RESB (резервирует байт), RESW (резервирует слово) и RESD (резервирует двойное слово). Аргументом этих псевдокоманд является количество резервируемых позиций:
resb 1 ; резервирует 1 байт
resb 2 ; резервирует 2 байта
resw 2 ; резервирует 4 байта (2 слова)
resd 1 ; резервирует 4 байта
number resd 1 ; резервирует 4 байта для переменной "number"
buffer resb 64 ; резервирует 64 байта для переменной "buffer"