2012-11-24 148 views
2

我正在使用Microsoft Visual C++ 2010 Express執行內聯彙編代碼。將字符數組的值移動到寄存器x86內聯彙編中

我有這種類型的代碼。重點是我需要訪問一個字符數組中的每個單個字符。下面只是一個不相關的例子,當它到達字符串的末尾(終止空字符)時,它將跳轉到結束,否則它將用新行分隔字符串的每個字符。

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

回答

1

eax」 描述寄存器a的32位。

寄存器a的低8位是al。這將移動8位:

mov al, line[ebx] 
0
使用

零擴展字節負載的insn movzx

movzx eax, line[ebx] 
+0

操作數大小是不明確的詞也可以是零/符號擴展。這必須是gnu樣式:'movzxb'或'eax,byte ...',(或者在某些方言字節ptr中) –

+0

MS編譯器從'line'變量的聲明中推導出操作數的大小。 – chill

相關問題