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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.04.2009, 15:28   #1
Жека:)
Пользователь
 
Регистрация: 25.10.2008
Сообщений: 30
По умолчанию Произведение отрицательных элементов в одномерном массиве - в чём ошибка?

Вот наваял:
Код:
include macro.lib
;
;
stek segment 'stack'
dw 256 dup (?)
stek ends
;
;
data segment 'data'
mas db 10 dup (?)
otvet db 'Ответ: $'
n db ?
proizv db 1
mes db 'Программа поиска произведения отрицательных элементов одномерного массива.$'
vvod1 db 'Введите количество элементов: $'
vvod2 db 'Введите число: $'
data ends
;
;
code segment 'code'
assume ss:stek, cs:code, ds:data
;
begin proc far
mov ax, data
mov ds, ax
cls
move_cursor 0,0
;
message mes
crlf
message vvod1
key_$2bin
mov n, al
lea di, mas
mov cl, n
m:
 crlf
 message vvod2
 key_$2bin
 mov [di], al
 cmp al, 0
 jge con
 imul proizv
 message mes
con:
 inc di
 loop m1
 jmp m2
m1:
 jmp m
m2:
 crlf
 mov al, proizv
 message otvet
 print_number
;
mov ax, 4c00h
int 21h
crlf
ret
begin endp
code ends
;
;
end begin
Но, к сожалению, все время ответ равен единице, т.е. не происходит умножение, хотя программа отличает отрицательные числа, т.к. правильно работает
Код:
cmp al, 0
jge con
imul proizv
message mes
- выводится сообщение из переменной mes при вводе отрицательного числа. Помогите разобраться с умножением.
Жека:) вне форума Ответить с цитированием
Старый 06.04.2009, 15:44   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
loop m1
jmp m2
m1:
jmp m
Оригинально.

Я лично это так вижу:

Код:
	.386
	.model flat,stdcall
	option casemap:none
.data
 arr db 1,2,-3,4,6,-8,-9
 cnt db 7
 pr dw 1; Произведение отрицательных
.code
start:
 xor ecx,ecx
 mov cl,cnt

a1:
 mov al,[arr+ecx]
 cmp al,0
 jg no
 imul pr
 mov pr,ax
no: loop a1
	ret
end start
I'm learning to live...

Последний раз редактировалось Stilet; 06.04.2009 в 15:51.
Stilet вне форума Ответить с цитированием
Старый 06.04.2009, 15:58   #3
Жека:)
Пользователь
 
Регистрация: 25.10.2008
Сообщений: 30
По умолчанию

Не знаю оригинально или нет, но нас так учат... Так что ваш код неинтересен, помогите с моим. Думаю, исправит его несложно... Но всё равно спасибо
Жека:) вне форума Ответить с цитированием
Старый 06.04.2009, 16:10   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Так что ваш код неинтересен
Здря, мой код отличается тем что в твоем я не нашел инструкции IMUL работу с элементами массива
Вот тут mov [di], al наоборот параметры поменять нужно:
Код:
mov al, [di]
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти сумму квадратов отрицательных элементов массива bbk_serg Помощь студентам 7 21.01.2009 12:33
Поиск в одномерном массиве Joxter Помощь студентам 6 13.12.2008 14:19
Колличество четных элементов в одномерном массиве forsy Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 21.05.2008 15:01
Как найти проиизведение в одномерном массиве? kitty Помощь студентам 10 30.11.2007 20:30
вычислить сумму отрицательных элементов в массиве only_win Паскаль, Turbo Pascal, PascalABC.NET 2 25.09.2007 15:22