Студопедия
Новини освіти і науки:
МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах


РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання


ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ"


ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ


Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків


Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні


Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах


Гендерна антидискримінаційна експертиза може зробити нас моральними рабами


ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ


ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів



Контакти
 


Тлумачний словник
Авто
Автоматизація
Архітектура
Астрономія
Аудит
Біологія
Будівництво
Бухгалтерія
Винахідництво
Виробництво
Військова справа
Генетика
Географія
Геологія
Господарство
Держава
Дім
Екологія
Економетрика
Економіка
Електроніка
Журналістика та ЗМІ
Зв'язок
Іноземні мови
Інформатика
Історія
Комп'ютери
Креслення
Кулінарія
Культура
Лексикологія
Література
Логіка
Маркетинг
Математика
Машинобудування
Медицина
Менеджмент
Метали і Зварювання
Механіка
Мистецтво
Музика
Населення
Освіта
Охорона безпеки життя
Охорона Праці
Педагогіка
Політика
Право
Програмування
Промисловість
Психологія
Радіо
Регилия
Соціологія
Спорт
Стандартизація
Технології
Торгівля
Туризм
Фізика
Фізіологія
Філософія
Фінанси
Хімія
Юриспунденкция






Продолжение листинга 18.2

begin
i := BIGNUM_DWORD;
while (i>=0) and (a[i]=b[i]) do Dec(i);
Result := 0;
if (i>=0) and (a[i]>b[i]) then Result := 1;
if (i>=0) and (a[i]<b[i]) then Result := -1;
end;

procedure BN_a_add_b(var a,b,res: TBigNum);
begin
asm
pushad
mov esi,[a]
mov edi,[b]
mov ebx,[res]
mov ecx,BIGNUM_DWORD
mov eax,[esi]
add eax,[edi]
pushfd
mov [ebx],eax
add esi,4
add edi,4
add ebx,4
@_add_1:
mov eax,[esi]
popfd
adc eax,[edi]
pushfd
mov [ebx],eax
add esi,4
add edi,4
add ebx,4
loop @_add_1
@_add_2:
popfd
popad
end;
end;

procedure BN_a_sub_b(var a,b,res: TBigNum);
begin
asm

Продолжение листинга 18.2

pushad
mov esi,[a]
mov edi,[b]
mov ebx,[res]
mov ecx,BIGNUM_DWORD
mov eax,[esi]
sub eax,[edi]
pushfd
mov [ebx],eax
add esi,4
add edi,4
add ebx,4
@_sub_1:
mov eax,[esi]
popfd
sbb eax,[edi]
pushfd
mov [ebx],eax
add esi,4
add edi,4
add ebx,4
loop @_sub_1
@_sub_2:
popfd
popad
end;
end;

procedure BN_a_mul_b(var a,b,res: TBigNum);
var i,j: Integer;
begin
for j := 0 to BIGNUM_DWORD do res[j] := 0;
for i := 0 to BIGNUM_DWORD do
begin
j := i*4;
asm
pushad
mov esi,[a]
mov edi,[b]
add edi,[j]
mov ebx,[res]

Продолжение листинга 18.2

add ebx,[j]
mov ecx,BIGNUM_DWORD
sub ecx,[i]
cmp ecx,0
je @_mul_2
@_mul_1:
mov eax,[esi]
mov edx,[edi]
mul edx
add [ebx],eax
adc [ebx+4],edx
pushfd
cmp ecx,1
je @_mul_1_1
popfd
adc dword ptr[ebx+8],0
pushfd
@_mul_1_1:
popfd
add esi,4
add ebx,4
loop @_mul_1
@_mul_2:
mov eax,[esi]
mov edx,[edi]
mul edx
add [ebx],eax
popad
end;
end;
end;

procedure BN_a_shl_k(var a: TBigNum; k: Integer; var res: TBigNum);
var i,j: Integer;
var d,u: Cardinal;
begin
for j := 0 to BIGNUM_DWORD do res[j] := a[j];
if (k<=0) then Exit;
for j := 0 to BIGNUM_DWORD do res[j] := 0;
i := k div 32;

Продолжение листинга 18.2

if (i>BIGNUM_DWORD) then Exit;
for j := i to BIGNUM_DWORD do
res[j] := a[j-i];
i := k mod 32;
if (i=0) then Exit;
d := 0;
for j := 0 to BIGNUM_DWORD do
begin
u := res[j] shr (32-i);
res[j] := (res[j] shl i) + d;
d := u;
end;
end;

procedure BN_a_shr_k(var a: TBigNum; k: Integer;
var res: TBigNum);
var i,j: Integer;
var d,u: Cardinal;
begin
for j := 0 to BIGNUM_DWORD do res[j] := a[j];
if (k<=0) then Exit;
for j := 0 to BIGNUM_DWORD do res[j] := 0;
i := k div 32;
if (i>BIGNUM_DWORD) then Exit;
for j := i to BIGNUM_DWORD do
res[j-i] := a[j];
i := k mod 32;
if (i=0) then Exit;
u := 0;
for j := BIGNUM_DWORD downto 0 do
begin
d := res[j] shl (32-i);
res[j] := (res[j] shr i) + u;
u := d;
end;
end;

function BN_a_upbit(var a: TBigNum): Integer;
var i,j: Integer;
begin
i := BIGNUM_DWORD;
while (i>=0) and (a[i]=0) do Dec(i);




Переглядів: 305

<== попередня сторінка | наступна сторінка ==>
Продолжение листинга 18.2 | Продолжение листинга 18.2

Не знайшли потрібну інформацію? Скористайтесь пошуком google:

 

© studopedia.com.ua При використанні або копіюванні матеріалів пряме посилання на сайт обов'язкове.


Генерація сторінки за: 0.005 сек.