Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ТСвИС / (х) архитектура устройства компьютера.ассемблер

.pdf
Скачиваний:
62
Добавлен:
28.05.2015
Размер:
6.3 Mб
Скачать

Архитектура ЭВМ и систем К.т.н., доц. каф. ИСТ Кислицын Д.И. – ННГАСУ, 2010г.

Основы Ассемблера

Организация памяти

Оперативную память можно условно представить в виде простой последовательности пронумерованных байт. Порядковый номер байта называется его

физическим адресом.

Доступ к любому байту ОЗУ осуществляется по 20-разрядной (для i8086) шине адреса. 20 разрядов шины позволяют записать адреса от 0 до 220-1 (1 Мбайт) или от 00000h до FFFFFh.

Все регистры МП 16-разрядные. Для получения 20-разрядного адреса используется

следующий механизм:

вся физическая память условно разбивается на параграфы (1 параграф = 16 байт);

память выделяется программам небольшими блоками - сегментами памяти или сегментами;

программа может состоять из любого

количества сегментов;

каждый сегмент может начинаться только с начала параграфа, т.е. адресом сегмента будет номер его первого параграфа (такой адрес уже 16-разрядный).

Архитектура ЭВМ и систем К.т.н., доц. каф. ИСТ Кислицын Д.И. – ННГАСУ, 2010г.

Основы Ассемблера

Организация памяти

Для получения физического адреса начала сегмента необходимо умножить его номер на 16. Например, сегмент 0032h имеет физический адрес 0032h x 10h = 00320h.

Для определения адреса конкретной ячейки памяти необходимо знать позицию этой ячейки относительно начала сегмента. Этот относительный адрес называют эффективным адресом или смещением. Поскольку максимальный размер сегмента ограничен 64 килобайтами, то смещение будет записываться 16-разрядным значением.

Таким образом, выполняется переход от 20-разрядного физического адреса к адресу, состоящему из двух 16-разрядных частей: адрес сегмента и смещение. Такие составные адреса называются логическими и записываются так:

96AF : E305

Адрес сегмента Смещение

Механизм сегментации служит не только для перехода от 20-разрядных физических адресов к 16разрядным логическим, он необходим для защиты программ от взаимного влияния.

Пример: рассмотрим предложение: «Изучаем сегменты памяти» и разобьем предложение следующим образом (символом "_" обозначен пробел):

0000: Изучаем_ 0010: сегменты_ 0020: памяти

0030:

В слове "Изучаем" символ "И" стоит на нулевом месте; символ "з" на первом и т.д.

Используя адресацию через сегмент и смещение получим, что символ "ч" будет иметь следующий адрес: 0000:0003, т.е. сегмент – 0000, смещение – 0003.

Вслове "сегменты" будем считать буквы, начиная с десятого сегмента, но с нулевого смещения. Тогда символ "н" будет иметь следующий адрес: 0010:0005.

Вслове "память" считаем буквы, начиная с 0020 сегмента и также с нулевой позиции. Т.о. символ "а" будет иметь адрес 0020:0001.

Архитектура ЭВМ и систем К.т.н., доц. каф. ИСТ Кислицын Д.И. – ННГАСУ, 2010г.

Основы Ассемблера

Создание программы на языке ассемблера

1.Постановка задачи (точное и подробное описание функциональности будущей программы, а также описание всех входных и выходных данных и способа их передачи программе).

2.Разработка алгоритма программы (построение блок схемы, граф-схемы или текстовое или математическое описание решения).

3. Формализация алгоритма (запись алгоритма на языке программирования). Создание текстового файла программы с расширением .asm (например my.asm) в любом текстовом редакторе с нумерацией строк.

4. Компиляция программы - процесс перевода программы из текстового вида в машинный код. При использовании компилятора фирмы Borland необходимо выполнить: tasm my.asm т.е. запускаем компилятор tasm и передаем с командной строки имя файла, содержащего программу. Если программа имеет синтаксические ошибки, компилятор выдаст сообщение об ошибке с указанием номера строки и описанием для каждой ошибки (нужно вернуться на этап №3 и исправить синтаксические ошибки). В случае успешной компиляции будет создан файл, содержащий объектный код программы my.obj, который ещѐ не является исполняемым модулем.

5.Компоновка программы - создание из файла объектного кода исполняемого модуля: tlink my.obj . В случае успешной компоновки будет создан исполняемый модуль my.exe .

6.Запуск и тестирование исполняемого модуля программы. На данном этапе необходимо проверить, соответствует ли написанная программа постановке задачи, сделанной на этапе №1. Неправильная работа программы говорит об алгоритмической ошибке

(семантическая ошибка), поэтому для успешного еѐ устранения нужно вернуться на этап

разработки алгоритма (этап №2).

Архитектура ЭВМ и систем К.т.н., доц. каф. ИСТ Кислицын Д.И. – ННГАСУ, 2010г.

Основы Ассемблера

Команда mov

mov (от англ. move – в данном случае – загрузить) - присвоение регистру какого-либо значения Например, чтобы присвоить, необходимо записать так:

mov al,35h

присвоение регистру AL числа 35h

mov ax,346Ah

присвоение регистру AX числа 346Ah

Cледующие записи будут ошибочны:

mov ah,123h максимум FFh mov bx,12345h максимум FFFFh mov dl,100h максимум FFh

Если шестнадцатеричное число начинается не с цифры (напр.: 12h), а с буквы (A-F) (напр.: С5h), то перед таким числом ставится нуль: 0C5h. Это необходимо для того, чтобы программа-ассемблер могла отличить, где шестнадцатеричное число, а где метка.

Архитектура ЭВМ и систем К.т.н., доц. каф. ИСТ Кислицын Д.И. – ННГАСУ, 2010г.

Основы Ассемблера

Операции с сегментными регистрами

Регистр CS служит для хранения сегмента кода программы (Code Segment – сегмент кода);

Регистр DS – для хранения сегмента данных (Data Segment – сегмент данных);

Регистр SS – для хранения сегмента стека (Stack Segment – сегмент стека);

Регистр ES – дополнительный сегментный регистр, который может хранить любой другой сегмент (например, сегмент видеобуфера).

Пример загрузки в пару регистров ES:DI сегмент и смещение буквы "м" в слове "памяти" из предыдущего примера:

(1)mov ax,0020

(2)mov es,ax

(3)mov di,2

В регистре ES находится сегмент с номером 20, а в регистре DI – смещение к букве (символу) "м" в слове "памяти".

Загрузка числа (т.е. какого-нибудь сегмента) напрямую в сегментный регистр запрещена. Поэтому в строке (1) загрузили сегмент в AX, а в строке (2) загрузили в регистр ES число 20, которое находилось в

AX:

mov ds,15 ошибка!

 

mov ss,34hошибка!

Загруженная программа автоматически располагается в первом свободном сегменте памяти.

В файлах типа *.com все сегментные регистры автоматически инициализируются для этого сегмента (устанавливаются значения равные тому сегменту, в который загружена программа). Если, например, первый свободный сегмент с номером 5674h, то сегментные регистры будут иметь значения: CS = DS = SS = ES = 5674h

Код программы типа *.com должен начинаться со смещения 100h. Для этого используется оператор ORG 100h, указывая Ассемблеру при ассемблировании использовать смещение 100h от начала сегмента, в который загружена программа. Пара регистров CS:IP задает текущий адрес кода.

Архитектура ЭВМ и систем К.т.н., доц. каф. ИСТ Кислицын Д.И. – ННГАСУ, 2010г.

Основы Ассемблера

Прерывание

Прерывание (англ. interrupt) —это подпрограмма (часть MS-DOS), которая находится постоянно в памяти и может вызываться в любое время из любой программы. Сообщает процессору о наступлении какого-либо события. При этом выполнение текущей последовательности команд приостанавливается и управление передаѐтся обработчику прерывания, который реагирует на событие и обслуживает его, после

чего возвращает управление в прерванный код

Функции DOS (Int 21h)

Назначение

Данные на входе

Данные на

Функции

выход

 

 

Ввод символа с ожиданием

01

al - ASCII код

и эхо-сопровождением

 

 

 

Вывод символа

02

dl - ASCII код

Ввод символа с ожиданием

08

al - ASCII код

и без эхосопровождения

 

 

 

Вывод строки на экран

09

ds:dx - адрес строки с символом '$' на конце

 

 

 

 

Ввод строки с клавиатуры

0ah

ds:dx - адрес буфера со следующим

 

 

 

форматом:

Введенная

 

 

•1й байт - размер буфера;

строка в

 

 

•2й байт - число фактически введенных

буфере с 0dh

 

 

символов;

на конце

 

 

•3й байт и следующие за ним - буфер под

 

 

 

строку

 

Архитектура ЭВМ и систем К.т.н., доц. каф. ИСТ Кислицын Д.И. – ННГАСУ, 2010г.

Основы Ассемблера

Прерывание

Функции BIOS (Int 10h)

Назначение

№ Функции

Данные на входе

Данные на выход

 

 

 

 

Установить положение курсора

02

dh - строка

 

dl - колонка

 

 

 

 

 

 

 

Прочитать символ и атрибут с экрана

08

bh - № экранной

ah - атрибут

 

страницы

al - символ

 

 

 

 

 

 

Вставить символ с атрибутом

 

bh - № экранной

 

 

 

страницы;

 

 

09

bl - атрибут;

 

al - ASCII код;

 

 

 

 

 

cx - число

 

 

 

повторений

 

Получить параметры видеорежима

 

 

al - видеорежим

 

0fh

bh - № экранной

 

 

 

страницы

Установить параметры видеорежима

 

al - видеорежим

 

00h

bh - № экранной

 

 

 

страницы

 

 

 

 

 

Архитектура ЭВМ и систем К.т.н., доц. каф. ИСТ Кислицын Д.И. – ННГАСУ, 2010г.

Основы Ассемблера

Первая программа

(01) CSEG segment

начало сегмента CSEG

(02) org 100h

смещение на 100h (для всех программ типа *.com)

(03) _Begin:

начало кода

(04) mov ah,9

присваиваем AH число 9

(05) mov dx,offset Message

загружаем в DX адрес сообщения Message

(06) int 21h

вызываем функцию 9 прерывания 21h, выводящее строку на экран

(07) int 20h

вызываем 20h прерывание, закрывающее программу (выход в DOS)

(08) Message db 'Hello, world!$‘

строка для вывода

(09) CSEG ends

конец сегмента CSEG

(10) end _Begin

конец кода

Архитектура ЭВМ и систем К.т.н., доц. каф. ИСТ Кислицын Д.И. – ННГАСУ, 2010г.

Основы Ассемблера

Операторы сложения и вычитания

Команда

Перевод

Назначение

Процессор

 

 

 

 

ADD приемник, источник

ADDition – сложение

Сложение

8086

 

 

 

 

SUB приемник, источник

SUBtraction – вычитание

Вычитание

8086

 

 

 

 

mov al,10 add al,15 sub al,10

mov ax,25000 add ax,10000 sub ax,15000

mov cx,200 mov bx,760 add cx,bx sub cx,bx

загружаем в регистр AL число 10

AL = 25; AL – приемник, 15 – источник

AL = 15; AL – приемник, 10 – источник

загружаем в регистр AX число 25000

AX = 35000; AX – приемник, 10000 – источник

AX = 20000; AX – приемник, 15000 – источник

загружаем в регистр CX число 200

а в регистр BX – 760

CX = 960, BX = 760 (BX не меняется); CX – приемник, BX – источник

CX = 200, BX = 760 (BX не меняется!); CX – приемник, BX – источник

Архитектура ЭВМ и систем К.т.н., доц. каф. ИСТ Кислицын Д.И. – ННГАСУ, 2010г.

Основы Ассемблера

Операторы инкрементации и декрементации

Команда

Перевод

Назначение

Процессор

 

 

 

 

INC приемник

Increment – инкремент

Увеличение

8086

 

 

на единицу

 

DEC приѐмник

Decrement - декремент

Уменьшение

8086

 

 

на единицу

 

 

 

 

 

Команда inc / dec увеличивает / уменьшает на единицу регистр. Эквивалентны

командам:

 

ADD источник, 1

SUB источник, 1

mov al,15

 

inc al

теперь AL = 16

dec al

mov dh,39h

 

inc dh

DH = 3Ah

dec dh

mov cl,4Fh

 

inc cl

CL = 50h

dec cl

теперь AL = 15

DH = 39h

CL = 4Fh