
Int 21h ;кодом возврата 0 прерывания 21h
code ends ;объявление конца сегмента кода
end begin ;конец программы
Программа включает два сегмента: сегмент данных с именем data и сегмент кода с именем code. Сегмент — это область памяти, адрес начала которой определяет специальный регистр — сегментный регистр. Имена и количество сегментов могут быть любыми с определенными ограничениями. Сегментных регистров бывает несколько, каждый из них указывает на свой сегмент.
Для компиляция программы можно использовать любой ассемблер, например, TASM (Turbo Assembler) компании Borland. Имя файла ассемблера — tasm.exe.
Командная строка для компиляции (табл.):
tasm sum
В результате будет создан файл с объектным кодом sum.obj.
Компоновка:
tlink sum
В результате будет создан исполняемый файл с объектным кодом sum.exe. Если его запустить, то никакого видимого эффекта не будет. Программа никак не взаимодействует с внешними устройствами, ничего не вводит и ничего не выводит. Исходные данные читаются процессором из памяти, результат также помещается в память. Исследовать работу программы можно с помощью отладчика:
td sum
Табл. Компиляция и компоновка программы
№ |
Командная строка |
Преобразование |
1 |
tasm filename |
filename.asm -> filename.obj |
2 |
tlink filename |
filename.obj -> filename.exe |
Расширения имен файлов писать не обязательно, если они стандартные. В этом случае компилятор и компоновщик правильно найдут нужные им файлы.
Листинг программы
Если при компиляции задать параметр "l" (listing):
tasm /l sum
, то кроме файла с объектным кодом sum.obj будет создан файл с листингом sum.lst:
1 ;sum.asm – программа, вычисляющая S=A+B
2 0000 data segment
3 0000 0001 a dw 01h
4 0002 0002 b dw 02h
5 0004 ???? s dw ?
6 0006 data ends
7 0000 code segment
8 assume ds:data
9 0000 BA 0000s begin: mov dx, data
10 0003 8E DA mov ds, dx
11 0005 A1 0000r mov ax, a
12 0008 03 06 0002r add ax, b
13 000C A3 0004r mov s, ax
14 000F B8 4C00 mov ax, 4c00h
15 0012 CD 21 int 21h
16 0014 code ends
17 end begin
Листинг — это таблица, содержащая четыре столбца:
-
Номер строки.
-
Адрес внутри сегмента, т. е. от его начала (смещение).
-
Содержимое памяти по данным адресам. В сегменте данных — это значения переменных, в сегменте кода — это машинные коды команд.
-
Ассемблерный код.
Комментарии в листинге также сохраняются, просто здесь они для экономии места опущены.
Из листинга видно, что командам процессора соответствуют только строки 9-15. Остальные строки соответствуют т. н. директивам ассемблера.
В любом деле фигурирует информация различных уровней. Есть информация непосредственно о задаче, а есть информация об информации — метаинформация. Это, например, различные пояснения, указания и т. п. В исходном коде на языке ассемблера присутствует информация двух типов:
-
команды — информация для процессора;
-
директивы — информация для самого ассемблера, как скомпилировать программу: как перевести команды на машинный язык и как разместить данные.
Здесь есть аналогия с выделением типов команд. Команды передачи данных, передачи управления и арифметическо-логические команды несут информацию о задаче, а команды машинного управления — об условиях ее выполнения, т.е. тоже представляют собой метаинформацию.
В рассматриваемой программе имеются следующие директивы:
-
segment — директива объявления начала сегмента;
-
dw (define word) — директива определения данных (выделения и инициализации области памяти) размером 16 бит;
-
ends (end segment) — директива объявления конца сегмента;
-
assume — директива назначения сегменту сегментного регистра;
-
end — директива указания конца программы.
Есть также следующие директивы определения данных:
-
db (define byte) — директива определения области памяти в 8 бит;
-
dd (define double word) — директива определения области памяти в 32 бита.
Строки 3-5 содержат директивы определения переменных A, B и S. В совокупности строки 3-5 и 9-15 содержат информацию для процессора — программу, включающую команды и данные. Они непосредственно отображаются на память компьютера.
Общая структура ЭВМ
Схема общей структуры ЭВМ
Рассмотрим схему общей структуры ЭВМ, более детальную по сравнению с рассмотренной ранее схемой архитектуры фон Неймана (рис.).
Рис. Схема общей структуры ЭВМ
Здесь:
-
ЦП — центральный процессор (СРU, Central Processing Unit);
-
ШФ — шинный формирователь (в самом широком смысле этого слова);
-
ЗУ — запоминающее устройство (M, Memory);
-
ОЗУ — оперативное запоминающее устройство (RAM, Random Access Memory);
-
ПЗУ — постоянное запоминающее устройство (ROM, Read Only Memory);
-
В/В — ввод/вывод (I/O, Input/Output);
-
ВУ — внешнее устройство (устройство ввода-вывода), например, клавиатура, дисплей, датчики, исполнительные механизмы и т.п.;
-
ША — шина адреса (AB, Address Bus);
-
ШД — шина данных (DB, Data Bus);
-
ШУ — шина управления (CB, Control Bus);
-
ЧТЗУ (ВУ) — чтение ЗУ (ВУ) (R, RD — Read, RC — Receive);
-
ЗПЗУ (ВУ) — запись ЗУ (ВУ) (W, WR — Write, TR — Transmit);
-
ВМ — выбор микросхемы (CS, Crystal Select).
Прим. В скобках указаны английские варианты названий устройств и сигналов ЭВМ.
Элементы ЭВМ связаны между собой посредством сигнальных линий, которые объединяются в шины. В ЭВМ выделяется три типа шин:
-
шина данных;
-
шина адреса;
-
шина управления.
Ширина шины данных определяет максимальный размер операндов, которыми процессор может обмениваться с памятью или устройствами ввода-вывода за один раз, если они, конечно, не накладывают дополнительные ограничения.
Ширина шины адреса определяет размер адресного пространства:
AS = 2ABW,
где AS (Address Space) — размер адресного пространства;
ABW (Address Bus Wide) — ширина адресной шины.
Порты и контроллеры ввода-вывода. Дешифраторы. Ресурсы
На данной схеме помимо основных устройств показаны интерфейсные (порт ввода-вывода) и дополнительные устройства (дешифратор) ЭВМ.
Необходимо отметить, что периферийные устройства связаны с системой посредством портов ввода-вывода, которые по сути представляют собой те же регистры или их совокупности.
Многие периферийные устройства работают под управлением специального устройства — контроллера (адаптера). Например, выводом информации на монитор управляет видеоадаптер. Вводом информации с клавиатуры управляет контроллер клавиатуры. В таких случаях порты ввода-вывода находятся в соответствующих контроллерах.
Контроллеры устройств ввода-вывода помимо регистров могут иметь в своем составе память, которая может занимать часть адресного пространства процессора. Регистры устройств ввода-вывода также могут отображаться на основное адресное пространство.
Схема на рис.2 является общей. На ней не показаны контроллеры устройств ввода-вывода. На ней также не показаны и общие типы контроллеров, которые могут управлять работой нескольких устройств ввода-вывода: контроллер прерываний и контроллер прямого доступа к памяти. Если эти контроллеры используются, то они назначают связанным с ними устройствам ввода-вывода номера прерываний и каналов прямого доступа к памяти.
Дешифратор (DC, Decoder) служит для определения (выбора) того устройства, к которому обращается процессор для приема или передачи информации. Номера портов и диапазоны адресов памяти устанавливаются именно с помощью дешифраторов.
Номера портов, диапазоны адресного пространства, номера прерываний и каналов прямого доступа в совокупности называются ресурсами, выделяемыми в ЭВМ различным устройствам.
Направления передачи информации в ЭВМ
Точкой отсчета для определения направления передачи информации в ЭВМ является процессор. Если информация движется к процессору, то это прием (чтение, ввод). Если информация движется от процессора, то это передача (запись, вывод) (табл.).
Табл. Направления передачи информации в ЭВМ
Направление |
Память |
УВВ |
От процессора — передача (transmission) |
Запись (writing) |
Вывод (output) |
К процессору — прием (receiving) |
Чтение (reading) |
Ввод (input) |