народ, как переводить число из одной системы счисления в другую в ассемблере? есть какие либо макро средства языка или команды:?
мечтать не вредно. берешь сам и делишь на основание системы.. у меня гдето была реализация перевода из 10чной в любую другую, могу найти
amisd, ассемблер учил? ) инструкции aad aaa aam das daa и т.д. а также в fpu - там полно возможностей hex->dec и наоборот в simd - тоже должны быть. И вообще - ищи на васме в исходниках или инструментах - вроде были такие проги
если будет интересно - в субботу скину несложный алгоритм перевода из любой системы в любую. (сейчас не могу - не за своим компом)
Правда переводит строку в число, но из нее можно выдрать то что нужно... Код (Text): ;(с) n0p str2all: ; lpBuffer,nBufBase,nNewBase push ebx esi edi mov edi,dword [esp+4+12] mov ecx,dword [esp+8+12] xor esi,esi mov eax,esi mov ebx,eax @@: inc esi cmp byte [edi+esi],0 jne @B dec esi .conv: xor eax,eax mov al,byte [edi] sub al,30h ; <== Обрати внимание на эту строчку :) push esi cmp al,10 jl @F sub al,7 @@: cmp esi,0 jz @F xor edx,edx mul ecx dec esi jnz @B @@: pop esi add ebx,eax inc edi dec esi jns .conv mov ecx,dword [esp+12+12] mov eax,ebx xor ebx,ebx @@: xor edx,edx div ecx shl ebx,4 add ebx,edx test eax,eax jnz @B xor eax,eax @@: mov dl,bl and dl,00001111b shl eax,4 add al,dl shr ebx,4 test ebx,ebx jnz @B pop edi esi ebx retn 8
Код (Text): void perevod() { long n=0,r=0,i=0; printf("\nInput number and radix:"); scanf("%ld%ld",&n,&r); if ((n>0)&&(r>1)&&(r<37)) { long *res=new long[100]; while(n>0) { res[i]=n%r; n=n/r; i++; } i--; while(i>=0) { if (res[i]<10) printf("%ld",res[i]); else printf("%c",55+res[i]); i--; } delete[] res; } else printf("\nIncorrect data!\n"); } думаю, на асм не составит проблемы перевести CyberManiac только натуральные