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

Int 21h ; строки

Inc si ;Счетчик очередной цифры

cmp SI, 10

jl OO

;Запрос на продолжение работы

lea DX, AskCont

mov AH, 09h

int 21h

mov AH, 08h

int 21h

cmp AL, 27

je QUIT

jmp BEGIN

;Конец работы

QUIT: exitcode 0

end

4. Варианты заданий

  1. Ввести с клавиатуры строку. Сжать строку, т.е. удалить про­белы и табуляции. Вывести результаты на экран.

  2. Ввести с клавиатуры строку. Преобразовать все малые буквы в большие. Вывести результаты на экран.

  3. Ввести с клавиатуры строку. Посчитать количество слов в строке. Подумать, что является разделителем слов. Вывести ре­зультаты на экран.

  4. Ввести с клавиатуры строку. Ввести с клавиатуры коротенькую строку – шаблон. Найти шаблон во введенной строке. Вывести на экран "ДА", если шаблон есть, и "НЕТ", если его нет.

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

  6. Ввести с клавиатуры строку. Если она длиннее некоторой величины, то обрезать, если короче – растянуть, вставив нужное число пробелов между словами. Вывести результаты на экран.

  7. Ввести с клавиатуры строку, состоящую из нескольких слов. Вывести каждое слово на экран в отдельной строке, т.е. выдать слова в столбик.

  8. Ввести с клавиатуры строку. Переставить в ней символы, поменяв местами первый с последним, второй с предпоследним и т.д. Вывести результаты на экран.

5. Контрольные вопросы

  1. Что такое программное прерывание?

  2. Какие возможности работы с клавиатурой имеются у программиста?

  3. Чем отличаются друг от друга различные функции DOS, выполняющие ввод с клавиатуры?

  4. Что такое расширенный код клавиатуры?

  5. Можно ли выдать на экран текст «$1.00 = 25.00 rub.», используя функцию DOS 09h?

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

  7. Что означают выражения в поле операндов в строках примера: lea BX, INSTR+2 mov OUTSTR+3, AL ?

  8. Как выделить младшую тетраду байта ?

  9. Как выделить старшую тетраду байта ?

  10. В чем отличие команд lea BX, STR mov BX, offset STR ?

Лабораторная работа

6

Десятичная арифметика

1. ЦЕЛЬ РАБОТЫ

Цель настоящей работы – знакомство с форматами представле­ния десятичных чисел, упакованным и неупакованным BCD-фор­матами, освоение команд десятичной коррекции.

2. ОСНОВНЫЕ СВЕДЕНИЯ

2.1. Форматы представления десятичных чисел

Упакованные BCD-числа хранятся по две цифры в байте в виде четырехбитовых групп, называемых тетрадами, причем каждая тетрада представляет собой двоичную комбинацию, соответствую­щую одной десятичной цифре, т.е. двоичное число в диапазоне 0000b – 1001b.

Неупакованное BCD-число содержит одну десятичную цифру в младшей тетраде байта, старшая тетрада должна быть нулевой, однако для команд сложения и вычитания содержимое старшей тетрады несущественно.

2.2. Команды десятичной коррекции упакованных чисел

Для упакованных десятичных чисел допустимы только опера­ции сложения и вычитания. Каждая операция выполняется в два этапа.

На первом выполняется операция – сложение или вычитание (add, adc, sub, sbb) двух упакованных десятичных чисел, первое из которых должно находиться в регистре AL, на втором – деся­тичная коррекция результата в регистре AL (daa, das).

Рассмотрим подробнее одну из команд коррекции – daa, кор­рекция после сложения BCD-чисел.

После первого этапа – двоичного сложения правильных BCD-чисел возможно появление неправильного BCD-результата в двух ситуациях:

  • получена недопустимая тетрада, т.е. тетрада, двоичный экви­валент которой больше 9;

  • получена допустимая тетрада, но при сложении из нее возник двоичный перенос с весом 16, в то время как правильный вес единицы переноса должен быть равен 10.

Отметим, что перенос из младшей тетрады фиксируется флагом AF , а из старшей – CF.

Алгоритм выполнения команды daa состоит из двух шагов:

  • если AF=1 или младшая тетрада регистра AL содержит запре­щенную комбинацию, к содержимому AL прибавляется 06 и флаг AF устанавливается в 1;

  • если CF=1 или старшая тетрада регистра AL содержит запре­щенную комбинацию, к содержимому AL прибавляется 60h и флаг CF устанавливается в 1.

Например. Содержимое регистров AL=65h и BL=28h , что соответ­ствует десятичным числам 65 и 28. Выполним их сложение

add AL, BL ; AL=8Dh, AF=0, CF=0, ZF=0 daa ; AL=93h, AF=0, CF=0, ZF=0

и вычитание

sub AL, BL ; AL=3Dh, AF=1, CF=0, ZF=0

das ; AL=37h, AF=1, CF=0, ZF=0

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