我正在尝试在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
}
以上评论了有错误的行。
简而言之,为什么这些不适合我:
答案 0 :(得分:3)
mov bx, word ptr[ebx + OrigChars] mov temporary_char, bx //error - "operand size conflict"
由于 temporary_char 的类型为 char ,您只需要用BL替换BX。
更好地使用AL
,因为您使用EBX作为寻址索引!
mov al, byte ptr [OrigChars + ebx]
mov temporary_char, al
mov EncrChars[ebx], temporary_char //error - "improper operand type"
同一指令中不能有2个内存引用。使用间歇寄存器:
mov al, temporary_char
mov byte ptr [EncrChars + ebx], al
答案 1 :(得分:0)
char
类型通常为8位大小。 bx
寄存器为16位。这是你的不匹配。