Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
ЛАБОРАТОРНАЯ РАБОТА № ____
Цель работы: изучение регистровой структуры микропроцессоров i80х86, различных арифметических команд и приобретение практических навыков их использования в программе.
1. Теоретические положения
ADD выполняет сложение двух операндов, заданных в команде. Микропроцессор помещает результат на место первого, приемника (П). Второй операнд, источник (И) - не изменяется. Команда корректирует регистр флагов в соответствии с результатом сложения (фиксируя, был ли результат нулевым, отрицательным, имел ли четное кол-во «1» бит, были ли перенос или переполнение).
Формат команды: ADD Oперанд1, Oперанд2 (иначе: ADD П, И)
Пример: ADD AX, BX
Операнд1 может размещаться в регистре общего назначения или памяти; Операнд2 в регистре общего назначения, памяти или быть константой. Необходимо помнить, что сразу оба операнда - не могут размещаться в памяти.
ADC команда сложения с учетом переноса, т.е. к сумме двух операндов прибавляется значение флага переноса (флаг CF). Для любой формы команды ADD существует соответствующая ей команда ADC.
SUB аналогична по формату команде сложения ADD. Выполняет вычитание операнда источника (И) из операнда приемника (П). Результат операции сохраняется на месте операнда приемника, устанавливаются флаги в соответствии с результатом операции, причем флаг переноса теперь означает «заем».
Формат команды: SUB П, И
Пример: SUB AX, BX. (после выполнения в рег-ре АХ будет разность АХ-ВХ).
SBB команда вычитания с заемом. Учитывает флаг заема при вычитании, т.е. значение заема (флаг CF ) вычитается из результата, полученного при обычном вычитании.
NEG команда изменения знака операнда (в дополнительном коде).
Формат команды: NEG Oперанд. (тут 1 операнд, он и источник, и приемник)
Пример: NEG AX
INC команда увеличения. Прибавляет 1 к операнду.
Формат команды: INC Oперанд
Пример: INC AX
DEC команда уменьшения. Отнимает 1 от операнда. Например, DEC AX
MUL, IMUL команды умножения. По команде MUL умножаются два целых числа без знака, при этом получается число без знака. По команде IMUL умножаются целые числа со знаком, представленные в дополнительном коде, и получается результат, имеющий правильный знак и значение, в дополнительном коде.
Формат команды: MUL Oперанд ( или IMUL Oперанд )
Операнд может размещаться в регистре или памяти.
Тип команды определяется по длине операнда, указанного в команде.
По длине операндов, участвующих в операции, можно различать:
а) - умножение байт. - (на операнд длиной байт, указанный в команде, умножается значение длиной в байт, размещенное в регистре AL). Результат операции длиной слово сохраняется при этом в регистре AX.
Например: команда MUL CH - даст результат (AL * СН ) в регистре AX.
б) - умножение слов. (на операнд длиной слово, указанный в команде, умножается значение длиной в слово, размещенное в регистре AХ. Результат операции длиной двойное слово сохраняется в паре регистров (DX, AX).
Например: команда MUL ВХ:
Поскольку здесь в качестве операнда используется регистр BX, то следовательно умножаются слова). Эта команда даст результат (произведение AХ и СХ ) в регистрах DX, AX, причем младшие 16 бит результата в регистре АХ, а старшие в регистре DX.
DIV, IDIV команды деления. Команда деления DIV выполняет деление без знака и дает как частное, так и остаток. Деление целых чисел со знаком IDIV отличается от команды DIV только тем, что оно учитывает знаки обоих операндов. Если результат положителен, все происходит так же, как и у DIV, за исключением того, что максимальное значение частного соответственно равно +127 и +32767, для байтов и слов. Если результат отрицателен, то остаток имеет тот же знак что и частное. Минимальные значения частных для отрицательных результатов 128 и 32768 для байтов и слов соответственно.
Формат команды: DIV Oперанд ( или IDIV Oперанд )
Операнд, указываемый в команде, является делителем (длиной байт или слово). и может размещаться в регистре или памяти. Делимое определяется по умолчанию, причем обязательно его разрядность вдвое больше разрядности делителя. Таким образом, по длине делителя определяется вариант действия команды:
а) - деление слова на байт.
Значение длиной в слово, размещенное в регистре AХ, делится на операнд длиной байт, указанный в команде. Результат операции: частное длиной байт сохраняется в регистре AL, остаток от деления длиной байт пишется в регистр AH.
б) - деление двойного слова на слово.
Значение длиной в двойное слово, размещенное в паре регистров DX, AХ (младшие 16 бит в регистре АХ, а старшие 16 бит в регистре DX), делится на операнд длиной слово, указанный в команде. Тут результат операции: частное длиной слово сохраняется в регистре AХ, остаток от деления длиной слово запишется в регистр DX.
Пример: DIV BL. (Поскольку в команде указан операнд длиной в байт, то выполняется деление содержимого регистра АХ на содержимое регистра BL). В результате целая часть частного будет получена в AL, и остаток от деления - в AH.
CBW команда «знакового расширения» байта до слова. Значение ЧСЗ, хранимое вначале в байте AL, преобразуется в слово и сохраняется в регистре AX.
CWD команда «знакового» расширения слова до двойного слова. Значение ЧСЗ, хранимое в байте AХ, преобразуется в двойное слово и сохраняется в паре регистров DX, AX. Заметьте: в DX все биты просто повторят знаковый бит из AX.
2. Порядок выполнения работы
2.1. Составить программу для расчета заданного арифметического выражения. Длину и значение переменных A, B, C выбрать самостоятельно. Константы, заданные в выражении, использовать в кодовом сегменте.
2.2. Описать команды умножения и деления, используемые в программе на предмет длины операндов, участвующих в операции. Охарактеризовать длину результата и место его хранения.
2.3. Получить загрузочный модуль.
2.4. Протестировать выполнение программы в отладчике.
Варианты заданий приведены в Приложении А.
3. Содержание отчета
Приложение А
Варианты заданий к лабораторной работе
Вариант |
ЕСЛИ |
ТО R = |
ИНАЧЕ R = |
1 |
A > B |
A*((366-B)+179)/ (C+73) |
A+B |
2 |
A < B |
A*(864/B-181/C)+7 |
A - B |
3 |
A = B |
A+(212+B/32)*C-31 |
A+2B |
4 |
A <> B |
A*32+B*(28/C-56) |
A - 2B |
5 |
A >- B |
A-328/(B*103/(C-36)) |
A+B + C |
6 |
A < 2B |
A*166-(B/569+C)*752 |
A B + C |
7 |
A = 2B |
56*A+785/(B-C) |
A+2B - C |
8 |
A <>2B |
((A-52)*(A+52)+B)/C |
2A - 2B |
9 |
A > C |
(A+752*B)/13-C |
C+B |
10 |
A < C |
(A+B)*((C-563)/5-16) |
C - B |
11 |
A = C |
(A+B/32)*C-31 |
C+2B |
12 |
A <> C |
A/(B*103)+C-99 |
C - 2B |
13 |
A >- C |
A+752*B-(C-256) |
C+A |
14 |
A < 2C |
A-(867/C*(104-B-28)) |
C - A |
15 |
A = 2C |
((C64)*(B+81)+А)/42 |
C+2A |
16 |
A <>2C |
(A 481/B)/85*(C-44) |
C - 2A |
17 |
B > C |
A *90+B/(54-C)*7 |
A + B - C |
18 |
B < C |
C /255-B/(7+B)*7 |
A+B |
19 |
B = C |
C *(59-B/19+А)+10 |
A - B |
20 |
B <> C |
C*(89*B-15)/(B+82)+А |
A+2B |
21 |
B >- C |
(A-(607+B*92)/C)*50 |
A - 2B |
22 |
B < 2C |
(A+426)/(B*194+C)*11 |
A+B + C |
23 |
B = 2C |
A*414-(B+188*C)/34 |
A B + C |
24 |
B <>2C |
(A+891/(B*159+C))*76 |
A+2B - C |
25 |
B <> C |
C*(89*B-15)/(А+82)+А |
A+2B |
26 |
B >- C |
(С-(300+B*92)/А)*20 |
A - 2B |
27 |
C > -B |
(A+475)/(B*125-C)*70 |
2A - 2B |