перевод из одной системы счисления в другую :?

Тема в разделе "WASM.BEGINNERS", создана пользователем amisd, 25 сен 2007.

  1. amisd

    amisd New Member

    Публикаций:
    0
    Регистрация:
    16 сен 2007
    Сообщения:
    17
    народ, как переводить число из одной системы счисления в другую в ассемблере? есть какие либо макро средства языка или команды:?
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    мечтать не вредно.
    берешь сам и делишь на основание системы..
    у меня гдето была реализация перевода из 10чной в любую другую, могу найти
     
  3. Mi256

    Mi256 New Member

    Публикаций:
    0
    Регистрация:
    24 сен 2007
    Сообщения:
    116
    amisd, ассемблер учил? :))
    инструкции aad aaa aam das daa и т.д.
    а также в fpu - там полно возможностей hex->dec и наоборот
    в simd - тоже должны быть.
    И вообще - ищи на васме в исходниках или инструментах - вроде были такие проги
     
  4. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    111 = 7 ?
    Число - остается числом , а меняется лишь его представление.
     
  5. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    если будет интересно - в субботу скину несложный алгоритм перевода из любой системы в любую. (сейчас не могу - не за своим компом)
     
  6. KiNDeR

    KiNDeR New Member

    Публикаций:
    0
    Регистрация:
    13 июн 2003
    Сообщения:
    258
    Адрес:
    Russia
    Правда переводит строку в число, но из нее можно выдрать то что нужно...
    Код (Text):
    1. ;(с) n0p
    2. str2all:    ; lpBuffer,nBufBase,nNewBase
    3.     push    ebx esi edi
    4.     mov     edi,dword [esp+4+12]
    5.     mov     ecx,dword [esp+8+12]
    6.  
    7.     xor     esi,esi
    8.     mov     eax,esi
    9.     mov     ebx,eax
    10.   @@:
    11.     inc     esi
    12.     cmp     byte [edi+esi],0
    13.     jne     @B
    14.     dec     esi
    15.  
    16.     .conv:
    17.     xor eax,eax
    18.     mov al,byte [edi]
    19.     sub al,30h                     ; <== Обрати внимание на эту строчку :)
    20.     push    esi
    21.     cmp al,10
    22.     jl  @F
    23.     sub al,7
    24.     @@:
    25.     cmp esi,0
    26.     jz  @F
    27.     xor edx,edx
    28.     mul ecx
    29.     dec esi
    30.     jnz @B
    31.     @@:
    32.     pop esi
    33.     add ebx,eax
    34.     inc edi
    35.     dec esi
    36.     jns     .conv
    37.     mov     ecx,dword [esp+12+12]
    38.     mov     eax,ebx
    39.     xor     ebx,ebx
    40.     @@:
    41.     xor edx,edx
    42.     div ecx
    43.     shl ebx,4
    44.     add ebx,edx
    45.     test    eax,eax
    46.     jnz @B
    47.     xor     eax,eax
    48.     @@:
    49.     mov dl,bl
    50.     and dl,00001111b
    51.     shl eax,4
    52.     add al,dl
    53.     shr ebx,4
    54.     test    ebx,ebx
    55.     jnz @B
    56.     pop     edi esi ebx
    57.     retn    8
     
  7. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    RamMerLabs
    Отрицательные, дробные и комплексные основания этот алгоритм переваривает?
     
  8. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    Код (Text):
    1. void perevod()
    2. {
    3.     long n=0,r=0,i=0;
    4.     printf("\nInput number and radix:");
    5.     scanf("%ld%ld",&n,&r);
    6.     if ((n>0)&&(r>1)&&(r<37))
    7.     {
    8.         long *res=new long[100];
    9.         while(n>0)
    10.         {
    11.             res[i]=n%r;
    12.             n=n/r;
    13.             i++;
    14.         }
    15.         i--;
    16.         while(i>=0)
    17.         {
    18.             if (res[i]<10)
    19.                 printf("%ld",res[i]);
    20.             else
    21.                 printf("%c",55+res[i]);
    22.             i--;
    23.         }
    24.         delete[] res;
    25.     }
    26.     else
    27.         printf("\nIncorrect data!\n");
    28. }
    думаю, на асм не составит проблемы перевести
    CyberManiac
    только натуральные