Главная страница

Языком ассемблера. Для того, чтобы


Скачать 0.7 Mb.
НазваниеЯзыком ассемблера. Для того, чтобы
Дата12.12.2021
Размер0.7 Mb.
Формат файлаdoc
Имя файлаpractice10-4bu.doc
ТипПрограмма
#300621

И
12.12.2021
нформатика, 10 класс К.Ю. Поляков, Е.А. Ере
мин
  1. Компьютерная арифметика

Практические работы


Для выполнения этих работ используется учебный компьютер «ЛамПанель», который можно загрузить со страницы http://kpolyakov.spb.ru/prog/lamp.htm.

      1. Представление целых чисел


Знакомство с программой «ЛамПанель»

Программа «ЛамПанель» – это модель процессора, который управляет ламповой панелью, то есть, может с помощью специальных команд зажигать и гасить определенные лампочки.

Процессор обрабатывает данные, используя специальные сверхбыстродействующие ячейки собственной памяти – регистры. В этой работе мы будем использовать только четыре 16-битных регистра общего назначения, которые называются R0, R1, R2 и R3. В области 1 на рисунке вы видите двоичные значения этих регистров (показаны черным цветом), шестнадцатеричные (синий цвет) и десятичные, без учета знака (зеленый цвет) и со знаком (коричневый цвет).



Область 2 – это текстовый редактор, в котором набирается программа для процессора на специальном языке, который называется языком ассемблера. Для того, чтобы программа выполнилась, нужно нажать клавишу F9 (выполнение без остановки) или F8 (выполнение по шагам). Чтобы программа остановилась, процессор должен выполнить команду STOP. Таким образом, простейшая программа состоит из одной команды STOP.

Для того, чтобы записать число в регистр, используют команду MOV (от англ. move – переместить). Числа записываются в шестнадцатеричной системе счисления. Например, команда

MOV 12, R0

запишет число 1216 = 18 в регистр R0. Каждая команда записывается в отдельной строке. Поэтому полная программа будет выглядеть так:

MOV 12, R0

STOP

Для того, чтобы добавить число к регистру, применяют команду ADD (от англ. add – сложить). Например, команда

ADD 15, R0

добавляет число 1516 = 23 к регистру R0. Есть и аналогичная команда вычитания – SUB (от англ. subtract– вычесть). Нам будет нужна еще одна команда:

NOT R0

которая выполняет инверсию всех битов регистра, то есть меняет все нули на единицы, а единицы – на нули.

Задание на практическую работу



  1. Запустите тренажер «Лампанель».

  2. Используя команду MOV, напишите программу, которая заполнит регистры так, как на рисунке:



Не забудьте закончить программу командой STOP. Выполните программу.

Программа:

MOV F000, R0

MOV FF00, R1

MOV FFF0, R2

MOV FFFF, R3

STOP



  1. Запишите, какие десятичные числа были только что записаны в регистры:

    Регистр

    Десятичные значения

    без учета знака

    с учетом знака

    R0

    61440

    -4096

    R1

    65280

    -256

    R2

    65520

    -16

    R3

    65535

    -1

  2. Выполните программу

sub 1, R0

not R0

stop

при различных начальных значениях регистра R0 и запишите десятичные значения, полученные в R0 после выполнения программы (не забудьте перевести числа в шестнадцатеричную систему):

Начальное значение R0

Значение R0 после
выполнения программы

без учета знака

с учетом знака

5

65531

-5

10

65520

-16

25

65499

-37



Какую операцию выполняет этот алгоритм? Найдите описание этого алгоритма в учебнике.

Ответ:

Одинаковые



  1. При тех же начальных значениях регистра R0 выполните программу

not R0

add 1, R0

stop

и заполните таблицу (не забудьте перевести числа в шестнадцатеричную систему):

Начальное значение R0

Значение R0 после
выполнения программы

без учета знака

с учетом знака

5







10







25







