Cout не может выдать вывод, вероятно, из-за встроенной сборки - PullRequest
0 голосов
/ 04 февраля 2020

Я использую командную строку разработчика Visual Studio 2019. Встроенный код сборки простое деление и остаток. При компиляции с использованием команды cl /EHsc filename.cpp ошибки нет. Абсолютно ничего не отображается на экране. Время выполнения - до 4 секунд.

#include<iostream>
using namespace std;
int main()
{
    int x=10,y=20;
    int z=0,r=0;
    //z=x/y
    //r=x%y
    __asm
    {
        MOV EAX,x
        IDIV y
        MOV z,EAX
        MOV r,EDX
    }
    cout<<"z = "<<z<<"\tr = "<<r<<endl;
    return 0;
}

1 Ответ

3 голосов
/ 04 февраля 2020

Вам не хватает CDQ между инструкциями MOV EAX,x и IDIV y. Без этого регистр EDX имеет неизвестное значение, что может привести к переполнению. Инструкция CDQ подпишет расширение EAX в EDX.

MOV EAX,x
CDQ
IDIV y
...