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

Два одномерных массива поэлементно сложить между собой - третий - сложить каждый элементы - вывести на экран

18.04.2018, 19:34. Просмотров 139. Ответов 1

2 одномерных массива - сложить между собой - третий - сложить каждый элементы - вывести на экран.
Помогите написать программу на эмуляторе (emu8086).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2018, 19:34
Ответы с готовыми решениями:

Сложить два числа вывести на экран
Такая проблема , складываю 11 и 12 на экран выводит только одно число 3 text...

Ввести два числа с клавиатуры, сложить их и вывести на экран
Как ввести два числа с клавиатуры, сложить их и вывести на экран? Почему в...

Сложить два массива: найти ошибку
text segment ;назначение сегментных регистров assume CS:text, DS:data,...

Сравнить поэлементно два массива и записать максимальный элемент из каждой пары в третий массив
Доброго времени суток! Я пишу программу на С++, у меня есть 3 массива: 2...

Сложить отдельно положительные и отрицательные элементы массива
В массиве С(12) сложить отдельно элементы положительные и отрицательные....

1
ФедосеевПавел
Модератор
3762 / 2114 / 862
Регистрация: 01.02.2015
Сообщений: 7,019
18.04.2018, 20:27 2
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
_STACK  segment para stack
        db      1024 dup(?)
_STACK  ends
 
_DATA   segment
        CrLf            db      0Dh, 0Ah, '$'
        msgPressAnyKey  db      0Dh, 0Ah, 'Press any key to exit...', '$'
        msg1st          db      0Dh, 0Ah, '1st array:', 0Dh, 0Ah, '$'
        msg2nd          db      0Dh, 0Ah, '2nd array:', 0Dh, 0Ah, '$'
        msg3rd          db      0Dh, 0Ah, '3rd array (1st + 2nd):', 0Dh, 0Ah, '$'
        msgSum          db      0Dh, 0Ah, 'Summa (3rd): ', '$'
        N               dw      8
        _1st            dw      -40, 29, 84, -66, 10, -62, 95, 82, -67, -90
        _2nd            dw      20, 100, 75, 5, -46, 95, 52, -104, -30, -109
        _3rd            dw      10 dup(?)
        Sum             dw      ?
 
_DATA   ends
 
_TEXT   segment
        assume  cs:_TEXT, ds:_DATA, ss:_STACK
main    proc
        ;инициализация сегментного регистра данных
        mov     ax,     _DATA
        mov     ds,     ax
        ;вывод исходных данных
        ; - 1-й массив
        mov     ah,     09h
        lea     dx,     [msg1st]
        int     21h
        lea     dx,     [_1st]
        mov     cx,     [N]
        call    ShowArray
        ; - 2-й массив
        mov     ah,     09h
        lea     dx,     [msg2nd]
        int     21h
        lea     dx,     [_2nd]
        mov     cx,     [N]
        call    ShowArray
        ;поэлементное суммирование
        lea     si,     [_1st]
        lea     di,     [_2nd]
        lea     bx,     [_3rd]
        mov     cx,     [N]
        @@For:
                mov     ax,     [si]
                add     ax,     [di]
                mov     [bx],   ax
                add     si,     2
                add     di,     2
                add     bx,     2
        loop    @@For
        ; - 3-й массив
        mov     ah,     09h
        lea     dx,     [msg3rd]
        int     21h
        lea     dx,     [_3rd]
        mov     cx,     [N]
        call    ShowArray
        ;сложить все элементы третьего массива
        lea     si,     [_3rd]
        mov     cx,     [N]
        mov     dx,     0
        @@For3:
                lodsw
                add     dx,     ax
        loop    @@For3
        mov     [Sum],  dx
        ;вывод суммы
        mov     ah,     09h
        lea     dx,     [msgSum]
        int     21h
        mov     ax,     [Sum]
        call    Show_AX
 
        ;завершение программы
        mov     ah,     09h
        lea     dx,     [msgPressAnyKey]
        int     21h
        mov     ah,     0
        int     16h
        ;завершение программы
        mov     ax,     4C00h
        int 21h
main    endp
 
;Вывод массива слов (word)
;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
 
; выводит знаковое 16-разрядное число из регистра AX на экран
; с выравниванием на 8 позиций по правому краю
; входные данные:
; ax - число для отображения
Show_AX proc
        push    ax
        push    bx
        push    cx
        push    dx
        push    si
        push    di
 
        mov     cx,     10      ;основание системы счисления
        xor     di,     di      ; di - кол. цифр в числе
        xor     si,     si      ; si - признак отрицательного числа
        ; если число в ax отрицательное, то
        ;1) напечатать (запомнить в стеке) символ '-'
        ;2) сделать ax положительным
        or      ax,     ax
        jns     @@Conv
        mov     si,     1
 
        neg     ax
 
@@Conv:
        xor     dx,     dx
        div     cx              ; dl = num mod 10
        add     dl,     '0'     ; перевод в символьный формат
        inc     di
        push    dx              ; складываем в стек
        or      ax,     ax
        jnz     @@Conv
        ;если число отрицательное - помещаем символ "-" в строку
        or      si,     si
        jz      @@Positive
        mov     dx,     '-'
        push    dx
        inc     di
@@Positive:
        ; выводим из стека на экран
        ; - сначала пробелы для выравнивания по правому краю
        mov     cx,     8
        sub     cx,     di
        mov     ah,     02h
        mov     dl,     ' '
@@LeftPad:
        int     21h
        loop    @@LeftPad
        ;сохранённые символы цифр
@@Show:
        pop     dx              ; dl = очередной выводимый символ
        mov     ah,     2       ; ah - функция вывода символа на экран
        int     21h
        dec     di              ; повторяем пока di<>0
        jnz     @@Show
 
        pop     di
        pop     si
        pop     dx
        pop     cx
        pop     bx
        pop     ax
        ret
Show_AX endp
 
_TEXT   ends
 
        end     main
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2018, 20:27

Имеются два массива по 10 элементов. Сложить по модулю 2 биты 0 и 7. Результат во второй массив.
Доброго времени суток. В универе получил задание написать прогу, но я...

В цикле сложить содержимое двух массивов и передать в третий
Люди, срочно нужна прога для экзамена!!!! Помогите, пожалуйста))) Определить...

Как сложить два числа на masm?
.486 .model flat, stdcall option casemap: none include...


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

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

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