我已經在這裏問過類似的問題,但我仍然有一些錯誤,所以我希望你能告訴我我做錯了什麼。只知道我知道彙編程序,並且我已經在8051彙編程序中完成了幾個項目,甚至它也不一樣,接近於x86彙編程序。一些內嵌彙編程序問題
有塊中的代碼我在VC++ 2010速成嘗試(我想從CPUID指令信息):`
int main()
{
char a[17]; //containing array for the CPUID string
a[16] = '\0'; //null termination for the std::cout
void *b=&a[0];
int c=0; //predefined value which need to be loaded into eax before cpuid
_asm
{
mov eax,c;
cpuid;
mov [b],eax;
mov [b+4],ebx;
mov [b+8],ecx;
mov [b+12],edx;
}
std::cout<<a;
}`
所以,快速總之,我試圖創建無效指針第一數組的元素,而不是使用間接尋址只是從寄存器中移動數值。但是這種方法給了我「堆棧變量b損壞的運行時錯誤」,但我不知道爲什麼。
請幫忙。謝謝。這只是爲了學習的目的,我知道有CPUID功能....
編輯:另外,你怎麼能在x86 VC++ 2010內聯彙編程序中使用直接尋址?我的意思是8051中即時數字加載的通用語法是mov src,#number
,但是在VC++ asm中它的mov dest,number
沒有#號。那麼如何告訴編譯器你想直接訪問內存單元地址x?
你根本不需要c。只需使用'xor eax,eax'來設置eax = 0。 – TonyK 2010-11-29 15:11:24