匯編是低級語言,可以用來直接控制硬件,所以不同於高級語言,因為匯編的代碼和機器碼有關,所以不同的機器使用不同的匯編碼。
匯編因為是在二進制上面發展過來的,所以比二進制更加方便,舉個栗子:
一個hello world程序(別問我Hello Word是啥,謝謝~)用二進制語言寫的話需要花50行的0和1,相比匯編語言的16行,差的太多太多~
16位匯編采用實模式
(可以隨意對內存編程的模式,也就是說,如果存放着系統的內存是允許被修改的,一經修改系統將會發生故障)
32位匯編采用的是保護模式(擁有權限級別,1級2級3級 根據等級的不同,訪問的內存單元也不同)
16位尋址能力為2的16次方 從00000-FFFFF 就是內存大小
接下來我們介紹幾個常用的寄存器
AX,BX,CX,DX
Ax:累加器
BX:存放一個內存單元的偏移地址
Cx :循環的計數器,當cx=0時,跳出循環執行下一條指令
Dx: 存放着數據
Cs:存放着當前執行的指令的段地址
IP:存放着要執行的指令的偏移地址 (和CS是一組)
Cs*16+IP =要執行的指令的實際地址
(乘16是因為要將地址轉變為基地址,加上了偏移地址后就是實際地址)
當10000成為基地址,加載內存后,前面的內存單元和下一個內存單元之間,偏移量會變
這時候我們只需要計算偏移量,也就是0 1 2 3這些小的數字,加起來后我們就可以輕松的獲取到程序的內存(就是執行的代碼)
接下來我們講一個特殊的東西,在匯編里面,有一種叫“棧”的奇特結構
這種結構的特性是,最先進去的內存最后出來,最后進去的內存最先出來。
棧遵循先進后出的原則
然后我們介紹兩個跟棧有關的寄存器SS SP
Ss存放着棧頂的段地址
Sp存放着棧的偏移地址
無論何時 ss:sp指向棧頂
棧由於其特殊的結構,經常用來做數據交換。
補充:
Ds cs ss 這些寄存器是不能通過直接賦予數值來改變寄存器的地址,只能通過ax,bx等寄存器的中轉去改變!