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

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

19.01.2016, 19:18. Просмотров 314. Ответов 1
Метки нет (Все метки)

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

Добавлено через 2 минуты
Нужно соединить.

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
org 100h
start:
  lea si,[anum]
  mov cx,qanum
  xor bx,bx
  mrp:lodsw
      cwd
      and dx,ax
      add bx,dx
  loop mrp
  ret
  anum  dw -1,-1024,3,4,-5,1,1,3,5,6,1,4,3,-70,6,-900,4,-8000,5,6
  qanum = ($-anum)/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
.model small
.stack
.data
       ; mas dw 4, -23, 1, 30, -79, -248, 160
        mas db -4, -2, 1, 110, 2, -4, 10
        viv db 6 dup (' '), 10, 13, '$'
.code
    mov ax, @data
    mov ds, ax
    ; O4istka ekrana
    mov ah, 6
    mov al, 0
    mov bh, 7
    mov cx, 0
    mov dx, 184Fh
    int 10h
    ; Razmeshenie kursora
    mov ah, 2
    mov bh, 0
    mov dh, 0
    mov dl, 0
    int 10h
    ; Summa
    xor ax, ax
    xor di, di
    mov cx, 7 ; cx = 4islo el-tov massiva
cycle_sum:
    cmp mas[di], -100
    jl next
    cmp mas[di], 100
    jg next
    add al, mas[di] ; esli massiv db, to zdesi al, esli dw - to ax
next:
    add di, 1  ; db - 1, dw - 2
    loop cycle_sum
    ; Vivod summi
    xor dx, dx
    mov si, 10
    mov di, 5
    push ax
    cmp ax, 0
    jg M
    neg ax
M:
    div si
    add dl, 30h
    mov viv[di], dl
    xor dx, dx
    dec di
    cmp ax, 0
    jne M
    pop ax
    cmp ax, 0
    jg Vivod
    mov viv[di], '-'
Vivod:
    mov ah, 9
    lea dx, viv
    int 21h
    ; Proizvedenie
    xor ax, ax
    xor di, di
    mov cx, 7
cycle_pr:
    cmp mas[di], 0
    jl next1
    cmp ax, 0
    jne M1
    mov al, mas[di]
    jmp next1
M1:
    mul mas[di]
next1:
    add di, 1
    loop cycle_pr
    ; Vivod proizvedenia
    xor dx, dx
    mov si, 10
    mov di, 5
    push ax
    cmp ax, 0
    jg M2
    neg ax
M2:
    div si
    add dl, 30h
    mov viv[di], dl
    xor dx, dx
    dec di
    cmp ax, 0
    jne M2
    pop ax
    cmp ax, 0
    jg Vivod2
    mov viv[di], '-'
Vivod2:
    mov ah, 9
    lea dx, viv
    int 21h
    mov ah, 0
    int 16h
    mov ah, 4ch
    int 21h
end
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.01.2016, 19:18
Ответы с готовыми решениями:

Найти, сколько положительных, отрицательных и нулевых элементов в массиве удовлетворяют условию
Программа под DOS, язык masm32, для процессоров .386++ Найти, сколько положительных, отрицательных...

Подсчет количества положительных и отрицательных элементов в массиве
Доброго времени суток,нужна ваша помощь,написал программу по подсчету положительных и отрицательных...

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

Вычисление сумм отрицательных,произведение положительных и количество нулевых значений в одномерном массиве.
День добрый.Господа,помогите пожалуйста задачку решить,по обработке одномерного массива,она...

Написать процедуру определения суммы положительных, суммы отрицательных, количества нулевых элементов массива
2.Написать процедуру определения суммы положительных чисел одномерного массива,сумы отрицательных,а...

1
R71MT
5343 / 1500 / 317
Регистрация: 29.07.2014
Сообщений: 2,524
Записей в блоге: 5
20.01.2016, 10:58 2
Цитата Сообщение от bager Посмотреть сообщение
вычисления суммы отрицательных, произведения положительных и количества нулевых значений
Вот тебе код. Разбирайся...

Код
  ARRAY INFO ===============
  **************************
  Negative SUMM: -10000
     Count ZERO: 2
  Positive MULT: 518400
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
ORG 100h
JMP start
 
mess0  DB  13,10,'ARRAY INFO ==============='
       DB  13,10,'**************************'
       DB  13,10,'Negative SUMM: -$'
