Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 20.06.2019
Сообщений: 5
MASM

Заполнить массив числами Фибоначчи

21.06.2019, 18:49. Показов 1631. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
помогите пожалуйста исправить,
почему не выводится "1" в первом массиве с числами Фибоначчи??
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
.486
.model flat, stdcall
option casemap :none ; чувствительность к регистру букв в идентификаторах
include windows.inc
include kernel32.inc
include user32.inc
include masm32.inc
 
includelib masm32.lib
includelib kernel32.lib
includelib user32.lib
 
.data
    N  EQU 10 ;длина массива 
        array dd N dup(0) ;array     
        
        ;шаблоны вывода подсказки     
        msg   db      0Dh, 0Ah, 'Array: 1' ;
        msgChange    db      0Dh, 0Ah, 'ChangeArray: 1', 0
        msgSum   db      0Dh, 0Ah, 'Sum items array:', 0Dh, 0Ah, 0
        aszPressEnter   db      0Dh, 0Ah, 0Dh, 0Ah, "Press ENTER to exit", 0
        
        ;шаблон форматированного вывода
        aszInteger      db      '%5d', 0
                
.data?
        hConsoleOutput  HANDLE  ?
        hConsoleInput   HANDLE  ?
        Result          dd      ?
        Buffer          db      1024 dup(?)
        BufLen          dd      ?
        
        ;переменная для подсчета суммы элементов массива
        sum dd ?
 
 
.code
ShowArray       proc    lpArray:DWORD
        pushad
 
        mov     ecx,    N ;кол-о элементов массива
        mov     esi,    [lpArray]  ;самм массив
        ForI:
                push    ecx
                lodsd
                invoke  wsprintf, ADDR Buffer, ADDR aszInteger, eax
                invoke  StrLen, ADDR Buffer
                mov     [BufLen],       eax
                invoke  WriteConsole, hConsoleOutput, ADDR Buffer,\
                        BufLen, ADDR BufLen, NULL
                pop     ecx
        loop    ForI
 
        popad
        ret
ShowArray       endp
 
fillArray:  
 mov ecx, N
 mov ebp, offset array ;загружаем в ebp начальное значение массива
 mov eax, 1
 mov ebx, 1
 
 beg:
  mov edx,eax       
  add eax,ebx       
  mov ebx,edx
  mov [ebp], edx
  
  add EBP , 4 ;смещаем указатель на след элемент 
   
 loop beg
   
ret 12
 
arrayModify:
   mov ebp, offset [array] ;загружаем в ebp начальное значение массива 
   mov ecx, N 
 lp: 
   mov eax, [ebp] 
   test ecx, 1 ;проверка на четность
   jz odd ;переход на метку odd в случае четного числа
   jmp exit
   odd:
   mul eax
   exit: 
    mov [ebp], eax ;заносим результат изменения знака 
    add ebp, 4 ;смещаем указатель на след элемент
 loop lp
 
ret
 
sumItems:
 mov [sum],0
 mov eax,0
 lea ebx, array
 mov ecx, N
 lp5:
  add ax, [ebx]
  add ebx,4
  mov [sum],eax
 loop lp5
  invoke  wsprintf, ADDR Buffer, ADDR aszInteger, [sum]
  invoke  StrLen, ADDR Buffer
  mov     [BufLen],       eax
  invoke  WriteConsole, hConsoleOutput, ADDR Buffer,\
  BufLen, ADDR BufLen, NULL
ret 12  
 
start:
    ;вызов функции для заоплнения массива арифметической прогрессией
    call fillArray
    
    ;получение описателей ввода и вывода консоли
    invoke  GetStdHandle,   STD_INPUT_HANDLE
    mov     hConsoleInput,  eax
    invoke  GetStdHandle,   STD_OUTPUT_HANDLE
    mov     hConsoleOutput, eax
    invoke  ClearScreen
    
    ;вывод исходного массива
    invoke  WriteConsole, hConsoleOutput, ADDR msg,\
                LENGTHOF msg - 1, ADDR BufLen, NULL
    invoke  ShowArray,      ADDR array
    
    invoke  WriteConsole, hConsoleOutput, ADDR msgSum,\
                LENGTHOF msgSum - 1, ADDR BufLen, NULL
                
    ;считаем и выводим сумму элементов массива            
    call sumItems
    
    ;изменяем массив (if(a[i] % 4 == 0) a[i]/=4 )
    call arrayModify 
    
    ;вывод измененного массива
    invoke  WriteConsole, hConsoleOutput, ADDR msgChange,\
                LENGTHOF msgChange - 1, ADDR BufLen, NULL
    invoke  ShowArray,      ADDR array
    invoke  WriteConsole, hConsoleOutput, ADDR msgSum,\
                LENGTHOF msgSum - 1, ADDR BufLen, NULL
    ;считаем и выводим сумму элементов изменненого массива              
    call sumItems
    
    ;ожидание нажания ENTER
    invoke  WriteConsole, hConsoleOutput, ADDR aszPressEnter,\
                LENGTHOF aszPressEnter - 1, ADDR BufLen, NULL
    invoke  ReadConsole, hConsoleInput, ADDR Buffer,\
                LENGTHOF Buffer, ADDR BufLen, NULL
    ;закрытие консоли, после нажания ENTER
    invoke  ExitProcess, 0
    
end start
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.06.2019, 18:49
Ответы с готовыми решениями:

Заполните массив первыми 15 числами последовательности Фибоначчи
Заполните массив первыми 15 числами последовательности Фибоначчи. Программа нв паскале const m = 46; var a: array of...

Сумма первых 15 нечетных чисел Фибоначчи с первыми 5 четными числами Фибоначчи
Ребята вообщем такое задание :Напишите программу для вычисления сумму первых 15 нечетных чисел Фибоначчи с первыми 5 четными числами...

Заполнить массив [10][10] числами 1000
Здраствуйте!!! Помогите написать прогу каторая заполнит массив числами 1000. Не могу разобратса как огласить и заполнят имено...

1
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8662 / 4498 / 1670
Регистрация: 01.02.2015
Сообщений: 13,914
Записей в блоге: 12
21.06.2019, 21:54
Вы не заносите первый элемент в массив - начинаете со второго.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.06.2019, 21:54
Помогаю со студенческими работами здесь

Как заполнить массив случайными числами
Задание на Dll-файлы .686 .model flat,stdcall option casemap:none include \masm32\include\windows.inc include...

Заполнить массив случайными числами и отсортировать его по возрастанию
Помогите написать программу. Нужно создать генератор случайных чисел заполнить с помощью него одномерный массив состоящий из 60000...

Заполнить массив случайными числами с помощью линейного конгруэнтного метода
Здравствуйте! Хочу заполнить массив случайными числами с помощью линейного конгруэнтного метода. Для первых двух чисел последовательности...

Заполнить массив числами Фибоначчи
Задание: создать массив и заполнить его числами Фибоначчи, которые будут создаваться рекурсией. #include <cstdlib> #include...

Заполнить массив числами Фибоначчи
Помогите пожалуйста! Надо ввести размер массива N и заполнить массив из N элементов числами Фибоначчи (первые два числа Фибоначчи...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru