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

21.Ассемблер.Основные понятии

Язык ассемблера — язык программирования низкого уровня, команды которого (за редким исключением) соответствуют инструкциям процессора вычислительной системы. Трансляция программы в исполняемый машинный код производится ассемблером  программой-транслятором, которая и дала языку ассемблера его название.

Язык ассемблера — это язык, в котором каждое высказывание соответствует ров­но одной машинной команде.

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

Это утверждение касается и адресов. Программист на языке ассемблера может дать имена ячейкам памяти, и уже ассемблер должен будет выдавать правильные числа. Программист на машинном языке всегда должен работать с числовыми но­мерами адресов. Сейчас уже нет программистов, которые пишут программы на машинном языке, хотя несколько десятилетий назад до изобретения ассемблеров программы именно так и писались.

Рассмотрим пример:

Program mm;

   Begin

       ASM

           Mov ax, 234            вводит 234 в регистр ах

           Sub ax,ax                 вычетает

           Mov bx, 235           вводит 235 в регистр bх 

           Add bx, ax               добавляет рез-ты  ах в bх

     END;

End.

 

Набор команд

Команды пересылки данных (mov, lea и др.)

Арифметические команды (add, sub, imul и др.)

Логические и побитовые операции (or, and, xor, shr и др.)

Команды управления ходом выполнения программы (jmp, loop, ret и др.)

Команды вызова прерываний (иногда относят к командам управления): int, into

Команды ввода/вывода в порты (in, out)

Для микроконтроллеров и микрокомпьютеров характерны также команды, выполняющие проверку и переход по условию, например:

cbne — перейти, если не равно

dbnz — декрементировать, и если результат ненулевой, то перейти

cfsneq — сравнить, и если не равно, пропустить следующую команду

22.Аппаратные и программные прерывания. Адресное пространство и смещение.

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

 

В зависимости от источника возникновения сигнала прерывания делятся на:

асинхронные или внешние (аппаратные) - события, которые исходят от внешних источников (например, периферийных устройств) и могут произойти в любой произвольный момент: сигнал от таймера, сетевой карты или дискового накопителя, нажатие клавиш клавиатуры, движение мыши. Факт возникновения в системе такого прерывания трактуется как запрос на прерывание (англ. Interrupt request, IRQ);

синхронные или внутренние - события в самом процессоре как результат нарушения каких-то условий при исполнении машинного кода: деление на ноль или переполнение, обращение к недопустимым адресам или недопустимый код операции;

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

Программные прерывания могут использоваться для доступа к сервисам операционной системы (например, INT $21 - сервисы DOS, INT $80 - сервисы Linux), функциям драйверов устройств (например, INT $33 - драйвер мыши) или специальным сервисам (INT $10 - видео-сервис BIOS, INT $31 - DPMI-сервис), INT $67 - сервис EMS).

 

Сегментная адресация памяти — схема логической адресации памяти компьютера в архитектуре x86. Линейный адрес конкретной ячейки памяти, который в некоторых режимах работы процессора будет совпадать с физическим адресом, делится на две части: сегмент и смещение. Сегментом называется условно выделенная область адресного пространства определённого размера, а смещением — адрес ячейки памяти относительно начала сегмента. Базой сегмента называется линейный адрес (адрес относительно всего объёма памяти), который указывает на начало сегмента в адресном пространстве. В результате получается сегментный (логический) адрес, который соответствует линейному адресу база сегмента+смещение и который выставляется процессором на шину адреса.

 

Селектором называется число (в x86 — 16-битное), однозначно определяющее сегмент. Селектор загружается в сегментные регистры.

Соседние файлы в папке Вопросы и ответы нах