ЛАБОРАТОРНАЯ РАБОТА N 1
Тема 1. Архитектура центрального процессора.
Тема 2. Типы данных в языке Ассемблера.
Тема 3. Использование средств создания и отладки
программ на языке Ассемблера.
АРХИТЕКТУРА ЦЕНТРАЛЬНОГО ПРОЦЕССОРА ПЭВМ
Основными аппаратными компонентами персональной ЭВМ являют-
ся:
— системный блок;
— клавиатура;
— монитор с дисплеем;
— накопители на магнитных дисках;
— принтер.
Кроме того, компьютер может быть укомплектован средствами
асинхронной связи, графопостроителями, сканерами и т.п.
В системный блок входят:
— системная плата;
— блок питания;
— гнезда расширения для дополнительных плат.
Главным компонентом персонального компьютера ПК является
центральный микропроцессор ЦП, который выполняет все операции
обработки команд и данных. Центральный процессор ПК IBM и сов-
местимых с ними может быть реализован на микросхемах фирмы
Intel 8080, 8086, 80286 и т.д.
Центральный процессор может быть разделен на два логичес-
ких блока (см. рис.1.1):
— блок исполнения EU;
— блок интерфейса шин BIU.
Интерфейс(interface) — это совокупность средств, обеспечи-
вающих сопряжение устройств и программных модулей как на
физическом, так и на логическом уровнях. Иногда этот тер- мин
употребляют так же и для характеристики средств досту- па
пользователя к вычислительной системе — «интерфейс поль-
зователя». Интерфейс состоит из нескольких контроллеров вво-
да/вывода, каждый из которых может содержать в себе одну или
более микросхем СБИС (Chips).
EU:Execution Unit ? BIU:Bus Interface Unit
Системная шина — это совокупность проводников, соединяющих
(bus) ЦП с памятью и устройствами ввода/вывода.
Проводники шины объединены в три группы:
— линии данных;
— линии адреса;
— линии управления.
Взаимодействие между интерфейсом ввода/вывода и шиной
осуществляется через регистры, называемые портами ввода/вывода.
Назначение блока EU — исполнение команд, а блок BIU выпол-
няет передачу команд и данных в EU. В состав EU входят арифме-
тико-логическое устройство ALU, устройство управления CU и де-
сять регистров. Устройства блока EU обеспечивают обработку
команд, выполнение арифметических и логических операций.
Три части блока BIU — устройство управления шинами, блок
очереди команд и регистры сегментов — предназначены для выпол-
нения следующих функций:
— управление обменом данными с EU, памятью и внешними уст-
ройствами ввода/вывода;
— адресация 1 Мбайт памяти;
— выборка команд. Выборка команд осуществляется с помощью
блока очереди команд Queue (шесть байтов), который поз-
воляет выбирать команды с упреждением.
ПК имеет два вида внутренней памяти:
— постоянное запоминающее устройство ПЗУ (ROM — read only
memory);
— оперативное запоминающее устройство ОЗУ (RAM — random
acces memory).
Одна из основных задач ПЗУ обеспечить процедуру старта. В
ПЗУ хранятся базовая система ввода/вывода BIOS, интерпретатор
BASIC и некоторые служебные программы и таблицы, например, на-
чальный загрузчик, программы тестирования и т.п.
ОЗУ используется для хранения программы и необходимых ей
областей данных. Характерным для ПК является тот факт, что при
выключении электропитания содержимое ОЗУ утрачивается.
Наименьшей единицей данных, с которой работает компьютер,
является бит (bit). Значением бита может быть либо ноль, либо
единица. Группа из восьми битов называется байтом (Byte) и
представляет собой наименьшую адресуемую единицу — ячейку.
Биты в байте нумеруют справа налево цифрами 0…7.
?????????????????????????????????
BYTE ? 7 ? 6 ? 5 ? 4 ? 3 ? 2 ? 1 ? 0 ?
????????????????????????????????? .
Каждому из байтов присвоен уникальный адрес памяти, начи-
ная с нулевого (самый младший адрес).
Двухбайтовое поле образует шестнадцатиразрядное машинное
слово (Word), биты в котором нумеруются от 0 до 15 справа нале-
во.
WORD
?????????????????????????????????????????????????????????????????
?15 ?14 ?13 ? 12?11 ?10 ? 9 ? 8 ? 7 ? 6 ? 5 ? 4 ? 3 ? 2 ? 1 ? 0 ?
?????????????????????????????????????????????????????????????????
Байт с меньшим адресом считается младшим.
В ПК принята двоичная система представления данных. Сим-
вольная информация кодируется в соответствии с кодом ASCII
(Американский стандартный код для обмена информацией). Некото-
рые из его 256 символов заменяются на символы русского алфавита
(кириллица). Числовые данные кодируются в соответствии с двоич-
ной арифметикой. Отрицательные числа представляются в дополни-
тельном коде. Для удобства представления данных используется
шестнадцатиричная система счисления.
Принято двоичные числа сопровождать латинской буквой B или
b, например, 101B, а шестнадцатиричные — буквой H или h на кон-
це. Если число начинается с буквы, то обязательной является
постановка нуля впереди, например, 0BA8H.
Регистры
Процессоры 8086/8088 имеют 14 шестнадцатиразрядных регист-
ров, которые используются для управления исполнением команд,
адресации и выполнения арифметических операций. Регистр, содер-
жащий одно слово, адресуется по имени.
Регистры сегмента CS, DS, SS и ES
Регистр CS — содержит начальный адрес сегмента кода. Этот
адрес, суммированный со значением смещения в указателе команд
(IP), определяет очередную выполняемую команду.
Регистр DS — содержит начальный адрес сегмента данных. В
простейшем случае этот адрес плюс смещение, указанное в инс-
трукции, задает адрес в сегменте данных.
Регистр SS — содержит начальный адрес регистра стека.
Регистр ES — используется для адресации памяти в строковых
операциях. И этом плане он похож на регистр DI. Регистр ES ини-
циализируется программой на ассемблере.
Регистры общего назначения AX, BX, CX и DX
Регистры общего назначения являются основными рабочими ре-
гистрами ассемблерных программ. Их отличает то, что к ним можно
адресоваться одним словом или однобайтовым кодом. Левый байт
считается старшим, а правый — младшим.
Регистр AX — первичный аккумулятор, используется во всех
операциях ввода/вывода, в некоторых операциях со строками и в
некоторых арифметических операциях.
Регистр BX — базовый регистр, единственный из регистров
общего назначения, используемый в индексной адресации. Кроме
того, регистр BX используется при вычислениях.
Регистр DX — регистр данных. Используется в некоторых опе-
рациях ввода/вывода, в операциях умножения и деления больших
чисел совместно с регистром AX.
Любой из регистров общего назначения может быть использо-
ван для суммирования или вычитания 8- или 16-разрядных величин.
Регистры указателя SP и BP
Регистры указателя используются для обращения к данным в
сегменте стека.
Регистр SP — указатель стека. Используется для временного
хранения адресов и иногда данных. Адресует стек аналогично ре-
гистру SS.
Регистр BP — указатель базы. Обеспечивает ссылки на пара-
метры (данные и адреса, передаваемые через стек).
Индексные регистры SI и DI
Индексные регистры используются для адресации, а также для
выполнения операций сложения и вычитания.
Регистр SI — индекс источника. Используется в некоторых
операциях со строками или символами, аналогичен регистру DS.
Регистр DI — индекс приемника. Используется в тех же опе-
рациях, что и регистр SI. Аналогичен регистру ES.
Регистр указателя команд IP
Регистр IP используется для выборки очередной команды
программы с целью ее исполнения.
Сегменты
Сегментом называется область памяти, которая начинается на
границе параграфа, то есть в любой точке, адрес которой кратен 16
(восемь младших битов равны нулю).
Существуют три основных типа сегментов:
— сегмент кода — содержит машинные команды, адресуется ре-
гистром CS;
— сегмент данных — содержит данные, то есть константы и
рабочие области, необходимые программе.
Адресуется регистром DS;
— сегмент стека — содержит адреса возврата в точку вызова
подпрограмм. Адресуется регистром SS.
Каждый из упомянутых регистров содержит адрес начала сегмен-
та (базовый адрес). В программе все адреса записаны относительно
начала сегмента, и они определяются как смещение (offset) от на-
чала сегмента. Двухбайтовое смещение (одно слово) может прини-
мать значение от 0000 до 0FFFFh. Для того, чтобы выполнить обра-
щение по любому адресу процессор выполняет суммирование адреса,
записанного в регистре сегмента, со смещением. При этом, содержи-
мое регистра сдвигается на четыре двоичных разряда влево. Ре-
зультирующий адрес занимает 20 позиций, что и позволяет адресо-
вать 1 Мбайт памяти.
Пример.
Содержимое DS 045F
+
Смещение 0032
——
Исполнительный 04622
адрес (EA)
Примечание: Адреса шестнадцатиричные.
ОПРЕДЕЛЕНИЕ ДАННЫХ В ПРОГРАММЕ НА АССЕМБЛЕРЕ.
1. Основной формат определения данных:
[имя] Dn выражение
Для определения элементов данных в программе имеются следую-
щие директивы:
DB — байт, DW — слово, DD — двойное слово, DQ — учетверен-
ное слово, DT — десять байт. Примеры:
DAN1 DB 25 — переменная DAN1 длинной 1 байт содержит константу 25;
DAN2 DB ? — переменная DAN2 длинной 1 байт содержит неопределенное
значение;
DAN3 DB 11,12,13,14,15 — последовательность байтов. DAN3 указывает на
первый байт.
2. [имя] Dn число повторений DUP (выражение)
DAN4 DW 10 DUP(?) — десять неопределенных слов;
DAN5 DB 5 DUP(14) — пять байт, содержащих число 14.
Символьные строки определяются как цепочки байтов и отме-
чаются кавычками или одинарными aпострофами.
STR1 DB «Это символьная строка»
СОЗДАНИЕ ПРОГРАММЫ НА ЯЗЫКЕ АССЕМБЛЕРА.
Для создания программы на языке Ассемблера необходимо нали-
чие любого текстового редактора, а также программы компилятора
TASM.EXE и программы для компановки объектного кода TLINK.EXE.
Процесс создания программы на языке Ассемблера можно разде-
лить на три этапа:
— ввод программы;
— ассемблирование;
— компановка;
Для создания программы на языке Ассемблера необходим любой
текстовый редактор. Для программ на языке Ассемблера принято рас-
ширение .ASM.
Этап ассемблирования включает в себя трансляцию исходного
кода в машинный объектный объектный код и генерацию OBJ-модуля.
Формат OBJ-модуля уже более приближен к исполнительной форме, но
еще не готов к выполнению. Ассемблирование производится при помо-
щи программы TASM.EXE.
Этап компоновки включает преобразование OBJ-модуля в COM ли-
бо EXE (исполнимый) модуль, содержащий машинный код. Компановка
производится при помощи программы TLINK.EXE.
ВЫПОЛНЕНИЕ РАБОТЫ:
1. ВВОД И АССЕМБЛИРОВАНИЕ ПРОГРАММЫ.
1. Введите следующую программу и запишите ее на диск под
именем LAB1. ASM.
title exem1 операции пересылки и сложения
;———————————————
stacksg segment para stack ‘Stack’
dw 32 dup(?)
stacksg ends
;———————————————
datasg segment para ‘Data’
fda dw 250
fdb dw 125
fdc dw ?
datasg ends
;———————————————
codesg segment para ‘Code’
begin proc far
assume cs:codesg, ds:datasg, ss:stacksg, es:codesg
push ds
sub ax,ax
push ax
mov ax,datasg
mov ds,ax
mov ax,fda
add ax,fdb
mov fdc,ax
ret
begin endp
codesg ends
end begin
2. Оттранслируйте введенную программу, задав следующую ко-
мандную строку:
TASM LAB1.ASM
После трансляции TASM выдаст приблизительно следующее:
Turbo Assembler Version 2.5 Copyright (c) 1988, 1991 Borland International
Assembling file: lab1.asm
*Warning* lab1.asm(11) Argument needs type override
Error messages: None
Warning messages: 1
Passes: 1
Remaining memory: 431k
Если в процессе трансляции были обнаружены ошибки, TASM вы-
даст соответствующее сообщение и укажет номер строки, в которой
была обнаружена ошибка. Например:
Turbo Assembler Version 2.5 Copyright (c) 1988, 1991 Borland International
Assembling file: lab1.asm
*Warning* lab1.asm(11) Argument needs type override <—- предупреждение
**Error** lab1.asm(14) Illegal indexing mode <—— ошибка в строке 14
Error messages: 1 <—— имеется 1 ошибка
Warning messages: 1 <—— 1 предупреждение
Passes: 1 <—— 1 проход транслятора
Remaining memory: 431k
При успешной безошибочной трансляции TASM генерирует файл
LAB1.OBJ.
3. Выполните компоновку полученной программы, введя следую-
щую командную строку:
TLINK LAB1.OBJ
После компановки на диске появится файл LAB1.EXE.
4. Запустите программу LAB1.EXE на исполнение.
5. Объясните результат и алгоритм действия программы по ис-
ходному тексту.
6. Измените текст программы, так чтобы можно было получить
программу с расширением *.COM
7. Выполните компоновку полученной программы, введя следую-
щую командную строку:
TLINK LAB1.OBJ/T
Ключ /T указывает компоновщику, что необходимо сгенериро-
вать *.COM файл. При успешной компановке на диске появится файл
LAB1.COM.
Дополнительную информацию о ключах программ TASM.EXE и
TLINK.EXE можно получить, запустив соответствующую программу с
ключем /?.
2. ОТЛАДКА ПРОГРАММЫ ПРИ ПОМОЩИ ОТЛАДЧИКА Turbo Debugger.
Отладчик Turbo Debugger (далее TD) предназначен для отладки и
пошагового исполнения программ, написанных на языках Ассемблера,
Pascal, C и т.п. Мы будем использовать TD для отладки программы,
написанной на языке Ассемблера.
1. Запуск TD и подготовка к отладке.
Запуск TD осуществляется вводом в командной строке команды
TD.EXE. После запуска TD на экране появляется 5 окон: окно
дизассемблера, регистров, флагов, верхушки стека и дампа памяти.
Перемещение между окнами осуществляется нажатием клавиши <Tab>.
Управление работой TD выполняется через систему меню. Существует
3 типа меню:
1) главное меню, занимающее верхнюю строку экрана и
активизируемое в любой момент клавишей F10;
2) подменю, связанное с каждой из команд главного меню;
3) локальное меню, вызываемое нажатием Alt-F10 либо нажатием
правой кнопки мыши. Оно контекстно-чувствительно, т.е. для каждого
активного окна имеется свое локальное меню.
Для начала работы необходимо загрузить программу, которую нужно
отладить. Для загрузки программы войдите в меню (F10), выберете пункт
меню File | Open и загрузите файл LAB1.COM. После загрузки программы
ее точка входа отмечается символом ‘’.
Запишите в отчет содержимое всех регистров.
2. Трассировка программы.
Под трассировкой понимают пошаговое исполнение программы. TD
способен выполнять трассировку программы в двух режимах: режим
блочной трассировки и режим полной трассировки.
Блочная трассировка осуществляется нажатием клавиши <F8>. При
этом процедуры, вызываемые по CALL и циклы (LOOP) выполняются без
трассировки, в реальном времени.
Полная трассировка выполняет трассировку всех команд.
Трассировка выполняется с адреса, содержащегося в IP. Для
изменения этого адреса необходимо перейти в окно регистров, установить
указатель ни регистр IP и ввести новое значение адреса.
Для удобства трассировки предусмотрена установка точек прерывания
(Breakpoint). Применение точек прерывания полезно, когда часть
отлаживаемой программы необходимо выполнить в реальном времени без
трассировки. Когда программа в процессе своего исполнения встречает
точку прерывания, управление передается в TD, который переходит в
режим ожидания дальнейших действий оператора. Установка и сброс точек
прерывания осуществляется нажатием клавиши <F2>. Выполнение программы
в реальном времени осуществляется нажатием клавиши <F9>. Выполнение
программы производится с адреса, содержащегося в регистре IP.
Выполните полную трассировку программы. После выполнения каждой
команды запишите в отчет содержимое изменившихся регистров и ячеек
памяти.
ВОПРОСЫ К ЗАЩИТЕ ЛАБОРАТОРНОЙ РАБОТЫ
1. Устройство и назначение операционного устройства.
2. Устройство и назначение шинного интерфейса.
3. Сегментные регистры микропроцессора.
4. Регистры общего назначения микропроцессора.
5. Индексные регистры микропроцессора.
6. Регистры указатели микропроцессора.
7. Типы данных в языке Ассемблера.
8. Определение переменных в программе.
9. Различия между .COM и .EXE программой.
10. Этапы получения выполняемой программы.
11. Отладка программы. Работа с Turbo Debugger.
12. Просмотр в отладчике состояния регистров, ячеек памяти.
13. Трассировка программы. Установка точек прерывания.
СПИСОК РЕКОМЕНДУЕМОЙ ЛИТЕРАТУРЫ:
1. Абель П. «Язык Ассемблера для IBM PC и программирования»
М.: Высшая школа, 1992 — 447 c.
2. Джордейн Р. «Справочник программиста персональных компьютеров
типа IBM PC, XT и AT» М.: Финансы и статистика, 1992. — 544 с.
3. П.Нортон, Р.Уилтон «IBM PC и PS/2. Руководство по прог-
раммированию» М.: Радио и связь, 1994г. — 336 с.
4. Г.В.Майко «Ассемблер для IBM PC» Одесса, 1996г.
Ст. преподаватель
кафедры ПОВТ И.А.Васюткина
