WIN16組合語言中PUSH和POP總結

2021-05-24 01:50:13 字數 471 閱讀 7660

最近在研究彙編,老是將這兩個東東搞混淆,覺得有必要總結一下子。

無論是push還是pop,都是對堆疊段ss的處理,ss中存放堆疊段位址,sp指標中存放偏移位址,棧操作都是以字(2位元組)為單位。例如,將通用暫存器ax中的資料入棧,push ax,在16位的彙編中,ax中存放的是兩個位元組單元,這句話的意思中包含了兩個步驟:1)讓sp=sp-2,即讓sp指標向上移動兩個儲存單元;2)將ax中兩個位元組資料傳送入sp指向的記憶體單元。相反,將通用暫存器ax中的資料出棧,pop ax,其中也包含了兩個步驟:1)ss:sp指向的字資料傳送給ax;2)讓sp=sp+2,即讓sp指標向下移動兩個儲存單元。

再舉乙個例子,push [bx],這條指令和push ds:[bx]的意思一樣的,同上,分兩步:1)讓sp=sp-2;2)將ds:[bx]處的字資料傳送給ss:sp指向的單元。同樣,pop [bx],和pop ds:[bx]同樣意義,分兩步:1)將ss:sp指向的字資料傳送給個ds:[bx]所在的字單元。

關於組合語言中PUSH和POP指令的乙個小結

這裡是引用 最近剛剛開始學習組合語言,對於push和pop指令有些疑惑,特意去網上查了資料,在此做乙個總結。push和pop指令都是對ss堆疊段的操作,ss中存放的是段基址,sp指標存放的是偏移位址。注意入棧出棧操作都是以 字 為單位 也就是2位元組,16位 下面貼幾張比較詳細的截圖 首先從下面這張...

組合語言中的常數

1,數值常數 二進位制數 10110100b 八進位制數146q,5430 十進位制數146d,543 十六進製制數 1a2fh,0ff00h 實數12.48e 2,1a3c0000r 彙編時,則有匯程式設計序將所有的數值常數都轉換成二進位制標示的目標 凡是以字母a f開頭的十六進製制數,唏噓在前面...

組合語言中ASSUME簡介

size large url 組合語言中的assume偽指令 directive assume偽指令通知匯程式設計序為 段 資料段 附加段以及堆疊段選擇什麼名字。沒有assume偽指令時,匯程式設計序假設不分段,並自動把段超越字首用於所有定址儲存器資料的偽指令。assume語句只能用於完整的段定義。...