組合語言總結

2021-03-11 09:28:48 字數 4199 閱讀 7807

一、乙個完整的源程式的結構

乙個源程式一般由若干個段組成,每個分段可以是棧段、資料段和**段。乙個源程式可以有多個棧段、資料段和**段,從語法規則上來看,棧段是有明顯標誌的;**段最好的型別為『code』的標記,並用cs作為段界暫存器,只有資料段不要求標誌。

完整的源程式的結構一般形式如下:

程式名稱;..

..二、源程式的一般的程式:

二、簡化段的源程式的結構

這種形式只有三個分段;乙個棧段、乙個資料段和乙個**段。**長度可達64kb,資料段和棧段是乙個組,其總長度可達64kb,組名為dgroup。組名dgroup與資料段名@data都代表組對應的物理段的段界位址,裝入記憶體時,系統給cs及ip賦初值,使其指向**段。

同時系統還給ss和sp賦初值,使(ss)=dgroup,(sp)=資料段長度+棧段長度,也就是使棧段為對應的物理段。這樣處理是使棧段元素也能用ds暫存器訪問,以便於高階語言相連線。

一般模式偽操作符模式

name《模組名》;可有可無dosseg

title 《正文》;可有可無model **all

堆疊段名 segment pata stack』stackstack [長度]

.data

資料語句

堆疊段名 endscode

資料段名 segment啟動標號 mov ax,dgroup

mov ds,ax

執行語句

資料段名 ends

**段名 segment執行性語句exit

assume 設定段與暫存器的對應關係end

標號過程名1 proc 型別

過程名1 endp

過程名n proc 型別

過程名n endp

**段名 ends

end 標號|過程名

三、 基本概念。

(1)匯程式設計序的分類:自匯程式設計序和交叉匯程式設計序;按功能分:浮動匯程式設計序、微匯程式設計序、巨集彙編。

由浮動匯程式設計序產生的二進位制目標**,可以裝入內存在任何位置執行; 微匯程式設計序只提供將彙編指令轉換成機器指令的基本過程,缺乏偽指令處理能力;巨集彙編不僅包含一般組合語言的功能,並且採用了高階語言的資料結構,提供了記錄、結構和字串的操作,提供巨集指令、條件彙編、重複彙編、組建巨集庫等紅處理能力及dos呼叫等功能。

(2)組合語言的格式:[名字][字首]助記符[運算元1],[運算元2]。。。[;注釋]

助記符可以是指令、偽指令、巨集指令;

<1>名字是以字母(把符號$@?._看成字母)打頭且不超過31個字元的字母數字串.有兩類:

一是事先約定的,不用定義與說明(包括暫存器名字、操作符、偽操作符);二是使用者自己定義的名字(包括標號、變數、分段名、組名、過程名、巨集定義名、記錄名、結構名及網域名稱),名字不能以數字開頭,且不能為保留字。

<2>操作符表示語句的主要操作或功能,通常分為做操作符和偽操作符。操作符代真後有目標**(操作碼)對應,其功能有就硬體指令實現;偽操作符代真後沒有目標**對應,其功能由匯程式設計序實現。(包括完整段操作符、簡化段操作符和其他未操作符)。

<3>標號是用:號引入放入名字。標號的屬性(標號代表其定義所處位置的位址):

1標號的段值屬性,就是標號所在的段界位址;其形式有a. 標號,b. seg 標號。

2標號的偏移位址屬性,是指標號所處位置的偏移位址;其形式有:a. 標號 ,b.

offset 標號。3標號的型別屬性,代表乙個值即遠標號(far)和近標號(near);其形式:type 標號。

若為near則type=-1,若為far則type=-2。

<4>變數,變數是用資料偽操作符引入的名字。有兩種含義一是:代表所表示的變數的值,二是:

表示變數所佔空間的首位址。變數的屬性1 變數的段值屬性,是指變數定義所在的段的段界位址;其形式a. 變數b.

seg 變數。2變數的偏移位址屬性值;a. 變數,b.

offset 變數。3變數的型別屬性,指變數所表示的資料元素的長度(以位元組為單位);其形式:type 變數,type變數是乙個1—10之間的數字。

4變數的元素總和屬性,指變數所指資料的元素個數;其形式: length 變數,只對單項重複子句有意義,其他的length 變數=1。5變數位元組總和屬性,變數所指資料所佔的儲存空間的總位元組數;其形式:

size 變數,只對單項重複子句有意義,其他的size 變數=1。size=length x type。

重新定義型別操作符,格式:型別 ptr 表示式;功能:用來為變數或標號建立乙個新的屬性。

對於變數型別可以是type、word、dword,對於標號可以是near、far,表示式可以是變數名、標號或其他位址表示式。

<5>分段名,用偽操作符segment引入的名字;

其定義形式:分段名 segment

分段名 ends

分段名在使用中代表該分段的段界位址,段值的表示方式:分段名或seg 分段名

<6>組名,用偽操作符group引入的名字,組名在使用用代表其段界位址。其定義形式:

組名:group 分段名1,分段名2,……

<7>過程名和過程,用偽操作符proc引入的名字。型別預設為near。其定義形式:

