Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Ассемблер? Это просто! Учимся программировать


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler (Ассемблер)

Выпуск № 759
от 24.05.2007, 16:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 382, Экспертов: 31
В номере:Вопросов: 1, Ответов: 2


Вопрос № 87629: Здравствуйте, господа программисты. Пишу в Линуксе лабу по вводу двух чисел, их преобразованию, сложению и выводу на экран. В процедуре Reconstruction пытаюсь собрать из введенных цифр число посредством схемы Горнера. Формула Горнера: (...(A * p...

Вопрос № 87.629
Здравствуйте, господа программисты. Пишу в Линуксе лабу по вводу двух чисел, их преобразованию, сложению и выводу на экран. В процедуре Reconstruction пытаюсь собрать из введенных цифр число посредством схемы Горнера.
Формула Горнера: (...(A * p + A )*p+...)*p+A )*p+A
n n-1 1 0
То есть при каждой итерации вычисляемая частичная сумма(Аn) умножается на основание системы счисления(р - в данном случае 10) и прибавляется к предыдущему введенному значению(А[n-1]).
Ошибку не вижу, а программа выводит странный результат: при введенных одноразрядных числах выдает 6068. Помогите вывести правильный результат сложения!
Очень большая просьба: помогите разобраться!

Приложение:

Отправлен: 19.05.2007, 16:01
Вопрос задал: Lazar (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Зенченко Константин Николаевич
Здравствуйте, Lazar!

Посмотрите на реализацию в приложении.
непонятны строки:
mov al,byte[ebx+1] ;беру из буфера первый байт
. . .
add eax,dword[next_symbol] ;добавляю к eax переменную с последующим числом
Зачем в eax собирать число и затем затирать младший байт в al
Удачи!

Приложение:

---------
И только наступив на грабли мы преобретаем драгоценный опыт!

Ответ отправил: Зенченко Константин Николаевич (статус: Студент)
Ответ отправлен: 21.05.2007, 14:34

Отвечает: Стас
Здравствуйте, Lazar!

Если числа от 0 до 4294967295 (0FFFFFFFFh) - DWORD то попроще:

Reconstruction:
xor esi,esi;здесь будем хранить промежуточные данные

mov ecx,dword[length]
mov ebx,buffer1 ;Символы ведь лежат в buffer1?

metka2:
mov eax,ESI ;предидущую сумму умножаем на 10
mul dword[const] ;умножаем eax на const (10) результат в EDX:EAX
mov ESI,eax

;or edx,edx
;jz overflow ; необязательная проверка на переполнение

xor eax,eax ;обнулим eax
mov al,byte [ebx]
sub al,"0" ;"превращаем" символ "0" в число 0.
add ESI,EAX ;добавляем к ней новую циферку

loop metka2
mov EAX,ESI ;Результат
ret
Ответ отправил: Стас (статус: Специалист)
Ответ отправлен: 21.05.2007, 15:02


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.52 от 02.05.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное