Конфликт размера операндов

нужно значение из регистра edx перенести в массив символов. Не знаю как исправить конфликт операндов.

int main() {
    char buffer[5];
    int number = 255;
    int divider = 10;
    __asm {
        mov edx, 0
        mov eax, number
        mov ebx, divider
        div ebx
        add ebx, 48


        mov buffer[0], edx
    }
    cout << buffer << endl;
}

Ответы (2 шт):

Автор решения: Harry

Сделайте проще:

int main() 
{
    int b;
    int number = 255;
    int divider = 10;
    __asm {
        mov edx, 0
        mov eax, number
        mov ebx, divider
        div ebx

        mov b, edx
    }
    cout << b << endl;
}

Благо cout сам сумеет int вывести, ему не надо в строку его превращать...

→ Ссылка
Автор решения: insolor

Здесь вы в однобайтовую ячейку пытаетесь положить значение из четырехбайтового регистра, из-за этого возникает конфликт размера операнда:

mov buffer[0], edx

Вам нужен только младший байт из регистра edx, т.е. регистр dl:

mov buffer[0], dl

Также у вас ошибка в логике программы: нужно добавлять 48 (код символа '0') не к ebx, а к edx (или к dl).

→ Ссылка