Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
Palmor
0 / 0 / 0
Регистрация: 30.03.2017
Сообщений: 9
1

Ввод массива с клавиатуры

30.03.2017, 08:02. Просмотров 1155. Ответов 4
Метки нет (Все метки)

Задать с клавиатуры два массива из 10 элементов каждый. Сформировать новый массив, элементами которого будут суммы одноименных элементов двух массивов.
Предусмотреть:
1) Приглашение к вводу массива
2) Проверку разрядности вводимых элементов n<3
3)Сообщение об ошибке
4) Вывод сформированного массива

Задача по себе очень легкая, только я не могу понять, как в этой задачи вводить массив с клавиатуры.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.03.2017, 08:02
Ответы с готовыми решениями:

Ввод размерности массива и элементов массива с клавиатуры
Организовать ввод размерности массива и элементов массива с клавиатуры и вывод полученных...

Ввод массива с клавиатуры
Здравствуйте, подскажите как организовать ввод массива с клавиатуры, знаю вот как программно sseg...

Ввод массива с клавиатуры и вывод
Здравствуйте! Объявил массив mas db 4 dup(?) делаю ввод с клавиатуры: mov cx,5 xor...

Ввод массива с клавиатуры (TASM)
ввести с клавиатуры массив из n-байт. найти минимальный элемент и вывести на экран. задание такое...

[tasm] Ввод массива с клавиатуры
Добрый день, написал код: data segment para public 'data' countItems equ 9 ...

4
Manowar
Отава Ё.
1994 / 545 / 180
Регистрация: 12.03.2016
Сообщений: 2,050
Завершенные тесты: 1
30.03.2017, 08:46 2
Ввод и вывод чисел в различных системах счисления
0
ФедосеевПавел
Модератор
4246 / 2336 / 939
Регистрация: 01.02.2015
Сообщений: 7,715
01.04.2017, 13:36 3
Пример ввода и вывода массива слов. Из статьи по ссылке взяты процедуры вывода беззнакового числа Show_AX, процедура преобразования строки в беззнаковое число Str2Num, и переработан пример для Str2Num.
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
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
LOCALS
 
.model small
 
.stack 100h
 
.data
        PromptA1        db      'A[', '$'
        PromptA2        db      ']=', '$'
        CrLf            db      0Dh, 0Ah, '$'
 
        A               dw      10 dup (0)
 
        kbdBuffer       db      6, 0, 6 dup(0)
.code
 
; выводит число из регистра AX на экран
; входные данные:
; ax - число для отображения
Show_AX proc
        push    ax
        push    bx
        push    cx
        push    dx
        push    di
 
        mov     cx, 10          ; cx - основание системы счисления
        xor     di, di          ; di - кол. цифр в числе
 
@@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
 
; преобразования строки в беззнаковое число
; на входе:
; ds:[si] - строка с числом
; ds:[di] - адрес числа
; на выходе
; ds:[di] - число
; CY - флаг переноса (при ошибке - установлен, иначе - сброшен)
Str2Num proc
        push    ax
        push    bx
        push    cx
        push    dx
        push    ds
        push    es
 
        push    ds
        pop     es
 
        mov     cl, ds:[si]
        xor     ch, ch
 
        inc     si
 
        mov     bx, 10
        xor     ax, ax
 
@@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
        inc     si
 
        loop    @@Loop
 
        mov     [di], ax
        clc
        pop     es
        pop     ds
        pop     dx
        pop     cx
        pop     bx
        pop     ax
        ret
@@Error:
        xor     ax, ax
        mov     [di], ax
        stc
        pop     es
        pop     ds
        pop     dx
        pop     cx
        pop     bx
        pop     ax
        ret
Str2Num endp
 
;Ввод массива
;cx - количество вводимых элементов
;ds:dx - адрес массива
InputArray      proc
        push    ax
        push    bx
        push    cx
        push    dx
        push    si
        push    di
 
        jcxz    @@Exit          ;если массив пустой - завершить
 
        mov     si,     1       ;индекс элемента массива
        mov     di,     dx      ;адрес текущего элемента массива
        @@ForI:
                ;вывод приглашения ввода элемента
                mov     ah,     09h
                lea     dx,     PromptA1
                int     21h
                mov     ax,     si
                call    Show_AX
                mov     ah,     09h
                lea     dx,     PromptA2
                int     21h
                ;ввод числа
                mov     ah, 0Ah ;ввод строки
                mov     dx, offset kbdBuffer
                int     21h
                mov     ah,09h  ;перевод строки (на новую строку)
                lea     dx, CrLf
                int     21h
 
                push    si
                lea     si, kbdBuffer+1 ; преобразование строки в число
                ;lea     di, Numer
                call    Str2Num
                pop     si
 
                ; проверка на ошибку
                jnc     @@NoError
 
                ; если есть ошибка ввода - повторить ввод
                jmp     @@ForI
 
                ; если нет ошибки ввода - сохранить число
                @@NoError:
                ;сохранение введённого числоа в массиве
                ;mov    [di],   ax
                ;переход к следующему элементу
                inc     si
                add     di,     2
        loop    @@ForI
@@Exit:
        pop     di
        pop     si
        pop     dx
        pop     cx
        pop     bx
        pop     ax
        ret
InputArray      endp
 
;Вывод массива
;cx - количество вводимых элементов
;ds:dx - адрес массива
ShowArray       proc
        push    ax
        push    bx
        push    cx
        push    dx
        push    si
        push    di
 
        jcxz    @@Exit          ;если массив пустой - завершить
 
        mov     si,     1       ;индекс элемента массива
        mov     di,     dx      ;адрес текущего элемента массива
        @@ForI:
                mov     ax,     [di]
                call    Show_AX
                mov     ah,     02h
                mov     dl,     ' '
                int     21h
                ;переход к следующему элементу
                inc     si
                add     di,     2
        loop    @@ForI
@@Exit:
        pop     di
        pop     si
        pop     dx
        pop     cx
        pop     bx
        pop     ax
        ret
ShowArray       endp
 
main    proc
        mov     ax,     @data
        mov     ds,     ax
 
        mov     cx,     10
        lea     dx,     A
        call    InputArray
        call    ShowArray
 
        mov     ax,     4C00h
        int     21h
main    endp
 
end     main
0
ayelhvs
0 / 0 / 0
Регистрация: 03.04.2017
Сообщений: 6
03.04.2017, 14:11 4
Palmor, Скинь код если решил, пожалусто
0
ФедосеевПавел
Модератор
4246 / 2336 / 939
Регистрация: 01.02.2015
Сообщений: 7,715
08.04.2017, 12:03 5
Решение, правда, без ioproc Сформировать новый массив, элементами которого будут суммы одноименных элементов двух массивов [tasm]
0
08.04.2017, 12:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.04.2017, 12:03

Ввод элементов массива с клавиатуры и их упорядочение
Вечер добрый. Нужно написать программу на Ассемблере, которая позволяет ввести массив из 8...

Ввод символов с клавиатуры в ОЗУ с использованием режима ожидания готовности контроллера клавиатуры
. Разработать алгоритм ввода символов с клавиатуры в ОЗУ с использованием режима ожидания...

Ввод элементов массива с клавиатуры
data segment para public 'data' countItems equ 9 array db 9 dup(?) enter_mas db 'vvedi...


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

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

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