win32彙編問題,組合使用pushad和popad作用是什麼?

時間 2021-06-01 07:19:05

1樓:

是的,你的理解是對的,不過在cdecl以及stdcall呼叫約定下,eax暫存器用於返回函式的返回值,因此是一定會被破壞的。

編譯器會根據呼叫約定規定暫存器的使用方式,事先約定好了非易失性暫存器(non-volatile registers)和易失性暫存器。非易失性暫存器就是指在一次函式呼叫之後,該暫存器依然會保持原有的值,易失性暫存器自然就是在函式呼叫後可能會被改變的暫存器。

例如x64約定有16個通用暫存器以及16個供浮點數使用的XMM暫存器,其中rax、rcx、rdx、r8-r11,以及xmm0-xmm5是易失性暫存器,函式呼叫後其中的值可能會被改變,剩下的就是非易失性暫存器,函式需要在返回後保證其中的值不被改變。如果在函式內部需要用到這些非易失性暫存器,那麼需要先push到棧裡,在返回到caller前將其pop出來,以保證遵守約定,pushad正如@vczh 所說,是一種簡單粗暴的儲存方式。

有了WIN32應用,為什麼還要WIN10通用應用?

題主提的是一個非常切實存在的問題,也是微軟急需給出一個回答的問題。UWP 應用推廣的最大問題不是開發商願不願意去開發 使用者願不願意去用,真正的問題在於 一個產品的UWP 版本暫時還不能取代原有的 Win32 版本。為什麼?因為 UWP 應用只能執行在 Windows 10 上,而目前絕大多數的桌面...

win32視窗小於一定尺寸如何禁止縮放?

Beacon 響應WM GETMINMAXINFO 訊息ON WM GETMINMAXINFO void CDlg OnGetMinMaxInfo MINMAXINFO lpMMI if m bIsInited return lpMMI ptMinTrackSize.x 300 lpMMI ptMi...

在 Windows 上不用 Win32 API 可以繪製出一個視窗麼?

Qt 貌似沒用?你找了沒?以 Qt 5.15.2 版本為例,檔案在 qtbase 的 src plugins platforms windows qwindowswindow.cpp 裡 tristan import queue import threading import tkinter ast...

32位老遊戲如何在win7上執行?

卸腰 可能是遊戲本身或者安裝程式是16位的,而64位CPU切入64位模式後是不能使用VM86 的,所以64位Windows不含NTVDM Windows On Windows 32 Bit 對於常見的安裝程式如InstallShield等,Windows會進行自動重定向 將setup.exe重定向系...

Win32 C 程式設計師的生活究竟有多麼痛苦?

學習建議 1 先學Windows程式設計前五章,瞭解Windows訊息機制。2 在學MFC,注意只需MFC一點控制元件知識,學MFC主要原因是很多Win32 API的例項都以MFC形式出現,會MFC你能多一些參考,而不是去精通MFC。3 在去學Win32 API,把Windows程式設計,Windo...