Программная логика, т. е. сущность основных этапов вычислений и последовательность их выполнения, наиболее четко отражается в блок-схемах, представляющих собой способ графического описания алгоритмов. Отдельным этапам вычислений в блок-схемах соответствуют прямоугольники различных размеров. Прямоугольники соединяются стрелками, показывающими порядок выполнения отдельных вычислений.
Пожалуй, одним из самых существенных элементов блок-схем является блок присваивания, соответствующий этапу, на котором выполняются различные арифметические и логические операции, и при этом результаты записываются в память. Блок присваивания имеет вид прямоугольника, внутри которого помещается специального вида предложение, описывающее необходимые вычисления. В наиболее общей форме блок присваивания выглядит так:
Здесь переменная — это символическое имя некоторой ячейки памяти, а выражение представляет собой обычно алгебраическое выражение, значение которого присваивается переменной (помещается в память по соответствующему адресу). Стрелкой-«-изображается операция записи в память. Таким образом, приведенный выше блок означает следующее: «Вычислить выражение справа от стрелки и записать результат по адресу, задаваемому символическим именем, расположенным слева от стрелки». В качестве примера мы можем рассмотреть блок
Первая программа на ассемблере.
что соответствует вычислению разности между квадратом числа, находящимся в памяти по адресу у, и числом 2 и записи результата по адресу х. Значение выражения считается определенным только в том случае, когда всем входящим в него переменным уже присвоены значения. В предыдущем примере значение у2—2 невозможно вычислить, если предварительно какое-то значение не было присвоено переменной у. Мы можем написать что-нибудь вроде
Можно также поместить оба предложения в один блок:
В случае когда внутри блока записано более, чем одно предложение, вычисления выполняются в обычном порядке, т.е. сверху вниз.
Первым блоком блок-схемы всегда является блок начало, позволяющий читателю легче определить начало блок-схемы при рассмотрении последовательности вычислений. Блок начало имеет вид кружка с записанным внутри словом START:
Аналогичнаблок конец символизирует окончание блок-схемы:
Информация, вводимая с перфокарт, обозначается на блок-схеме в виде блока, по форме напоминающего перфокарту. Внутри такого блока пишутся имена ячеек, в которые был осуществлен ввод. Так, например, блок
означает «Считать три числа с перфокарт и запомнить первое по адресу х, второе — по адресу у, и третье — по адресу z». Вывод на печать обозначается на схеме в виде блока, по форме напоминающего неровно оторванный лист выдачи. Список имен ячеек, содержимое которых должно быть распечатано, приводится внутри блока.
означает «Распечатать содержимое ячеек а, bи с».
Отдельные блоки блок-схемы соединяются с помощью стрелок. При чтении блок-схемы мы просто просматриваем ее в порядке, определяемом направлением стрелок, предполагая, что при прохождении каждого из блоков выполняются соответствующие ему вычисления. На рис. П.1 приведена блок-схема программы, вводящей с карт два числа, S иТ, вычисляющей их сумму SUM, разность DIF и распечатывающей результаты в порядке S, Т, SUM и DIF.
ЯЗЫК АССЕМБЛЕРА С НУЛЯ | #1 НАЧАЛО
При описании на языке блок-схем условных переходов пользуются несколькими вариантами условных обозначений. В данном тексте блоки проверки условий имеют вид ромбов, внутри которых записываются проверяемые условия. Из каждого блока проверки условий исходят две стрелки. Какая стрелка в данный момент соответствует направлению продолжения вычислений, зависит от того, выполнено или нет приведенное в этом блоке условие. Пусть, например, блок- схема содержит следующий блок:
ЭТОТ блок соответствует проверке текущего содержимого ячейки памяти с именем А. Если в момент перехода к этому блоку содержимое А было равно 10, то порядок продолжения вычислений определяется стрелкой ДА. В противном случае нужно идти по стрелке НЕТ.
В некоторых случаях для изображения блоков проверки условий пользуются овалами:
или блоками такого вида:
В данном тексте для представления блоков проверки условий выбран ромб, поскольку его легче начертить от руки.
Проиллюстрируем составление блок-схем на примере блок-схемы программы, предназначенной для решения квадратных уравнений (рис. П.2). Программа считывает с карт значения коэффициентов уравнения
При этом предполагается, что а и с не равны 0. Корни уравнения, как известно, определяются по формуле
В блоке проверки условий исследуется значение дискриминанта D=b2—4ас. Если D положителен, то у нас получаются действительные корни, как и отмечено на блок-схеме. Значения корней вычисляются и распечатываются с соответствующим заголовком. (Распечатываемый заголовок на блок-схеме обозначается с помощью последовательности символов, заключенных в кавычки.) В случае когда D отрицателен, вычисляются действительные и мнимые части корней, REAL и IMAG, и также распечатываются с соответствующими заголовками. Просмотрите блок-схему рис. П.2 и убедитесь в том, что если значениями коэффициентов уравнения, вводимых с перфокарт, являются соответственно 1,2 и 5, то в результате работы программы будет распечатана следующая выдача:
Рис. Блок-схема программы для решения квадратных уравнений.
COMPLEX ROOTS REAL PART IS 1 IMAGINARY PART IS 2
Если же коэффициенты равны соответственно 1, 1 и — 6, то полученная выдача будет содержать
Источник: itteach.ru
Блок схема программы ассемблер
Сообщений: 3
блок схема
здравствуйте.
имеется блок-схема-по ней нужно написать программу на ассемблере.
вот что у меня получилось. есть сомнения в правильности использования команды
step1:cmp i, j
.
можно узнать,какие недочёты и ошибки?
assume CS: code, DS: data code segment ;====================== start: ;настройка DS на сегмент данных mov AX, data ;начало сегмента данных в АХ mov DS, AX ; ;======выполнение условий=================== mov BX,n mov AX,0 ;=========Начало блок-схемы========== mov i, BX step0:mov j, BX ;================Первое условие j>=i========================= step1:cmp i, j jge step2 ;====’-‘ ветвь первого условия===== jmp step3 ;===’+’ ветвь первого условия==== step2:add AX, j jmp step3 ;======== step3: inc j ;================Второе условие j=0========================= cmp j, 0 jz step4 ;====’-‘ ветвь второго условия===== jmp step0 ;===’+’ ветвь второго условия==== step4:dec i ;================Третье условие i=0========================= cmp i, 0 ;====’-‘ ветвь второго условия===== jmp step1 ;===’+’ ветвь второго условия==== exit: ;===========по нажатию клавиши выход из программы mov AH, 08h ; int 21h ; ;=========== mov AH, 4Ch ; mov AL, 00h ; int 21h ; code ends ; ;====================== data segment ; j dw 03h; i dw 05h; n dw 02h; data ends ; ;====================== se segment stack; dw 128 dup (0) ; se ends ; ;====================== end start ;
Изображения
Скриншот 19-06-2019 140211.jpg (27.5 Кб, 71 просмотров) |
Источник: www.programmersforum.ru
Блок-схемы заданных алгоритмов, их описание и программы реализации на ассемблере
МПС реализует алгоритм, представленный на рис.3.2 Запуск МПС осуществляется при включении питания или после нажатия КН1. Зацикливание вычислений позволяет МПС непрерывно отслеживать состояние входной шины x и тумблеров, мгновенно изменяя вслед за ними выходное воздействие y1 и показание индикатора.
Изменение частоты выходного сигнала y2 происходит при нажатии кнопки КН2, вызывающем прерывание основных циклических вычислений и переключение на подпрограмму (рис.3.1). После ее исполнения выполнение основной программы продолжается. Прерывание организуется посредством выдачи на шину данных микропроцессора кода команды RST. Номер используемой команды: RST2.
Рис.3.1 — Программа, реализующая прерывание.
Рис.3.2 — Алгоритм функционирования МПС.
Программа на языке ассемблера является пошаговой логической реализацией алгоритма. При написании программы использованы адреса только реально имеющихся ячеек. После начальной установки начинается выполнение программы по заданному алгоритму. Вначале в указатель стека загружается адрес вершины стека, затем происходит переход на основную программу.
Программируется ППА и вводятся значения x и k, после чего разрешаются прерывания. Затем производятся вычисления значения y3, осуществляется программирование СЧО и СЧ1 интервального таймера и в СЧ1 загружается y3. После этого выполняется прерывание RST2 (для этого в эмуляторе процессора надо запустить программу на выполнение F6, а прерывание вызывать по F7, далее ввести номер прерывания), это прерывание вычисляет значение y2, который заносится в СЧ2 интервального таймера. После возвращения в основную программу, происходит вычисление y1 и y4 светодиодной индикации. Полученный байт выводится через порт С. После вывода байта происходит прием операндов: x через порт А, k через порт В, программа возвращается на вычисление y1 и y4. y2 вычисляется с новыми значениями x и k, только после принудительного прерывания. y3 вычисляется один раз.
Источник: vuzlit.com