Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Задание на лабораторную работу




Задание на лабораторную работу

· написать программу на ассемблере, вычисляющую значение выражения с использованием арифметических команд сложения, вычитания, умножения и деления;

· проверить работу программы в отладчике.

 

Варианты заданий на лабораторную работу

1. a + b / (2 – c) * d – 1 2. (a – b) / (2 + c) * d 3. a * b / (c * d) – 5 4. a – b * c * (3 + d) + 2 5. (a – 4) / (b + c) – d 6. a – b / (c + d * 2) 7. a * 5 – (b + c + d) / 2 8. (a – b * c) / (d + 5) 9. a + b / c – d * 5 + 1 10. a / (3 * b – c) + d   11. (a – b) / 2 + (c + d) / 3 12. (a + 1) / (b – 1) + c * d 13. (a – b * (c – d)) / 4 14. –a * b + (c – 1) / d + 1 15. a / (b * (c + 1)) – d 16. (a + b) * (c + 3) / (d – 1) 17. (a – b + c * 2) / (d + 5) 18. (a – b / c) * (d – 3) + 1 19. a + 2 * b – 3 * (c – d) 20. a * (3 + b) – 2 * (c + d)  

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

1. Для чего служит команда MOV?

2. Какие требования предъявляются к операндам команды MOV?.

3. Какие арифметические команды существуют для МП 8086?

4. Чем отличаются команды IMUL и MUL?

5. Что произойдет, если результат от деления не помещается в операнде назначения?

6. Из каких операций состоит процесс компиляции программы на ассемблере?

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

Логические команды языка ассемблер

    Цель работы: Изучить логические команды МП8086. Закрепить навыки компиляции программ на ассемблере и использования отладчика Turbo Debugger.

 

    К логическим командам относятся команды побитовых логических операций, таких как «И», «ИЛИ», «НЕ», «ИСКЛЮЧАЮЩЕЕ ИЛИ» и различные команды сдвигов (логические, арифметические, циклические).

    Команда AND – это команда побитовой логической операции «И» (конъюнкция). Синтаксис и требования к операндам для команды AND – такие же, как и для команды ADD. Для каждого бита приемника и источника выполняется операция «И», а результат записывается в приемник, или: приемник: = приемник AND источник. Команда воздействует на флаги CF, OF, PF, SF и ZF (значение флага AF не определено).

    Пример использования команды AND:

MOV AL, 10101010B

MOV AH, 01010101B

AND AL, AH                            ; AL = 0

MOV AL, 0FFH

AND AL, AH                            ; AL = AH

    Команда OR – это команда побитовой логической операции «ИЛИ» (дизъюнкция). Синтаксис и требования к операндам для команды OR – такие же, как и для команды AND. Для каждого бита приемника и источника выполняется операция «ИЛИ», а результат записывается в приемник, или: приемник: = приемник OR источник. Команда воздействует на флаги CF, OF, PF, SF и ZF (значение флага AF не определено).

    Пример использования команды OR:

MOV AL, 10101010B

MOV AH, 01010101B

OR AL, AH                               ; AL = 0FFH

MOV AL, 0

OR AL, AH                               ; AL = AH

    Команда XOR – это команда побитовой логической операции «ИСКЛЮЧАЮЩЕЕ ИЛИ» (сложение по модулю 2). Синтаксис и требования к операндам для команды XOR – такие же, как и для команды OR. Для каждого бита приемника и источника выполняется операция «ИСКЛЮЧАЮЩЕЕ ИЛИ», а результат записывается в приемник, или: приемник: = приемник XOR источник. Команда воздействует на флаги CF, OF, PF, SF и ZF (значение флага AF не определено).

    Пример использования команды XOR:

MOV AL, 11111111B

MOV AH, 01010101B

XOR AL, AH                             ; AL = 10101010B

XOR AL, AL                             ; AL = 0

Команда NOT – это команда побитовой логической операции «НЕ» (инверсия). Синтаксис и требования к операндам для команды NOT – такие же, как и для команды INC. Команда инвертирует значение каждого бита операнда, или: операнд: = NOT операнд. В отличие от команды NEG команда NOT просто инвертирует биты операнда и не может использоваться для изменения знака числа, а только для преобразования числа из прямого кода в обратный. Команда не меняет значение флагов.

    Пример использования команды NOT:

