【彙編語言與計算機系統結構筆記11】程序格式與僞操作:段定義、堆棧 #簡潔筆記形式

本次筆記內容:
14.程序格式與僞操作-1

注:本節課更換爲一名女老師。我找到了對應內容的課件,請見我於GitHub的CS筆記倉庫因此,爲了節省時間,我只記錄老師上課強調的內容與對應ppt頁碼。

本節課對應幻燈片:彙編語言程序設計-程序格式,第1頁起。

P3 彙編程序的功能

源程序實際上是 .asm 的 ASC 機器碼源程序,稱爲彙編源程序。

.asm 文件產生目標文件 .obj列表文件 .lst。列表文件也是一個文本,存儲詳細信息。

.asm 文件還可產生宏指令,後面專門有一種會講“宏彙編”。其是一些基本指令的結合。

P4 僞操作(僞指令)

之所以叫“僞”,是與之前講的“硬”指令相對應的。

僞操作是彙編程序對源程序進行彙編時處理的操作,完成處理器選擇、存儲模式定義、數據定義、存儲器分配、指示程序開始結束等功能。

P5 處理器選擇僞操作

選擇處理器。

比如很多彙編程序的開頭,就是.386,功能是選擇處理器。

P6 段定義僞操作

區分程序中的代碼段、附加段、數據段等等。

code, data 不是關鍵字。

P7 彙編源程序的其他形式

其中,有main proc far調用了一個子程序,並且爲遠調用,因此ret爲遠返回。

P8 帶堆棧段的彙編源程序

dup 爲重複的意思,在第一個堆棧段中,開闢了200個字節。tostop of stack,並非關鍵字,tos label word是僞指令,將一個字word賦給tos,並且label的意義爲指向下一個要被賦予地址的地方,並且並不分配內存空間。在後面的賦值中,將這個指針tos指在堆棧棧頂外mov sp, offset tos(緊挨着堆棧),這樣一旦壓棧,就進入堆棧。

P9-10

tos位置如圖。

即便如此定義,系統還是警告沒有堆棧段

老師舉了個例子(做了個演示),但是我的 ppt 上沒有。

如圖,會提示沒有堆棧段,爲了解決這個問題,使用stack關鍵字:stack segment stack(後面的是關鍵字),有了這個關鍵字,也不需要手動爲sssp賦初值了。

P11 C中定義數組

這頁 ppt 顯示了數組與其在堆棧段內存形式。

堆棧放入數據不一定通過壓棧來進行。

P12 完整段定義的格式

段名 SEGMENT [定位類型][組合類型][使用類型]['類別']
...
段名 ENDS

如 ppt ,在 SEGMENT 後其實有很多選項可選。

(1)定位類型段起始地址的條件;
(2)組合類型,如 STACK 等, STACK 把相同名稱的堆棧段組合在一起,沒有碎片;
(3)使用類型用“多少位”的形式;
(4)類別指,連接時具有相同類別的內容連接在一起。

接着,老師舉了一個例子(做了個演示), ppt 上沒有。

P13-14 例

組合程序由兩段子程序組成:proadd1.asmproadd2.asm

在開頭,聲明還未建立起的調用子程序。在proadd2.asm中,定義了public proadd,供外部調用。

兩個程序的數據段同名,則子程序2對1進行覆蓋。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章