我正在尝试在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
}
}
原谅我,我是集会的新手:(
答案 0 :(得分:3)
没有通用指令支持你写的2个内存操作数:
MOV [EBX+1], [ECX+1]
MOV [EBX+2], [ECX+2]
通用指令通常只能包含以下两个操作数组合:
您必须重写代码才能使用有效的操作数组合。开始阅读CPU手册,了解有关说明的详细信息。
此外,loop
是一个指令名称。您不应该将它用于标签名称。