1
我剛剛開始在我的計算機組織課程中使用Assembly進行編程,每當我嘗試在C程序中編譯此asm
塊時,我都會收到operand size conflict
錯誤。x86程序集中的操作數大小衝突
arrayOfLetters[]
對象是一個char數組,所以不應該每個元素都是一個字節?代碼工作時,我做mov eax, arrayOfLetters[1]
,但我不知道爲什麼工作,因爲eax
寄存器是4個字節。
#include <stdio.h>
#define SIZE 3
char findMinLetter(char arrayOfLetters[], int arraySize)
{
char min;
__asm{
push eax
push ebx
push ecx
push edx
mov dl, 0x7f // initialize DL
mov al, arrayOfLetters[1] //Problem occurs here
mov min, dl // read DL
pop edx
pop ecx
pop ebx
pop eax
}
return min;
}
int main()
{
char arrayOfLetters[ SIZE ] = {'a','B','c'};
int i;
printf("\nThe original array of letters is:\n\n");
for(i=0; i<SIZE; i++){
printf("%c ", arrayOfLetters[i]);
}
printf("\n\n");
printf("The smallest (potentially capitalized) letter is: %c\n", findMinLetter(arrayOfLetters, SIZE));
return 0;
}
你能顯示周圍的C代碼嗎? – DCoder 2012-04-09 07:28:05
@DCoder我將它添加到問題,謝謝! – 2012-04-09 07:42:22
當你使用'mov'將一個字移動到目標寄存器時,'al'的寬度只有一個字節。您應該使用'movb'代替IMO。抱歉,無法調試您的代碼,casue我沒有英特爾風格的彙編程序。順便說一句,你的意思是'mov al,arrayOfLetters [1]'起作用或者只是可以編譯? – 2012-04-09 07:48:16