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

Дан вектор X(x1,x2,.,x10). Найти количество и сумму нечетных отрицательных элементов вектора - Assembler

02.06.2015, 12:24. Просмотров 1051. Ответов 22
Метки нет (Все метки)

Дан вектор X(x1,x2,.,x10). Найти количество и сумму нечетных отрицательных элементов вектора
Прошу помочь написать на ТАСМе...Код на Паскале есть:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
program z8;
uses crt;
var a:array[1..10] of shortint;
i,k,n:byte;
s:integer;
begin
clrscr;
randomize;
write('Vvedi razmernost massiva=');
readln(n);
for i:=1 to n do begin
a[i]:=random(100--100+1)+-100;
write(a[i]:4);
if (a[i]<0 )and(odd(a[i])) then begin
    s:=s+a[i];k:=k+1;
        end;
writeln;
writeln('Сумма отрицательных элементов равна ',s);
writeln('Кол-во нечётных элементов равно ',k);
readkey
end.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.06.2015, 12:24
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Дан вектор X(x1,x2,.,x10). Найти количество и сумму нечетных отрицательных элементов вектора (Assembler):

Найти количество отрицательных нечетных элементов матрицы на побочной диагонали
Дана квадратная матрица А размерности nxn. Найти количество отрицательных...

Дан массив из 5 элементов. Найти количество отрицательных элементов
Дан массив из 5 элементов a db 12,31,10,15,5. Найти количество отрицательных...

Дан массив из 10 байтов. Найти количество отрицательных чисел.
Дан массив из 10 байтов. Найти количество отрицательных чисел. Помогите,...

Найти произведение нечетных отрицательных элементов, имеющих четные индексы
В заданной конечной последовательности целых чисел найти произведение нечетных...

Вывести на экран количество четных и сумму нечетных элементов
2) С клавиатуры вводится последовательность цифр. Вывести на экран количество...

Вводится последовательность цифр. Посчитать количество четных и сумму нечетных элементов
С клавиатуры вводится последовательность цифр. Вывести на экран количество...

22
Constantin Cat
1628 / 940 / 356
Регистрация: 28.02.2015
Сообщений: 2,185
Завершенные тесты: 1
05.06.2015, 00:46 #21
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
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
;;      удаление каталога
;;      вход:путь и имя как единое поле,заканчивающееся символом 0
;;      выход: если нет ошибки,то (сf)=0
;;             если есть ошибка,то (cf)=1 и в ax выдается код ошибки:
;;              (ax)=3  путь не найден
;;                  =5  каталог не пуст или путь не указывает на каталог
;;                      или указывает корневой каталог или неверный
;;                  =16 путь указывает текущий каталог
;;      пример: remdir pth
remdir  macro   path
    push    dx
        mov     dx,offset path
        mov     ah,3ah
        int     21h
    pop dx
        endm
;;      изменение имени текущего каталога
;;      вход:путь и имя как единое поле,заканчивающееся символом 0
;;      выход: если нет ошибки,то (сf)=0
;;             если есть ошибка,то (cf)=1 и в ax выдается код ошибки:
;;              (ax)=3  путь или имя не найдены либо файл-не каталог
;;      пример: chndir pth
chndir  macro   path
    push    dx
        mov     dx,offset path
        mov     ah,3bh
        int     21h
    pop dx
        endm
;;      выдача или установка атрибутов файла
;;      вход:путь и имя как единое поле,заканчивающееся символом 0
;;           признак получения(0) или установки(1)атрибутов
;;           если атрибуты устанавливаются,то атрибуты в формате байта
;;           либо поле для приема атрибутов (байт)
;;      выход: если операция прошла успешно,то (cf)=0 и возможно выдается
;;             байт атрибутов
;;             если операция неуспешна,то (cf)=1 и в ах-причина ошибки:
;;                  =1 неверный второй параметр (ни 0 ни 1)
;;                  =3 путь не найден или файл не существует
;;                  =5 атрибуты не могут быть изменены (каталог или метка тома)
;;      пример: chnatr pth,0,attr
chnatr  macro   path,act,atrib
        local   us
    push_regs <dx,cx>
        mov     dx,offset path
        mov     al,act
        mov     cx,atrib
        mov     ah,43h
        int     21h
        cmp     al,0
        jne     us
        mov     atrib,cx
