Программа: команды длинной пересылки


НазваниеПрограмма: команды длинной пересылки
страница9/35
Дата публикации06.04.2013
Размер4.75 Mb.
ТипПрограмма
userdocs.ru > Информатика > Программа
1   ...   5   6   7   8   9   10   11   12   ...   35
часть логических возможностей компьютера, имеют следующие свойства:

- обрабатывают байт или слово;

- имеют доступ к регистру или к памяти;

- сдвигают влево или вправо;

- сдвигают на величину до 8 бит (для байта) и 16 бит (для слова)

- сдвигают логически (без знака) или арифметически (со знаком).

Значение сдвига на 1 может быть закодировано как непосредcтвенный

операнд, значение больше 1 должно находиться в регистре CL.

Команды сдвига

----------------

При выполнении команд сдвига флаг CF всегда содержит значение

последнего выдвинутого бита. Существуют следующие команды cдвига:

SHR ;Логический (беззнаковый) сдвиг вправо

SHL ;Логический (беззнаковый) сдвиг влево

SAR ;Арифметический сдвиг вправо

SAL ;Арифметический сдвиг влево

Следующий фрагмент иллюстрирует выполнение команды SHR:

MOV CL,03 ; AX:

MOV AX,10110111B ; 10110111

SHR AX,1 ; 01011011 ;Сдвиг вправо на 1

SHR AX,CL ; 00001011 ;Сдвиг вправо на 3

Первая команда SHR сдвигает содержимое регистра AX вправо на 1 бит.

Выдвинутый в результате один бит попадает в флаг CF, а самый левый бит

регистра AX заполняется нулем. Вторая команда cдвигает содержимое регистра

AX еще на три бита. При этом флаг CF последовательно принимает значения 1,

1, 0, а в три левых бита в регистре AX заносятся нули.

Рассмотрим действие команд арифметического вправо SAR:

MOV CL,03 ; AX:

MOV AX,10110111B ; 10110111

SAR AX,1 ; 11011011 ;Сдвиг вправо на 1

SAR AX,CL ; 11111011 ;Сдвиг вправо на 3

Команда SAR имеет важное отличие от команды SHR: для заполнения

левого бита используется знаковый бит. Таким образом, положительные и

отрицательные величины сохраняют свой знак. В приведенном примере знаковый

бит содержит единицу.

При сдвигах влево правые биты заполняются нулями. Таким обpазом,

результат команд сдвига SHL и SAL индентичен.

Сдвиг влево часто используется для удваивания чисел, а сдвиг вправо -

для деления на 2. Эти операции осуществляются значительно быстрее, чем

команды умножения или деления. Деление пополам нечетных чисел (например, 5

или 7) образует меньшие значения (2 или 3, соответственно) и

устанавливает флаг CF в 1. Кроме того, если необходимо выполнить сдвиг на

2 бита, то использование двух команд сдвига более эффективно, чем

использование одной команды с загрузкой регистра CL значением 2.

Для проверки бита, занесенного в флаг CF используется команда JC

(переход, если есть перенос).

Команды циклического сдвига

-----------------------------

Циклический сдвиг представляет собой операцию сдвига, при которой

выдвинутый бит занимает освободившийся разряд. Существуют следующие

команды циклического сдвига:

ROR ;Циклический сдвиг вправо

ROL ;Циклический сдвиг влево

RCR ;Циклический сдвиг вправо с переносом

RCL ;Циклический сдвиг влево с переносом

Следующая последовательность команд иллюстрирует операцию

циклического сдвига ROR:

MOV CL,03 ; BX:

MOV BX,10110111B ; 10110111

ROR BX,1 ; 11011011 ;Сдвиг вправо на 1

ROR BX,CL ; 01111011 ;Сдвиг вправо на 3

Первая команда ROR при выполнении циклического сдвига переносит

правый единичный бит регистра BX в освободившуюся левую позицию. Вторая

команда ROR переносит таким образом три правых бита.

В командах RCR и RCL в сдвиге участвует флаг CF. Выдвигаемый из

регистра бит заносится в флаг CF, а значение CF при этом поступает в

освободившуюся позицию.

Рассмотрим пример, в котором используются команды циклического и

простого сдвига. Предположим, что 32-битовое значение находится в

регистрах DX:AX так, что левые 16 бит лежат в регистре DX, а правые - в

AX. Для умножения на 2 этого значения возможны cледующие две команды:

SHL AX,1 ;Умножение пары регистров

RCL DX,1 ; DX:AX на 2

Здесь команда SHL сдвигает все биты регистра AX влево, причем самый

левый бит попадает в флаг CF. Затем команда RCL сдвигает все биты регистра

DX влево и в освободившийся правый бит заносит значение из флага CF.

^ ОРГАНИЗАЦИЯ ПРОГРАММ

________________________________________________________________

Ниже даны основные рекомендации для написания ассемблерных программ:

1. Четко представляйте себе задачу, которую должна решить

программа.

2. Сделайте эскиз задачи в общих чертах и спланируйте общую

логику программы. Например, если необходимо проверить операции

пеpесылки нескольких байт (как в примере на рис.7.5), начните c

определения полей с пересылаемыми данными. Затем спланируйте общую

стратегию для инициализации, условного перехода и команды LOOP.

Приведем основную логику, которую используют многие программисты в

таком случае:

инициализация стека и сегментных регистров

вызов подпрограммы цикла

возврат

Подпрограмма цикла может быть спланирована следующим образом:

инициализация регистров значениями адресов

и числа циклов

Метка: пересылка одного байта

увеличение адресов на 1

уменьшение счетчика на 1:

если счетчик не ноль, то идти на метку

если ноль, возврат

3. Представьте программу в виде логических блоков, следующих

друг за другом. Процедуры не превышающие 25 строк (размер экрана)

удобнее для отладки.

4. Пользуйтесь тестовыми примерами программ. Попытки запомнить

все технические детали и программирование сложных программ "из

головы" часто приводят к многочисленным ошибкам.

5. Используйте комментарии для описания того, что должна делать

процедура, какие арифметические действия или операции сравнения будут

выполняться и что делают редко используемые команды. (Например,

команда XLAT, не имеющая операндов).

6. Для кодирования программы используйте заготовку программы,

скопированной в файл с новым именем.

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

команды LEA, индексных регистров SI и DI, вызываемых процедур. Получив

теперь базовые знания по ассемблеру, можем перейти к более развитому и

полезному программированию.

^ ОСНОВНЫЕ ПОЛОЖЕНИЯ НА ПАМЯТЬ

________________________________________________________________

- Метки процедур (например, B20:) должны завершаться двоеточием для

указания типа NEAR. Отсутствие двоеточия приводит к ассемблерной ошибке.

- Метки для команд условного перехода и LOOP должны лежать в границах

-128 до +127 байт. Операнд таких команд генерирует один байт объектного

кода. Шест. от 01 до 7F соответствует десятичным значениям от +1 до +127,

а шест. от FF до 80 покрывает значения от -1 до +128. Так как длина

машинной команды может быть от 1 до 4 байт, то соблюдать границы не

просто. Практически можно ориентироваться на размер в два экрана исходного

текста (примерно 50 строк).

- При использовании команды LOOP, инициализируйте регистр CX

положительным числом. Команда LOOP контролирует только нулевое значение,

при отрицательном программа будет продолжать циклиться.

- Если некоторая команда устанавливает флаг, то данный флаг сохраняет

это значение, пока другая команда его не изменит. Например, если за

арифметической командой, которая устанавливает флаги, следуют команды MOV,

то они не изменят флаги. Однако, для минимизации числа возможных ошибок,

cледует кодировать команды условного перехода непосредственно после

команд, устанавливающих проверяемые флаги.

- Выбирайте команды условного перехода соответственно операциям над

знаковыми или беззнаковыми данными.

- Для вызова процедуры используйте команду CALL, а для возврата из

процедуры - команду RET. Вызываемая процедура может, в свою очередь,

вызвать другую процедуру, и если следовать существующим соглашениям, то

команда RET всегда будет выбирать из стека правильный адрес возврата.

Единственные примеры в этой книге, где используется переход в процедуру

вместо ее вызова - в начале COM-программ.

- Будьте внимательны при использовании индексных операндов. Сравните:

MOV AX,SI

MOV AX,[SI]

Первая команда MOV пересылает в регистр AX содержимое регистра SI. Вторая

команда MOV для доступа к пересылаемому слову в памяти использует

относительный адрес в регистре SI.

- Используйте команды сдвига для удваивания значений и для деления

пополам, но при этом внимательно выбирайте соответствующие команды для

знаковых и беззнаковых данных.

^ ВОПРОСЫ ДЛЯ САМОПРОВЕРКИ

________________________________________________________________

7.1. Какое максимальное количество байт могут обойти команды коpоткий

JMP, LOOP и относительный переход? Какой машинный код операнда при этом

генерируется?

7.2. Команда JMP начинается на шест.0624. Определите адрес перехода,

если шест. объектный код для операнда команды JMP: а) 27, б) 6B, в) C6.

7.3. Напишите программу вычисления 12 чисел Фибоначчи: 1, 1, 2, 3, 5,

8, 13,... (каждое число в последовательности представляет собой сумму двух

предыдущих чисел). Для организации цикла используйте команду LOOP.

Выполните ассемблирование, компоновку и с помощью отладчика DEBUG

трассировку программы.

7.4. Предположим, что регистры AX и BX содержат знаковые данные, a CX

и DX - беззнаковые. Определите команды CMP (где необходимо) и команды

безусловного перехода для следующих проверок:

а) значение в DX больше, чем в CX?

б) значение в BX больше, чем в AX?

в) CX содержит нуль?

г) было ли переполнение?

д) значение в BX равно или меньше, чем в AX?

е) значение в DX равно или меньше, чем в CX?

7.5. На какие флаги воздействуют следующие события и какое значение

этих флагов?

a) произошло переполнение;

б) результат отрицательный;

в) результат нулевой;

г) обработка в одношаговом режиме;

д) передача данных должна быть справа налево.

7.6. Что произойдет при выполнении программы , приведенной на

рис.7.4, если в процедуре BEGIN будет отсутствовать команда RET?

7.7. Какая разница между кодированием в директиве PROC опеpанда с

типом FAR и с типом NEAR?

7.8. Каким образом может программа начать выполнение процедуры?

7.9. В EXE-программе процедура A10 вызывает B10, B10 вызывает C10, а

C10 вызывает D10. Сколько адресов, кроме начальных адресов возврата в DOS,

содержит стек?

7.10. Предположим , что регистр BL содержит 11100011 и поле по имени

BOONO содержит 01111001. Определите воздействие на регистр BL для

следующих команд: а) XOR BL,BOONO; б) AND BL,BOONO; в) OR BL,BOONO; г) XOR

BL,11111111B; д) AND BL,00000000B.

7.11. Измените программу на рис.7.6 для: а) определения содержимого

TITLEX заглавными буквами; б) преобразование заглавных букв в строчные.

7.12. Предположим, что регистр DX содержит 10111001 10111001, а

pегистр CL - 03. Определите содержимое регистра DX после следующих

несвязанных команд: а) SHR DX,1; б) SHR DX,CL; в) SHL DX,CL; г) SHL DL,1;

д) ROR DX,CL; е) ROR DL,CL; ж) SAL DH,1.

7.13. Используя команды сдвига, пересылки и сложения, умножьте

содержимое регистра AX на 10.

7.14. Пример программы, приведенной в конце раздела "сдвиг и

циклический сдвиг", умножает содержимое пары регистров DX:AX на 2.

Измените программу для: а) умножения на 4; б) деления на 4; в) умножения

48 бит в регистрах DX:AX:BX на 2.

ГЛАВА 8 Экранные операции I: Основные свойства

__________________________________________________________________________

Ц е л ь: Объяснить требования для вывода информации на экран, а также

для ввода данных с клавиатуры.

ВВЕДЕНИЕ

________________________________________________________________

В предыдущих главах мы имели дело с программами, в которых данные

oпределялись в операндах команд (непосредственные данные) или

инициализировались в конкретных полях программы. Число практических

применений таких программ в действительности мало. Большинcтво программ

требуют ввода данных с клавиатуры, диска или модема и обеспечивают вывод

данных в удобном формате на экран, принтер или диск. Данные,

предназначенные для вывода на экран и ввода с клавиатуры, имеют ASCII

формат.

Для выполнения ввода и вывода используется команда INT (прерывание).

