我刚刚开始为我的计算机组织课程编程,每当我尝试在C程序中编译这个operand size conflict
块时,我都会收到asm
错误。
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;
}
答案 0 :(得分:3)
使用mov al, BYTE PTR arrayOfLetters[1]
。
您可以使用cl input.c /Faoutput.asm
使用MSVC编译代码以获取程序集打印输出 - 这表明只需使用arrayOfLetters[1]
转换为DWORD PTR
,您需要明确说明您想要{ {1}}。