Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.09.2009, 15:15   #1
Sonyalex90
Пользователь
 
Регистрация: 20.09.2009
Сообщений: 23
По умолчанию нахождение произведения в массиве

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

Код:
data segment
rez dw ?
mass dw 1,2,3,-2,-96,4,-9,5,6,7
data ends
code segment
assume cs: code, ds: data
start: 
mov ax, data
mov ds, ax
lea bx, mass 
mov cx, 10
mov ax, [bx]
m1: cmp [bx], ax
jge m2
mull ax,[bx]
m2 : inc bx
        loop m1
       mov rez,ax
quit: mov ax,4C00h
int 21h
code ends
end start
программа не компилируется.... подскажите, может я вообще не тем путём пошёл... Заранее спасибо..

Последний раз редактировалось Stilet; 30.09.2009 в 16:22.
Sonyalex90 вне форума Ответить с цитированием
Старый 30.09.2009, 16:04   #2
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

может так
Код:
start: 
mov ax, data
mov ds, ax
lea bx, mass 
mov cx, 10
mov ax, [bx]
m1:
inc bx
inc bx
mul word ptr[bx]
loop m1
mov rez,ax
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 30.09.2009, 17:50   #3
Sonyalex90
Пользователь
 
Регистрация: 20.09.2009
Сообщений: 23
По умолчанию

не то ((( выводит только в результате 1 хотя должен вывести 13BO
Sonyalex90 вне форума Ответить с цитированием
Старый 30.09.2009, 18:08   #4
Sonyalex90
Пользователь
 
Регистрация: 20.09.2009
Сообщений: 23
По умолчанию

задача вроде легкая....
Sonyalex90 вне форума Ответить с цитированием
Старый 30.09.2009, 18:18   #5
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

А с чего вы взяли, что должно быть 13BO ?
Во-первых здесь идет переполнение. ax может вместить число не больше 65535, а получается гораздо больше.
Во-вторых даже если посчитать без переполнения, то получится 1с00 в конце.
Код:
mass dd 1,2,3,-2,-96,4,-9,5,6,7
data ends
code segment 'CODE'
assume cs: code, ds: data
start: 
.386
mov ax, data
mov ds, ax
lea bx, mass 
mov cx, 9
mov eax, [bx]
m1:
add bx,4
imul dword ptr[bx]
loop m1
mov rez,ax
quit:
mov ax,4C00h
int 21h
code ends
end start
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 30.09.2009, 18:27   #6
Sonyalex90
Пользователь
 
Регистрация: 20.09.2009
Сообщений: 23
По умолчанию

[QUOTE=Goodwin98;354297]А с чего вы взяли, что должно быть 13BO ?
Во-первых здесь идет переполнение. ax может вместить число не больше 65535, а получается гораздо больше.
Во-вторых даже если посчитать без переполнения, то получится 1с00 в конце.
Код:
mass dd 1,2,3,-2,-96,4,-9,5,6,7
data ends
code segment 'CODE'
assume cs: code, ds: data
start: 
.386
mov ax, data
mov ds, ax
lea bx, mass 
mov cx, 9
mov eax, [bx]
m1:
add bx,4
imul dword ptr[bx]
loop m1
mov rez,ax
quit:
mov ax,4C00h
int 21h
code ends
end start
[/QUOTE




ну так мне нужно перемножить только положительные значения. в 10-ой форме это 5054 в 16-ой 13BO, три отрицательных значения программа должна пропустить
Sonyalex90 вне форума Ответить с цитированием
Старый 30.09.2009, 18:46   #7
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Не заметил, что нужно только положительные умножать
Код:
mov ax, data
mov ds, ax
lea bx, mass 
mov cx, 9
mov ax, [bx]
m1:
inc bx
inc bx
cmp [bx], 0
jle m2
imul word ptr[bx]
m2:
loop m1
mov rez,ax
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 30.09.2009, 19:05   #8
Sonyalex90
Пользователь
 
Регистрация: 20.09.2009
Сообщений: 23
По умолчанию

Спасибо огромное =)))) все работает =))))

одна проблема =((( если поставить первый элемент массива отрицательный, то программа работает неправильно, т.е. она умножает постоянно первый элемент массива на положительные... как это устранить

одна проблема =((( если поставить первый элемент массива отрицательный, то программа работает неправильно, т.е. она умножает постоянно первый элемент массива на положительные... как это устранить

Последний раз редактировалось Stilet; 08.10.2009 в 15:20.
Sonyalex90 вне форума Ответить с цитированием
Старый 08.10.2009, 15:14   #9
airyashov
Форумчанин
 
Регистрация: 02.04.2008
Сообщений: 358
По умолчанию

покажите код
неплохо пишу на ассемблере для 80х86
icq: 3(один)7748666
mail: airyashov(а)inbox.ru
airyashov вне форума Ответить с цитированием
Старый 08.10.2009, 17:27   #10
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Код:
mov ax, data
mov ds, ax
lea bx, mass 
mov cx, 9
l1:
mov ax, [bx]
cmp ax,0
jg m1
inc bx
dec cx
inc bx
jmp l1
m1:
inc bx
inc bx
cmp [bx], 0
jle m2
imul word ptr[bx]
m2:
loop m1
mov rez,ax
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нахождение min в массиве jenja Общие вопросы C/C++ 2 04.10.2008 19:32
Нахождение минимума и максимума в трехмерном массиве 1234 Помощь студентам 11 26.05.2008 16:23
Нахождение суммы в массиве. PHP Айвенго Помощь студентам 3 28.01.2008 19:46
Нахождение двух одинаковых элементов в массиве Stas))) Помощь студентам 4 01.06.2007 12:23