組合語言的程式格式

2021-08-01 23:13:47 字數 4757 閱讀 4736

1、

程式執行步驟及生成的檔案

編輯程式->匯程式設計序->連線程式

2、偽操作(偽指令)directives

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

3、 處理器選擇偽操作:

.8086 選擇 8086 指令系統

段定義偽操作:

data segment ; 定義資料段

… data ends

;—————————————-

extra segment ; 定義附加段

… extra ends

;—————————————-

code segment ; 定義**段

assume cs:code, ds:data, es:extra

start:

mov ax, data

mov ds, ax ; 段位址 ->段暫存器

… code ends

end start

4、 ……

code segment

main proc far

assume ……

start:

push ds

mov ax, 0

push ax

…… ret

main endp

code ends

end start

5、 ……

code segment

main proc far

assume ……

start:

…… ……

mov ax,4c00h

int 21h

main endp

code ends

end start

6、匯程式設計序基本元素

字元常量

『a』,「d」

字串常量

『abc』「goodnight 「

整數常量

[ digits [radix]

26,420,0a3h

7、組合語言基本元素

保留字:

8、 偽指令:

彙編編譯器語法格式的一部分,與intel指令集無關

指令:標號(可選)+指令助記符(必需)+運算元(通常需要)+注釋(可選)

9、**標號:

**區的標號必須以冒號結尾,常被用做跳轉和迴圈指令的目標位址

target:

mov ax,bx

… jmp targer

也可以同一行:

target :mov ax,bx

資料標號:

資料區,不用冒號

first byte 10

10、

段:程式的基本組織單元

**段:程式的全部可執行指令,通常有乙個或者乙個以上的過程,其中乙個是啟動過程

堆疊段:子程式的引數和區域性變數

資料段:存放變數

11、

private 該段為私有段,在連線時將不與其他同名段合併

預設為 private

12、

格式:

assume 段暫存器:段名 [,段暫存器:段名]

功能:建立段暫存器與段之間的對應關係。該偽指令一般出現在**段中。

data1 segment

a db 1,2,3

data1 ends

code segment

assume ds:data1,cs:code

┆ 其中段暫存器名必須是cs ,ds,es 和ss中的乙個。段名必須是由segment定義的段中的段名。

13、段定義偽操作:

完整的段定義格式舉例

data segment ; 定義資料段

… data ends

;—————————————-

extra segment ; 定義附加段

… extra ends

;—————————————-

code segment ; 定義**段

assume cs:code, ds:data, es:extra

start:

mov ax, data

mov ds, ax ; 段位址->段暫存器

… code ends

end start

14、

段組定義偽操作

段組名 group 資料段名1[,資料段名2……]

15、資料定義及儲存器分配偽操作

[變數名] 助記符 運算元 [ , 運算元 , … ] [ ; 注釋]

db(位元組)、dw (字) 、dd (雙字) 、df(6位元組)、dq(四字)、dt(10位元組)

16、重複說明符dup

repeat_count dup (表示式, 表示式, …, 表示式)

強制屬性操作符 ptr

資料型別 ptr 位址表示式

其中:資料型別是前面所學的各種資料型別,常用的資料型別有:byte、word、dword、near和far等。

為了明確指令中儲存單元的屬性,可把指令「mov [bx], 1h」可改寫成:

mov byte ptr [bx], 1h   

或  mov word ptr [bx], 1h

w1 dw 1234h, 5678h

b1 db 2

db 5

d1 dd 23456789h

…17、label偽操作

符號名 label 型別

其中:常用的型別有byte、word、dword、near和far等

18、表示式賦值偽操作

符號名 equ 表示式

作用是左邊的符號名代表右邊的表示式

組合語言提供了用等號 「=」 來定義符號常數的方法,即可用符號名代表乙個常數。其一般格式如下:

符號名=數值表示式

19、位址計數器與對準偽操作

位址計數器 $ :儲存當前正在彙編的指令的位址

org偽操作

偽指令的作用是:告訴匯程式設計序,本偽指令下面的記憶體變數從該「數值表示式」所指定的位址開始分配。

偶對齊偽指令格式:

even

偽指令的作用是:告訴匯程式設計序(assember),本偽指令下面的記憶體變數從下乙個偶位址單元開始分配

對齊偽指令格式: align num

其中:num必須是2的冪,如:2、4、8和16等。

偽指令的作用是:告訴匯程式設計序,本偽指令下面的記憶體變數必須從下乙個能被num整除的位址開始分配。

20、基數控制偽操作

radix 表示式 ; 規定無標記數的基數

21、

偽指令語句格式如下:

[符號名] 偽指令符 運算元 ;注釋

① 符號名:符號名是偽指令語句的乙個可選項。

② 偽指令符:偽指令符指定匯程式設計序要完成的具體操作,如資料定義偽指令db、dw、dd,段定義偽指令segment,假定偽指令assume等。

③ 運算元:偽指令後面的運算元可以是常數、字串、變數、表示式等,其個數由具體的偽指令決定,各個運算元之間必須以「逗號」分隔。

④ 注釋:偽指令的注釋必須以「;」開始,其作用同指令語句中的注釋部分。如: ……

22、length運算子

格式:length 變數

功能:取出變數所含的資料儲存單元個數。它返回重複操作符dup中的重複數。如果有巢狀的dup,則只返回最外層的重複數;如果沒有操作符dup,則返回1

23、size運算子

格式:size 變數

功能:取出變數所含的資料儲存區大小。其返回值為:length 變數 * type 變數

25、seg 運算子

格式:seg 變數或標號

功能:分離出其後變數或標號所在段的段首址。

26、ptr

格式:型別 ptr 位址表示式

在程式中,我們有時需要對同乙個儲存單元以不同的屬性來訪問,或對一些不確定的儲存屬性需要顯式指定等,這時我們就需要強制屬性操作符ptr。該操作符的作用有點象c語言中的型別強制方法。

27、段操作符28、this

格式:this 資料型別

功能:它為同一儲存單元取另一別名,該別名可具有其自身的資料屬性,但其段位址和偏移量是不變的。其中:資料型別是前面所學的各種資料型別,常用的資料型別有:byte、word、dword、near和far等。

29、high和low30、算符的優先順序

(1) length、size、( )、[ ]、< >

(2):(段超越)

(3)ptr、offset、seg、type、this

(4)high、low

(5)*、/、mod、shl、shr

(6)+、-

(7)eq、ne、lt、le、gt、ge

(8)not

(9)and

(10)or、xor

(11)short

組合語言程式格式

組合語言源程式中的每個語句可以由四項組成,格式如下 name operation operand comment 其中 名字項 name 是指乙個標號或變數。操作項 operation 是乙個操作碼的助記符,它可以是指令 偽指令或巨集指令名。運算元項 operand 由乙個或多個表示式組成,它提供為...

組合語言筆記 記憶體訪問 組合語言程式常用格式

第三章 暫存器 記憶體訪問 3.2 ds和 address 記憶體單元位址,由段位址和偏移位址組成,可以利用mov進行修改,但是不能利用立即數進行修改,需要利用通用暫存器作為中介。對於字的傳送,指定低位位址,高位位元組自動放在高位址單元。3.3 mov sub add指令 兩個運算元,add sub...

組合語言 指令格式

記得前面提到過這個問題,幾句話就給帶過了。為什麼還要囉裡囉嗦的再說一下呢?呵呵,是這樣的,我在看一本彙編的資料時,懷疑上面的乙個語句弄錯了。想知道是不是他的彙編指令 裡包含 印刷錯誤 我想如果是印刷錯誤的話,很可能他的二進位制 跟看得懂的指令碼對不上。那麼我如何自己將那個二進位制 轉換成彙編指令碼呢...