Реклама на сайте Advertise with us

Помогите с Ассемблером, плиз!

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:

бывший адверт...

С нами с 25.07.05
Сообщения: 2598
Рейтинг: 1568

Ссылка на сообщениеДобавлено: 16/11/05 в 23:13       Ответить с цитатойцитата 

Ребята, кто силён в Ассемблере хоть чуток, помогите решить задачку, пожалуйста! Не дайте погибнуть. С меня рейтинг всем откликнувшимся по теме и огромная благодарность!
Вобщем такая вот задачка:
Сложение, вычитание, умножение, деление и сравнение целых чисел и чисел с плавающей запятой...
Есть пример этих операций для 96-ти битых чисел, а нужно проделать эти операции с числами другой битности, например 120 битными...
Вот кусок программы сложения двух целых 96-битовых чисел, а точнее нужный фрагмент:

сумма двух 96-битных чисел bigval_1 и bigval_2
;результат сохраняется в bigval_3

mov eax,dword ptr bigval_1[8]
add eax,dword ptr bigval_2[8] ; сложить младшие слова
mov dword ptr bigval_3[8],eax ; сохранить результат
mov eax,dword ptr bigval_1[4]
adc eax,dword ptr bigval_2[4] ; сложить средние слова
mov dword ptr bigval_3[4],eax
mov eax,dword ptr bigval_1
adc eax,dword ptr bigval_2 ; сложить старшие слова
mov dword ptr bigval_3,eax
;печать результата
call print ; печать ЕАХ - старшие байты
mov eax,dword ptr bigval_3[4] ; печать ЕАХ - средние байты
call print
mov eax,dword ptr bigval_3[8] ; печать ЕАХ - младшие байты
call print
mov dx,offset crlf
mov ah,9
int 21h ; перевод строки
ret
mess1 db 'REZULTAT = $'


crlf db 0Dh,0Ah,'$'
bigval_1 dd 1Ah,1Ah,1Fh ; первое 96-битное число
bigval_2 dd 6h,6h,1h ; второе 96-битное число
bigval_3 dd 0h,0h,0h ; место для хранения результата

вот ломаю голову и не пойму, каким образом в этих строках отображено 96-битное число?!?
1Аh=26
1Аh=26
1Fh=31
в сумме 26+26+31=83, а не 96...
6h+6h+1h=6+6+1=13 ... тут начинаю прозревать... 83+13=96...
но как подобным образом задать 120 битное число...

подскажите кто что может, плиз!

VPN, Proxy, OPENVPN Сервис Proxy4you.net

0
 

Genuine Quality

С нами с 28.08.05
Сообщения: 652
Рейтинг: 910

Ссылка на сообщениеДобавлено: 17/11/05 в 00:27       Ответить с цитатойцитата 

bigval_1 dd 1Ah,1Ah,1Fh
насколько я догоняю, здесь не сумма как ты считаешь, здесь просто массив из трех 32битных значений. 32*3=96 бит. таким образом 96 битное число представлено в виде старшего 32битного разряда, среднего и младшего. т.е. число bigval_1 это есть:

1Fh + 1Ah*2^32 + 1Ah*2^64 ^ - в степень

для 120 битных просто добавляешь 4 двойное слово (32 бита) в массивы bigval_1, bigval_2, bigval_3. все остальное так и остается только добавляется примерно такое:

bigval_1 dd 1Ah,1Ah,1Fh,2Fh - первое число, разрядность (4*32 бит)
bigval_2 dd 6h,6h,1h,5h - второе число, разрядность (4*32 бит)
bigval_3 dd 0h,0h,0h,0h - третье число, разрядность (4*32 бит)

mov eax,dword ptr bigval_1[12]
add eax,dword ptr bigval_2[12] ; сложить самые младшие слова
mov dword ptr bigval_3[12],eax ; сохранить результат

mov eax,dword ptr bigval_1[8]
add eax,dword ptr bigval_2[8] ; сложить младшие слова
mov dword ptr bigval_3[8],eax ; сохранить результат

mov eax,dword ptr bigval_1[4]
adc eax,dword ptr bigval_2[4] ; сложить средние слова
mov dword ptr bigval_3[4],eax

mov eax,dword ptr bigval_1
adc eax,dword ptr bigval_2 ; сложить старшие слова
mov dword ptr bigval_3,eax

с распечаткой примерно по аналогии. правда переполнение здесь походу не учитывается в твоем алгоритме.

4
 

бывший адверт...

С нами с 25.07.05
Сообщения: 2598
Рейтинг: 1568

Ссылка на сообщениеДобавлено: 17/11/05 в 10:39       Ответить с цитатойцитата 

+4
огромное спасиба! мне вот вчера похожим образом объясняли icon_biggrin.gif

VPN, Proxy, OPENVPN Сервис Proxy4you.net

0
 

бывший адверт...

С нами с 25.07.05
Сообщения: 2598
Рейтинг: 1568

Ссылка на сообщениеДобавлено: 17/11/05 в 11:03       Ответить с цитатойцитата 

нагнал icon_smile.gif крапаль по другому написали мне:

bigval_1 dd 1Ah,1Ah,1Fh
bigval_2 dd 6h,6h,1h
bigval_3 dd 0h,0h,0h
result dd ?,?,?,?

mov eax,bigval1[0]
mov ebx,bigval1[4]
mov ecx,bigval1[8]
xor edx,edx

add eax,bigval2[0]
adc ebx,bigval2[4]
adc ecx,bigval2[8]
adc edx,0

add eax,bigval3[0]
adc ebx,bigval3[4]
adc ecx,bigval3[8]
adc edx,0

mov result[0],eax
mov result[4],ebx
mov result[8],ecx
mov result[12],edx

вот так вот. Задействовали просто регистры ebx, ecx, edx.
Но суть та же, введение дополнительных регистров.

VPN, Proxy, OPENVPN Сервис Proxy4you.net

0
 

бывший адверт...

С нами с 25.07.05
Сообщения: 2598
Рейтинг: 1568

Ссылка на сообщениеДобавлено: 17/11/05 в 22:13       Ответить с цитатойцитата 

ещё вопрос созрел icon_smile.gif
нада теперь 80-ти битные числа сложить icon_smile.gif
исходя из вышенаписанного:

bigval_1 dd 1Ah,1Ah,1Fh,2Fh - первое число, разрядность (4*32 бит)
bigval_2 dd 6h,6h,1h,5h - второе число, разрядность (4*32 бит)
bigval_3 dd 0h,0h,0h,0h - третье число, разрядность (4*32 бит)

mov eax,dword ptr bigval_1[12]
add eax,dword ptr bigval_2[12] ; сложить самые младшие слова
mov dword ptr bigval_3[12],eax ; сохранить результат

mov eax,dword ptr bigval_1[8]
add eax,dword ptr bigval_2[8] ; сложить младшие слова
mov dword ptr bigval_3[8],eax ; сохранить результат

mov eax,dword ptr bigval_1[4]
adc eax,dword ptr bigval_2[4] ; сложить средние слова
mov dword ptr bigval_3[4],eax

mov eax,dword ptr bigval_1
adc eax,dword ptr bigval_2 ; сложить старшие слова

это пример на 120-битные числа, а на 80 как переделать, подскажите, плиз! а то что то мне этот Ассм совсем в голову не лезет icon_sad.gif
без рейтинга не отпущу icon_smile.gif

VPN, Proxy, OPENVPN Сервис Proxy4you.net

0
 



С нами с 05.08.03
Сообщения: 336
Рейтинг: 114

Ссылка на сообщениеДобавлено: 17/11/05 в 22:47       Ответить с цитатойцитата 

надо обнулить ненужные старшие разряды у обоих операндов перед сложением или прям в памяти, но так хуже

н-р для 80-ти битного числа перед сложением старших разрядов :
and eax, 0x000000FFFFFFh; проверь только, что эта команда не устанавливает flag C

и еще, вроде в интеловских процах числа записываются младшим разрядом вперед, а у тебя в примере наоборот.

4
 

бывший адверт...

С нами с 25.07.05
Сообщения: 2598
Рейтинг: 1568

Ссылка на сообщениеДобавлено: 17/11/05 в 22:53       Ответить с цитатойцитата 

а показать для 80-ти на данном примере (120 бит) или на самом верхнем (96 бит) можешь?
тут биты идут с права налево, от младшего к старшему, а в коде здесь сначала слаживаем младшие, потом средние, потом старшие...

VPN, Proxy, OPENVPN Сервис Proxy4you.net

0
 

Genuine Quality

С нами с 28.08.05
Сообщения: 652
Рейтинг: 910

Ссылка на сообщениеДобавлено: 18/11/05 в 00:15       Ответить с цитатойцитата 

код, который складывает 96 битные будет складывать и 80 битные... Select сказал верно, обнули у операторов в старшем разряде нужное кол-во бит и используй код для 96 бит...

4
 

бывший адверт...

С нами с 25.07.05
Сообщения: 2598
Рейтинг: 1568

Ссылка на сообщениеДобавлено: 18/11/05 в 08:39       Ответить с цитатойцитата 

Спасибки, всем ещё раз +4 icon_biggrin.gif

VPN, Proxy, OPENVPN Сервис Proxy4you.net

0
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »