Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сумма двух чисел с плавающей запятой. по 4 байта 
:(
    Опции темы
IKM2007
Дата 15.5.2009, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зима близко
**


Профиль
Группа: Участник
Сообщений: 702
Регистрация: 26.4.2008
Где: olmedreca

Репутация: нет
Всего: 40



Здраствуйте.
Собственно задача:
Написать процедуру, которая считывает сумму двух 4-байтных чисел с плающей запятой.
Все это надо делать "вручную". Знак надо учитывать. Числа хранятся в памяти по адресам t1 и t2. Мне интересен алгоритм, но запостил здесь, так-как все таки надо знать структуру 4-байтных FPU-чисел. Спасибо.


--------------------
"К чёрту обстоятельства, я создаю возможности."
Брюс Ли
PM MAIL Skype   Вверх
IKM2007
Дата 17.5.2009, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зима близко
**


Профиль
Группа: Участник
Сообщений: 702
Регистрация: 26.4.2008
Где: olmedreca

Репутация: нет
Всего: 40



Вот целых 3 часа писал этот код.
Кому не лень, проверьте, возможно что-то не так.

Код

float_sum macro tt1, tt2, result
local a, l1, l2, l3, l4, l5, l6, t1, t2, verj, the_end
pushf
pushad

mov eax, tt1
mov ebx, tt2
mov ecx, eax
mov edx, ebx

and eax, 0FFFFFFh; f -> eax
and ebx, 0FFFFFFh; f -> ebx

shr ecx, 23
shr edx, 23
and ecx, 0FFh; e1 -> ecx
and edx, 0FFh; e2 -> edx
sub ecx, 127; получили степень 2-ки
sub edx, 127; получили степень 2-ки

cmp ecx, edx
jg l1
mov esi, edx
sub esi, ecx
jmp a
l1:
mov esi, ecx
sub esi, edx
xchg ecx, edx;меньшяя степень в ecx
xchg eax, ebx; меньшее число в eax
a:
mov edi, ecx;степень -> edi

;получим знак чисел, знак меньшего в n1, знак большего в n2
n1 = 0
n2 = 0
mov ecx, tt1
mov edx, tt2

test ecx, 80000000h
jz t1
mov n1, 1
t1:
test edx, 80000000h
jz t2
mov n2, 1
t2:
;уравниваем e1 и e2
cmp esi, 29
jge l3
cmp esi, 22
jg l4
mov ecx, esi
shr eax, cl
jmp verj
l4:
shr eax, 22
mov ecx, esi
sub ecx, 22
sub edi, ecx
shl ebx, cl
verj:

cmp n1, 1
jnc l5
or eax, 80000000h
l5:
cmp n2, 1
jnc l6
or ebx, 80000000h
l6:
;уже числа со знаком
add eax, ebx
l3:;проверяем, заняты ли биты в месте для "e"
test eax, 807FFFFFh
jz the_end
sar eax, 8
add edi, 8
and eax, 807FFFFFh
the_end:
add edi, 127; получили "настоящий" e
and edi, 0FFh
shl edi, 23
or eax, edi
mov result, eax

popad
popfd
endm



--------------------
"К чёрту обстоятельства, я создаю возможности."
Брюс Ли
PM MAIL Skype   Вверх
IKM2007
  Дата 20.6.2009, 07:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зима близко
**


Профиль
Группа: Участник
Сообщений: 702
Регистрация: 26.4.2008
Где: olmedreca

Репутация: нет
Всего: 40



Тема опять актуальна. Экзамен Ассемблер через 3 дня. В правильноси вышенаписанном коде не уверен, так что просьба: проверьте пожайлуста, если где то что нитак, скажите. Если где то есть уже написанная прога, дайте ссылку. Вообщем, жду помощи. smile 


--------------------
"К чёрту обстоятельства, я создаю возможности."
Брюс Ли
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0391 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.