cout 可能由于内联汇编而无法给出输出
cout fails to give output probably due to inline assembly
我正在使用 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;
}
您在 MOV EAX,x
和 IDIV y
指令之间缺少一个 CDQ
。没有它,EDX
寄存器中有一个未知值,可能导致除法溢出。 CDQ
指令将符号扩展 EAX
到 EDX
.
MOV EAX,x
CDQ
IDIV y
我正在使用 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;
}
您在 MOV EAX,x
和 IDIV y
指令之间缺少一个 CDQ
。没有它,EDX
寄存器中有一个未知值,可能导致除法溢出。 CDQ
指令将符号扩展 EAX
到 EDX
.
MOV EAX,x
CDQ
IDIV y