+ -
当前位置:首页 → 问答吧 → 哪位大侠帮我看看汇编语言的问题

哪位大侠帮我看看汇编语言的问题

时间:2011-07-08

来源:互联网

工作中遇到一段汇编代码用的是intel 格式的, 然后我想把它移植到 linux下,因为没有学过汇编, 哪位高手帮我看看


vs 下的代码:
unsigned short int lookKbits(unsigned char k)
{
 _asm {
mov dl, k
mov cl, 16
sub cl, dl
mov eax, [wordval]
shr eax, cl
 }
}

unsigned short int WORD_hi_lo(unsigned char byte_high,unsigned char byte_low)
{
_asm {
mov ah,byte_high
mov al,byte_low
}
}
signed short int get_svalue(unsigned char k)
// k>0 always
// Takes k bits out of the BIT stream (wordval), and makes them a signed value
{
_asm {
xor ecx, ecx
mov cl,k
mov eax,[wordval]
shl eax,cl
shr eax, 16
dec cl
bt eax,ecx
jc end_macro
signed_value:inc cl
mov ebx,[start_neg_pow2]
add ax,word ptr [ebx+ecx*2]
end_macro:
}
}






我自己改的代码,但是报错:



unsigned short int lookKbits(unsigned char k)  
{  
 __asm__(  
"mov $k, %dl\\n\\t"  
"mov $16, %cl\\n\\t"  
"sub %dl, %cl \\n\\t"  
"mov $[wordval], %eax\\n\\t"  
"shr %cl, %eax\\n\\t");  
}  
   
unsigned short int WORD_hi_lo(unsigned char byte_high,unsigned char byte_low)  
{  
__asm__(  
"mov $byte_high,%ah\\n\\t"  
"mov $byte_low,%al\\n\\t");  
}  
signed short int get_svalue(unsigned char k)  
// k>0 always  
// Takes k bits out of the BIT stream (wordval), and makes them a signed value  
{  


//__asm__ __volatile__ ("addl %1, %0"
// 8 : "=b"((long)ebx)
// 9 : "a"((long)eax), "b"((long)ebx)
// 10 : "1"
// 11 );
//

   
__asm__(  
"xor %ecx, ecx"  
"mov $k , %cl\\n\\t"  
"mov $[wordval] ,%eax\\n\\t"  
"shl %cl ,%eax\\n\\t"  
"shr $16 ,%eax\\n\\t"  
"dec %cl\\n\\t"  
"bt %eax, %ecx\\n\\t"  
"jc end_macro\\n\\t"  
signed_value:
  "inc %cl"  
"mov $[start_neg_pow2],%ebx\\n\\t"  
"add w[%ebx+%ecx*2],%ax\\n\\t"  
end_macro:)  







编译器报错:
/tmp/ccWuJy1q.s: Assembler messages:
/tmp/ccWuJy1q.s:27: Error: invalid character '\' in operand 2
/tmp/ccWuJy1q.s:53: Error: invalid character '\' in operand 2
/tmp/ccWuJy1q.s:76: Error: junk `$k' after expression
/tmp/ccWuJy1q.s:76: Error: invalid character '\' in operand 3
 

作者: myjavamysun   发布时间: 2011-07-08

建议你直接移植编译好的机器码

作者: Areslee   发布时间: 2011-07-08