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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.03.2016, 20:54   #1
Пэгги
 
Аватар для Пэгги
 
Регистрация: 20.02.2016
Сообщений: 8
По умолчанию Сумма элементов массива с четными номерами.(FASM)

Задан одномерный массив. Вычислить сумму элементов массива, имеющих четные номера.

Вот мой код, но он почему-то выводит мне только черный экран. Да и тот очень быстро закрывается. Помогите пожалуйста.
Заметила, что перед тем как закрыться мне выдает фразу "переполнение деления".

Код:
org 100h
mov ah, $09

array db 1, 2, 3, 4, 5

mov  si, array
mov  bl, 2
mov  cx, 5

Start:
  mov  al, byte[si]
  div  bl
  cmp  ah, 0
  jz   sum
  xor  ax, ax
  inc  si
  jmp  Start

sum:
  add  dl, al
  inc  si
  jmp  Start
  int 21h
  ret

Последний раз редактировалось Пэгги; 22.03.2016 в 21:11.
Пэгги вне форума Ответить с цитированием
Старый 28.03.2016, 09:07   #2
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Цитата:
Сообщение от Пэгги Посмотреть сообщение
выдает фразу "переполнение деления".
Код:
Start:
mov  al, byte[si]
cbw
div  bl
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 28.03.2016, 10:49   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

если бы не было ошибки деления, программа зациклилась навечно (если не считать, что она достачно быстро "вылезет" за пределы процесса и получит exception по обращению к чужой памяти).
Вы обратите внимание, что у Вас все ветки код заканчиваются JMP Start
это безусловный переход на начало программы.
Это раз.

второе.
Вы же понимаете, что ваша программа ничего на экран не выводит.
Что Вы ожидаете увидеть? Сумму?! И где - в отладчике? Или на экране?

третье.
для проверки числа на чёт-нечет совершенно незачем использовать деление.
Есть множество других, простых и быстрых способов.
Например, если у числа младший бит равен 1, то число нечётное.
Это уже не говоря о том, что можно просто взять число под номером 2,
а потом к индексу прибавлять не единицу, а двойку. Будут получаться чётные номера: 2 4 6 и т.д.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывести сначала элементы массива с четными номерами, а затем - с нечетными номерами Lolopop12 Общие вопросы C/C++ 6 22.02.2016 02:02
Вывести сначала элементы массива с четными номерами, а затем - с нечетными номерами Lolopop12 Общие вопросы C/C++ 0 15.02.2016 06:14
C++!!! Вычислите произведение элементов массива с четными номерами. ekacibizova Помощь студентам 9 29.10.2014 18:58
Подсчитать количество элементов массива, с четными номерами (Delphi) Shoshona Помощь студентам 2 14.06.2014 10:46
Вычислить произведение элементов массива с четными номерами. Кулибаба Петро C++ Builder 3 11.12.2012 22:24