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

Найти сумму натуральных чисел от 1 до N ( N вводится с клавиатуры)

04.12.2017, 14:51. Показов 7784. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
data segment
data ends
code segment
start:
assume cs:code, ds:data
        mov     ax,     data
        mov     ds,     ax
 
    mov ah, 01  ;вводим первый символ и запоминаем его в bl
int 21h  
mov bl, al
 
    mov dl, bl
    mov dl, '0'
    mov ah, 02
cikl:   cmp dl, bl
    ja end_cikl
    int 21h
    inc dl
    jmp cikl
end_cikl:
Сделал чтобы вводились числа от 0 до какого-то числа, а как сложить их?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.12.2017, 14:51
Ответы с готовыми решениями:

Найти сумму натуральных чисел от 1 до N ( N вводится с клавиатуры)
Вывести на экран прямоугольник из символов h размером m x n , начиная с позиции ( x , y ). x , y , m , n , h – вводятся с клавиатуры. ...

С клавиатуры вводится N целых чисел a1, a2,….,aN. Найти сумму этих чисел. Найти номер первого четного числа последовательности чисел.
Решить задачу 3 способами: 1. Используя метки и оператор goto (не используя никакой цикл) 2. Используя цикл (repeat или while) 3....

Вводится последовательность натуральных чисел. Найти номер первого из четных и сумму чисел, стоящих перед ним.
Вводится последовательность натуральных чисел. Найти номер первого из четных и сумму чисел, стоящих перед ним. Задание по курсовой((

1
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8665 / 4502 / 1670
Регистрация: 01.02.2015
Сообщений: 13,926
Записей в блоге: 13
04.12.2017, 19:41
А зачем вводить что-то кроме N? Где это в условии?

Добавлено через 22 минуты
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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
_TEXT   segment word    public  'CODE'
        assume  cs:_TEXT, ds:_TEXT, ss:_TEXT
        org     100h
;---------------------------------------
; основная программа
;---------------------------------------
start:
        ;ввод N
        mov     ah,     09h
        lea     dx,     [PromptN]
        int     21h
        mov     ah,     0Ah
        lea     dx,     [KbdBuf]
        int     21h
        mov     ah,     09h
        lea     dx,     [CrLf]
        int     21h
        lea     si,     [KbdBuf+1]
        lea     di,     [N]
        call    StrToInt
 
        ;вычисление суммы чисел от 1 до N
        mov     ax,     0
        mov     [Sum],  ax
        mov     cx,     [N]
        mov     ax,     1
        ForI:
                ;вычисление суммы
                add     [Sum],  ax
                inc     ax
        loop    ForI
 
        ;вывод результата (суммы) на экран
        mov     ah,     09h
        lea     dx,     [MsgSum]
        int     21h
        mov     ax,     [Sum]
        call    Show_AX
        mov     ah,     09h
        lea     dx,     [CrLf]
        int     21h
        ;завершение программы
        int     20h
 
;---------------------------------------
; подпрограммы
;---------------------------------------
; преобразования строки в число
; на входе:
; ds:[si] - строка с числом
; ds:[di] - адрес числа
; на выходе
; ds:[di] - число
; CY - флаг переноса (при ошибке - установлен, иначе - сброшен)
StrToInt        proc
        push    ax
        push    bx
        push    cx
        push    dx
        push    ds
        push    es
        push    si
 
        push    ds
        pop     es
 
        mov     cl, ds:[si]
        xor     ch, ch
 
        inc     si
 
        mov     bx, 10
        xor     ax, ax
 
        ;если в строке первый символ '-'
        ; - перейти к следующему
        ; - уменьшить количество рассматриваемых символов
        cmp     byte ptr [si], '-'
        jne     @@Loop
        inc     si
        dec     cx
@@Loop:
        mul     bx         ; умножаем ax на 10 ( dx:ax=ax*bx )
        mov     [di], ax   ; игнорируем старшее слово
        cmp     dx, 0      ; проверяем, результат на переполнение
        jnz     @@Error
 
        mov     al, [si]   ; Преобразуем следующий символ в число
        cmp     al, '0'
        jb      @@Error
        cmp     al, '9'
        ja      @@Error
        sub     al, '0'
        xor     ah, ah
        add     ax, [di]
        jc      @@Error    ; Если сумма больше 65535
        cmp     ax, 8000h
        ja      @@Error
        inc     si
 
        loop    @@Loop
 
        pop     si         ;проверка на знак
        push    si
        inc     si
        cmp     byte ptr [si], '-'
        jne     @@Check    ;если должно быть положительным
        neg     ax         ;если должно быть отрицательным
        jmp     @@StoreRes
@@Check:                   ;дополнительная проверка, когда при вводе положительного числа получили отрицательное
       or       ax, ax     ;
       js       @@Error
@@StoreRes:                ;сохранить результат
        mov     [di], ax
        clc
        pop     si
        pop     es
        pop     ds
        pop     dx
        pop     cx
        pop     bx
        pop     ax
        ret
@@Error:
        xor     ax, ax
        mov     [di], ax
        stc
        pop     si
        pop     es
        pop     ds
        pop     dx
        pop     cx
        pop     bx
        pop     ax
        ret
StrToInt        endp
 
; выводит число из регистра AX на экран
; входные данные:
; ax - число для отображения
Show_AX proc
        push    ax
        push    bx
        push    cx
        push    dx
        push    di
 
        mov     cx, 10          ; cx - основание системы счисления
        xor     di, di          ; di - кол. цифр в числе
 
        ; если число в ax отрицательное, то
        ;1) напечатать '-'
        ;2) сделать ax положительным
        or      ax, ax
        jns     @@Conv
        push    ax
        mov     dx, '-'
        mov     ah, 2           ; ah - функция вывода символа на экран
        int     21h
        pop     ax
 
        neg     ax
 
