- •Щемелева т.К.
- •Архитектура и программирование реального режима микропроцессоров фирмы 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
Приложение 2 Практическая работа на пк
Здесь рассматривается практическая работа на ПК начиная с создания программы и заканчивая её отладкой в Turbo Debugger.
Например, пусть задание выглядит следующим образом: Написать программу, сравнивающую элементы двух массивов, каждый из 6 элементов. Если соответствующие элементы массивов равны, то вместо них в третий массив записать 0, если не равны, то поменять их местами.
В соответствии с заданием в любом текстовом редакторе, например, в Блокноте, создаём текст программы.
; Program Example, file_name prog1.asm
das segment
mas1 db 7,?,7 dup(?),'$'
mas2 db 7,?,7 dup(?),'$'
string db 10,13,'$'
string1 db 'Input 6 member of mas1',10,13,'$'
string2 db 'Input 6 member of mas2',10,13,'$'
das ends
sta segment stack
db 20 dup(?)
sta ends
cod segment
assume cs:cod,ds:das,ss:sta
my proc
;инициализация регистра ds
push ds
mov ax,0
push ax
mov ax,das
mov ds,ax
;ввод строки чисел
lea dx,string1
mov ah,09h
int 21h
lea dx,mas1
mov ah,0ah
int 21h
lea dx,string
mov ah,09h
int 21h
lea dx,string2
mov ah,09h
int 21h
lea dx,mas2
mov ah,0ah
int 21h
lea dx,string
mov ah,09h
int 21h
;ввод строк закончен
mov cx,6
m1: mov bx,cx
mov al,mas1[bx+1]
cmp al,mas2[bx+1]
jz m2
xchg mas2[bx+1],al
mov mas1[bx+1],al
jmp m3
m2: mov mas1[bx+1],'0'
mov mas2[bx+1],'0'
m3: loop m1
lea dx,mas1[2]
mov ah,09h
int 21h
lea dx,string
mov ah,09h
int 21h
mov dx,0
lea dx,mas2[2]
mov ah,09h
int 21h
mov ax,4c00h ;завершение работы программы
int 21h
my endp
cod ends
end my
Текст программы может содержать, если необходимо, пояснения, написанные в соответствии с правилами языка ASSEMBLER, т.е. пояснению предшествует символ ";". Далее написанную программу необходимо откомпилировать, что и делаем с помощью программы Tasm. Формат вызова следующий:
Tasm.exe prog1.asm
Если всё сделано верно и программа не содержит ошибок, то после окончания работы программы tasm получим объектный файл prog1.obj . Если текст программы содержал ошибки, то после завершения работы программы они будут указаны в окне с указанием строк, содержащих ошибки. После устранения ошибок действия по получению объектного файла Prog1.obj необходимо повторить. Далее для получения исполняемого файла Prog1.exe необходимо воспользоваться программой Link.exe, преобразующей нашу программу в двоичные коды, понятные микропроцессору. Формат вызова следующий:
Link.exe prog1.obj
После окончания работы программы Link получим исполняемый файл prog1.exe. Для отладки нашей программы запустим её в Turbo Debugger. Для этого в командной строке набираем:
Td.exe prog1.exe
В результате получаем на экране следующее изображение:
Ё File Edit View Run Breakpoints Data Options Window Help READY
+-[_]-CPU 80486-----------------------------------ss:0054 = 00--------1-[][]-+
¦ cs:0100804B5402 or byte ptr [bp+di+54],02 ‑ ax 0000 ¦c=0¦
¦ cs:0104 5A pop dx _ bx 0000 ¦z=0¦
¦ cs:0105 A012D5 mov al,[D512] _ cx 0000 ¦s=0¦
¦ cs:0108 0096A804 add [bp+04A8],dl _ dx 0000 ¦o=0¦
¦ cs:010C B540 mov ch,40 _ si 0000 ¦p=0¦
¦ cs:010E 25AA01 and ax,01AA _ di 0000 ¦a=0¦
¦ cs:0111 2D5009 sub ax,0950 _ bp 0000 ¦i=1¦
¦ cs:0114 6A80 push FF80 _ sp 0080 ¦d=0¦
¦ cs:0116 4B dec bx _ ds 5FD3 ¦ ¦
¦ cs:0117 54 push sp _ es 5FD3 ¦ ¦
¦ cs:0118 025AA0 add bl,[bp+si-60] _ ss 5FD3 ¦ ¦
¦ cs:011B 12D5 adc dl,ch _ cs 5FD3 ¦ ¦
¦ cs:011D 0096A804 add [bp+04A8],dl _ ip 0100 ¦ ¦
¦ cs:0121 B540 mov ch,40 _ ¦ ¦
¦ cs:0123 25AA01 and ax,01AA ¦ ¦
¦___________________________________________________________+----------------¦
¦ ds:0000 CD 20 00 A0 00 9A F0 FE - а ЪЁ_ ¦ ss:0082 0000 ¦
¦ ds:0008 1D F0 72 1E C7 FD CC 0A Ёr‑¦¤¦ ¦ ss:00800D00 ¦
¦ ds:0010 A2 18 80 02 24 27 92 18 вА$'Т ¦ ss:007E 0000 ¦
¦ ds:0018 01 01 01 00 02 07 08 FF _¦ ss:007C 0000 ¦
¦ ds:0020 FF FF FF FF FF FF FF FF ________ ¦ ss:007A 0000 ¦
+------------------------------------------------------------------------------+
F1-Help F2-Bkpt F3-Mod F4-Here F5-Zoom F6-Next F7-Trace F8-Step F9-Run F10-Menu
По мере исполнения программы по шагам (клавиша F7), содержимое верхнего окна, содержащего коды нашей программы, будет изменяться. После приглашения программы ввести элементы массивов, следует ввести эти элементы в таком порядке:
Input 6 member of mas1
123456 ; и нажать клавишу <Enter>
Input 6 member of mas2
123356; и нажать клавишу <Enter>
После ввода каждого элемента массива содержимое DS:0000 будет изменяться. Для просмотра этих изменений достаточно нажать комбинацию клавиш CTRL+G, и в появившемся окне указать в GOTO необходимый адрес: DS:0000.
Выполняя программу далее по шагам, можно пронаблюдать изменение флагов, содержимого регистров и т.д. В конце выполнения программы на экране получим результат:
000300
000400
Выход из программы td осуществляется комбинацией клавиш Alt+X.