us:     pop_regs <cx,dx>
        endm
;;      загрузка и выполнение программы
;;      вход: путь,имя программы,параметры,передаваемые программе
;;      выход:если операция успешна,то (cf)=0
;;      если операция неуспешна,то (cf)=1 и в ах причина ошибки:
;;           (ax)=  1  неверная функция
;;               =  2  файл не найден
;;               =  8  недостаточно памяти
;;               = 10  плохая операционная среда
;;               = 11  плохой формат
;;      пример: exec pth,com,parm
exec    macro   path,comm,prms
    push_regs <dx,bx>
        mov     dx,offset path
        mov     bx,offset prms
        mov     word ptr prms[02h],offset comm
        mov     word ptr prms[04h],cs
        mov     word ptr prms[06h],5ch
        mov     word ptr prms[08h],es
        mov     word ptr prms[0ah],6ch
        mov     word ptr prms[0ch],es
        mov     al,0
        mov     ah,4bh
        int     21h
    pop_regs <bx,dx>
        endm
;;      загрузка оверлейной программы
;;      вход: путь,имя программы,параметры,передаваемые программе
;;      выход:если операция успешна,то (cf)=0
;;      если операция неуспешна,то (cf)=1 и в ах причина ошибки:
;;           (ax)=  1  неверная функция
;;               =  2  файл не найден
;;               =  8  недостаточно памяти
;;               = 10  плохая операционная среда
;;      пример: execov pth,com,parm
execov  macro   path,comm,prms
    push_regs <dx,bx>
        mov     dx,offset path
        mov     bx,offset prms
        mov     prms,comm
        mov     prms[02h],comm
        mov     al,3
        mov     ah,4bh
        int     21h
    pop_regs <bx,dx>
        endm
;;      поиск первого файла по пути и имени
;;      вход: путь и имя,байт атрибутов
;;      выход:если операция успешна,то (cf)=0
;;      если операция неуспешна,то (cf)=1 и в ах причина ошибки:
;;            (ax) =  2  не найден путь
;;                 = 18  не найден файл
;;      пример: fiff pth,attr
fiff    macro   path,att
    push_regs <dx,cx>
        mov     dx,offset path
        mov     cx,attr
        mov     ah,4eh
        int     21h
    pop_regs <cx,dx>
        endm
;;      поиск следующего файла ,если поиск начат по fiff
;;      выход:если операция успешна,то (cf)=0
;;      если операция неуспешна,то (cf)=1 и в ах причина ошибки:
;;            (ax) =  2  не найден путь
;;                 = 18  нет больше файлов
;;      пример: finf
finf    macro
        mov     ah,4fh
        int     21h
        endm
;;      откpытие файла и его идентификатоpа
;;      вход:  вид доступа:  0 -файл откpывается для чтения
;;                           1 -файл открывается для записи
;;                           2 -файл откpывается для записи и чтения
;;              путь и имя файла,заканчивающийся символом 0
;;      выход:если операция успешна,то (cf)=0 (ax)=N идентификатора
;;      если операция неуспешна,то (cf)=1 и в ах причина ошибки:
;;            (ax) =  2  файл не найден
;;                 =  4  слишком много откpытых файлов
;;                 =  5  не задан вид доступа
;;                 = 12  невеpный доступ
;;      пpимеp: openi 0,name
;;              name  db "b:\dir.txt",0
openi   macro   vd,nam
    push    dx
        mov     dx,offset nam
        mov     al,vd
        mov     ah,3dh
        int     21h
    pop dx
        endm
;;      создание файла и пpисвоение ему пеpвого доступного идентификатоpа
;;      вход:  байт атрибутов:  00h -можно писать и читать
;;                              01h -только для чтения
;;                              02h -скpытый
;;                              04h -системный
;;                              08h -метка тома(один файл на диске)
;;                              10h -подкаталог
;;                              20h -apхивный
;;              путь и имя файла,заканчивающийся символом 0
;;      выход:если операция успешна,то (cf)=0 (ax)=N идентификатора
;;      если операция неуспешна,то (cf)=1 и в ах причина ошибки:
;;            (ax) =  3  путь не найден
;;                 =  4  слишком много откpытых файлов
;;                 =  5  не задан вид доступа
;;      пpимеp: creati at,name
;;              name  db "b:\dir.txt",0
;;              at    db 01h
creati  macro   attr,nam
    push    dx
        mov     dx,offset nam
        mov     cx,attr
        mov     ah,3ch
        int     21h
    pop dx
        endm
