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

304
18 мая 2022, 16:00

нужно значение из регистра 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;
}
Answer 1

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

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 вывести, ему не надо в строку его превращать...

Answer 2

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

mov buffer[0], edx

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

mov buffer[0], dl

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

READ ALSO
Методы минимизации функции нескольких переменных

Методы минимизации функции нескольких переменных

Какой метод поиска минимума функции лучше всего использовать для такой задачи: Есть функции двух, трёх переменных и нужно найти минимальное...

178
Действие функции fflush()

Действие функции fflush()

Не понимаю, какое действие выполняет функция php fflush()В следующем примере у неё как будто нет никакого эффекта:

284
Отдать файл для скачивания пользователю

Отдать файл для скачивания пользователю

Отправляю POST с параметрами, получаю файл на скачиваниеПробую сделать подобное на php, но в консоле вижу только содержимое файлы, как отдать...

249
Redirect Laravel когда товар внизу списка

Redirect Laravel когда товар внизу списка

Всем приветДелаю тестовый инет магазин, когда кто то добавляет товар в корзину я поставил return redirect()->back();

160