VC ++ 2010中内联汇编的错误

时间:2012-08-11 06:45:16

标签: c visual-studio-2010 assembly x86

我正在尝试在VC ++ 2010中创建一些内联汇编,将字节的RGB缓冲区解压缩为RGBA字节缓冲区,这就是我提出的内容:

但是我收到了错误

1>c:\users\tom\documents\visual studio 2010\projects\source\engine\image_load.c(28):     error C2414: illegal number of operands
1>c:\users\tom\documents\visual studio 2010\projects\source\engine\image_load.c(28):     error C2400: inline assembler syntax error in 'first operand'; found ':'
1>c:\users\tom\documents\visual studio 2010\projects\source\engine\image_load.c(29):     error C2400: inline assembler syntax error in 'opcode'; found ':'
1>c:\users\tom\documents\visual studio 2010\projects\source\engine\image_load.c(29):     warning C4405: 'MOV' : identifier is reserved word
1>c:\users\tom\documents\visual studio 2010\projects\source\engine\image_load.c(30):     error C2415: improper operand type
1>c:\users\tom\documents\visual studio 2010\projects\source\engine\image_load.c(31):     error C2415: improper operand type
1>c:\users\tom\documents\visual studio 2010\projects\source\engine\image_load.c(37): warning C4405: 'loop' : identifier is reserved word
1>c:\users\tom\documents\visual studio 2010\projects\source\engine\image_load.c(71): warning C4018: '<' : signed/unsigned mismatch

我不确定它有什么问题,这是我的代码:

void RGBtoRGBA (byte *rgba, const byte *rgb, int pixelCount) {
    __asm { 
        MOV EDX, pixelCount
        MOV EBX, rgba
        MOV ECX, rgb
        loop:
            MOV [EBX], ECX
            MOV [EBX+1], [ECX+1]
            MOV [EBX+2], [ECX+2] 
            MOV [EBX+3], 255
            ADD EBX, 4
            ADD ECX, 3
            DEC EDX
            JNZ loop
    }
}

原谅我,我是集会的新手:(

1 个答案:

答案 0 :(得分:3)

没有通用指令支持你写的2个内存操作数:

MOV [EBX+1], [ECX+1]
MOV [EBX+2], [ECX+2] 

通用指令通常只能包含以下两个操作数组合:

  • 注册+常数
  • 注册+记忆
  • 注册+注册
  • 记忆+常数

您必须重写代码才能使用有效的操作数组合。开始阅读CPU手册,了解有关说明的详细信息。

此外,loop是一个指令名称。您不应该将它用于标签名称。