我正在尝试在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
}

上面已注释有错误的行。

简而言之,为什么这些对我不起作用:
  • mov临时字符,bx // temp_char = OChars [i];
  • mov EncrChars [ebx],temporal_char // EncrChars [ebx] =临时字符
  • 最佳答案



    由于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
    

    08-16 02:20