Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Преобразование знака




9.1. Составьте в текстовом редакторе NORTON программу exnot.asm в СОМ-формате:

 

MAIN PROC NEAR

MOV AX,81H

MOV DX,30H

NEG AX

NEG DX

MOV AX,81H

MOV DX,30H

NOT DX;Инвертирование битов

NOT AX;Инвертирование битов

ADD AX,1;Прибавление 1 к АХ

ADC DX,0;Прибавление переноса к DX

RET

MAIN ENDP

 

Команда NEG обеспечивает преобразование знака двоичных чисел из положительного в отрицательное и наоборот. Команда NEG устанавливает противоположные значения битов и прибавляет 1.

Команда NOT применяется для преобразования знака регистровой пары DX:AX.

9.2. Выполнить ассемблирование и компоновку программы. Записать листинг программы в отчет. Вызвать отладчик DEBUG на выполнение программы.

9.3. Выполнить трассировку программы внимательно отслеживая содержимое регистров АХ и DХ. Выводы о работе программы записать в отчет.

СОДЕРЖАНИЕ ОТЧЕТА:

1. Листинги программ.

2. Выводы о работе программ.

КОНТРОЛЬНЫЕ ВОПРОСЫ:

Вопросы имеют отношение к следующим данным:

 

DATAX DW 0148H

DW 2316H

DATAY DW 0237H

DW 4052H

DATAZ DW 0;Для результата

DW 0;Для результата

DW 0;Для результата

1. Закодируйте команды для сложения: а) слова DATAX со словом DATAY; б) двойного слова, начинающегося по адресу DATAX, с двойным словом в DATAY.

2. Объясните действие следующих команд:

STC

MOV BX,DATAX

ADC BX,DATAY

3. Закодируйте команды для умножения (MUL): а) слова DATAX на слово DATAY: б) двойного слова, начинающегося по адресу DATAX на слово DATAY.

4. Закодируйте команды для деления (DIV): а) слова DATAX на 23; б) двойного слова, начинающегося по адресу DATAX, на слово DATAY.

ОТВЕТЫ:

1. а) MOV AX,DATAY

ADD AX,DATAX

MOV DATAZ,AX

б) MOV AX,DATAX+2

ADD AX,DATAY+2

MOV DATAZ+2,AX

MOV AX,DATAX

ADC AX,DATAY

MOV DATAZ,AX

2. Команда STC устанавливает флаг CF. Сумма равна 0148Н плюс 0237Н плюс 1.

3. а) MOV AX,DATAX

MUL DATAY

MOV DATAZ+2,AX

MOV DATAZ,DX

б) MOV AX,DATAX+2

MUL DATAY

MOV DATAZ+4,AX

MOV DATAZ+2,DX

MOV AX,DATAX

MUL DATAY

ADD DATAZ+2,AX

ADC DATAZ,DX

4. а) MOV AX,DATAX

MOV BL,23

DIV BL

MOV DATAZ,AX

б) MOV DX,DATAX

MOV AX,DATAX+2

DIV DATAY

MOV DATAZ+2,AX

MOV DATAZ,DX

 

 

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

АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ 2: ОБРАБОТКА ДАННЫХ В ФОРМАТАХ ASCII И

BCD

 

МЕТОДИЧЕСКИЕ УКАЗАНИЯ:

1. Для выполнения лабораторной работы вы должны войти в каталог группы из панели NORTON. Каждый студент должен иметь в каталоге группы свой личный каталог. Все программы должны создаваться и записываться в личном каталоге студента.

2. Ввод данных с клавиатуры и вывод информации на экран осуществляется в коде ASCII. Например, число 23 в двоичном представлении выглядит как 00010111 (17Н); в коде ASCII на каждый символ требуется один байт и число 23 в ASCII-коде имеет представление 3233 (два байта), буквы SAM имеют представление 53414D (три байта), число 1234 имеет представление 31323334 (четыре байта).

3. Арифметические операции над числами в ASCII-формате выполняются с помощью следующих ассемблерных команд:

 

AAA - коррекция для сложения ASCII-кода

AAD - коррекция для деления ASCII-кода

AAM - коррекция для умножения ASCII-кода

AAS - коррекция для вычитания ASCII-кода

 

Эти команды кодируются без операндов и выполняют автоматическую коррекцию в регистре АХ.

4. Сложение чисел 8 и 4 в ASCII-формате выполняется следующим образом:

 

--

6C

 

Полученная сумма неправильна ни для ASCII-формата, ни для двоичного формата. Однако, прибавляя левую цифру 6 к правой цифре С: С + 6 = 12, получим правильный результат в десятичном формате.

5. Команда ААА проверяет правую шестнадцатиричную цифру (4 бит) в регистре AL. Если эта цифра находится между A и F или флаг CF установлен в 1, то к регистру AL прибавляется 6, а к регистру АН прибавляется 1, флаг CF устанавливается в 1. Во всех случаях команда ААА устанавливает в 0 левую шестнадцатиричную цифру в регистре AL. Результат получается в регистре АХ (0102). Для получения окончательного ASCII-представления ставятся тройки на место левых шестнадцатиричных цифр:

 

OR AX,3030H

 

В регистре АХ получается результат 3132.

6. Команда AAS выполняется аналогично команде ААА. Команда AAS проверяет правую шестнадцатиричную цифру в регистре AL. Если эта цифра лежит между A и F или флаг CF равен 1, то из регистра AL вычитается 6, а из регистра АН вычитается 1, флаг CF устанавливается в 1. Во всех случаях команда AAS устанавливает в 0 левую шестнадцатиричную цифру в регистре AL.

7. Команда ААМ выполняет корректировку результата умножения ASCII-кодов в регистре АХ. Полученные данные в результате выполнения команды будут иметь распакованное десятичное представление. Например, число 01020304, полученное в результате выполнения команды ААМ, соответствует числу 31323334 в ASCII-формате. Коррекция выполняется только для одного байта за одно выполнение команды, поэтому для более длинных полей необходима организация цикла. Перед выполнением умножения множимое и множитель должны быть распакованы из ASCII-кода в десятичное представление.

8. Команда AAD выполняет корректировку ASCII-кода делимого до непосредственного деления. Однако, прежде необходимо очистить левые тройки ASCII-кодов для получения распакованного десятичного формата. Команда AAD может оперировать с двухбайтовыми делимыми в регистре АХ. Делитель может быть только однобайтовый.

9. Число в компьютере может быть представлено в различных форматах. Например, число 0924 может быть представлено: 30393234 (0011 0000 0011 1001 0011 0010 0011 0100) - ASCII-формат, 00090204 (0000 0000 0000 1001 0000 0010 0000 0100) - распакованное десятичное представление, 0924 (000 1001 0010 0100) - двоично-десятичный формат (BCD) состоящий из двух байт, 039С - (0000 0011 1001 1100) шестнадцатиричное представление, 0000 0011 1001

1100 - двоичное представление.Длина ASCII-представления - 4 байта, распакованного десятичного представления - 4 байта, двоично-десятичного представления - 2 байта, шестнадцатиричного представления - 2 байта, двоичного представления - 2 байта.

10. Для сложения чисел в двоично-десятичном представлении используется команда DAA (десятичная коррекция для сложения). Для вычитания чисел в двоично-десятичном представлении используется команда DAS (десятичная коррекция для вычитания).

11. Процедура преобразования из ASCII-формата в двоичный формат заключается в следующем:

а) Начинают с самого правого байта числа в ASCII-формате и обрабатывают справа налево.

б) Удаляют тройки из левых шестнадцатиричных цифр каждого ASCII-байта.

в) Умножают ASCII-цифры на 1, 10, 100 (01Н, 0АН, 64Н) и т.д. и складывают результаты.

12. Для примера рассмотрим преобразование числа 1234 из ASCII-формата в двоичный формат:

 

Десятичное Шестнадцатиричное

4 х 1 = 4 4

3 х 10 = 30 1Е

2 х 100 = 200 С8

1 х 1000 = 1000 3Е8

Результат: 4 + 1Е + С8 + 3Е8 = 04D2 (двоичное)

 

13. Преобразование двоичного формата в ASCII-формат включает в себя процесс, обратный предыдущему. Вместо умножения используется деление двоичного числа на 10 (0АН), пока результат не будет меньше 10. Остатки, которые лежат в границах от 0 до 9, образуют число в ASCII-формате. В качестве примера рассмотрим преобразование 4D2H обратно в десятичный формат:

 

Частное Остаток

4D2: A = 7B 4

7B: A = C 3

C: A = 1 2

 

Так как последнее частное 1 меньше, чем 0АН, то операция завершена. Остатки вместе с последним частным образуют результат в ASCII-формате, записываемый справа налево - 1234. Все остатки и последнее частное должны записываться в память с тройками, т.е. 31323334.

 

ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ:





Поделиться с друзьями:


Дата добавления: 2015-10-01; Мы поможем в написании ваших работ!; просмотров: 604 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Лучшая месть – огромный успех. © Фрэнк Синатра
==> читать все изречения...

2257 - | 2143 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.008 с.