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

59. Арифметические операции со знаковыми и беззнаковыми числами.

Команда ADD выполнят целочисленное сложение двух операндов, представленных в двоичном коде. Результат помещается на место первого операнда, второй операнд не изменяется. Команда корректирует регистр флагов в соответствии с результатом сложения.

Команда сложения с переносом ADC – это та же команда ADD, за исключением того, что в сумму включается флаг переноса CF, который прибавляется к младшему биту результата.

Команда вычитания SUB – идентична команде сложения, за исключением того, что она выполняет вычитание, а не сложение.

Команда вычитания с заемом SBB учитывает флаг заема CF, то есть значение заема вычитается из младшего бита результата.

Команда отрицания NEG – оператор смены знака. Она меняет знак двоичного кода операнда – байта или слова.

Команды инкремента и декремента изменяют значение своего единственного операнда на единицу. Команда INC прибавляет 1 к операнду, а команда DEC вычитает 1 из операнда. Обе команды могут работать с байтами или со словами. На флаги команды влияния не оказывают.

По команде MUL умножаются два целых числа без знака, при этом результат тоже не имеет знака. По команде IMUL умножаются целые числа со знаком. Обе команды работают с байтами и со словами.

Cуществуют две формы деления – одна для двоичных чисел без знака DIV, а вторая для чисел со знаком – IDIV. Любая форма деления может работать с байтами и словами. Один из операндов (делимое) всегда в два раза длиннее обычного операнда.

60. Процедуры в ассемблере, передача параметров, возврат значений.

Все современные программы разрабатываются по модульному принципу – программа обычно состоит из одной или нескольких небольших частей, называемых подпрограммами или процедурами, и одной главной программы, которая вызывает эти процедуры на выполнение, передавая им управление процессором.

После завершения работы процедуры возвращают управление главной программе и выполнение продолжается с команды, следующей за командой вызова подпрограммы.

Язык программирования Ассемблера поддерживает применение процедур двух типов – ближнего (near) и дальнего (far).

Процедуры ближнего типа должны находится в том же сегменте, что и вызывающая программа.

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

Передавать фактические параметры процедуре можно несколькими способами. Простейший способ – передача параметров через регистры: основная программа записывает параметры в какие-либо регистры, а процедура по мере необходимости извлекает их из этих регистров и использует в своей работе.

Удобнее передавать параметры через стек. В этом случае основная программа записывает параметры в стек и вызывает подпрограмму, подпрограмма работает с параметрами и, возвращая управление, очищает стек.

Для работы с подпрограммами в систему команд процессора включены специальные команды, это вызов подпрограммы CALL и возврат управления RET.

Другим видом процедур являются прерывания DOS и BIOS.

В программах, где используется только язык Ассемблера, в отношении возвращаемых значений допускается полная свобода: вы пожете помещать их в тот регистр, какой захотите. Фактически, в регистре флагов подпрограммы могут даже возвращать информацию о состоянии (в виде установки флага переноса или флага нуля).

Однако, лучше установить некоторые соглашения и их придерживаться. Полезным соглашением может служить возврат 8-битовых значений в регистре AL и 16-битовых значений в регистре AX.

Kучше сводить к минимуму число значений, возвращаемых в регистрах (лучше всего до одного) и возвращать дополнительные значения, сохраняя их в ячейках памяти, на которые ссылаются передаваемые указатели.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]