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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2011, 23:05   #1
kwain
Новичок
Джуниор
 
Регистрация: 13.12.2011
Сообщений: 2
По умолчанию посчитать к-во четных и нечетных элементов массива

Помогите пожалуйста. Данная программа должна вычислять количество чётных и нечетных элементов массива
но в отладчике она циклится на команде DIV BL

Так же преподаватель написал следующее:
"1. в программе не задано число повторений цикла (число элементов в массиве)
2. неграмотно извлечено из стека значение адреса первого элемента массива в edx
3. неграмотно взято слово в регистр ax по адресу из edx
4. при делении на два лучше использовать команды сдвига вправо shr. Они работают быстрее команд деления."

Помогите,пожалуйста,мне завтра её сдать нужно на зачёт!

.586
.model flat,stdcall
option casemap: none
.data
MASS DW 1,2,3,4,5,6,7,8,9
LEN_MASS=$-MASS
K_CH DB 0
K_NCH DB 0
.code
_start :

XOR ESI,ESI
XOR EAX,EAX
XOR EBX,EBX
XOR ECX,ECX
XOR EDX,EDX
MOV CX,LEN_MASS
MOV BL,2

MOV EDX, OFFSET MASS
PUSH EDX

call newpr
newpr proc

POP EDX

CYC1:

MOV AX,[EDX]
DIV BL
CMP AH,0
JE CHET
INC K_NCH
JMP KON
CHET: INC K_CH
JMP KON
KON: ADD EDX,2

LOOP CYC1

newpr endp

ret
end _start
kwain вне форума Ответить с цитированием
Старый 14.12.2011, 12:32   #2
zhan313
Пользователь
 
Регистрация: 09.12.2011
Сообщений: 44
По умолчанию

Код:
.586
.model flat,stdcall
option casemap: none

.data
MASS DW 1,2,3,4,5,6,7,8,9
LEN_MASS=9
K_CH DB 0
K_NCH DB 0

.code
_start:

XOR ESI,ESI
XOR EAX,EAX
XOR EBX,EBX
XOR ECX,ECX
XOR EDX,EDX
MOV CX,LEN_MASS
MOV BL,2

MOV EDX, OFFSET MASS
PUSH EDX

call newpr
pop edx

newpr proc
push esp
pop ebp
mov EDX,[ebp+4]

CYC1:

MOV AX,[EDX]
TEST AX,1
JZ CHET
INC K_NCH
JMP KON
CHET: INC K_CH
KON: ADD EDX,2

LOOP CYC1

newpr endp

ret
end _start
zhan313 вне форума Ответить с цитированием
Старый 14.12.2011, 14:24   #3
kwain
Новичок
Джуниор
 
Регистрация: 13.12.2011
Сообщений: 2
По умолчанию

так эта программа при прогоне не тот результат выдаёт
kwain вне форума Ответить с цитированием
Старый 15.12.2011, 10:41   #4
zhan313
Пользователь
 
Регистрация: 09.12.2011
Сообщений: 44
По умолчанию

Код:
call newpr
pop edx
mov ah,4ch
int 21h
После этого нормально ? Надеялся, что завершение программы сам поставишь.
Потому-что после pop edx начинается повторное выполнение процедуры подсчета.
zhan313 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
(С/С++) Сформировать новый массив из положительных нечетных элементов заданного массива Р(20) Chak1483 Помощь студентам 2 02.12.2011 12:05
Перемещение четных/нечетных элементов в разные массивы. Mr.BL@CK Помощь студентам 1 07.07.2011 19:49
Перестановка элементов четных и нечетных строк Юлия19 Помощь студентам 3 14.06.2009 18:33
Определить сумму и количество четных элементов массива KREGI Общие вопросы Delphi 10 05.03.2009 18:18