- •Машинное исполнение
- •1. Просмотр памяти.
- •2. Пример машинных кодов: непосредственные данные.
- •3. Пример машинных кодов: определение данных.
- •4. Пример машинных кодов: определение размера памяти.
- •5. Специальные средства отладчика.
- •6. Сохранение программы из отладчика.
- •Ассемблирование и выполнение программы
- •1. Ввод программы
- •2. Ассемблирование программы.
- •3. Компоновка программы.
- •4. Выполнение программы.
- •5. Ввод, ассемблирование, компоновка, выполнение и анализ листинга исходной программы.
- •Определение данных
- •1. Директивы определения данных.
- •2. Определение данных с числом повторений.
- •3. Директива определения байта (dв).
- •4. Директива определения слова (dw).
- •5. Директива определения двойного слова (dd).
- •6. Директива определения поля из четырех слов (dq).
- •7. Директива определения десяти байт (dt), директива equ.
- •Программы в com-файлах
- •1. Создание exe-файла.
- •2. Получение com-файла.
- •Логика и организация программы
- •1. Команда jmp.
- •2. Команда loop.
- •3. Сегмент стека.
- •4. Программа: расширение операции пересылки.
- •5. Программа: замена строчных букв на заглавные.
- •6. Команды сдвига и циклического сдвига.
- •7. Команды логических операций: and, or, xor, test, not.
- •Xor al,bl ;Логическое сравнение
- •Команды обработки строк
- •1. Rep: префикс повторения команды.
- •2. Программа: строковые операции.
- •3. Сканирование и замена.
- •4. Дублирование образца.
- •5. Программа: выравнивание справа при выводе на экран.
- •Арифметические операции 1: обработка двоичных данных
- •1. Сложение и вычитание.
- •2. Многословное сложение.
- •3. Умножение.
- •4. Повышение эффективности умножения.
- •5. Многословное умножение.
- •6. Сдвиг регистровой пары dx:ax.
- •7. Деление.
- •8. Деление вычитанием.
- •9. Преобразование знака.
- •Арифметические операции 2: обработка данных в форматах ascii и
- •1. Сложение в ascii-формате.
- •2. Вычитание в ascii-формате.
- •3. Умножение в ascii-формате.
- •4. Деление в ascii-формате.
- •5. Двоично-десятичный формат (bcd).
- •6. Преобразование ascii-формата в двоичный формат и наоборот.
- •Обработка таблиц
- •1. Прямой табличный доступ
- •2. Табличный поиск.
- •3. Табличный поиск с использованием сравнения строк.
- •4. Транслирующая команда xlat.
- •5. Программа: вывод шестнадцатиричных и ascii-кодов.
- •6. Программа: сортировка элементов таблицы.
- •Макрокоманды
- •If (условие)
- •If (условие)
- •1. Простое макроопределение.
- •2. Использование параметров в макрокомандах.
- •3. Комментарии в макрокомандах.
- •4. Использование макрокоманд внутри макроопределения.
- •5. Директива local.
- •6. Использование библиотек макроопределений.
- •7. Конкатенация (&).
- •8. Директивы повторения: rept, irp, irpc.
- •Inc ctr ;Увеличить счетчик
- •Inc dx ;Увеличить счетчик
- •Inc dx ;Увеличить счетчик
- •9. Макрокоманды, использующие директивы if и ifndef.
- •10. Макрокоманды, использующие директиву ifidn.
- •Связь между подпрограммами
- •1. Программа: использование директив extrn и public для меток.
- •2. Программа: использование директивы public в кодовом сегменте.
- •3. Программа: общие данные в подпрограмме.
- •4. Передача параметров.
Арифметические операции 1: обработка двоичных данных
МЕТОДИЧЕСКИЕ УКАЗАНИЯ:
1. 2 0Для выполнения лабораторной работы вы должны войти в каталог группы из панели NORTON. Каждый студент должен иметь в каталоге группы свой личный каталог. Все программы должны создаваться и записываться в личном каталоге студента.
2. Команда JMP для перехода в пределах от -128 до +127 байт имеет тип SHORT. Ассемблер генерирует в этом случае однобайтовый операнд в пределах от 00 до FF.
3. Вычитание осуществляется в компьютере по методу сложения с дополнительным кодом. Для получения дополнительного кода для вычитаемого числа устанавливаются обратные значения битов и прибавляется 1, а затем происходит сложение с первым числом (все отрицательные числа представляются в дополнительном коде признаком
которого является 1 в знаковом разряде).
4. При выполнении операций с байтовыми числами в регистрах микропроцессора старший бит байта является знаковым остальные семь битов числовыми данными, т.е. значения от -128 до +127. Если результат арифметической операции превышает эти пределы то возникает переполнение и этот результат нельзя считать правильным. Например:
Двоичный код Знаковое число
0111 1001 +121
0000 1011 +11
---------------------
1000 0100 -124
Для расширения диапазона арифметического результата применяется команда CBW, которая преобразует байт в слово. При этом в регистре будет старший знаковый разряд и 15 бит числовых данных.
Диапазон арифметического результата в этом случае будет в пределах от -32768 до +32767.
5. Перенос возникает если 1 вытесняется из байта. В этом случае результат операции со знаковыми данными также будет неправильным. Например:
Двоичный код Знаковое число
1111 0110 -10
1000 1001 -119
---------------------
0111 1111 +127
6. Если происходит и перемещение 1 в знаковый разряд и вытеснение 1 из байта, то при операции со знаковыми данными результат получается правильный. Например:
Двоичный код Знаковое число
1111 1100 -4
0000 0101 +5
----------------------
0000 0001 +1
7. Двоичный байт можно рассматривать как беззнаковые данные, считая старший бит не знаковым разрядом, а старшим разрядом двоичного числа. Тогда диапазон возможных чисел для байта будет от 0 до +255, а для двухбайтового регистра микропроцессора от 0 до +65535.
8. Если при операции с беззнаковыми данными происходит переполнение, то результат получается правильным:
Двоичный код Беззнаковое число
0111 1001 121
0000 1011 11
---------------------
1000 0100 132
9. Если при операции с беззнаковыми данными происходит перенос, то результат получается неправильным:
Двоичный код Беззнаковое число
1111 0110 246
1000 1001 137
---------------------
0111 1111 127
10. Если при операции с беззнаковыми данными происходит и перенос и переполнение, то результат будет неправильным:
Двоичное число Беззнаковое число
1111 1100 252
0000 0101 5
---------------------
0000 0001 1
11. Операция умножения для беззнаковых данных выполняется командой MUL, а для знаковых - IMUL. В случае умножения байта на байт множимое находится в регистре AL, множитель в памяти или в каком-либо регистре, а результат помещается в регистр АХ. В случае умножения двух слов множимое находится в регистре АХ, множитель в памяти или в другом регистре, а результат, состоящий из двух слов помещается: младшая (правая) часть в регистр АХ, а
старшая (левая) часть в регистр DX.
12. Операция деления для беззнаковых данных выполняется командой DIV, а для знаковых - IDIV.
13. При делении слова на байт делимое находится в регистре АХ, а делитель - в байте памяти или в однобайтовом регистре. После деления остаток получается в регистре АН, а частное - в AL.
14. При делении двойного слова на слово делимое находится в регистровой паре DX:AX, а делитель - в слове памяти или в регистре. После деления остаток получается в регистре DX, а частное – в регистре AX.
ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ: