бывший адверт...
С нами с 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 битное число...
подскажите кто что может, плиз!
|
|
|
|
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
с распечаткой примерно по аналогии. правда переполнение здесь походу не учитывается в твоем алгоритме.
|
|
|
|
бывший адверт...
С нами с 25.07.05
Сообщения: 2598
Рейтинг: 1568
|
Добавлено: 17/11/05 в 10:39 |
+4
огромное спасиба! мне вот вчера похожим образом объясняли
|
|
|
|
бывший адверт...
С нами с 25.07.05
Сообщения: 2598
Рейтинг: 1568
|
Добавлено: 17/11/05 в 11:03 |
нагнал  крапаль по другому написали мне:
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.
Но суть та же, введение дополнительных регистров.
|
|
|
|
бывший адверт...
С нами с 25.07.05
Сообщения: 2598
Рейтинг: 1568
|
Добавлено: 17/11/05 в 22:13 |
ещё вопрос созрел
нада теперь 80-ти битные числа сложить
исходя из вышенаписанного:
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 как переделать, подскажите, плиз! а то что то мне этот Ассм совсем в голову не лезет
без рейтинга не отпущу
|
|
|
|
С нами с 05.08.03
Сообщения: 336
Рейтинг: 114
|
Добавлено: 17/11/05 в 22:47 |
надо обнулить ненужные старшие разряды у обоих операндов перед сложением или прям в памяти, но так хуже
н-р для 80-ти битного числа перед сложением старших разрядов :
and eax, 0x000000FFFFFFh; проверь только, что эта команда не устанавливает flag C
и еще, вроде в интеловских процах числа записываются младшим разрядом вперед, а у тебя в примере наоборот.
|
|
|
|
бывший адверт...
С нами с 25.07.05
Сообщения: 2598
Рейтинг: 1568
|
Добавлено: 17/11/05 в 22:53 |
а показать для 80-ти на данном примере (120 бит) или на самом верхнем (96 бит) можешь?
тут биты идут с права налево, от младшего к старшему, а в коде здесь сначала слаживаем младшие, потом средние, потом старшие...
|
|
|
|
Genuine Quality
С нами с 28.08.05
Сообщения: 652
Рейтинг: 910
|
Добавлено: 18/11/05 в 00:15 |
код, который складывает 96 битные будет складывать и 80 битные... Select сказал верно, обнули у операторов в старшем разряде нужное кол-во бит и используй код для 96 бит...
|
|
|
|
бывший адверт...
С нами с 25.07.05
Сообщения: 2598
Рейтинг: 1568
|
Добавлено: 18/11/05 в 08:39 |
Спасибки, всем ещё раз +4
|
|
|
|
Текстовая реклама в форме ответа Заголовок и до четырех строчек текста Длина текста до 350 символов Купить рекламу в этом месте! |
|
Спонсор раздела
|