Грудное вскармивание. ОргЭВМиС_лаб. Самостоятельная работа по написанию программы с использованием предлагаемых в качестве составных частей заготовленных фрагментов текста программы
Скачать 84.98 Kb.
|
Задание Требуется написать и отладить программу на языке ассемблера, эквивалентную следующему фрагменту программы на языке C. If((x > y) && (z < t) || (a != b)) c = d. Для временного хранения переменных a, b, c, d, x, y, z, t используйте регистр AX. Для реализации проверки условий используйте команду CMP, которая осуществляет вычитание источника (второй операнд команды) из приемника (первый операнд команды). Счет операндов осуществляется слева направо. В результате вычитания устанавливаются соответствующие флаги, для проверки которых используется команды условного перехода jne, jng, jnl. Требуется написать и отладить программу, реализующую структуру управления CASE, используя таблицу переходов. В данном примере используется пустая последовательность операторов для каждой метки выбора. Фрагмент программы CASE представлен ниже. mov bx,I; значение I от 0 до 2 определяет набор операторов, соответствующих метке выбора ;shl bx,1; умножение на два (если размер адреса в таблице переходов составляет 4 байта) Jmp cs:jump_table[bx] jump_table dw foo0, foo1, foo2; таблица переходов foo0: call case0 jmp endcase foo1: call case1 jmp endcase foo2: call case2 jmp endcase case0: ret; пустая последовательность операторов case1: ret case2: ret endcase: mov ax,4C00h int 21h END begin; метка начала программы Лабораторная работа 5. Программирование ветвлений. Цель: освоение процесса отладки программы, вычисляющей заданную функцию. Работа осуществляется с использованием средств ассемблирования и средств отладки. Необходимые пояснения На практике часто возникает необходимость описания многих ветвей решения задачи. В данной работе необходимо для заданных значений a, b, i, k осуществить различные вычисления. Значения a, b, i, k являются исходными данными, которые должны выбираться студентом самостоятельно и задаваться в процессе исполнения программы в режиме отладки. При этом следует рассмотреть всевозможные комбинации параметров a, b и k, позволяющие проверить различные маршруты выполнения программы (по указанию преподавателя). Рекомендуется при вычислении функций fn1 и fn2 вместо операции умножения использовать арифметический сдвиг и, возможно, сложение. При реализации функций fn1 и fn2 следует стремиться к минимизации длины кода. Задание Требуется разработать на языке Ассемблер IBM PC программу, которая по заданным целым значениям a, b, i, k вычисляет сначала значения i1 = fn1(a, b, i) и i2 = fn2(a, b, i), а затем значение res = fn3(i1, i2, k). Вид функций fn1, fn2 определяется из табл. 1, а вид функции fn3 - из табл. 2. Символы n1, n2, n3, используемые в описании функции f, соответствуют числовым индексам функции, которые представлены тремя соответствующими цифрами в табл. 3 индивидуальных заданий (n1, n2, n3).
Таблица 3
|