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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.11.2009, 19:57   #1
Student117
Пользователь
 
Регистрация: 14.10.2009
Сообщений: 11
Вопрос Работа с флагами!!!

Здрасвуйте помогите если можете =)))
Дано задание вообщем : Пусть задан массив res db N dup (0). Заполните этот массив следующим образом – если соответствующее двойное слово из inp имеет чётное число бит, установленных в 1, запишите в массив 0, если нечётное – 1. (указание – используйте флаг чётности).
Вот что у меня получилось:
Код:
.386 
.model flat, stdcall
includelib kernel32.lib
ExitProcess PROTO ,WORD 
.data 
inp dd 0,4,-13,3,7,2,1,-3,-4,12
res dd ?
.code 
Winmain PROC
lea edi,inp[3*4]
mov ebx,3
next:
mov res[ebx],0
xor eax,eax
or eax,dword ptr[edi]
jnp not_par
mov res[ebx],1
not_par:
sub edi,4
sub ebx,1
jns next
push 0
call ExitProcess
Winmain endp
end Winmain

Но препод говорит что здесь нету флага чётности объяните вообщем что исправить??? исправить jns на jpe и всё???

Последний раз редактировалось Stilet; 19.11.2009 в 10:42.
Student117 вне форума Ответить с цитированием
Старый 18.11.2009, 23:34   #2
|{ot
Форумчанин
 
Аватар для |{ot
 
Регистрация: 09.03.2008
Сообщений: 127
По умолчанию

Не совсем понятно обявление
Цитата:
res dd ?
должен быть массив же? И прототип
Цитата:
ExitProcess PROTO ,WORD
неправильно обявлен... по соглашению stdcall все параметры ф-ций имеют размер двойного слова:
Код:
ExitProcess PROTO,:DWORD
И тут не понятно
Цитата:
lea edi,inp[3*4]
сразу идет загрузка 4-го элемента масива, а как же 3 предыдущих?

Код немного не понятен по логике, да и работает не верно...

Если устроет немного переделаный этот код:
Код:
.386
.model flat, stdcall
includelib kernel32.lib
ExitProcess PROTO,:DWORD
.data
inp dd 0,4,-13,3,7,2,1,-3,-4,12
res db 10 dup(0)
.code
Winmain PROC
lea esi,inp 
lea edi,res
mov ecx,10;к-во элем масива
next:
lodsd ;элемент масива загружается в eax и еsi увеличивается на 4 байта(на размер элемента)
or eax,0; выставляем флаги
jnp not_par
or byte ptr[edi],1; если парное к-во записываем 1, иначе там и так уже записано 0 (res db 10 dup(0))
not_par:
inc edi; переходим к след элем масива результатов
loop next; уменьшает ecx на 1 и если еcx!=0 переходит на метку next 
push 0
call ExitProcess
Winmain endp
end Winmain
|{ot вне форума Ответить с цитированием
Старый 19.11.2009, 09:27   #3
Student117
Пользователь
 
Регистрация: 14.10.2009
Сообщений: 11
По умолчанию

спасибо большое =)))
Student117 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача. Работа с псевдослучайными последовательностями (ПСП). Работа с цветом. 0101 Помощь студентам 3 17.12.2009 23:57
Работа с webbrowser - Фреймы, работа с конкретным феймом в фрейме NewDelphi Фриланс 2 08.10.2009 11:00