|
Базовые знания, необходимые для выполнения данной работы• устройство микропроцессора (арифметико-логическое устройство); • основные логические операции и таблицу основных логических операций; • понятие сдвига и виды команд сдвига. Теоретические основы Основные логические операции • логическое отрицание (NOT); результат - ИСТИНА, если аргумент - ЛОЖЬ; • конъюнкция/логическое умножение (AND); результат - ИСТИНА, если оба аргумента - ИСТИНА; • дизъюнкция/логическое сложение (OR); результат - ИСТИНА, если хотя бы один аргумент - ИСТИНА; • исключающее ИЛИ (XOR); результат - ИСТИНА, если только один аргумент - ИСТИНА. Таблица логических операций В МП типа i486/Pentium логические команды могут быть 8-ми, 16-ти и 32-х разрядными, т.е. оперировать, соответственно, байтами, словами и двойными словами. Логические команды Команда NOT Форматы команды NOT r/m8 NOT r/m16 NOT r/m32 Команда выполняет инверсию битов указанного в команде операнда. Команда NOT не влияет на флаги. Пример: MOV AL, 00001111b NOT AL; AL = 11110000b Команда AND Форматы команды AND AL, imm8 AND AX, imm16 AND EAX, imm32 AND r/m8, imm8 AND r/m16, imm16 AND r/m32, imm32 AND r/m16, imm8 AND r/m32, imm8 AND r/m8, r8 AND r/m16, r16 AND r/m32, r32 AND r8, r/m8 AND r16, r/m16 AND r32, r/m32 Команда может быть использована для сброса битов. Пример: Mov AL, 11111111b and AL, 00001111b; AL = 00001111b Команда OR Форматы команды те же, что и у AND. Команда может быть использована для установки битов. Пример: Mov AL, 00001111b or AL, 11110000b; AL = 11111111b Команда XOR Форматы команды те же, что и у AND. Команда может быть использована для обнуления регистров, а также для инвертирования битов. Пример: xor AX, AX; AX = 0000000000000000b Mov AL, 00001111b xor AL, 11111111b; AL = 11110000b Команда TEST Форматы команды те же, что и у AND. Команда выполняет операцию AND, но не изменяет операнд-приемник. Воздействует на флаги SF, ZF и PF. Пример вычисления логического выражения Пусть X = true, Y =false. Нужно вычислить значение выражения: Z = X or not (Y and not (X xor Y)). (Очевидно, что ответ-true.) mov AX, X; X = true mov BX, Y; Y = false Mov CX, AX; копия X Xor CX, BX; X xor Y Not CX; not(X xor Y) and CX, BX; Y and... not CX; not(Y and...) or CX, AX; X or not(...) ;---------------------------------------- X dw 0FFFFh Y dw 00000h Виды сдвигов В зависимости от того, куда переносятся выдвинутые биты и как заполняются освободившиеся биты, команды сдвигов делятся на два вида: • линейный сдвиг; • циклический сдвиг. По направлению сдвига команды делятся на команды сдвига влево и, соответственно, вправо. Команды сдвига могут быть 8-ми, 16-ти и 32-х разрядными. В зависимости от разрядности могут сдвигать, соответственно, на 7, 15 или 31 разряд. Кол-во сдвигаемых бит может указываться непосредственным значением или в регистре CL. При этом флаг CF содержит значение последнего выдвинутого бита . Команды линейных сдвигов 3.5 3.4.1 Команды SHR\SHL (логический сдвиг вправо \влево) Форматы команд shr r/m8, 1 shr r/m8, CL shr r/m8, imm8 shr r/m16, 1 shr r/m16, CL shr r/m16, imm8 shr r/m32, 1 shr r/m32, CL shr r/m32, imm8 Команды осуществляют сдвиг битов с потерей выдвинутых битов и обнулением освободившихся. Могут применяться для умножения \ деления беззнаковых целых чисел на степени числа 2 (2d=10b). Пример. Необходимо умножить содержимое регистра AX на 8. Shl AX, 3
Считается, что применение команд сдвига вместо команд умножения \деления эффективнее с точки зрения быстродействия. Кроме того, две команды Shl AX, 1 Shl AX, 1 эффективнее команд Mov CL, 2 Shl AX, CL 3.4.2 Команды SAR\SAL (команды арифметического сдвига вправо\влево) Форматы команд Форматы команд те же, что и у SHR\SHL. Команды арифметического сдвига оставляют на месте знаковый разряд. А при сдвиге вправо ещё и размножают его. Результат сдвига вправо не совпадает с результатом деления, выполняемого командой idiv. Сравните: Sar AX, 3 и Idiv 8 3.4.3 Команды SHRD\SHLD (команды сдвига вправо\влево с двойной точностью) Форматы команд shrd r/m16, r16, imm8 shrd r/m32, r32, imm8 shrd r/m16, r16, CL shrd r/m32, r32, CL Приемник сдвигается вправо\влево на число бит указанное в счетчике. Старший (для SHRD) или младший (для SHLD) бит не обнуляется, а считывается из источника, значение которого не изменяется. Например, если приемник содержит 00101001b, источник - 1010b, счетчик - 3, SHRD даст в результате 01000101b, а SHLD - 01001101b (проверьте это). Команды циклического сдвига 3.5.1 Команды ROR\ROL (циклический сдвиг вправо\влево) Форматы команд ror r/m8, 1 ror r/m8, CL ror r/m8, imm8 ror r/m16, 1 ror r/m16, CL ror r/m16, imm8 ror r/m32, 1 ror r/m32, CL ror r/m32, imm8 Осуществляют сдвиг битов без потери выдвинутых битов. Выдвинутые биты переносятся на место освободившихся. Можно применять для обмена значениями младшую и старшую половину байта: Mov AL, 11110000b ror AL, 4; AL = 00001111b (проверьте это). 3.5.2 Команда RCR\RCL (циклический сдвиг вправо\влево) Форматы команд Форматы команд те же, что и у команд ROR\ROL. Отличаются от команд ROR\ROL тем, что флаг CF рассматривают как расширение приемника. Выдвинутый бит помещается в CF, а на следующем такте пересылается в самый младший бит (убедитесь в этом). Задание Выполните 5 (пять) упражнений из нижеприведенного списка, выбирая по следующему принципу: пусть номер студента с списке группы N, тогда выполняются упражнения с номерами N, N+1, N+2, N+3, N+4. Пусть X = true, Y = false. Нужно вычислить значение выражения: 1. (not(X or Y)) xor (X and Y) 2. (not X) or (X xor (X and Y)) 3. Y xor (X and (not(X and Y))) 4. X and (Y xor (not(X or Y))) 5. (not(X and Y)) or (X xor Y) 6. X or (not(X xor (X and Y))) 7. Y and (not(X or (Y xor X))) 8. (not(X xor Y)) or (Y and X) 9. (X or (not Y)) xor (X and Y) 10.(X xor Y) and (X or (not X)) 11.(X and (not Y)) or (Y xor X) 12.(X and Y) xor (not(X) or Y) 13.(not(X and Y)) or (X xor Y) 14.not(X) or not(Y) xor X 15.(not X) or (not Y) and (X xor Y) 16.X xor (not (X and Y)) or Y 17.Y and (X or Y) xor Y 18.(not(X and Y)) xor Y or X 19.(X xor Y) or (not(X and Y)) 20.(not(X or Y)) xor (X and Y) 21.(Y xor X) and (X or not(X)) 22.(not X) xor (not Y) or (X) and (Y) 23.(Y) and (not(X)) or (not(X xor Y)) 24.X xor (not X) or (Y and X) 25.(Y) or (Y and X) xor (not X) 26.Y or not(Y) xor (X and Y) 27.X or (X xor Y) and not(Y) 28.Y and not(X) xor (X or Y) 29.(Y) and not(X xor (Y or X)) 30.(not X) or (not(X xor (Y and X))) 5 Контрольные вопросы 1. Таблица основных логических операций. 2. Примеры применения логических команд. 3. Понятие сдвига и виды сдвига. 4. Как эффективно осуществить умножение \деление на степень числа 2. 5. Как обменять значениями младшую и старшую часть байта \двойного слова.
Лабораторная работа №7 Конфликты в семейной жизни. Как это изменить? Редкий брак и взаимоотношения существуют без конфликтов и напряженности. Через это проходят все... ЧТО ПРОИСХОДИТ ВО ВЗРОСЛОЙ ЖИЗНИ? Если вы все еще «неправильно» связаны с матерью, вы избегаете отделения и независимого взрослого существования... Что делать, если нет взаимности? А теперь спустимся с небес на землю. Приземлились? Продолжаем разговор... ЧТО ТАКОЕ УВЕРЕННОЕ ПОВЕДЕНИЕ В МЕЖЛИЧНОСТНЫХ ОТНОШЕНИЯХ? Исторически существует три основных модели различий, существующих между... Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:
|