@@Conv:
        xor     dx, dx
        div     cx              ; dl = num mod 10
        add     dl, '0'         ; перевод в символьный формат
        inc     di
        push    dx              ; складываем в стэк
        or      ax, ax
        jnz     @@Conv
        ; выводим из стэка на экран
@@Show:
        pop     dx              ; dl = очередной символ
        mov     ah, 2           ; ah - функция вывода символа на экран
        int     21h
        dec     di              ; повторяем пока di<>0
        jnz     @@Show
 
        pop     di
        pop     dx
        pop     cx
        pop     bx
        pop     ax
        ret
Show_AX endp
;---------------------------------------
; данные
;---------------------------------------
        CrLf    db      0Dh, 0Ah, '$'
        PromptN db      'Enter N: ', '$'
        MsgSum  db      'Summa: ', '$'
        KbdBuf  db      6, ?, 7 dup(?)
        N       dw      ?
        Sum     dw      ?
_TEXT   ends
 
        end     start
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.12.2017, 19:41
Помогаю со студенческими работами здесь

С клавиатуры вводится N целых чисел a1, a2,….,aN. Найти сумму этих чисел. Вывести на экран в процессе ввода чисел: a1+a2, a2+a3, …. aN-1+aN
Помогите, пожалуйста! Решить задачу 3 способами: 1. Используя метки и оператор goto (не используя никакой цикл) 2. Используя цикл...

C# Найти сумму первых n нечетных натуральных чисел , n вводится с клавиатуре (оператор while do )
Найти сумму первых n нечетных натуральных чисел , n вводится с клавиатуре (оператор while do )

Циклы. N чисел вводится с клавиатуры. Найти сумму всех чисел.
Здравствуйте. Пожалуйста помогите написать. 1. N чисел вводится с клавиатуры. Найти сумму всех чисел. 2. Найти произведение...

Найти сумму квадратов всех целых чисел от а до 50 (а вводится с клавиатуры; 0<а<50);
Не могу понять правильно написал или нет, можете подсказать. Заранее спасибо! #include &quot;stdafx.h&quot; #include...

Найти сумму четных чисел от 1 до N. Число N вводится пользователем с клавиатуры
Найти сумму четных чисел от 1 до N. Число N вводится пользователем с клавиатуры.


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Функция установки текстового статуса в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru