0 / 0 / 1
Регистрация: 18.12.2014
Сообщений: 64
1
TASM

Макроопределение для вычисления суммы четных элементов массива

08.01.2016, 14:45. Показов 871. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Составить макроопределение вычисления суммы четных элементов массива чисел а1, а2, ..., an. Используя это макроопределение, найти сумму четных элементов каждого из трех массивов а1, а2,... а7; b1, b2,... b7; c1, c2, ...c7.

написал код а он не работает! исправить не получается! или я неправильно все сделал!
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
seach macro
Local cikl, l1, m1, n1, b1, konec
        xor dx,dx 
        mov bx,offset string+2 
        mov di,bx 
 
cikl:   mov al,[bx] 
        cmp al,13 
        je m1 
        cmp al,20h ;сравниваем с пробелом
        je m1 
        test dx, dx 
        jnz  l1 
        xor cx,cx 
        inc dx  
        mov si,bx ; 
l1:     inc cx 
        jmp b1
        
m1:     mov byte ptr [bx], '$' 
        test dx,dx 
        jz n1 
        xor dx, dx 
        cmp cx,min 
        jg  n1 
        mov min,cx
        mov di,si ;
n1:     cmp al,13
        je konec 
 
b1:     inc bx 
        jmp cikl
 
konec:
    
        mov dx,offset crlf
        mov ah,9
        int 21h              
    
        mov dx,di
 
endm
 
stack1 segment
     db 200h dup (?)
stack1 ends
data segment
     string db 100,?,100+1 dup ('$')
     min dw 32767 
     crlf db 13,10,'$'
data ends
 
code segment
start:
    assume cs:code,ds:data
        mov ax, data
        mov ds, ax
    
        mov ah,0ah
        lea dx,string
        int 21h 
    
        seach string, dx
        mov ah, 09h
        int 21h
        
        mov ah, 10h
        int 16h
        mov ax, 4c00h
        int 21h
code ends
end start
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.01.2016, 14:45
Ответы с готовыми решениями:

Макроопределение вычисления суммы четных элементов массива чисел
Составить макроопределение вычисления суммы четных элементов массива чисел а1, а2, …, до n....

Составить макроопределение вычисления суммы четных элементов массива
Составить макроопределение вычисления суммы четных элементов массива чисел а1, а2, …, аn. Используя...

Написать программу вычисления суммы всех чётных элементов для заданного двумерного массива А размером NxM
Написать программу вычисления суммы всех чётных элементов для заданного двумерного массива А...

Составить программу вычисления и печати суммы отрицательных элементов среди четных элементов массива
#include <math.h> #include <stdio.h> #include<malloc.h> void pech_m(float *, int, int); void...

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

1
Эксперт Hardware
Эксперт Hardware
6103 / 2347 / 390
Регистрация: 29.07.2014
Сообщений: 3,108
Записей в блоге: 4
08.01.2016, 20:20 2
Ты чуток перестарался.. В коде много лишнего и совсем непонятного.
К примеру, ты заполняешь массив числами с клавиатуры функцией(0Ah),
в результате чего в буфере оказываются символы, а не числа.

С фильтром чётных чисел вообще труба! Самый простой способ отсеить чётные числа,
это проверить его младший бит на нуль. Чётные числа всегда заканчиваются нулём:
Код
	0000 = 0    0010 = 2   0100 = 4   0110 = 6
	0001 = 1    0011 = 3   0101 = 5   0111 = 7   ..и т.д.
Ниже, код и макрос на FASM'e, который решает твою задачу. Измени его под свой ассемблер:

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
macro SEARCH
{  XOR   DI,DI          ; здесь будет результат. пока DI = 0
   XOR   AX,AX          ; сюда будем читать числа с массива
   MOV   SI,array       ; адресс массива в SI (для LODSB)
   MOV   CX,length      ; CX = кол-во элементов в массиве
@1:
   LODSB                ; читаем байт с массива
   TEST  AL,1           ; проверяем младший бит числа на нуль
   JNZ   uneven         ; если не нуль - число нечётное
   ADD   DI,AX          ; прибавляем чётное число к DI
uneven:
   LOOP  @1   }         ; сл.элемент массива..
 
;нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
ORG 100h
JMP  start
 
mess0   DB  13,10,' Сумма чётных элементов: $'
array   DB  0, 58, 250, 11, 19, 81, 60, 103, 79, 92
length  =   $ - array    ; длина массива
 
start:
   MOV   AH,9            ; выводим мессагу
   MOV   DX,mess0
   INT   21h
 
   SEARCH                ; зовём наш макрос (результат в DI)
   MOV   AX,DI           ; результ в AX (параметр для HEX2ASC)
   MOV   BX,10           ; BX = система счисления для вывода
   CALL  HEX2ASC         ; переводим число АХ в символы
                         ;   ..и выводим результат на экран
exit:
   XOR   AX,AX           ; выход по клавише!
   INT   16h
   INT   20h
 
;нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
;//========= ФУНКЦИЯ ВЫВОДИТ НА ЭКРАН В РАЗЛИЧНЫХ СС =========================|
HEX2ASC:
   PUSHA                   ; перевод из HEX в ASCII и вывод на экран
   XOR   CX,CX             ; при вызове: BX = система счисления, AX = число
isDiv:
   XOR   DX,DX             ; очистим место под остаток
   DIV   BX                ; разделим AX на фактор системы счисления
   PUSH  DX                ; сохраняем остаток от деления
   INC   CX                ; увеличим счётчик разрядности цифры
   OR    AX,AX             ; это последняя цифра?!
   JNZ   isDiv             ; нет - читаем следующую..
isOut:
   POP   AX                ; снимаем со-стека остаток в обратном порядке
   CMP   AL,9              ; проверка на десятичную цифру
   JLE   noHex             ; меньше/равно? значит это не HEX-цифра
   ADD   AL,7              ; коррекция для HEX..
noHex:
   ADD   AL,30h            ; переводим цифру в символ
   INT   29h               ; выводим её на экран
   LOOP  isOut             ; ^^.. и мотаем цикл CX-раз.
   POPA
RET
1
08.01.2016, 20:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.01.2016, 20:20
Помогаю со студенческими работами здесь

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

Определить для массива X[n] алгебраические суммы четных и нечетных элементов массива
Вариант № 17 Задание 1. Определить для массива X алгебраические суммы четных и нечетных элементов...

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

Определить для массива алгебраические суммы четных и нечетных элементов
Доброго времени суток. Прошу помочь с написанием 2-ух программ для qBasic по Массивам. 1....

Процедура для вычисления суммы элементов массива
Составить процедуру для вычисления суммы элементов одномерного массива. С ее помощью подсчитать...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru