移动字符数组的值以注册 x86 内联程序集

Move the value of an array of character to register x86 inline assembly

本文关键字:x86 程序集 注册 字符 数组 移动      更新时间:2023-10-16

我正在使用Visual C++ 2010 Express进行内联汇编编码Microsoft。

我有这种代码。重点是我需要访问字符数组的每个字符。下面只是一个不相关的示例,当它到达字符串的末尾(终止空字符)时,它将跳转到完成,否则它将用新行分隔字符串的每个字符。

line[10] = "I am Kevin";
format[] = "%cn";
_asm {
  mov  ebx,0
loop:
  cmp  line[ebx],0
  jz   finish
  mov  eax, line[ebx]
  push eax
  lea  eax, format
  push eax
  call printf
  jmp  loop
finish:
  ....
}

不知何故,我总是有这一行的错误:

mov  eax, line[ebx]

它一直在说error C2443: operand size conflict

"eax " 描述了 32 位寄存器a

寄存器a的低8位为al。 这将移动 8 位:

mov  al, line[ebx]

使用零扩展字节加载 insn movzx

  movzx  eax, line[ebx]