Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ассемблер _ Найти и вывести максимальный из четных элементов массива, удовлетворяющих условию (28 < i < 232)

Автор: NightMan665 27.04.2009 15:08

Найти и вывести максимальный из четных элементов массива, удовлетворяющих условию (28 < i < 232).

При этом даётся массив в файле, который нужно подсоединить к программе. Ещё не понятно, чтобы удовлетворяло условию 28 < i < 232 - индекс, или само число, скорее всего индекс good.gif smile.gif Если кто может помочь - помогите rolleyes.gif

P.S. Компилятор юзается masm32


Прикрепленные файлы
Прикрепленный файл  array_16.rar ( 10.65 килобайт ) Кол-во скачиваний: 310

Автор: volvo 27.04.2009 17:03

Цитата
Ещё не понятно, чтобы удовлетворяло условию 28 < i < 232 - индекс, или само число, скорее всего индекс
Ну, это уж тебе видней - число это или индекс. По написанию - вроде индекс... Тогда задача решается вот так, например:

.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_16.dat

.code

start:
call main
exit

main proc
mov bl, 0 ; max

mov esi, offset file1
add esi, 28

mov ecx, fsize1
sub ecx, 203 ; (232 - 28 - 1)
.while ecx > 0
mov al, [esi]

test al, 1
jnz go_next

cmp al, bl
jbe go_next ; a[i] <= max ?
mov bl, al

go_next:
inc esi
dec ecx
.endw

print chr$('max of evens = ')
xor eax, eax
mov al, bl
print str$ (eax)
ret
main EndP
end start
Если все-таки 28 < arr[ i ] < 232, то придется чуть-чуть переделать. Попробуй сделать это самостоятельно.

Автор: NightMan665 6.05.2009 0:37

Какой-то интересный у нас MASM... в общем сразу когда компилил выдал мне:

Код
Assembling: 1.asm
1.asm(23) : error A2012: PROC, MACRO, or macro repeat directive must precede LOC
AL
1.asm(31) : error A2006: undefined symbol : fsize1


добавил в код:

main proc

LOCAL fsize1 :DWORD

mov bl, 0 ; max


скомпилировался на ура, но прога открылась и с такой же резкостью закрылась norespect.gif Что делать? blink.gif

Автор: volvo 6.05.2009 2:33

Цитата
в общем сразу когда компилил выдал мне:
Вот этого быть по определению не может... Эта ошибка говорит о том, что перед LOCAL обязательно должна быть одна из директив MACRO, PROC или REPEAT/WHILE/FOR. Только проблема - в том, что у меня в коде слова LOCAL вообще нет, значит, ты код правил. А коли правил - то и исправляй...

У меня программа компилируется и работает:



Эскизы прикрепленных изображений
Прикрепленное изображение

Автор: NightMan665 6.05.2009 15:01

Цитата(volvo @ 5.05.2009 22:33) *

Вот этого быть по определению не может... Эта ошибка говорит о том, что перед LOCAL обязательно должна быть одна из директив MACRO, PROC или REPEAT/WHILE/FOR. Только проблема - в том, что у меня в коде слова LOCAL вообще нет, значит, ты код правил. А коли правил - то и исправляй...

У меня программа компилируется и работает:

Да уж, но без LOCAL у меня выдаёт
Код
1.asm(29) : error A2006: undefined symbol : fsize1
unsure.gif Енто, а ты не мог бы ссылку дать где можно твой masm скачать? Ибо препод не отвяжется norespect.gif Или версию хотя бы