組合語言中對PSP區和程式區的一些理解

2021-08-08 16:45:52 字數 839 閱讀 2454

看王爽《組合語言(第三版)》的時候,第4.9章 有一處我一直無法理解:

psp區和程式區雖然實體地址連續,卻有不同的段位址。
從這段記憶體區的256位元組處開始(在psp的後面),將程式裝入,程式的位址被設為sa+10h : 0

……空閒記憶體區: sa : 0

psp區: sa : 0

程式區: sa+10h : 0

這裡的關鍵就是為什麼256位元組和10h(即16)扯上了關係?難道不是應該和100h(即256)有關麼?你說對了,就應該和100h有關,那怎麼樣能讓它們扯上關係呢?不知道這個公式大家還記不記得:

實體地址=段位址×10h+偏移位址
明白了吧?psp區的實體地址就是sa×10h程式區的實體地址就是(sa+10h)×10h,即sa×10h+100h,剛好比psp高了100h(即256)個位元組。其實就是把偏移位址本來應該負責的100h偏移量轉移到了段位址上面,這樣就能盡可能擴充程式區的大小了。

所以我們可以看出來,其實上面這個公式相當重要,它貫穿了全書,在不同的章節看到它都會有不同的體會,掌握它也會讓我們更加容易地理解很多問題。

組合語言中的常數

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

組合語言中OUT和IN的用法

組合語言中,cpu對外設的操作通過專門的埠讀寫指令來完成 讀埠用in指令,寫埠用out指令。例子如下 in al,21h 表示從21h埠讀取一位元組資料到al in ax,21h 表示從埠位址21h讀取1位元組資料到al,從埠位址22h讀取1位元組到ah mov dx,379h in al,dx 從...

C語言中堆區棧區的區別

平常我們在程式設計 的過程中,經常使用的是c語言,在編寫 的過程中,會有這樣的思考 你的 中資料是怎麼存放的?存放在哪些地方,怎麼來在stm32或者其他硬體平台上來運轉?在c語言編寫 的過程中,記憶體分為四區 棧區 堆區 全域性變數區 區 1 棧區 由編譯器自動分配釋放,存放函式的引數,區域性變數的...