- •5 Задача 44
- •1. Відкрита архітектура пеом
- •2. Функціональна схема базової моделі мікропроцесора. Схеми напівсуматора і суматора. Дії над двійковими та двійково-десятковими числами.
- •Додавання
- •Віднімання
- •3. Логічна структура мікропроцесора
- •Сегментные регистры
- •Регистры общего назначения
- •Флаги состояния
- •Флаг направления
- •Системные флаги
- •Регистр управления
- •4. Адресація пам’яті
- •Сегментная адресация памяти
- •Параграфы
- •Понятия команды и формата команды
- •5. Сторінкова організ оп пам’яті. Таблиці, дескриптори
- •Понятие о страничной модели памяти
- •6. Структура таблиц idt. Дескриптор шлюза.
- •Дескриптор шлюза
- •7. Формування фізичної адреси з логічної адреси для сегментної та сторінкової схем організації пам’яті Страничная организация
- •8. Принципи роботи vmm
- •Обзор Администратора виртуальной памяти (vmm)
- •9. Використання регістрів загального призначення
- •10. Організація стеку. Адресація стекової пам’яті
- •11. Архітектура регістру ознак (flags)
- •12. Апаратно-програмні засоби певм.
- •13. Механізм переривань
- •14. Апаратні переривання, їх призначення. Архітектура мікросхеми 8859. Обробка апаратних переривань.
- •15. Контролер apic
- •16. Принцип роботи сопроцесора
- •17. Загальні поняття про канали та порти
- •18. Мікросхема паралельного інтерфейсу
- •19. Структура cmos-memory
- •20. Архітектура мікросхеми таймера
- •1 Задача
- •2 Задача
- •Програма може бути якась така:
- •5 Задача
- •6 Задача
1 Задача
Записать в порт 43h белиберду примерно следующего содержания
1011х110 (10 - выбор 2 канала; 11 - запись значения в счетчик в формате сначала младшего, потом старшего байта; х11 - режим 3; 0 - двоичный счет - не знаю, зачем он нужен)
Вставить начальное значение счетчика в порт 40h: сначала младший байт, потом старший. Поскольку на входе железно значение 1.193 МГц, а на выходе - 1193 Гц, значит, начальное значение было 1000 (в 10 системе), или в виде 2 байт:
00000011 11101000
Почему именно 1000? Потому что в режиме 3 выходная частота = частота входного сигнала / значение счетчика. В остальных режимах (кроме 2-го) ерунда всякая
Установить 2 младших разряда порта 61h в 1 - разрешение генерации звука
2 Задача
http://www.e-zine.excode.ru/online/3/syscall.html
C8 0D 36 12 00 80 20 00:
11001000 00001101 00110110 00010010 00000000 10000000 00100000 00000000
Limit (0 – 15): 00100000 00000000
Base(16 – 39): 00010010 00000000 10000000
Доступ: (40-47): 00110110
(P=0 – сегмент не загружен в память; DPL=01 – третий приоритет; S=0 – несистемный дескриптор; ED=1 – сегмент стека; W=1 – доступен для записи; A=0)
Limit: 1101
Attributes: 0000
(G=0 – макс. Размер сегмента - 220; D/B=0 – 16-разрядный сегмент; AVL=0 – свободный бит)
Base: 11001000
3 задача
IEEE 754
Судя по непонятной характеристике в 11 бит, самое похожее, что я нашел, было Double Precision. В нем 11 бит идет на экспоненту, 52 бита на мантиссу.
http://www.binaryconvert.com/result_double.html?decimal=045048046052053
4 задача
Коротка відповідь:
регістри: DS, SI, ES, DI, AX, CX
адреси всіх двобайтних слів:
перша область - А000:0010 А000:0012 А000:0014 А000:0016 А000:0018 А000:001А А000:001C А000:001D А000:001F А000:0020
друга область - В000:0020 В000:0022 В000:0024 В000:0026 В000:0028 В000:002A В000:002C В000:002D В000:002F В000:0030
Розгорнута відповідь:
Для того щоб записати дані з одної комірки памяті в іншу використовується команда MOVSB(копіює 1 байт), MOVSW(копіює 2 байта, тобто слово), MOVSD(копіює 4 байта, тобто 2 слова; ця команда доступна тільки на процесорі 386). Ці команди не мають аргументів, і використовують регістри процесора DS, SI, ES, DI для того щоб дізнатись що куди копіювати. Комірка памяті з якої необхідно копіювати розраховується як DS:SI (DS - сегмент, SI - зміщення), комірка в яку треба копіювати як ES:DI (ES - сегмент, DI - зміщення). Крім цього значення регістрів SI та DI будуть збільшуватись(коли у флаговому регістрі DF=0), або зменшуватись (при DF=1) на 1,2 чи 4(в залежності від того яка саме з команд MOVSB/MOVSW/MOWSD використовуєтсья). Оскільки в регістри DS та ES не можна напряму записати значення (а можна лише скопіювати з іншого регістра), то необхідно використовувати проміжний регістр AX. Крім цього всього зручно буде використвти регістр CX для того щоб вказати скільки разів виконувати команду MOVSB/MOVSW/MOWSD.
Програма може бути якась така:
mov ax,0xA000 ;будемо копіювати з сегмента A000
mov ds,ax
mov ax,0xB000 ;будемо копіювати в сегмент B000
mov es,ax
mov si,0x0010 ;зміщення в сегменті A000 буде 0010 (комірка памяті А000:0010)
mov di,0x0020 ;зміщення в сегменті В000 буде 0020 (комірка памяті В000:0020)
mov cx,0xA ;визначаємо, що операція movsw буде виконуватись 10 раз (так як 10 раз по 2 байти дасть якраз 20 байт)
rep movsw
