我试图在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
是指令名。你不应该用它来命名标签。