The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"to 64 bit"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"to 64 bit"  
Сообщение от Haldey on 23-Сен-08, 06:41 
Может ктонибуть помочь, превести assambelr 32 to 64, или этот код в с ?
#cat 80386.S
/*
**
**      80386 assembly primitives for RSA library
**      GNU gas syntax, tested with gcc v1.39
**
**      Compile with UNIT32 defined, MULTUNIT must be unsigned long
**      assemble this file with gcc -c (file should have .S suffix)
**
**      Written by Branko Lankester (lankeste@fwi.uva.nl)       11/18/91
**      Last revised: 12/01/92
**      Fixed macros to omit space before colon, 23 Jun 93
**
*/

#if defined(SYSV) || defined(__ELF__)
#define ENTRY(name)     .align 4 ; .globl name ; name:
#else
#ifdef __STDC__
#define ENTRY(name)     .align 4 ; .globl _##name ; _##name##:
#else
#define ENTRY(name)     .align 4 ; .globl _/**/name ; _/**/name/**/:
#endif
#endif

.text

/*
********************* set precision ********************
*/
ENTRY (P_SETP)
        pushl %ebp
        movl %esp,%ebp
        pushl %ebx
                pushl %ecx
                pushl %edx
        movl 8(%ebp),%eax
        addl $0x1f,%eax
        shrl $5,%eax
        movl %eax,%ebx
        shrl $3,%eax
        movl %eax,prec8
        andl $7,%ebx

        movl $add_ref,%eax
        movl %eax,%ecx
        subl $add_1ref,%eax
        mul %ebx
        subl %eax,%ecx
        movl %ecx,addp
        movl $sub_ref,%ecx
        subl %eax,%ecx
        movl %ecx,subp

        movl $rot_ref,%eax
        movl %eax,%ecx
        subl $rot_1ref,%eax
        mul %ebx
        subl %eax,%ecx
        movl %ecx,rotp

        movl $mul_ref,%eax
        movl %eax,%ecx
        subl $mul_1ref,%eax
        mul %ebx
        subl %eax,%ecx
        movl %ecx,mulp

                popl %edx
                popl %ecx
        popl %ebx
        leave
        ret

/*
********************* mpi add with carry ********************
*/

#define ADDU    lodsl ; adcl %eax,(%ebx,%esi)

ENTRY (P_ADDC)
        pushl %ebp
        movl %esp,%ebp
        pushl %ebx
                pushl %ecx
        pushl %esi
        pushl %edi
        movl 12(%ebp),%esi
        movl 8(%ebp),%ebx
        subl %esi,%ebx
        subl $4,%ebx
        cld
        movl 16(%ebp),%eax
        movl prec8,%ecx
        orl %ecx,%ecx
        rcrl $1,%eax    /* set the carry flag */
                jz add_units    /* z-flag set by orl %ecx,%ecx */
add_8u:
        ADDU ; ADDU ; ADDU ; ADDU ; ADDU ; ADDU ; ADDU ; ADDU
        loop add_8u
add_units:
        jmp *addp
        ADDU ; ADDU ; ADDU ; ADDU ; ADDU ; ADDU
add_1ref:                       /* label to compute size of codes */
        ADDU
add_ref:
        rcll $1,%eax
        andl $1,%eax

        popl %edi
        popl %esi
                popl %ecx
        popl %ebx
        leave
        ret


/*
********************* mpi subtract with borrow ********************
*/

#define SUBU    lodsl ; sbbl %eax,(%ebx,%esi)

ENTRY (P_SUBB)
        pushl %ebp
        movl %esp,%ebp
        pushl %ebx
                pushl %ecx
        pushl %esi
        pushl %edi
        movl 12(%ebp),%esi
        movl 8(%ebp),%ebx
        subl %esi,%ebx
        subl $4,%ebx
        cld
        movl 16(%ebp),%eax
        movl prec8,%ecx
        orl %ecx,%ecx
        rcrl $1,%eax
                jz sub_units
sub_8u:
        SUBU ; SUBU ; SUBU ; SUBU ; SUBU ; SUBU ; SUBU ; SUBU
        loop sub_8u
sub_units:
        jmp *subp
        SUBU ; SUBU ; SUBU ; SUBU ; SUBU ; SUBU ; SUBU
sub_ref:
        rcll $1,%eax
        andl $1,%eax

        popl %edi
        popl %esi
                popl %ecx
        popl %ebx
        leave
        ret

/*
********************* mpi rotate left ********************
*/

#define ROTU    rcll $1,(%ebx,%esi,4) ; incl %esi

ENTRY (P_ROTL)
        pushl %ebp
        movl %esp,%ebp
        pushl %ebx
                pushl %ecx
        pushl %esi
        movl 8(%ebp),%ebx
        movl 12(%ebp),%eax
        xorl %esi,%esi
        movl prec8,%ecx
        orl %ecx,%ecx
        rcrl $1,%eax    /* set the carry flag */
                jz rot_units    /* z-flag set by orl %ecx,%ecx */
rot_8u:
        rcll $1,(%ebx)
        rcll $1,4(%ebx)
        rcll $1,8(%ebx)
        rcll $1,12(%ebx)
        rcll $1,16(%ebx)
        rcll $1,20(%ebx)
        rcll $1,24(%ebx)
        rcll $1,28(%ebx)
        leal 32(%ebx),%ebx
        loop rot_8u
rot_units:
        jmp *rotp
        ROTU ; ROTU ; ROTU ; ROTU ; ROTU ; ROTU ; ROTU
rot_1ref:
        ROTU
rot_ref:
        rcll $1,%eax
        andl $1,%eax

        popl %esi
                popl %ecx
        popl %ebx
        leave
        ret

/*
********************* mpi multiply ********************
*/
#define MULU    \
        lodsl ; \
        mull %ebp ; \
        addl %ebx,%eax ; \
        adcl $0,%edx ; \
        addl (%edi),%eax ; \
        adcl $0,%edx ; \
        movl %edx,%ebx ; \
        stosl

ENTRY (P_SMULA)
        pushl %ebp
        movl %esp,%ebp
        pushl %ebx
                pushl %ecx
                pushl %edx
        pushl %esi
        pushl %edi

        xorl %ebx,%ebx
        movl prec8,%ecx
        movl 8(%ebp),%edi
        movl 12(%ebp),%esi
        movl 16(%ebp),%ebp
        cld
        orl %ecx,%ecx
        jz mul_units
mul_8u:
        MULU ; MULU ; MULU ; MULU ; MULU ; MULU ; MULU ; MULU
        decl %ecx
        jnz mul_8u      /* offset too big for loop */
mul_units:
        jmp *mulp
        MULU ; MULU ; MULU ; MULU ; MULU ; MULU
mul_1ref:
        MULU
mul_ref:
        addl %ebx,(%edi)

        popl %edi
        popl %esi
                popl %edx
                popl %ecx
        popl %ebx
        popl %ebp
        ret


.lcomm _reciph,4
.lcomm _recipl,4
.lcomm _mshift,4

ENTRY (p_setrecip)
                movl 4(%esp),%eax
                movl %eax,_reciph
                movl 8(%esp),%eax
                movl %eax,_recipl
                movl 12(%esp),%eax
                movl %eax,_mshift
                ret


