我试图在VC++ 2010中创建一些内联程序集,将字节的RGB缓冲区解压成字节的RGBBA缓冲器,这就是我所提出的:
但我明白了

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
    }
}

原谅我,我是新来的:(

最佳答案

没有像您所写的那样,通用指令支持两个内存操作数:

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

通用指令通常只能有以下两种操作数组合:
寄存器+常量
寄存器+内存
寄存器+寄存器
内存+常量
必须重写代码才能使用有效的操作数组合。开始阅读关于指令细节的CPU手册。
另外,loop是指令名。你不应该用它来命名标签。

07-24 09:44