|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Общие сведения. Для изучения языка ассемблер нет необходимости в организации ввода и вывода данных при написании программ
Для изучения языка ассемблер нет необходимости в организации ввода и вывода данных при написании программ. Организация ввода данных с клавиатуры и вывода данных на экран монитора представляет собой на языке ассемблера достаточно большие программы. Эти программы уже реализованы в виде библиотечных программ, так называемых обработчиков прерываний, которые вызываются командой 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. Полученный ЕА является смещением от начала сегмента данных, по которому и читается искомое значение. Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.004 сек.) |