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