ENTRY (p_quo_digit)
        pushl %ebp
        pushl %ebx
        pushl %esi
        pushl %edi

        movl 20(%esp),%esi       /* dividend */
        movl -8(%esi),%eax   /* dividend[-2] */
        notl %eax
        mull _reciph
        addl _reciph,%eax
        adcl $0,%edx
        movl %eax,%ebx
        movl %edx,%edi          /* di:bx = q1 */

        movl -4(%esi),%eax   /* dividend[-1] */
        notl %eax
        mull _recipl
        incl %edx             /* dx:ax = q2 */

        movl %edx,%ebp
        andl %edi,%ebp
        andl $1,%ebp           /* bp = lsb_factor */

        addl %ebx,%eax
        adcl %edx,%edi
        rcrl $1,%edi           /* di = MS word of q0 */

        movl -4(%esi),%eax   /* dividend [-1] */
        notl %eax
        mull _reciph
        movl %eax,%ebx
        movl %edx,%ecx          /* cx:bx = q1 */

        movl (%esi),%eax     /* dividend[0] */
        notl %eax
        mull _recipl         /* dx:ax = q2 */
        xorl %ebx,%eax
        andl %eax,%ebp          /* lsb correction */
        xorl %ebx,%eax          /* restore ax */

        addl %ebx,%eax
        adcl %ecx,%edx
        rcrl $1,%edx
        rcrl $1,%eax           /* dx:ax = q */

        addl %edi,%eax          /* + scaled q0 */
        adcl $0,%edx
        addl %ebp,%eax          /* + lsb correction */
        adcl $0,%edx           /* q */

        shll $1,%eax
        rcll $1,%edx
        rcll $1,%eax
        rcll $1,%edx
        rcll $1,%eax
        andl $3,%eax
        movl %eax,%ecx
        movl %edx,%ebx          /* bx:cx = q >> 14 */

        movl (%esi),%eax     /* dividend[0] */
        notl %eax
        mull _reciph
        shll $1,%eax
        rcll $1,%edx
        addl %ebx,%eax
        adcl %ecx,%edx          /* q */

        movl _mshift,%ecx
        cmpl $32,_mshift
        je L2
#if 0
        shrl %cl,%eax
        movl %edx,%ebx
        shrl %cl,%edx
        negl %ecx
        addl $32,%ecx
        shll %cl,%ebx
        addl %ebx,%eax          /* dx:ax = q >> mshift */
#else
#if defined(SYSV) || defined(__ELF__)
        shrdl %edx,%eax
#else
        shrdl %cl,%edx,%eax
#endif
        shrl %cl,%edx
#endif

        orl %edx,%edx
        je L1
        movl $-1,%eax
        jmp L1
L2:
        xchgl %edx,%eax
L1:
        popl %edi
        popl %esi
        popl %ebx
        popl %ebp
        ret

.lcomm  prec8,4
.lcomm  addp,4
.lcomm  subp,4
.lcomm  rotp,4
.lcomm  mulp,4

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

  • to 64 bit, Michelnok, 17:29 , 23-Сен-08, (1)  
    • to 64 bit, Дима, 17:37 , 23-Сен-08, (2)  
      • to 64 bit, Michelnok, 18:16 , 23-Сен-08, (3)  
        • t, Andrey Mitrofanov, 13:47 , 24-Сен-08, (4)  

Сообщения по теме [Сортировка по времени | RSS]


1. "to 64 bit"  
Сообщение от Michelnok (??) on 23-Сен-08, 17:29 
>или этот код в с ?

Это GNU assembler.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "to 64 bit"  
Сообщение от Дима (??) on 23-Сен-08, 17:37 
Да, это из сырцов pgp, необходимо этот код заставить работать в 64 бит.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "to 64 bit"  
Сообщение от Michelnok (??) on 23-Сен-08, 18:16 
>Да, это из сырцов pgp, необходимо этот код заставить работать в 64 бит.

Успехов.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "t"  
Сообщение от Andrey Mitrofanov on 24-Сен-08, 13:47 
>>Да, это из сырцов pgp, необходимо этот код заставить работать в 64 бит.
>Успехов.

Кстати, а чего ассемблер i51 нынче у преподов не моден - студентов мучают i386-м и i86_64-ым?... Бедняшки! %)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру