АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Общие сведения. Для изучения языка ассемблер нет необходимости в организации ввода и вывода данных при написании программ

Читайте также:
  1. I. ОБЩИЕ ПОЛОЖЕНИЯ
  2. I. ОБЩИЕ ПОЛОЖЕНИЯ
  3. I. ОБЩИЕ ПОЛОЖЕНИЯ
  4. I. ОБЩИЕ ПОЛОЖЕНИЯ ПО ВЫПОЛНЕНИЮ КОНТРОЛЬНОЙ РАБОТЫ
  5. I. Общие сведения
  6. I. ОБЩИЕ СВЕДЕНИЯ
  7. I. Общие требования безопасности.
  8. I. ОБЩИЕ УКАЗАНИЯ К ВЫПОЛНЕНИЮ КУРСОВОЙ РАБОТЫ
  9. I. ОБЩИЕ УКАЗАНИЯ К ВЫПОЛНЕНИЮ КУРСОВОЙ РАБОТЫ
  10. II ОБЩИЕ НАЧАЛА ПУБЛИЧНО-ПРАВОВОГО ПОРЯДКА
  11. II. Общие требования
  12. III. Общие организационные мероприятия

 

Для изучения языка ассемблер нет необходимости в организации ввода и вывода данных при написании программ. Организация ввода данных с клавиатуры и вывода данных на экран монитора представляет собой на языке ассемблера достаточно большие программы. Эти программы уже реализованы в виде библиотечных программ, так называемых обработчиков прерываний, которые вызываются командой int. Роль операнда этой команды выполняет вектор прерывания, то есть номер его в соответствующей таблице (таблице векторов прерываний). В наших программах это выглядит так – int 21h или int 9h и др. Когда мы организуем ввод-вывод в программах на алгоритмических языках (Pascal, C, C++ и т.д.), то процедуры ввода-вывода этих языков так или иначе обращаются к соответствующим прерываниям. Но кроме этого данные процедуры выполняют еще целый ряд действий по организации ввода-вывода. Что это за действия? Когда мы вводим данные с клавиатуры, то программа обработчик прерывания считывает, так называемый скен-код нажатой клавиши и, анализируя при этом состояние регистровых клавиш, переводит в конечном итоге этот скен-код в ASCII код набранного нами символа. Процедура ввода на алгоритмическом языке, скажем процедура read языка Pascal, выполняет кроме этого анализ введенных данных в соответствии с определенным в программе для этих данных типом. Если мы вводим числовые данные, то программа выполняет преобразование из ASCII кода в соответствующее числовое значение. При выводе данных не достаточно обратиться к прерыванию для отображения данных на экране. Необходимо эти данные сначала преобразовать, и если мы выводим числовые значения, то из двоичного числового формата следует перевести их в ASCII формат для вывода на экран. То, что незримо для нас выполняют процедуры ввода-вывода алгоритмических языков, на ассемблере приходится организовывать программно. Эти действия увеличивают длину программы, в то время, когда для анализа работы команд процессора, изучением которых мы и будем заниматься, вся эта «оформительская» часть будет только лишним грузом. Детальный анализ работы команд процессора может выполняться только (!!!) при пошаговом выполнении программ в среде TurboDebugger-а. Причем детальный анализ подразумевает не только анализ данных на регистрах, но и анализ расположения данных в памяти компьютера (просмотр дампа памяти - команда View – Dump). А, следовательно, ввод-вывод данных просто теряет всякий смысл при такой работе. Достаточно декларировать и инициировать исходные данные, а также резервировать место в памяти для промежуточных значений и для выходных данных в сегменте данных программы.

 

NB! При анализе данных в окне дампа памяти не забывайте учитывать принцип их расположения в памяти - «младший по младшему адресу, старший - по старшему».

Язык ассемблера предоставляет возможность объявлять простые данные длиной в байт, слово, двойное слово, два двойных слова, а также десятибайтовые и 48-битовые данные. Вспомним директивы декларации простых данных.

DB – директива декларации данных длиною в один байт;

DW – директива декларации данных длиною в одно слово или два байта;

DD – директива декларации данных длиною в два слова или в четыре байта;

DQ – директива декларации данных длиною в четыре слова или восемь байтов;

DF или DP – директива декларации данных длиною в 48-битов для определения дальних указателей (используется в защищенном режиме);

DT – директива декларации данных длиною в десять байтов.

В данной лабораторной работе рассматриваются декларации данных длиною в байт, слово и двойное слово, так как четырехсловные и десятибайтовые данные использует математический сопроцессор, а 48-битовые данные используются в защищенном режиме.

Кроме того, в данной лабораторной работе рассматриваются виды адресации:

- регистровая;

- непосредственная;

- прямая;

- косвенная адресация:

1) косвенная индексная;

2) косвенная индексная со смещением;

3) косвенная базовая;

4) косвенная базовая со смещением;

5) косвенная базово-индексная;

6) косвенная базово-индексная со смещением.

Значение смещения к данным в сегменте данных при косвенной адресации определяется по значению эффективного адреса. Эффективный адрес (Effective Address далее EA) равен сумме всех значений в команде, которые задают смещение к ячейке памяти. Например, для команды

Mov AL, [BX+5] значение ЕА = ВХ + 5, то есть эффективный адрес равен сумме значения, записанного на регистре ВХ и смещения в пять байтов, а для команды

Mov CX, 4[BX][SI] значение EA = BX + SI + 4.

Полученный ЕА является смещением от начала сегмента данных, по которому и читается искомое значение.


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.)