LINUX.ORG.RU

Помогите перевести из виндового ассемблера в линуксовый


0

0

Приветствую всех, переписываю прогу из билдера в линь (QT), в одной функции есть ассемблеровская вставка. В ассемблере я ничего не понимаю, помогите плиз :)
Привожу полностью функцию :

String TWM1::CodeStr(String TxStr, char chr)
{
char ncb1=chr, ch1;
String CodeStr=TxStr;

asm {
mov cl, chr
rol ncb1, cl
}
for(int i=1; i<=CodeStr.Length(); i++)
{
if (CodeStr[i]!=ncb1)
{
ch1=CodeStr[i];
asm {
mov cl, chr
mov al, ch1
ror al, cl
xor al, cl
rol al, cl
mov ch1, al
}
CodeStr[i]=ch1;
}

}
return CodeStr;

}

anonymous

Наверное, где-то так:)
int ROL(int a, char n)
{
 int t1, t2;
 n = n % (sizeof(a)*8); // нормализуем n
 t1 = a << n; // двигаем а вправо на n бит, теряя старшие биты
 t2 = a >> (sizeof(a)*8 - n); // перегоняем старшие биты в младшие
 return t1 | t2; // объединяем старшие и младшие биты
}
int ROR(int a, int n)
{
 int t1, t2;
 n = n % (sizeof(a)*8); // нормализуем n
 t1 = a >> n; // двигаем а влево на n бит, теряя младшие биты
 t2 = a << (sizeof(a)*8 - n); // перегоняем младшие биты в старшие
 return t1 | t2; // объединяем старшие и младшие биты
}
String TWM1::CodeStr(String TxStr, char chr) 
{ 
 char ncb1=chr, ch1; 
 String CodeStr=TxStr; 
 
 /*asm { 
 mov cl, chr 
 rol ncb1, cl 
 } */
  ncb1 = ROL(ncb1,chr);
 for(int i=1; i<=CodeStr.Length(); i++) 
 { 
 if (CodeStr[i]!=ncb1) 
 { 
 ch1=CodeStr[i]; 
 /*asm { 
 mov cl, chr 
 mov al, ch1 
 ror al, cl 
 xor al, cl 
 rol al, cl 
 mov ch1, al 
 } */
 ch1 = ROR(ch1,chr);
 ch1^=chr;
 ch1=ROL(ch1,chr); 

 CodeStr[i]=ch1; 
 } 
 
 } 
 return CodeStr; 
 
}

krum
()

Примерно так:

asm volatile("rolb %%cl, %%al"
                : "=a" (ncb1)
                : "c" (chr), "a" (ncb1));

...

asm volatile("rorb %%cl, %%al\nxorb %%cl, %%al\nrolb %%cl, %%al"
                : "=a" (ch1)
                : "c" (chr), "a" (ch1));

Не проверял.

execve
()
Ответ на: комментарий от anonymous

И здесь тоже:
unsigned char ROL(unsigned char a, int n)
unsigned char ROR(unsigned char a, int n)

anonymous
()
Ответ на: комментарий от execve

ОГРОМНОЕ СПАСИБО !
если бы вы знали как выручили ! (диплом дальше пошёл :))
СПАСИБО

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.