- •Министерство образования и науки
- •Теоретические сведения
- •1.1. Регистры
- •1.1.2. Регистры общего назначения
- •1.1.3. Сегментные регистры
- •1.2. Регистр флагов
- •1.3. Представление данных
- •1.3.1. Целые числа без знака
- •1.3.2. Целые числа со знаком
- •1.3.3. Представление символьных переменных
- •1.4. Лексемы
- •1.4.1. Идентификаторы
- •1.4.2. Целые числа
- •1.4.3. Символьные данные
- •1.5. Предложения
- •1.5.1. Комментарии
- •1.5.2. Команды
- •1.5.3. Директивы
- •1.6. Директивы определения данных
- •1.6.1. Директива db
- •1.6.2. Директива dw
- •1.6.3. Директива dd
- •1.6.4. Директивы эквивалентности и присваивания
- •1.7. Выражения
- •1.8. Обозначения
- •1.9. Команды пересылки
- •1.9.1. Команда mov
- •1.9.2. Команда xchg (exchange)
- •1.10. Команды сложения и вычитания
- •1.10.1. Особенности сложения и вычитания целых чисел в пк
- •1.10.2. Команды сложения и вычитания
- •Например: Mov ah, 1
- •1.11. Команды умножения и деления
- •1.11.1. Команды умножения
- •1.11.2. Команды деления
- •1.12. Изменение размеров числа
- •Задание
- •Контрольные вопросы
- •Литература
1.11.2. Команды деления
Как умножение, деление чисел без знака и со знаком также реализуется двумя командами:
Деление целых без знака: DIV op
Деление целых со знаком: IDIV op
Команды действуют следующим образом:
а) деление слова на байт (op: r8,m8)
AH:=Ax mod <op>, Al:=Ax div op
б) деление двойного слова на слово: (op: r16,m16)
Dx:=(Dx,Ax) mod <op>, Ax:=(Dx,Ax) Div <op>
Примечание: При выполнении команды деления возможно появление ошибки с названием «деление на 0 или переполнение ». Она возникает в двух случаях:
-делитель равен 0 (ор=0);
-не полное частное не вмещается в отведённое ему место (например, при делении слова=600 на байт =2 результат типа байт =300 не войдет в AL)
При такой ошибке ПК прекращает выполнение программы.
1.12. Изменение размеров числа
Зачастую приходится увеличивать размер числа. Например, если необходимо сложить число, размером в слово, с числом размером в байт; таких команд в ПК нет, поэтому следует увеличить байт до слова. Если число трактуется как беззнаковое, то слева добавляются нули. А если число трактуется как знаковое, то в этом случае следует посмотреть на его знак и добавлять нули, если число 0 и FFh , если число < 0.
Для осуществления расширения числа типа Byteсо знаком в ЯА используется команда:
Расширение байта до слова:CBW
В этой команде операнд берётся из AL, а результат записывается в AX, т.е.
Флаги эта команда не меняет.
Аналогичная команда осуществляет расширение знакового числа из слова до двойного слова: AX (Dx, Ax)
Расширение слова до двойного слова: CWD
Действие команды:
Задание
Из таблицы 1 взять задание и написать программу, вычисляющую значение переменной R при указанных значениях.
Контрольные вопросы
Что такое регистр? Какие регистры Вы знаете?
Какие размеры данных Вы знаете?
Для чего используются флаги?
Каким образом хранятся в компьютере положительные и отрицательные числа, символы?
Что такое идентификатор? По каким правилам он строится?
Как строятся комментарии?
Опишите общие правила построения команды в ЯА?
Что такое директивы? Для чего они применяются?
Какие директивы используются для описания данных и констант?
Как записывается операнд-конструкция повторения?
Какие команды пересылки Вы знаете?
Расскажите о командах сложения и вычитания? В чем отличие команд сложения и вычитания, учитывающих значение флага CF, где они применяются?
Различают ли команды сложения и вычитания знаковых и беззнаковых чисел?
Расскажите о командах умножения и деления? Почему в этих командах один операнд?
Каким образом можно изменить размер числа? В каких случаях это может пригодиться?
Литература
Бредли Д. Програмирование на языке ассемблера для персональной ЭВМ фирмы IBM: Пер. в англ.- М.: Радио и связь, 1988. –448 с.
Скэнлон Л. Персональные ЭВМ IBM РС и ХТ. Програмирование на языке ассемблера: Пер. с англ. – М.: Радио и связь, 1991. –336 с.
Абель П. Язык Ассемблера для IBM РС и програмирования: Пер. с англ. – М.: Высшая школа, 1992. –477 с.
Нортон П., Сохуэ Д. Язык ассемблера для IBM РС: Пер. с англ. – М.: Издательство «Компьютер»; Финансы и статистика, 1992. –352 с.
Использование Turbo Assembler при разработке программ. – Киев: «Диалектика», 1994. –228 с.
Лямин Л. В. Макроассемблер MASM. – М.: Радио и связь, 1994. –320 с.
Пильщиков В.Н. Програмирование на языке ассемблера IBM РС. – М.: «ДИАЛОГ-МИФИ», 1996. –288 с.
Майко Г.В. Ассемблер для IBM РС: - М.: «Бизнес-Информ», «Сирин» 1997.-212 с.
Таблица 1
1 |
R=x2+y2,где x=a+b-c, y=b·c-a b=8, 106; a=30, 250; c=7, -3 |
2 |
R=x-y·z, где x=m-n, y=m+n, z=m·n-1 m=16,80; n=3,180 |
3 |
R=x+y-z, где x=m·n, y=m+n, z=m-n2 m=25,190; n=4,-60 |
4 |
R=x2-x·y, где x=m+n, y=m-n, z=x+y m=42,-15; n=15,51 |
5 |
R=x+y2-z, где x=3·m-h, y=m+3·n, m=8·n-15; z=3·x+y n=12 и 200 |
6 |
R=m·x+y+n·z, где a=m+m·r, y=n2+m2 m=3,-1; n=8,36 |
7 |
R=x·z-y, где x=m-2·r, y=m+2·n m=6,50; n=10,300 |
8 |
R=m·x+y2, где x=m+n, y=m-2·n m=42,-15; n=15,51 |
9 |
R=m·x+y·z-n, x=m+2·n, y=2·m-n m=6 и 380; z=x+y n=18 и 254 |
10 |
R=x-y-z, где x=m+n2, y=m2+n, m=3,-16; z=m2-n2 n=12,256 |
11 |
R=(x+y)·2 m=3,-19; n=24,260 |