Помощь - Поиск - Пользователи - Календарь
Полная версия: Массивы...
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ассемблер
Ultravozhik
Найти и вывести индекс первого четного элемента массива, кратный числу 6.
Зарание спасибо..

Добавлено через 2 мин.
Компилятор masm32 и сам массив:
Нажмите для просмотра прикрепленного файла
volvo
А если индекс первого четного не будет кратным числу 6, его не надо выводить? Задание корректно сформулируй, а то второй раз одно и то же: Найти и вывести максимальный из четных элементов массива, удовлетворяющих условию (28 < i < 232) - то же самое было, какая-то двусмысленность в задании...

Тебе надо найти первый индекс четного элемента, кратный 6-ти? Или индекс первого четного, кратного 6-ти? Что именно? Уточняй...
Ultravozhik
индекс первого четного, кратного 6-ти
Айра
Тут не сложно ведь, идешь по массиву, делишь на 6 и сравниваешь остаток с нулем.. Как только получишь равенство, вычисляешь индекс исходя из смещения..
Но это если я все правильно поняла, потому что "четный кратный 6" немного смущает.. разве может быть еще и "нечетный кратный шести" ?
Ultravozhik
Цитата(Айра @ 5.05.2009 17:54) *

Тут не сложно ведь, идешь по массиву, делишь на 6 и сравниваешь остаток с нулем.. Как только получишь равенство, вычисляешь индекс исходя из смещения..
Но это если я все правильно поняла, потому что "четный кратный 6" немного смущает.. разве может быть еще и "нечетный кратный шести" ?

По логике я понимаю как это сделать, а вот как это написать в коде, я не знаю
volvo
Ну я ж тебе дал ссылку на очень похожее задание, чуть-чуть подправь его и получи то, что тебе надо:
.486
.model flat, stdcall
option casemap :none

include D:\masm32\include\windows.inc
include D:\masm32\macros\macros.asm

include D:\masm32\include\masm32.inc
include D:\masm32\include\kernel32.inc

includelib D:\masm32\lib\masm32.lib
includelib D:\masm32\lib\kernel32.lib

; Подключаем твой файл данных
include array_20.dat

DIVISOR db 6

.code

start:
call main
exit

main proc
mov esi, offset file1
mov edi, esi

mov ecx, fsize1
.while ecx > 0
xor ax, ax
mov al, [esi]

div DIVISOR ; делим на 6
test ah, 0fh ; проверяем остаток на 0
jz found ; ноль? Значит, нашли то, что надо

inc esi
dec ecx
.endw

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

found:
print chr$('first index = ')
xor eax, eax ; вычисляем индекс, для чего от текущего
mov eax, esi ; значения esi отнимаем смещение начала массива
sub eax, edi
print str$ (eax)
ret
main EndP
end start
Говорю сразу: программа проверена, отработала, никаких ошибок или предупреждений не выдает, выводит правильный ответ. Это на случай, если тебе тоже захочется что-нибудь поменять, а потом заявить, что не сработало...
Ultravozhik
Огромное спасибо good.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.