移动字符数组的值以注册x86内联汇编

时间:2012-11-24 19:40:21

标签: c++ assembly x86

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

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

line[10] = "I am Kevin";
format[] = "%c\n";

_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

2 个答案:

答案 0 :(得分:1)

eax”描述了32位寄存器a

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

mov  al, line[ebx]

答案 1 :(得分:0)

使用零扩展字节加载insn movzx

  movzx  eax, line[ebx]