過程名 proc 型別(far/near)

執行語句)

過程名 endp

五、語句是源程式的基本單位。彙編語句按其作用與編譯的情況分為:執行語句和說明性語句。

(1)執行語句,編譯後有目標程式與之對應。包括:(1)一般執行語句,由操作符定義,一句一般執語句只產生一條目標**指令;(2)巨集語句,由偽操作符定義,包括巨集定義、巨集呼叫、巨集擴充套件語句,乙個巨集語句對應一組目標**程式。

(指令語句)和(巨集指令語句)

(2)說明性語句,編譯後沒有目標程式與之對應。包括(3)資料語句,用於描述資料和給資料賦初值;(4)列表控制語句,用於說明列印源程式的格式要求;(5)程式結構語句,用於說明源程式的結構;(6)條件彙編語句,用於說明彙編某部分語句時的條件,滿足條件則彙編,否則跳過不予彙編(偽指令語句)

(一)執行語句

(1)一般執行語句全部由操作符定義,每乙個操作符定義一種語句。包括1資料傳語句,2算術運算語句,3比較語句,4轉移語句,5字串語句,6初等函式語句,7置實常數語句,8邏輯操作語句,9控制語句。

其形式有:形式1:[標號:]操作符; 形式2:[標號:]操作符位址變數

形式3:[標號:]操作符目位址變數, 源位址變數;

形式4:[標號:]操作符目位址變數, 源位址變數,直接運算元。

(2)巨集語句從功能上分為<1>等價語句,<2>巨集定義與巨集呼叫語句,<3>重複塊及退出巨集展開語句。

<1>等價語句包括:①賦值等價語句,②數值等價語句,③串等價語句。

①賦值等價語句

形式:名字=表示式

其中表示式可以是以整數、常數表示式、位址表示式、乙個或兩個字元。

功能:彙編時該名字用表示式的值代替。該語句不佔記憶體,必須先定義後使用。名字在語句中作直接運算元使用,並允許重新定義。常用於巨集定義、重複模組。

②數值等價語句

形式:名字equ表示式

其中表示式可以是以整數、常數表示式、位址表示式。名字唯一,不能重定義。功能:彙編時該名字用表示式的值代替。名字在語句中作直接運算元使用, 必須先定義後使用

③串等價語句

形式:名字equ《字串》

其中名字可以用另外的字串定義,但不能用等號定義,也不能作為數值等價語句中的名字。功能:彙編時該名字用其字串代替。

<2>巨集定義

形式:名字 macro[agr1,agr2,……]

語句串endm

說明:其中的macro和endm是保留字,『名字』是巨集定義的名字,它可以看作巨集命令語句的操作符,實現macro和endm之間語句串的功能。agri(i=1,2,…..

)是形式引數,簡稱形參。

<3>巨集呼叫語句

形式:巨集定義名字[a1,a2,…..]

其中巨集定義名字是macro定義的名字,「a1,a2,….」是巨集呼叫中的實在引數,簡稱實參。它與macro定義的形參相對應。可以是:符號、常數、暫存器等。

<4>巨集展開,巨集呼叫語句的展開稱為巨集展開。巨集呼叫語句是巨集定義的應用,彙編時實現巨集展開,即把巨集定義的語句串按巨集呼叫提供的實參展開,嵌入到巨集呼叫語句的下面,從而改動了源程

<5>巨集巢狀就是巨集定義中允許使用的巨集呼叫,但所呼叫的巨集指令必須先定義過,巨集定義中還可以包含巨集定義。

<6>巨集定義中的標號與變數,巨集定義中的local是用來定義區域性變數的/標號的,在彙編時將對這些區域性變數/標號賦以新值編號以避免重複,格式:local 參數列,local應為巨集體中的第一條語句,參數列為巨集體中用到的變數/標號。

組合語言總結

組合語言學習體會 大一大二期間學寫了一些高階語言,如c語言和c 在對一些實際問題的程式設計處理上使用這些高階語言顯得很是方便。於是在剛接觸這門課的時候就對其實用性產生了懷疑和一些的牴觸情緒。再學習了一段時間後,雖然對一些繁雜的指令有些討厭 但還是硬著頭皮學著下來了 但後來再經過實驗課的學習感覺組合語...

組合語言 第3章巨集組合語言

第三章巨集組合語言 一 巨集組合語言格式 3.1.1 指令語句格式 指令語句的一般格式如下 標號 指令助記符運算元 注釋 1 標號 標號是機器指令語句存放位址的符號表示,代表該指令目標 的第乙個位元組位址,後面必須緊跟冒號 2 指令助記符 指令助記符為語句的核心成分,表示了該語句的操作型別。3 運算...

組合語言程式設計

實驗報告 軟體學院 一 實驗目的與意義 理解並熟練掌握組合語言程式設計過程中的編輯 彙編 鏈結和除錯等各個步驟,提高對彙編課程內容的理解和組合語言的掌握,通過上機練習加深對課程內容的理解和掌握。通過組合語言編制的程式上機除錯 執行檢驗程式設計是否正確。熟悉和掌握編輯 彙編 連線和除錯四個實用程式的使...