MOV AX, 0FFFFH

NOT AX                          ; AX = 0

    Команда TEST аналогична команде AND за исключением того, что не меняет значений своих операндов, а лишь воздействует на флаги CF, OF, PF, SF и ZF (значение флага AF не определено).

    Пример использования команды TEST:

A DB 0FFH

. . .

TEST A, 80H          ; сбрасываются CF, OF, PF, SF и ZF

MOV A, 0FH

TEST A, 10H          ; устанавливаются ZF и PF

    Команды SHL и SHR являются командами логического сдвига. Команды сдвигают все биты своего операнда на 1 разряд или CL разрядов. Команда SHL сдвигает биты влево, а команда SHR – вправо. Те биты, которые в результате выполнения команд выходят за разрядную сетку заносятся во флаг CF. Освобождающиеся в результате сдвига биты заполняются нулями. Синтаксис команд SHL и SHR:

SHL < операнд>, < 1 или CL>

SHR < операнд>, < 1 или CL>

Первый операнд может быть 16- или 8-битным регистром (не сегментным) или ячейкой памяти с прямой или косвенной формой адресации. При использовании косвенной формы адресации необходимо указать тип операнда (8 или 16 бит) с использованием синтаксических конструкций “BYTE PTR” или “WORD PTR”. Второй операнд команд SHL и SHR может быть либо 1, что означает сдвиг на 1 разряд, либо регистром CL, что означает сдвиг на число разрядов, указанное в регистре CL. Использование в качестве второго операнда других выражений исключается.

    Команды SHL и SHR можно использовать для быстрого умножения операнда на степени числа 2 (команда SHL) или деления (команда SHR). Однако следует отметить, что в этом случае команды SHL и SHR не учитывают знак операнда и их можно использовать только для умножения/деления беззнаковых чисел. Команды воздействует на флаги CF, OF, PF, SF и ZF (значение флага AF не определено).

    Пример использования команд SHL и SHR:

MOV AL, 0FFH

MOV CL, 4

SHR AL, CL           ; AL = 0FH

SHL AL, CL            ; AL = 0F0H

SHR AL, 1              ; AL = 78H

SHL AL, 1              ; AL = 0F0H


    Команды SAL и SAR аналогичны командам SHL и SHR, но являются командами арифметического сдвига и учитывают знак операнда при сдвиге вправо. Это значит, что освобождающиеся в результате сдвига вправо старшие биты заполняются битом знака операнда. Так как знак операнда при сдвиге влево не имеет значения, команда SAL полностью идентична команде SHL, просто имеет другое мнемоническое обозначение.

    Пример использования команды SAR:

MOV AL, -8

MOV CL, 2

SAR AL, CL                     ; AL = -2

    Команды ROL и ROR являются командами циклического сдвига – они сдвигают свои операнды, и биты, которые при этом вышли за разрядную сетку слева (для команды ROL) или справа (для команды ROR), заносятся в освободившиеся биты справа или слева соответственно. Команда ROL сдвигает биты своего операнда влево, а команда ROR – вправо. Синтаксис и требования к операндам у команд ROL и ROR – такие же, как и для команд SHL и SHR.

    Пример использования команд ROL и ROR:

X DB 11010111B

. . .

MOV CL, 4

ROL X, CL             ; X = 01111101B

ROR X, 1                ; X = 10111110B

    Команды RCL и RCR аналогичны командам ROL и ROR, но выполняют циклические сдвиги через флаг переноса. Это означает, что при сдвиге операнда на 1 бит, тот бит, который вышел за разрядную сетку, заносится во флаг CF, а значение флага CF перед этим, в свою очередь заносится в освободившийся бит. При сдвиге операнда на несколько бит описанная операция повторяется CL раз. Команда RCL сдвигает биты операнды влево, а RCR – вправо.

    Пример использования команд RСL и RСR (предполагается, что флаг CF установлен):

MOV BL, 01011100B

RCL BL, 1              ; BL = 10111001B, CF сброшен

MOV CL, 3

RCR BL, CL           ; BL = 11001010B, CF установлен

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...