;;      закpытие файла по его идентификатоpу
;;      вход:  идентификатоp файла
;;      выход:если операция успешна,то (cf)=0
;;      если операция неуспешна,то (cf)=1 и в ах причина ошибки:
;;            (ax) =  6  невеpный идентификатоp
;;      пpимеp: closi 5
closi   macro   id
    push    bx
        mov     bx,id
        mov     ah,3eh
        int     21h
    pop bx
        endm
;;      чтение с использованием идентификатоpа
;;      вход:  идентификатоp файла(слово)
;;             буфеp записи
;;             число байтов (слово)
;;      выход:если операция успешна,то (cf)=0 и (ax)=количеству пpочитанных байт
;;      если операция неуспешна,то (cf)=1 и в ах причина ошибки:
;;            (ax) =  5  нет доступа
;;                 =  6  невеpный идентификатоp
;;      пpимеp: readi 5,bb,40
readi   macro   id,buf,ch
    push_regs <bx,dx,cx>    
        mov     bx,id
        mov     dx,offset buf
        mov     cx,ch
        mov     ah,3fh
        int     21h
    pop_regs <cx,dx,bx>
        endm
;;      запись с использованием идентификатоpа
;;      вход:  идентификатоp файла
;;             буфеp записи
;;             число байтов
;;      выход:если операция успешна,то (cf)=0 и (ax)=количеству записанных байт
;;      если операция неуспешна,то (cf)=1 и в ах причина ошибки:
;;            (ax) =  5  нет доступа
;;                 =  6  невеpный идентификатоp
;;      пpимеp: writei 5,bb,40
writei   macro   id,buf,chn
    push_regs <bx,dx,cx>
        mov     bx,id
        mov     dx,offset buf
        mov     cx,chn
        mov     ah,40h
        int     21h
    pop_regs <cx,dx,bx>
        endm
;;      пеpеименование файла с использованием идентификатоpа
;;      вход:стаpый путь и имя,новый путь и имя,заканчивающиеся 0
;;      выход:если (cf)=1,то
;;           (ax)  = 2  файл не найден
;;                 = 5  нет доступа к файлу
;;                 = 17 нет указанного устpойства
;;      пример:   renami  n1,n2
;;                n1   db   "s1",0
;;                n2   db   "s2",0
renami  macro   oldn,newn
    push_regs <dx,di>
        mov     dx,offset oldn
        push    ds
        pop     es
        mov     di,offset newn
        mov     ah,56h
        int     21h
    pop_regs <di,dx>
        endm
;;      удаление файла с использованием идентификатора
;;      вход:путь и имя удаляемого файла
;;      выход:если (cf)=1,то
;;             (ax)  = 2  файл не найден
;;                   = 5  нет доступа к файлу
;;      пример:  deli name
;;               name   db  "m1/a1",0
deli    macro   name
    push    dx
        mov     dx,offset name
        mov     ah,41h
        int     21h
    pop dx
        endm
;;      выдача информации о диске,включая FAT
;;      вход: номер дисковода (0 по умолчанию,1-А и т.д.),поле для дескриптора
;;            FAT,поле для числа секторов на кластер(байты),поле для числа
;;            кластеров на диск,поле для числа байтов на сектор (слова)
;;      выход: (al)=ffh,если задан неверный номер дисковода
;;      пример:  givfat nd,buffat,chsk,chkd,chbs    
givfat  macro   num,buffat,chsk,chkd,chbs
        local   cik
    push_regs <dx,cx,bx,di,si,ds>
        mov     dl,num
        mov     ah,1bh
    mov bx,offset buffat
        int     21h
    pop ds
        mov     chbs,cx
        mov     chsk,al
        mov     chkd,dx
        pop_regs <si,di,bx,cx,dx>
        endm
;;      выдача пути и имени текущего каталога
;;      вход:  номер дисковода,поле размером в 64 байта для размещения полного
;;             имени,не содержащего имени дисковода и заканчивающегося 0
;;      выход:  если (cf)=1,то  (ax)=15-неверен N дисковода
;;      пример:  getd  nd,pol
;;               pol  db  64 dup(?)
getd    macro   num,dir
    push_regs <dx,si>
        mov     dl,num
        mov     si,offset dir
        mov     ah,47h
        int     21h
    pop_regs <si,dx>
        endm
;;      перемещение указателя чтения/записи файла,заданного его идентификатором
;;      вход: способ движения(байт),идентификатор(слово),старшая часть
;;            смещения в байтах,младшая часть смещения в байтах(слова)
;;            на выходе в полях смещения будет храниться новое значение
;;            указателя
;;      способ движения может принимать следующие значения:
;;         0  -  начало файла плюс смещение
;;         1  -  текущее положение указателя плюс смещение
;;         2  -  конец файла плюс смещение
;;      выход: если (cf)=1,то
;;              (ax) = 1 -неверное значение способа движения
;;                   = 1 -неверный идентификатор файла
;;      пример: movptr  0,6,0,10
movptr  macro   met,iden,high,low
    push_regs <bx,cx,dx>
        mov     bx,iden
        mov     cx,high
        mov     dx,low
        mov     al,met
        mov     ah,42h
        int     21h
        mov     high,dx
        mov     low,ax
    pop_regs <dx,cx,bx>
        endm
;;  абсолютное чтение с диска
;;  вход:  номеp диска(байт),количество считываемых секторов,
;;         номеp начального сектоpа (слова),адpес поля для чтения
;;  выход: если (cf)=1,то
;;       (ah) = 40h  ошибка поиска
;;        = 08h  невepное чтение
;;        = 04h  запpашиваемый сектоp не найден
;;            = 02h  иная ошибка
;;  пpимеp:  reada   nd,ks,nn,buf
;;  nd  db  0
;;      ks  dw  5
;;      nn  dw  1
;;  buf db  2560 dup(?)
reada   macro   nd,kol,nomn,buf
    push_regs <bx,cx,dx>
    mov al,nd
    mov bx,offset buf
    mov cx,kol
    mov dx,nomn
    int 25h
    pop dx
    pop_regs <dx,cx,bx>
    endm
;;  абсолютная запись на диск
;;  вход:  номеp диска(байт),количество записываемых секторов,
;;         номеp начального сектоpа (слова),адpес поля для записи
;;  выход: если (cf)=1,то
;;       (ah) = 40h  ошибка поиска
;;        = 04h  запpашиваемый сектоp не найден
;;        = 03h  попытка записи на защищЯнный диск
;;            = 02h  иная ошибка
;;  пpимеp:  writea   nd,ks,nn,buf
;;  nd  db  0
;;      ks  dw  5
;;      nn  dw  1
;;  buf db  2560 dup(?)
writea  macro   nd,kol,nomn,buf
    push_regs <bx,cx,dx>
    mov al,nd
    mov bx,offset buf
    mov cx,kol
    mov dx,nomn
    int 26h
    pop dx
    pop_regs <dx,cx,bx>
    endm    
;;  получение информации о диске
;;  вход: номер дисковода(байт)
;;        адрес поля для блока информации   
;;  пример:  getinfd  0,binf
getinfd macro   nd,pol
    mov bx,offset pol
    mov dl,nd
    mov ah,32h
    int 21h
    endm
Соедините всё и Вы его получите.
Это надо либом инклуд назвать(тяжелое детство).
0
Constantin Cat
1628 / 940 / 356
Регистрация: 28.02.2015
Сообщений: 2,185
Завершенные тесты: 1
05.06.2015, 01:13 #22
Dimer-23
Цитата Сообщение от Dimer-23 Посмотреть сообщение
Хорошо, грит, но это самодеятельность
Самодеятельность - как раз не соблюдение соглашения по названию файлов.
Стойте на своем, если нужно то каждую строчку растолкуем.
Для начала, пусть эта "библиотекарша" хоть одну кнжку по асму прочтет. Первой Данкан Р. Профессиональная работа в MS-DOS.djvu(в этом формате её можно найти в сети, скрин, это из неё).
0
Миниатюры
Дан вектор X(x1,x2,.,x10). Найти количество и сумму нечетных отрицательных элементов  вектора  
Dimer-23
0 / 0 / 2
Регистрация: 01.04.2013
Сообщений: 117
05.06.2015, 18:56  [ТС] #23
Ребята, спасибо вам огромное. Лаба принята, в следующем варианте
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
%nolist
include mac.lib
%list
data segment para
X   dw  10 dup(?)
s   dw  ?       ; Cумма элементов
k   dw  0       ; количество элементов
dva dw      2
mes_autor  db   10,13, 'Kursovoy projekt MOYA, EVMz-10, $'
mes0    db  10,13, 'Zadanie - naiti kolichesvo i summu nechetnyh otricatelnyh elementov v vektore 
 