mess1  DB  13,10,'Positive MULT: $'
mess2  DB  13,10,'   Count ZERO: $'
 
array  DW  -1,-1024,3,4,-5,1,0,1,5,6,1,4,3,-70,6,-900,4,-8000,5,0
size   =   $ - array
 
start:
;============ ПОИСК И СУММИРОВАНИЕ ОТРИЦАТЕЛЬНЫХ =============//
;============ С ПОДСЧЁТОМ КОЛИЧЕСТВА НУЛЕЙ ===================//
   MOV   SI,array        ; адрес массива
   MOV   CX,size/2       ; его размер
   XOR   BX,BX           ; ВХ будет сумма отриц.элементов
   XOR   DX,DX           ; DX = счётчик нулей
@@:                      ;
   LODSW                 ; берём элемент массива
   OR    AX,AX           ;
   JNS   positive        ; прыг, если число положительное
   NEG   AX              ; иначе - инверсия(+1)
   ADD   BX,AX           ; и сумма с ВХ
positive:                ;
   JNZ   noZero          ; прыг, если это не нуль
   INC   DX              ; счётчик нулей(+1)
noZero:                  ;
   LOOP  @b              ; сл.элемент массива
 
next1:                   ; отработали! =======================//
   PUSH  DX BX           ; запоминаем BX:DX
   MOV   DX,mess0        ;
   CALL  MESSAGE         ;
   POP   AX              ; АХ = BX (для вывода на экран)
   MOV   BX,10           ; ВХ = система счисления
   CALL  HEX2ASC         ; выводим сумму отриц.элементов на экран
   MOV   DX,mess2        ;
   CALL  MESSAGE         ;
   POP   AX              ; АХ = DX
   MOV   BX,10           ;
   CALL  HEX2ASC         ; выводим счётчик нулей на экран
 
;============ ВЫЧИСЛЕНИЕ ПРОИЗВЕДЕНИЯ ПОЛОЖИТЕЛЬНЫХ ==========//
   MOV   SI,array        ;
   MOV   CX,size/2       ;
   MOV   EBX,1           ; стартовый множитель (32 бит)
   XOR   EAX,EAX         ; множимое тоже 32 бит
@1:                      ;
   LODSW                 ; берём элемент массива
   TEST  AX,AX           ;
   JNS   ok              ; фильтр положительных элементов
   LOOP  @1              ;
   JMP   next2           ;
ok:                      ; наш клиент!
   OR    AX,AX           ; положительное может быть нулём
   JZ    fuckZero        ; факинг его.. (умножать на 0 нельзя)
   MUL   EBX             ; EAX * EBX
   XCHG  EAX,EBX         ; EBX = текущий результ
   XOR   EAX,EAX         ; в старшем слове(EAX) может быть мусор
fuckZero:                ;
   LOOP  @1              ; сл.элемент с массива...
   PUSH  EBX             ; запомним выхлоп функции!
 
next2:                   ;
   MOV   DX,mess1        ;
   CALL  MESSAGE         ; выводим результат на экран
   POP   EAX             ;
   MOV   EBX,10          ; в 10-тичной системе счисления
   CALL  HEX2ASC         ;
 
exit:                    ;
   XOR   AX,AX           ;
   INT   16h             ;
   INT   20h             ;
 
;нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
MESSAGE:                 ; функция вывода сообщений ==========//
   MOV   AH,9            ;
   INT   21h             ;
RET                      ;
 
HEX2ASC:                 ; вывод чисел с АХ на экран =========//
   XOR   ECX,ECX         ;
isDiv:                   ;
   XOR   EDX,EDX         ;
   DIV   EBX             ;
   PUSH  EDX             ;
   INC   ECX             ;
   OR    EAX,EAX         ;
   JNZ   isDiv           ;
isOut:                   ;
   POP   EAX             ;
   CMP   AL,9            ;
   JLE   noHex           ;
   ADD   AL,7            ;
noHex:                   ;
   ADD   AL,30h          ;
   INT   29h             ;
   LOOP  isOut           ;
RET                      ;
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.01.2016, 10:58

Найти сумму положительных, отрицательных и нулевых элементов в одномерном массиве
спасайте! старушка весь семестр ничего от нас не хотела и вдруг - оп! - и 2 программы каждую 6ю...

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

В произвольно заданном одномерном массиве определить число отрицательных, нулевых и положительных элементов.
В произвольно заданном одномерном массиве определить число отрицательных, нулевых и положительных...


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

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

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