我正在尝试在ASM中编写一个简单的for循环。我需要访问两个数组,这些数组是在C++的代码段之外编写的(即OrigChars和EncrChars)
char temporary_char;
__asm {
xor ebx, ebx
jmp checkend
loopfor: inc ebx
checkend: cmp ebx, len
jge endfor1
mov bx, word ptr[ebx + OrigChars]
mov temporary_char, bx //error - "operand size conflict"
push eax
push ecx
movzx ecx, temporary_char
lea eax, EKey
push eax
push ecx
call encrypt1
add esp, 8
mov temporary_char, al
pop ecx
pop eax
mov EncrChars[ebx], temporary_char //error - "improper operand type"
jmp loopfor
}
上面已注释有错误的行。
简而言之,为什么这些对我不起作用:
最佳答案
由于temporary_char的类型为char,因此只需将BL替换为BX。
最好还是使用AL
,因为您将EBX用作寻址索引!
mov al, byte ptr [OrigChars + ebx]
mov temporary_char, al
同一条指令中不能有2个内存引用。使用间歇寄存器:
mov al, temporary_char
mov byte ptr [EncrChars + ebx], al