Существуют различные требования для указания системе какое действие (ввод

или вывод) и на каком устройстве необходимо выполнить. Данная глава

раскрывает основные требования для вывода информации на экран и ввода

данных с клавиатуры.

Все необходимые экранные и клавиатурные операции можно выполнить

используя команду INT 10H, которая передает управление непосредственно в

BIOS. Для выполнения некоторых более сложных операций существует

прерывание более высокого уровня INT 21H, которое сначала передает

управление в DOS. Например, при вводе с клавиатуры может потребоваться

подсчет введенных символов, проверку на максимальное число символов и

проверку на символ Return. Преpывание DOS INT 21H выполняет многие из этих

дополнительных вычислений и затем автоматически передает управление в

BIOS.

Материал данной главы подходит как для монохромных (черно-белых, BW),

так и для цветных видеомониторов. В гл. 9 и 10 приведен материал для

управления более совершенными экранами и для использования цвета.

^ КОМАНДА ПРЕРЫВАНИЯ: INT

________________________________________________________________

Команда INT прерывает обработку программы, передает управление в DOS

или BIOS для определенного действия и затем возвращает управление в

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

используется для выполнения операций ввода или вывода. Для выхода из

программы на обработку прерывания и для последующего возврата команда INT

выполняет следующие действия:

- уменьшает указатель стека на 2 и заносит в вершину стека

содержимое флагового регистра;

- очищает флаги TF и IF;

- уменьшает указатель стека на 2 и заносит содержимое регистра

CS в стек;

- уменьшает указатель стека на 2 и заносит в стек значение

командного указателя;

- обеспечивает выполнение необходимых действий;

- восстанавливает из стека значение регистра и возвращает

управление в прерванную программу на команду, следующую после INT.

Этот процесс выполняется полностью автоматически. Необходимо лишь

определить сегмент стека достаточно большим для записи в него значений

регистров.

В данной главе рассмотрим два типа прерываний: команду BIOS INT 10H и
1   ...   5   6   7   8   9   10   11   12   ...   35

Похожие:

Программа: команды длинной пересылки iconПрограмма соревнований дата         время     мероприятие            место       
Соревнование проводится только в командном зачете. Состав команды – 2 человека. Общий зачет для мужских, женских и смешанных команд....
Программа: команды длинной пересылки iconПрограмма-драйвер. Назначение файла конфигурации. Командный процессор....
Общее понятие об информатике и информации. Свойства информации. Непрерывная и дискретная информация
Программа: команды длинной пересылки icon3. Падающие и отраженные волны в однородной длинной линии
Электрические свойства длинной линии характеризуются первичными параметрами, т е параметрами, отнесёнными к единице длины линии(1...
Программа: команды длинной пересылки iconКоличеству заказанных вещей! Так как стоимость пересылки из Китая...
Так как стоимость пересылки из Китая зависит от количества заказанного, чем больше, тем дешевле! Стоимость доставки фиксированная,...
Программа: команды длинной пересылки iconКонтрольные сроки пересылки посылок между городами федерального значения,...
Контрольные сроки пересылки посылок между городами федерального значения, административными центрами субъектов
Программа: команды длинной пересылки iconПрограмма тура
Петрозаводск. По пути – деление на команды для ориентирования, проведение автобусного этапа игры
Программа: команды длинной пересылки iconКонтрольные сроки пересылки Почтой России из Ростова-на-Дону (обычная посылка)

Программа: команды длинной пересылки iconТворческий марафон «Быстрее, выше, сильнее и вкуснее»
Капитан команды начинает фразу «мы…» команда хором «Зайчата, Отличники и т д. – название команды
Программа: команды длинной пересылки iconПрограмма круглого стола по кодексу профессиональной этики адвоката
Постановка проблемы необходимости профессиональных клятв, создание дискуссионного поля для команды
Программа: команды длинной пересылки icon27 сентября Международный День туризма ФотоКросс
Участие в соревнованиях командное. Команды от 3 до 10 человек включительно выставляются от каждой группы (курса). Все члены команды...
Вы можете разместить ссылку на наш сайт:
Школьные материалы


При копировании материала укажите ссылку © 2020
контакты
userdocs.ru
Главная страница