19.03.2019, 22:57 [+3 UTC]
в нашей команде: 3 474 чел. | участники онлайн: 5 (рекорд: 21)

:: РЕГИСТРАЦИЯ

задать вопрос

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

Версия системы:
7.72 (17.03.2019)
JS-v.1.33 | CSS-v.3.35

Общие новости:
09.03.2019, 10:08

Форум:
18.03.2019, 16:49

Последний вопрос:
19.03.2019, 15:15
Всего: 149055

Последний ответ:
19.03.2019, 17:48
Всего: 258002

Последняя рассылка:
19.03.2019, 21:15

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
19.01.2010, 23:32 »
Garryzin
Спасибо за оперативный, подробный ответ! Думаю, что воспользуюсь Вашим советом. [вопрос № 176142, ответ № 258753]
07.07.2010, 20:43 »
Trusty
Спасибо.Очень доступный для понимания ответ. [вопрос № 179378, ответ № 262414]

РАЗДЕЛ • Assembler

Создание программ на языке Assembler.

[администратор рассылки: Лысков Игорь Витальевич (Старший модератор)]

Лучшие эксперты в этом разделе

Коцюрбенко Алексей Владимирович
Статус: Модератор
Рейтинг: 776
Зенченко Константин Николаевич
Статус: Старший модератор
Рейтинг: 473
Лысков Игорь Витальевич
Статус: Старший модератор
Рейтинг: 144

Перейти к консультации №:
 

Консультация онлайн # 141621
Раздел: • Assembler
Автор вопроса: Alena De Lon
Отправлена: 17.08.2008, 17:51
Поступило ответов: 1

Здравствуйте, Уважаемые!!! Помогите, ПОЖАЛУЙСТА, с вот такой вот задачкой: «Требуется найти среднее арифметическое 5-ти двухбайтовых чисел массива, хранимых в памяти в дополнительном коде, полученный результат преобразовать в символьную форму и вывести на монитор».
Я пыталась что-то сделать, но пока не получается. Вот после запуска этой программы появляется надпись « переполнение деления».

Приложение:

Состояние: Консультация закрыта

Ответ # 227419 от Сурин Борис Павлович

Здравствуйте, Alena De Lon!
Привет. Вы наделали кучу ошибок, от того и переполнение :)
В приложении исправленный код программы. Там, где существенные ошибки, я поставил два восклицательных знака
Чтобы проще их отлавливать, первые свои программы запускайте в пошаговом режиме в отладчике
Теперь подробнее.
1) Основная ошибка: Вы заказали модель памяти TINY, а завершаете, как EXE, через 21 прерывание (СОМ - через 20-е)
У Вас присутствует сегмент стека и данных, поэтому COM-файл получить не могли, только EXE. Это противоречие и привело к ошибке

2) Перед началом первого цикла
Summ:
add ax,[bx] ; Прибавляем к ax содержимое bx
inc bx
inc bx ;!! 2 байта нужно
Loop Summ

необходимо было инициализировать регистр CX - следовательно, Ваш цикл мог выполняться сколько раз?
Далее, каждое число занимает в памяти 2 байта, а чему равно dlina dw $-mas ? Можете проверить - 10!
Но Вы это число не используете
НО!! Нужно увеличивать BX на 2, а не на 1 - отмечено жирным выше

3) Вы не учли, что сумма может быть (а в Вашем примере, будет) отрицательной. Знак нужно обрабатывать отдельно.
Я сделал это с помощью дополнительной переменной Sign

4) Определяя среднее, Вы поделили на BH. В этом случае частное будет в AL, в AH - остаток.
Это не было учтено при последующем делении на 10

Удачи
Если будут вопросы, можно спросить в минифоруме

Приложение:


Консультировал: Сурин Борис Павлович
Дата отправки: 17.08.2008, 22:39

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.13895 сек.

© 2001-2019, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.72 от 17.03.2019
Версия JS: 1.33 | Версия CSS: 3.35