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