WIN32 程式運作在保護模式下的,保護模式的曆史可以追溯到 80286。Windows 把每一個 Win32 應用程式放到分開的虛拟位址空間中去運作,也就是說每一個應用程式都擁有其互相獨立的 4GB 位址空間,當然這倒不是說它們都擁有 4GB 的實體位址空間,而隻是說能夠在 4GB 的範圍内尋址。作業系統将會在應用程式運作時完成 4GB 的虛拟位址和實體記憶體位址間的轉換。這就要求編寫應用程式時必須格守 Windows 的規範,否則極易引起記憶體的保護模式錯誤。而過去的 Win16 記憶體模式(也就是我們所說的實模式)下,所有的應用程式都運作于同一個 4GB 位址空間,它們可以彼此"看"到别的程式的内容,這極易導緻一個應用程式破壞另一個應用程式甚至是作業系統的資料或代碼。
和 16 位 Windows 下的把代碼分成 DATA,CODE 等段的記憶體模式不同,WIN32 隻有一種記憶體模式,即 FLAT 模式,意思是"平坦"的記憶體模式,再沒有 64K 的段大小限制,所有的 WIN32 的應用程式運作在一個連續、平坦、巨大的 4GB 的空間中。這同時也意味着您無須和段寄存器打交道,這樣就不用在考慮 棧段位址, 以及代碼段位址. 隻用關心它們的偏移位址.
另外,8086/8088是運作在16位環境下的,比如以前的DOS作業系統;win32運作在Windows環境下,可以在VS中直接編寫。
您可以用任意的段寄存器尋址任意的位址空間,這對于程式員來說是非常友善的,這也使得用32位彙編語言和用C語言一樣友善。 在Win32下程式設計,有許多重要的規則需要遵守。有一條很重要的是:Windows 在内部頻繁使用 ESI,EDI,EBP,EBX 寄存器,而且并不去檢測這些寄存器的值是否被更改,這樣當您要使用這些寄存器時必須先儲存它們的值,待用完後再恢複它們,一個最顯著的應用例子就是 Windows 的 CallBack 函數中