- 需要注意的是匯編不是一種語言,不同平台有不同的匯編語言對應,因為匯編和操作系統平台相關,所以匯編語言沒有移植性。對於IA-32架構平台而言,選用的32位80386匯編語言,也就只說討論的操作系統平台是32位的,可以執行文件的格式也是32位而不是64位或16位的。
- 實際分析中要知道研究的程序是運行在什么平台上,以選擇相應的匯編語言,對應IA-32架構而言,IA-16架構的匯編語言原理其實和IA-32的匯編語言一樣,學習過16位的80X86匯編語言的人只需要花一點時間就可以轉到32位80386匯編語言上。
16位操作系統與32位操作系統的80x86匯編語言主要區別如下:
- 16操作系統中的中斷調用相當於32位操作系統中的API調用。16位操作系統的中段地址和偏移地址在32位中消失了,在32位操作系統中統一采用平坦的內存地址模式尋址。
- 16位操作系統中的程序運行在RING0級,也就是說普通程序和操作系統程序運行在同一個級別並且擁有最高權限,而32位操作系統中的程序一般只擁有GING3級別運行權限,程序的所有操作都受到操作系統控制,若程序要獲得RING0操作特權只能通過驅動程序實現。
- 16位操作系統的可執行文件格式和32位操作系統的可執行文件格式不同,在32位的Windows操作系統中,可執行文件的格式加PE格式,32位的Windows操作系統運行在CPU的保護之上,而16位的系統則運行在CPU的實模式上。
什么是IA-32?
IA-32(Intel Architecture),英特爾體系架構,英特爾從486開始采用,也就是X86-32架構,在同一時間內可以處理32位進制數據。CPU的工作寬度是32位。其它公司在軟硬件方面都兼容此架構,也列屬於IA-32架構。