- •Щемелева т.К.
- •Архитектура и программирование реального режима микропроцессоров фирмы 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
11.2.Создание циклической программы.
Задание: написать программу для обнуления массива байт из 10 элементов.
11.2.1.Составление текста программы.
В любом текстовом редакторе создадим текстовый asm-файл программы (вполне подойдет для этой цели встроенный редактор Norton Commander, вызываемый по клавише F4).
1) Определим сегмент стека.
_STACK SEGMENT PARA STACK 'STACK' ; сегмент стека
DB 32 DUP ('ST') ; стек размером 64 байта (32 повторения 2-х
; символов ST по байту каждый)
_STACK ENDS ; закроем описание сегмента стека _STACK
2) Определим сегмент данных. В сегменте данных должны содержаться все данные, используемые в программе.
_DATA SEGMENT ; сегмент данных
MASS DB 10 DUP (9) ; массив, заполненный 10 константами 9
_DATA ENDS ; закроем описание сегмента данных _DATA
3) Определим сегмент кода. В сегменте кода содержатся сами команды программы.
;запишем описание сегмента кода _CODE
_CODE SEGMENT PUBLIC 'CODE' ; сегмент кода
ASSUME SS:_STACK, CS:_CODE, DS:_DATA ; ассоциируем имена
;сегментных регистров с сегментами нашей программы
OUR_PROG PROC FAR ; описываем нашу программу как процедуру
; OUR_PROG
;помещаем в стек такие начальные значения, чтобы программа
; могла по завершению возвратить управление вызвавшей ее
; программе (например ОС)
PUSH DS ; поместить в регистр номер блока адреса возврата
MOV AX,0 ; обнулить регистр AX
PUSH AX ; поместить в стек нулевое смещение адреса возврата
; инициализируем регистр сегмента данных
MOV AX,_DATA ; загрузка в DS указателя сегмента данных
MOV DS,AX ; через регистр AX
MOV CX,10 ; регистр CX служит счетчиком цикла для команды LOOP
; загрузим в регистр BX смещение в сегменте данных, указывающее
; на первый элемент массива MASS
MOV BX,OFFSET MASS ; загрузка указателей массива MASS в BX
MOV AL,0 ; обнулим регистр AL
; здесь начало цикла:
LP: MOV [BX],AL ; обнуление элемента массива, хранимого по
; указанному адресу, хранимому в регистре BX
INC BX ; увеличение указателя массива на 1
LOOP LP ; команда цикла
RET ; команда возврата из процедуры, она извлекает
; данные, которые мы положили в стек в начале программы
OUR_PROG ENDP ; закрываем описание процедуры OUR_PROG
_CODE ENDS ; закрываем описание сегмента кода _CODE
END OUR_PROG ; закрываем описание программы
11.2.2.Трансляция.
Производится транслятором MASM.EXE или TASM.EXE.
В случае отсутствия ошибок будет создан объектный файл *.obj, который будет являться источником для дальнейшей работы.
11.2.3.Создание исполняемого файла
Производится программами LINK.EXE или TLINK.EXE.
11.2.4.Отладка программы в turbo debugger’е
Для отладки программы ее необходимо загрузить в отладчик TURBO DEBUGGER, где в пошаговом режиме можно проследить работу программы.
11.3. Контрольные вопросы и задания
1.Выберите правильный фрагмент программы сравнения числа без знака 5 с операндом в регистре AX и переход в случае равенства к метке EQAL. Сравнение происходит только по флагу Z:
1) CMP AX, 5 2) CMP 5,AX 3) CMP AX, 5 4) CMP 5,A
JZ EQAL JZ EQAL JNZ EQAL JP EQAL
2.Выберите правильный фрагмент программы с пустым циклом, который выполняется 10 раз (используется в программах как задержка):
1) A: NOP 2) A: MOV CX, 10 3) MOV CX, 10
LOOP A NOP A: NOP LOOP A LOOP A
3.Составте команды для перехода к метке М1 при условии, что содержимое регистра DH больше чем +6.
4.При каком условии происходит переход на метку в команде LOOPZ?
1) Если CX не равен 0, а флажок ZF равен 0;
2) Если CX не равен 1, а флажок ZF равен 1;
3) Если CX не равен 0, а флажок ZF равен 1;
4) Если CX не равен 1, а флажок ZF равен 1;
5.Выберите правильный фрагмент программы с циклом, который выполняется до тех пор, пока переменная VAR не будет равна 0, при этом счетчик CX не должен влиять на цикл:
1) A: DEC VAR 2) A: MOV CX, 10 3) MOV CX, 10
CMP VAR, 0 DEC VAR A: DEC VAR
LOOP A CMP VAR, 0 CMP VAR, 0
LOOPNZ A LOOPNZ A
6.Выберите правильный фрагмент программы сравнения беззнакового числа 5 с операндом в регистре AX и переход в случае неравенства к метке N_EQAL. Сравнение происходит только по флагу Z:
1) CMP AX, 5 2) CMP 5,AX 3) CMP AX, 5 4) CMP 5,AX
JZ N_EQAL JZ N_EQAL JNZ N_EQAL JP N_EQAL
7.Выберите правильный фрагмент программы проверки на наличие переноса из старшего разряда при выполнении сложения. Если перенос был, то происходит переход на метку ERROR:
1) ADD AX, BX 2) ADD AX, BX 3) ADD AX, BX 4) ADD AX, BX
JP ERROR JA ERROR JNA ERROR JC ERROR
8. Составьте команды для перехода к метке М2 при условии, что содержимое регистра СH меньше константы со знаком -6.
11.Выберите правильный фрагмент программы проверки на наличие переноса из старшего разряда при выполнении сложения. Если перенос не был, то происходит переход на метку ERROR:
1) ADD AX, BX 2) ADD AX, BX 3) ADD AX, BX 4) ADD AX, BX
JNC ERROR JA ERROR JNA ERROR JC ERROR
12.При каком условии происходит переход на метку в команде LOOPNE?
1) Если CX не равен 0, а флажок ZF равен 1;
2) Если CX не равен 1, а флажок ZF равен 0;
3) Если CX не равен 0, а флажок ZF равен 0;
4) Если CX не равен 1, а флажок ZF равен 1;