源代码中的报错部分:
void __cdecl ScaleARGBFilterCols_SSSE3(uint8* dst_argb, const uint8* src_argb,
int dst_width, int x, int dx) {
__asm {
/*
push esi
push edi
mov edi, [esp + 8 + 4] // dst_argb
mov esi, [esp + 8 + 8] // src_argb
mov ecx, [esp + 8 + 12] // dst_width
movd xmm2, [esp + 8 + 16] // x
movd xmm3, [esp + 8 + 20] // dx
*/
mov edi, [dst_argb] // dst_argb
mov esi, [src_argb] // src_argb
mov ecx, [dst_width] // dst_width
movd xmm2, [x] // x
movd xmm3, [dx] // dx
编译器给出的错误提示:
1>e:\bilinearitp\bilinearitp\scale_packed.c(30): error C2403: “dx”: 寄存器必须为“第二操作数”中的基/索引
1>e:\bilinearitp\bilinearitp\scale_packed.c(30): error C2415: 不正确的操作数类型
经过各种搜索,没有找到合适的答案,最后只好回去翻翻80x86汇编的书,突然明白是咋回事!
你明白了吗?
16位通用寄存器:AX,BX,CX,DX