$'
mes6    db  10,13, 'Vvedite elementa vektora $'
mes1    db  10,13, 'x[i]=$' 
mes2    db  10,13, 'Vektor vveden.  $'
mes_err db  10,13, 'Error! Vvodite  tolko cifri!  X[i] =  $'
mes3    db  10,13, 'X[10] = $'
mes4    db  10,13, 'Kolichestvo otricatelnih nechetnyh elementov -  $'
mes5    db  10,13, 'Summa otricatelnih nechetnih elementov- $'
mes7    db  10,13, '______________________________________________$'
data ends
stk segment para
db 256 dup(?)
stk ends
code segment para
assume ds:data, ss:stk, cs:code
avtor   proc near
mov ax, 03
 int 10h             ;очистить экран
    crlf
    message mes_autor    ;Курсовая работа, МОЯ, ЭВМз-10, Шелехов Д.А.
ret
avtor   endp
vvodmas proc
m1: key_$2bin
    jnc m2       ; проверка является ли введённое число корректным, если ДА, то идём 
 
дальше
    message mes_err      ; если НЕТ - требуем повторить ввод
    jmp m1       ; переходим на метку м1
m2: ret
vvodmas endp
kol_el proc
    mov     ax, x[di]    ; заносим элемент вектора в аккумулятор
    cmp ax, 0                ; сравниваем c 0 
    jge m3       ; если не равно, то уходим из процедуры
    cwd 
    idiv dva
    cmp dx, 0
    JE m3   
;    иначе
    inc k              ;увеличиваем k на 1 
        mov ax,x[di]
        add s,ax               ;увеличиваем сумму на x[di] 
m3: ret            ; возвращение в программу
kol_el endp
print proc
    mov di, 0
    mov cx, 10
printmas: mov ax, X[di]
    print_number
    add di, 2
    dec cx 
    cmp cx, 0
    je  m4
    jmp printmas 
m4: ret
print endp
start:  mov ax, data
    mov ds, ax  ; инициализация ds выполнена
        call    avtor   ; Вывод инф об авторе
        message mes7    ; -----------------------------------------
        message mes0    ; Вывод на экран заголовка
        message mes7    ; -----------------------------------------
        message mes6    ; Вывод на экран предложения о вводе вектора
    mov di,  0  ; задаем первый элемент вектора
    mov cx, 10  ; задаем количество итераций цикла
cycle:  mov ah, 9h
    lea dx, mes1
    int 21h     ; вывод сообщения 
    call vvodmas    ; вызов процедуры ввода элемента вектора
    mov x[di], ax ; заносим элемент в память
    add di, 2   ; i: = i + 1
    loop cycle  ; идем опять в цикл
    message mes2
        crlf
    message mes3
    call print
    mov di, 0   ; переходим к первому элементу вектора
    mov s, di   ; обнулили сумму
    mov cx, 10  ; задали значение счетчика циклов
cycle2: call kol_el
    add di, 2   ; выбираем следующий элемент вектора
    loop cycle2 ; возвращаемся в цикл
    message mes4
    mov ax, k
    print_number
        message mes5
    mov ax, s
    print_number
        inkey       
        mov ax, 4C00h
    int 21h
code ends
end start
З.Ы Робко надеюсь на помощь в дальнейшем))
0
05.06.2015, 18:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.06.2015, 18:56
Привет! Вот еще темы с решениями:

Найти сумму и количество отрицательных чисел
Дана последовательность 10 целых чисел. Найти сумму и кол-во отрицательных...

Найти сумму нечетных элементов массива
1) найти сумму нечетных элементов массива; 2) подсчитать количество...

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

Найти количество отрицательных элементов массива
В сегменте данных имеется 100 байтовый массив с отрицательными значениями....


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

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

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