0 / 0 / 0
Регистрация: 18.02.2017
Сообщений: 51
1

Составление блок-схемы по тексту программы

14.10.2017, 17:06. Показов 1955. Ответов 8
Метки нет (Все метки)

Имеется "программа", и нужно составить по ней блок-схему, но не понимаю как это делается. Прошу помощи в составлении ее!
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
.model small     ;Модель памяти
.stack 100h      ;Сегмент стека
.data            ;Сегмент данных
len equ 10       ;Колличство элементов в mas
k db 10        ;Счетчик оставшихся элементов k=10
mas db 5,2,1,3,3,4,5,9,7,6 ;элементы мас
res db 10 dup(0)
.code          ;Сегмент кода
start:
 mov ax,@data  ;Физическйий адрес сегмента данных в регистре ax
 mov ds,ax
 lea si, mas   ;si от 0 до 9-1
 mov cx,len    ;Длину поля mas в cx
 jcxz exit     ;Проверка cx на 0, если 0, то выход
 dec cx        ;cx=cx-1
ForI:          ;Внешний цикл 
  mov di, si   ;di от si+1 до 9
  add di, 1    ;Присваем значение 1
  push cx      ;запоминаем в регистр cx
  mov al, [si] ;al = элемент
  cmp al, 0    ;Сравниваем с 0
  je  NextI    ;Если да, то на метку NextI
ForJ:          ;Внутренний цикл
 cmp al, [di]  ;если al не равно 
 jne NextJ     ;то на метку NextJ 
 mov [di], byte ptr 0  ;Обнуляем элементA[j]:=0
mov [si], byte ptr 0  ;Обнуляем элементA[i]:=0
 dec k         ;k:=k-2
 dec k
NextJ:         ;Метка наращивания индекса элемента и счетчик
 add di, 1     ;Переходим к следующему элементу внутри цикла
 loop ForJ     ;Возвращаемся к метке ForJ
NextI:         ;Метка перехода к следующему элементу внешнего цикла
 pop cx        ;Вытасикиваем из регистра 
 add si, 1     ;Переход к следующему элементу внешнего цикла
 loop ForI     ;Возвращаемся в метку ForI
mov cx,10
xor si,si     ;обнуление si
m1: ;Метка массива результата
mov al,mas[si]
mov res[si],al ;res[si]=al
inc si      ;смещение позиции
loop m1
exit:          ;метка выхода из программы
 mov ax,4c00h
 int 21h   ;Возврат управления операционной системе
end start
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.10.2017, 17:06
Ответы с готовыми решениями:

Составление блок-схемы к коду
Пожалуйста, сделайте блок-схему к программе и обьясните значение строчек. .model small Stack...

Составление блок-схемы программы c++
Помогите пожалуйста составить алгоритм программы, пожалуйста #include <iostream.h>...

Составление блок-схемы для программы
Здравствуйте ! Возникла проблема в составлении блок-схемы к программе. Задача программы :...

Составление блок-схемы для заданной программы
#include <iostream> #include <math.h> #include <string> using namespace std; template <class...

8
Модератор
Эксперт по электронике
7702 / 3857 / 1493
Регистрация: 01.02.2015
Сообщений: 11,906
Записей в блоге: 2
14.10.2017, 17:35 2
Подозреваю, что это продолжение Обнулить элементы массива имеющие одинаковые значения

Не по теме:

Вот и сравните комментарии в моём исходнике и в собственном - где информативнее и нагляднее, виден алгоритм?



Добавлено через 3 минуты
Zaniel1, запишите алгоритм в виде Pascal кода. Станут видны циклы for, диапазоны переменных циклов, условия.
После этого будет проще "рисовать квадратики".
0
0 / 0 / 0
Регистрация: 18.02.2017
Сообщений: 51
14.10.2017, 17:37  [ТС] 3
Да, оно самое, но только доделаное, так сказать.
0
Модератор
Эксперт по электронике
7702 / 3857 / 1493
Регистрация: 01.02.2015
Сообщений: 11,906
Записей в блоге: 2
14.10.2017, 18:10 4
С блок-схемами - довольно туго. Попробуйте самостоятельно. Я как-то рисовал на сайте draw.io, сохранял png и внутренним форматом. Циклы for - в виде "бриллианта", условия - "ромб".
0
0 / 0 / 0
Регистрация: 18.02.2017
Сообщений: 51
15.10.2017, 09:18  [ТС] 5
Вопрос есть еще такой. Какую функцию в этой программе выполняет "lea"? Как я понял он указывает на индекс элементов массива.
0
Модератор
Эксперт по электронике
7702 / 3857 / 1493
Регистрация: 01.02.2015
Сообщений: 11,906
Записей в блоге: 2
15.10.2017, 10:02 6
В блок-схеме эта команда не будет отражена - это подготовительная операция, нечто подобное части заголовка цикла (for, while, until), это ближе к I:=0 в for I:=0 to N do.
В вашем случае это часть заголовка цикла for, который показан вытянутым 6-угольником.

Добавлено через 4 минуты
Ассемблер не знает индексов в понимании языков высокого уровня. Все операции выполняются как адреса ячеек памяти. Поэтому lea si, mas помещает адрес массива mas в регистр si - т.е. в данном случае это эквивалент mov si, offset mas.
Но, когда приводят алгоритм, можно грубо предполагать, что si это индекс массива - хотя это совсем не так.
0
Эксперт Hardware
5332 / 1876 / 351
Регистрация: 29.07.2014
Сообщений: 2,816
Записей в блоге: 5
15.10.2017, 11:00 7
Zaniel1, сидя за компом рисовать вручную - это бред.
открой свою прогу и дизассемблере "IDA-PRO" и нажми на эту пимпу. получишь график..
чуть отшлифушь его и получишь блок-схему.
Изображения
 
0
Эксперт Hardware
5332 / 1876 / 351
Регистрация: 29.07.2014
Сообщений: 2,816
Записей в блоге: 5
15.10.2017, 11:10 8
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
запишите алгоритм в виде Pascal кода. Станут видны циклы for,
мимо! ..причём вообще паскаль в разделе асма? а если ТС не знает его? Получается, чтоб написать одну прогу на асме, нужно написать её на нескольких языках? зачем?
а циклы прекрасно видны и в ассемблерном листинге. достаточно взглянуть на метки.
0
Модератор
Эксперт по электронике
7702 / 3857 / 1493
Регистрация: 01.02.2015
Сообщений: 11,906
Записей в блоге: 2
15.10.2017, 11:20 9
Я эту программу делал ранее - исходник по ссылке. В комментариях записал алгоритм в виде Pascal. И именно поэтому утверждаю, что нужно записать алгоритм на ЯВУ, а потом его представлять в виде блок-схемы.

IDA, при всём уважении к этому продукту, создаёт отвратительные блок-схемы. Это уже обсуждалось.

Ну не знает топикстартер Pascal - пусть запишет на C/C++/Fortran. Смысл в том, чтобы сквозь lea, loop и прочее увидеть алгоритм. А он состоит из двух вложенных циклов и трёх условий - на Pascal примерно 10 строк, которые легко представить в блок-схеме на 10-15 элементов.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.10.2017, 11:20

Составление блок-схемы и программы для вычисления значения функции
Дорогие форумчане, помогите решить первое задание, заранее благодарен :)

Составление программы для примера и построение к ней блок схемы
При a=16,5 ; b=3,4 ; x=0,61. Заранее благодарен.

Составление блок-схемы алгоритма и программы для решения задачи
Помогите, пожалуйста, написать программу: 1) Ввести значение переменной n. Ввести значение...

Проектирование блок-схемы циклического вычислительного процесса. Цикл с блоком итераций. Составление программы
Y= a- \prod_{k=2}^{6}(m+{c}_{k}{a}^{3})/\sum_{i=1}^{5}{b}_{i}+{d}^{2},{b}_{i},{c}_{k} - известные,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.