Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практическая работа №8,9.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
366.63 Кб
Скачать

Практическая работа №8,9

Тема 1. Организация ветвлений на языке Ассемблера

Тема 2. Организация циклов на языке Ассемблера Условное и безусловное ветвление (переходы)

Управляющие механизмы машинных языков (язык ассемблерасистема команд компьютера) обычно включают:

  • Безусловный переход: команду, которая передает управление команде с указанным адресом расположения в памяти. В ниже приведенном примере такая команда появляется как BR Address, где Address — адрес памяти целевой команды;

  • Условный переход: передает управление по заданному адресу при выполнении условия или следующей команде, если условие не выполняется. В нашем примере проверяется условие равенства двух значений:BEQ Value1 Value2 Address. Мнемоника команды "Branch если EQual".

Для языка ассемблер (примеры приводятся на этом уровне) адреса являются условными. Фактические адреса памяти появляются в процессе загрузки программы.

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

Рассмотрим составной оператор:

if a = b then

Составной_1

else

Составной_2

End

В машинном коде это может выглядеть так

100 BEQ loc_a loc_b 104

101 …Код для составной_2

102 …

103 BR 106

104 …Код для составной_1…

105 …

106 …Код для продолжения программы…

Здесь loc_a и loc_b задают адреса памяти, хранящие значения. Числа слева задают адреса команд, начиная с адреса 100 (просто в качестве примера). Определение точного расположения в памяти машинного кода, связанного с каждым программным элементом, является непростой задачей. Ее решением занимаются разработчики компиляторов, а не прикладные программисты, специализирующиеся на разработке приложений.

По примеру кода для условного оператора вам придется, выполняя упражнение, построить структуру кода, который компилятор строит для цикла.

Оператор goto

Команды перехода, условные и безусловные, отражают базисные операции, которые может выполнять компьютер: проверять выполнение некоторых условий, таких как равенство двух значений, хранящихся в памяти, передавать управление команде, хранящейся в памяти по определенному адресу. Все языки программирования имели в свое время, а некоторые и до сих пор предлагают оператор goto, чье имя образовано слиянием двух английских слов "go to" (перейти к). В таких языках можно приписать каждому оператору программы метку:

some_label: some_instruction

Здесь some_label — это имя, которое вы даете оператору. Общепринято метку отделять от оператора символом двоеточие, хотя возможны и другие соглашения. При компиляции компилятор отображает метки в условные адреса (100. 101, ...), появляющиеся в нашем примере машинного кода. Языки с goto включают оператор безусловного перехода в форме:

goto label

Эффект выполнения этого оператора состоит в том, что управление передается оператору с меткой, заданной оператором перехода.

Вместо красивого условного оператора if condition then Compound_1 else Compound_2 end старые языки программирования имели более примитивный оператор выбора test condition simple_instruction, выполняющий simple_instruction, если condition истинно, в противном случае выполнялся оператор, следующий за тестом.

Такой оператор легко отображается в команды машинных языков, такие как BEQ. При использовании goto эквивалентным представлением оператора test будет следующий код:

test condition goto else_part

Compound_2

goto continue

else_part: Compound_1

continue:... Продолжение программы...

Это менее ясно, чем условный оператор с его симметричной иерархической структурой, в особенности с учетом вложенности. Игнорируя часть from, цикл можно было бы представить как:

start: test exit_condition goto continue

Body

goto start

сontinue: ...Продолжение программы...

Поток управления включает два оператора перехода — две ветви, идущие в разных направлениях.

Рис. 7.15. Блок-схема цикла