- •Щемелева т.К.
- •Архитектура и программирование реального режима микропроцессоров фирмы intel
- •Учебное пособие
- •Пермь 2001
- •Содержание
- •1.2.Переводы между позиционными системами счисления
- •1.3.Система кодирования символов ascii
- •1.4. Преобразование строки ascii-кодов в двоичное и шестнадцатеричное число
- •1.5. Применение систем счисления в эвм
- •1.6. Контрольные вопросы и задания
- •Тема 2. Представление данных на языке ассемблера и их хранение в памяти пк
- •2.1. Биты, байты и слова
- •2.3. Размещение различных типов данных в памяти пк
- •2.4. Отрицательные числа
- •2.5. Контрольные вопросы и задания
- •Тема 3. Элементы архитектуры персонального компьютера: сегментная память и регистровая структура микропроцессора
- •3.1. Понятие сегмента
- •3.2. Способ адресации ячеек сегментированной памяти
- •3.4. Программистская модель мп i8086. Назначение регистров.
- •Регистры общего назначения
- •Регистры сегментов и указатель команд
- •3.5. Контрольные вопросы и задания
- •Тема 4. Создание программы в ехе-формате
- •4.1. Программы на языке транслятораMasm.
- •4.1.1. Определение сегментов и данных.
- •4.1.2. Структура программы.
- •4.2. Программы на языке транслятораTasm.
- •4.2.1. Особенности транслятора.
- •4.2.2. Определение сегментов и данных .
- •4.2.3. Директива model.
- •4.2.4. Директивы упрощенного описания сегментов.
- •4.2.5. Структура программы.
- •4.2.6. Директивы startupcode и exitcode.
- •4.3. Контрольные вопросы и задания
- •Тема 5. Способы адресации данных в командах языка ассемблер
- •5.1. Регистровая адресация
- •5.2. Непосредственная адресация.
- •5.3. Прямая адресация.
- •5.4. Косвенная регистровая.
- •5.5. Адресация по базе.
- •5.6. Индексная адресация.
- •5.7. Адресация по базе с индексированием.
- •5.8. Контрольные задания.
- •Тема 6. Основные команды языка Ассемблер
- •6.1. Команды пересылки.
- •1) Пересылка данных
- •2) Пересылка адресов
- •4) Пересылка в стек и из стека
- •6.2. Арифметические операции.
- •2) Арифметические операции над двоичными кодами.
- •3) Команда сравнения:
- •6.3. Команды корректировки.
- •6.4. Команды логических операций.
- •1) Поразрядные логические операции:
- •2) Команды сдвига
- •6.5. Команды передачи управления.
- •6.6. Команды организации цикла.
- •6.7. Команды вызова процедур и возврата из них.
- •6.8. Команды прерываний и возврата из них.
- •6.8.1. Функции ввода/выводаDos.
- •6.8.2. ФункцииBios управления экраном.
- •Тема 7. Стек
- •7.1.Стек и сегмент стека
- •7.2.Стековые команды
- •7.3. Доступ к элементам стека
- •Тема 8. Практическая работа на пк.
- •Тема 9. Создание линейных программ
- •9.1 Создание линейной программы.
- •9.1.1. Составление текста программы.
- •9.1.2 Трансляция.
- •9.1.3. Создание исполняемого файла
- •9.1.4.Отладка программы в turbo debugger’е
- •9.2. Контрольные вопросы и задания
- •Тема 10. Организация ветвлений.
- •10.1.Флаги и их назначение.
- •10.2 Команда безусловного перехода jmp
- •10.3 Команды условных переходов
- •10.4. Создание разветвленной программы.
- •10.4.1. Составление текста программы.
- •10.4.2.Трансляция.
- •10.4.3. Создание исполняемого файла.
- •10.5. Контрольные вопросы и задания
- •Тема 11. Организация циклов
- •11.1. Команды управления циклом
- •11.2.Создание циклической программы.
- •11.2.1.Составление текста программы.
- •11.2.2.Трансляция.
- •11.2.3.Создание исполняемого файла
- •11.2.4.Отладка программы в turbo debugger’е
- •11.3. Контрольные вопросы и задания
- •Тема 12. Циклическая разветвленная программа
- •12.1.Создание программы.
- •12.1.1.Составление программы
- •12.1.2.Трансляция.
- •12.1.3.Создание исполняемого файла.
- •12.1.4. Отладка программы в turbo debugger’е
- •12.2.Контрольные вопросы
- •12.3. Контрольные задания
- •Тема 13. Связь ассемблера с языкомPascal.
- •13.1 Общие положения
- •13.2 Организация связи
- •13.3 Передача аргументов (и возврат результата в случае функции)
- •13.4 ДирективаArg
- •13.5 Использование операндов директивыmodel
- •13.6 Передача данных остальных типовPascal
- •13.7 Возврат значения в программу наPascal
- •13.8 КомандыEnter иLeave
- •13.9 Итоги
- •Листинг 1.2. Ассемблерное представление.
- •Тема 16. Рекомдации начинающему программисту
- •Тема 17. Контрольная работа
- •Список литературы
- •Приложение 1 Инструкция по работе с программой Turbo Debugger.
- •Приложение 2 Практическая работа на пк
- •Приложение 3 ключи командной строкиtasmиtlink
1.4. Преобразование строки ascii-кодов в двоичное и шестнадцатеричное число
В табл.1.2 показаны еще раз ASCII-коды десятичных цифр от 0 до 9.
Таблица 1.2. ASCII-коды десятичных цифр.
-
ASCII-код
30h
31h
32h
33h
34h
35h
36h
37h
38h
39h
Десятичная цифра
0
1
2
3
4
5
6
7
8
9
Как видно из табл.1.2, цифры от 0 до 9 находятся в интервале от 30h до 39h. Отрицательные числа можно получить простым добавлением ASCII-кода знака «-»), равного 2Dh, как следует из табл.1.1.
1.5. Применение систем счисления в эвм
Итак, b - СС – это «внутренняя» СС ЭВМ, т.к. запоминающие элементы ЭВМ (в микропроцессоре, памяти, портах) могут хранить и передавать по линиям связи только два значения электрического сигнала, которые и называются логическим нулем и логической единицей.
H - СС используется для отображения, например на мониторе, содержимого запоминающих элементов ЭВМ вместо двоичной СС, т.к. h-СС. значительно более компактна (сравним например число 255 в b-СС и h-СС соответственно: 11111111b и FFh) и легко преобразуется в b-СС. Но при вводе информации с устройств ввода (например, с клавиатуры) и выводе (например на монитор), используют так называемую символьную систему представления информации для ПК - это система кодирования ASCII.
При программировании часто возникает задача перевода чисел между двоичной, шестнадцатеричной, десятичной CC и ASCII, т.к.
пользователь умеет выполнять арифметические операции в десятичной CC;
ЭВМ выполняет математические операции в двоичной CC;
результаты выполняемых операций должны быть переведены из двоичной CC в коды ASCII для отображения на экране, также как и коды нажатых клавиш для обработки в ПК часто требуют перевода в двоичную CC;
пользователь-профессионал может получить информацию на экране о состоянии аппаратуры (об адресах и содержимом регистров микропроцессора, портов, памяти) в шестнадцатеричных кодах.
1.6. Контрольные вопросы и задания
1. Какое из тождеств верно:
1)86 = 1110110b; 2) 5Ah = 86; 3) ABh = 10101011b; 4) ABh = 1010110b
2. Какая запись числа верна:
1)26 в коде ASCII = 0011 0010 0011 0110; 2) 26 = 1Bh; 3) 1Ah = 11011b
3. Какова запись числа 125 в h-СС:
1) 1111101b 2) 5Ah 3) 80h 4) 1011101b 5) 7Dh
4. Какова запись числа 110010b в десятичной СС:
1)1111101b 2) 50h 3) 50 4) 70 5) 500
5. Какова запись числа 25 в кодах ASCII:
1) 0011 0010b 0011 0101b; 2) 1111101b; 3) 5Ah; 4) 0001 0010b 0001 0101b
6. Какое из тождеств верно :
1) 255 = 11111111b; 2) 51h = 112; 3) ACh = 10101111b; 4) BBh = 11010110b
7. Какая запись числа верна :
1) 26 в коде ASCII = 32h 36h; 2) 26 = 1Bh; 3) 1Ah = 11011b
8. Какова запись числа 127 в шестнадцатеричной СС?:
1) 11111011b 2) BAh 3) 7Eh 4) 10011101b 5) 7Fh
9. Какова запись числа 111101b в десятичной СС?:
1) 1111101b 2) 5Fh 3) 55 4) 61 5) 501
10. Найти по табл.1.1 и выписать h-коды ASCII, а затем перевести в h- и b-коды следующие числа:
1)-12; 2)-32; 3)+35; 4)-127; 5)+12
Тема 2. Представление данных на языке ассемблера и их хранение в памяти пк
2.1. Биты, байты и слова
Минимальной единицей информации в ПК является бит. Бит-это количество информации, содержащееся в одном двоичном разряде. Упрощенно битом называют двоичный разряд. Группа из восьми битов представляет собой байт. Восемь битов обеспечивают основу для двоичной арифметики и для представления символов. Байт может принимать значение от 00000000b = 0, до 11111111b = 255. Структура, состоящая из 2-х последовательно размещенных байт, называется словом и имеет разрядность 16 бит. Значения слова находятся в диапазоне от 0 до 65535. По аналогии 4-х байтовая структура называется двойным словом и имеет разрядность 32 бита.
На языке АССЕМБЛЕРА (далее ASM) эти типы данных определяются программистом при написании исходного текста программы с помощью определенных директив (псевдооператоров). Директивы имеют одинаковый формат и состоят из трех частей (полей). Первая - имя переменной - имя ячейки памяти, присваиваеваемое программистом, вторая - мнемокоды DB, DW или DD - определяют размер данных, а третья указывает само значение (константу).
1) [имя_переменной] DB [значение][, значение] – определяет переменную размером 1 байт и записывает ее значение в память ПК;
2) [имя_переменной] DW [значение][, значение] –определяет переменную размером 2 байта – слово и записывает ее значение в память ПК;
3) [имя_переменной] DD [значение][, значение] – определяет переменную размером 4 байта – двойное слово и записывает ее значение в память ПК;
Например:
var DB 31h; - определяет переменную с именем var размером в 1 байт и записывает в нее значение 31h;
const DW 1000;- определяет переменную с именем const размером в 2 байта (слово) и записывает в нее значение 1000;
Символ «?» только резервирует место в памяти ПК без записи в него каких либо данных.
Например:
abc DB 1,5,? ;определяет массив из трех байт (причем «abc» – имя первого из трех байт) и записывает в него два значения: 1 и 5 соответственно, оставляя последний байт пустым для какой-то последующей записи.
ВНИМАНИЕ! Необходимо проверять, чтобы размер переменной не был меньше чем размер записываемого в нее числа: err DB 300; - ошибка т.к. байт не может принимать значения больше чем 255.
2.2. ASCII код
На языке ASM для определения переменной в виде символа в коде ASCII и записи ее значения только в формате байта используется уже описанный ранее псевдооператор DB, но переменная или строка (массив) должны быть заключен в кавычки. Например:
symb DB 'A'; – определяет переменную с именем symb размером в 1 байт и записывает в память код ASCII символа A.
str DB 'Привет 2001 году!' - определяет переменную с именем str и записывает в память последовательность символов в форме: Привет 2001 году!
Итак, программы на языке ASM позволяют использовать в виде выражения любые числа, но необходимо указывать в какой системе счисления они введены:
числа в десятичной СС – последовательность символов от 0 до 9, которая заканчивается буквой d или просто без буквы;
числа в двоичной СС – последовательность символов 0 или 1, которая заканчивается буквой b;
числа в шестнадцатеричной СС – последовательность символов от 0 до 9 и букв от A до F, которая заканчивается буквой h, а если число начинается с символа A,B,C,D,E,F, то в последовательности им предшествует 0. Наличие этого нуля позволяет указать транслятору, что вводится число, а не имя (сравним: 0ABh – число, а ABh – имя);
символьная последовательность – строка различных символов в кодах ASCII (символы, буквы, цифры), заключенных в кавычки или апострофы, например: mas DB 'АССЕМБЛЕРУ ПРИВЕТ!'