Ich habe gerade begonnen zu programmieren in Assembly für meine Computerorganisation natürlich, und ich bekomme immer eine operand size conflict
Fehler, wenn ich versuche, diese asm
Block in einem C-Programm zu kompilieren.Operand Größe Konflikt in x86 Assembly
Das Objekt arrayOfLetters[]
ist ein Char-Array, sollte also nicht jedes Element ein Byte sein? Der Code funktioniert, wenn ich mov eax, arrayOfLetters[1]
mache, aber ich bin mir nicht sicher, warum das funktioniert, da das eax
Register 4 Bytes ist.
#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;
}
Können Sie den umgebenden C-Code anzeigen? – DCoder
@DCoder Ich habe es zur Frage hinzugefügt, danke! –
Wenn Sie 'mov' verwenden, bewegen Sie ein Wort in das Zielregister, die Breite von' al' ist jedoch nur ein Byte. Sie sollten stattdessen "Movb" IMO verwenden. Entschuldigung, ich kann deinen Code nicht debuggen, weil ich keinen Assembler mit Intel-Stil zur Hand habe. BTW, du meinst "mov al, arrayOfLetters [1]" funktioniert oder kann nur kompilieren? –