Сделайте выводы, сравнивая результаты пп. 4 и 5.

Выводы:



  1. Используя программу «ЛамПанель», вычислите арифметические выражения и запишите результаты в таблицу (не забудьте перевести числа в шестнадцатеричную систему):

Выражение

Результат

без учета знака

с учетом знака

65530 + 9







32760 + 9







8 - 10







Подсказка: 65535=FFFF16, 32767=7FFF16

Программа первого примера:

Программа для второго примера:

Программа для третьего примера:

Объясните, почему при сложении в первом примере получилось именно такое число. Как его можно рассчитать без программы?

Объясните, почему при сложении во втором примере в варианте «с учётом знака» получилось именно такое число. Как его можно рассчитать без программы?

Объясните, почему при сложении в третьем примере в варианте «без учёта знака» получилось именно такое число. Как его можно рассчитать без программы?

      1. Арифметические операции с целыми числами


З накомство с программой «ЛамПанель»

Кроме регистров общего назначения, с которыми мы уже работали, в процессоре есть служебные регистры. В этой работе мы будем использовать один из них – регистр состояния PS. Используются только три младших бита этого регистра (см. рисунок), которые показывают, какой результат был получен в результате последней операции:

  • бит C (от англ. carry – перенос) установлен (равен 1), если произошел перенос; в остальных случаях сброшен (равен 0);

  • бит Z (от англ. zero– ноль) установлен, если результат последней операции – ноль; в остальных случаях сброшен;

  • бит N (от англ. negative– отрицательный) установлен, если результат последней операции отрицательный; в остальных случаях сброшен.

  • бит O (от англ. overflow– переполнение) установлен, если в результате последней операции произошло переполнение и результат неверен; в остальных случаях сброшен.

Эти биты могут учитываться при выполнении следующей команды. Например, для организации цикла использую команду перехода

JNZ метка

Если результат предыдущей операции НЕ равен нулю, то происходит переход на указанную метку. Вот пример программы, которая вычисляет сумму натуральных чисел от 1 до 5:

MOV 0, R0 ; начальное значение суммы

MOV 5, R1 ; количество шагов цикла

m: ; метка обозначает начало цикла

ADD R1, R0 ; R0:= R0 + R1

SUB 1, R1 ; уменьшить R1 – оставшееся число шагов

JNZ m ; переход, если получился не ноль

STOP

Здесь в каждой строчке после точки с запятой записан комментарий, объясняющий ее действие. Давайте проследим, как выполняется эта программа:

Команда

R0

R1

бит Z

переход

MOV 0,R0

0




1




MOV 5,R1




5

0




ADD R1,R0

5




0




SUB 1,R1




4

0




JNZ m







0

да

ADD R1,R0

9




0




SUB 1,R1




3

0




JNZ m







0

да

ADD R1,R0

12




0




SUB 1,R1




2

0




JNZ m







0

да

ADD R1,R0

14




0




SUB 1,R1




1

0




JNZ m







0

да

ADD R1,R0

15




0




SUB 1,R1




0

1




JNZ m







1

нет

STOP













Цикл заканчивается, потому что бит Z равен 1 (результат последней операции вычитания – ноль) и перехода по команде JNZ не происходит.

Задание на практическую работу



  1. Запустите тренажер «Лампанель». Вычислите приведенные выражения с помощью программы. Запишите в таблицу результаты, значение знакового бита и битов O, C, N и Z.
    Замечание: в программу нужно вводить числа в шестнадцатеричной системе счисления!

Выражение

Результат

Знаковый бит

Биты состояния

без учета знака

с учетом знака

O

C

Z

N

32760+32752






















-32760-32752






















256-256






















Подсказка: 32767=7FFF16

Программа первого примера:
Программа для второго примера:
Программа для третьего примера:
Объясните, почему в каждом из трёх примеров после выполнения программы установлены именно эти биты состояния:


  1. Определите, в каких случаях произошло переполнение. Выделите эти строки таблицы желтым фоном.



  1. С помощью программы, приведенной в теоретической части, вычислите сумму натуральных чисел от 1 до 100.

Программа:

Замечание: в программу нужно вводить числа в шестнадцатеричной системе счисления!

Ответ:



  1. Напишите программу, которая вычисляет значение факториала – произведения всех натуральных чисел от 1 до заданного числа. Например, факториал числа 5 равен .

Для выполнения умножения используйте команду MUL (см. справочную систему, клавиша F1).

Программа:

С помощью программы заполните таблицу:

N

N!

без учета знака

с учетом знака

5







6







7







8







9







Объясните результаты, полученные в последних двух строчках:

      1. Логические операции и сдвиги


Знакомство с программой «ЛамПанель»

В программе «ЛамПанель» можно использовать логические операции «НЕ» (уже знакомая нам команда NOT), «И» (команда AND), «ИЛИ» (команда OR) и «исключающее ИЛИ» (команда XOR). В последних трех командах после названия команды сначала указывается маска, а затем через запятую – регистр, к которому применяется логическая операция. Например, команда

AND FF,R0

обнуляет старшие 8 бит (старший байт) регистра R0. Маска может находиться в регистре, например, последовательность команд

MOV FF,R1

OR R1,R0

устанавливает в единицу 8 младших бит регистра R0, а остальные оставляет без изменений.

Для выполнения сдвигов используются следующие команды

SHL 1,R0 ; логический сдвиг влево на 1 бит

SHR 2,R0 ; логический сдвиг вправо на 2 бита

SAR 1,R0 ; арифметический сдвиг вправо на 1 бит

ROL 2,R0 ; циклический сдвиг влево на 2 бита

ROR 3,R0 ; циклический сдвиг вправо на 3 бита

Конечно, сдвиг может применяться к любому регистру общего назначения, а не только к R0.

Задание на практическую работу



  1. Запустите тренажер «ЛамПанель». Напишите программу, которая решает следующую задачу, используя логические операции:

В регистрах R1, R2 и R3 записаны коды трех десятичных цифр, составляющих трехзначное число (соответственно сотни, десятки и единицы). Построить в регистре R0 это число. Например, если R1=3116, R2=3216 и R3=3316, в регистре R0 должно получиться десятичное число 123.

Программа:


  1. Используя программу «ЛамПанель», определите и запишите в таблицу значения регистра R0 после выполнения каждой из следующих команд:




Команда

R0

1

MOV 1234, R0




2

XOR ABCD, R0




3

XOR ABCD, R0




Ответьте на вопросы:



  • как изменится результат выполнения программы, если в командах 2 и 3 заменить маску на другую, например, на CB2416?



  • как изменится результат выполнения программы, если маску в команде 2 изменить, а маску в команде 3 не менять?





  1. Запишите в таблицу десятичные числа, которые будут получены в регистре R0 после выполнения каждой команды этой программы при разных начальных значениях R0 (две команды выполняются последовательно одна за другой):

Начальное значение

255

254

252

-255

-254

-252

SHR 2,R0



















SHL 2,R0



















Замечание: не забудьте перевести числа в шестнадцатеричную систему!

Когда последовательное выполнение этих двух команд не изменяет данные?



  1. Напишите программу, которая решает следующую задачу, используя логические операции и сдвиги:

При кодирование цвета используются 4-битные значения составляющих R (красная), G (зеленая) и B (синяя). Коды этих составляющих записаны в регистрах R1, R2 и R3. Построить в регистре R0 полный код цвета. Например, если R1=A16, R2=B16 и R3=C16, в регистре R0 должно получиться число ABC16.

Программа:


  1. Напишите программу, которая умножает число в регистре R0 на 10, не применяя команду умножения. Используйте арифметические операции и сдвиги.

Программа:


http://kpolyakov.spb.ru



написать администратору сайта