組合語言源程式中的每個語句可以由四項組成,格式如下:
[name] operation operand [ ;comment]
其中:名字項(name)是指乙個標號或變數。
操作項(operation)是乙個操作碼的助記符,它可以是指令、偽指令或巨集指令名。
運算元項(operand)由乙個或多個表示式組成,它提供為執行所要求的操作而需要的資訊。運算元項可以是常數、暫存器、標號、變數或由表示式組成。
注釋項(comment)用來說明程式或語句的功能。";"為識別注釋項的開始。";"也可以從一行的第乙個字元開始,此時整行都是注釋,常用來說明下面一段程式的功能。
4.3.1 名字項
源程式中用下列字元來表示名字:字母a~z
數字0~9
專用字元 ?、·、@ 、-、$
4.3.2 操作項
操作項可以是指令、偽指令或巨集指令的助記符。
對於指令,匯程式設計序將其翻譯為機器語言指令。對於偽指令,匯程式設計序將根據其所要求的功能進行處理。對於巨集指令,則將根據其定義展開。巨集指令在第七章中將會專門論述。
4.3.3操數作項
運算元項由乙個或多個表示式組成,多個運算元項之間一般用逗號分開。
對於指令,運算元項一般給出運算元位址,它們可能有乙個,或二個,或三個,或乙個也沒有。對於偽操作或巨集指令,則給出它們所要求的引數。
運算元項可以是常數、暫存器、標號、變數或由表示式組成。
一.算術操作符
算術操作符有+、—、*、/ 和mod。
例:mov dx,block+(6-1)*2
二.邏輯與移位操作符
邏輯操作符有:and(與)、or(或)、xor(異或)、not(非)。移位操作符有shl和shr。
例:and dx,port_val and 0feh
三.關係操作符
關係操作符有:eq(相等)、ne(不等)、lt(小於)、gt(大於)、le(小於或等於)、ge(大於或等於)。
關係操作符的兩個運算元必須都是數字或是同一段內的兩個儲存器位址。計算的結果應為邏輯值:結果為真,表示為0ffffh;結果為假,則表示為0。
例:mov bx,((port_val lt 5) and 20) or ((port_val ge 5) and 30)
四.數值回送(value_returning)操作符
數值回送操作符有:type、length、size、offset、seg等。數值操作符把一些特徵或儲存器位址的一部分作為數值回送。
操作符格式
用法
例
fees dw 100 dup(0)
type
型別屬性
type expression
回送代表該標號型別的數值.
db為1,dw為2,dd為4,df為6,dq為8,
dt為10;near為-1,far為-2;常數為0
add si,type fees
彙編後為add si,2
length
長度屬性
length variable
對於dup回送分配給該變數的單元數
對於其他情況則送1
mov cx,length fees
彙編後為mov cx,100
size
大小屬性
size vatiable
回送分配給該變數的位元組數
此值是length值和type值的乘積
mov cx,size fees
彙編後為mov cx,200
offset
offset variable或label
回送變數或標號的偏移位址
mov bx,offset opre
seg
seg variable或lable
回送變數或標號的段位址值
mov bx,seg opre
五.屬性操作符
操作符格式
用法
例
ptrtype ptr expression
來給已分配的儲存位址(用符號位址表示)賦予另一種
屬性,使該位址具有另一種型別。
mov byte ptr [bx],5
段操作符
段暫存器∶位址表示式
段名∶位址表示式
組名∶位址表示式
用來表示乙個標量、變數或位址表示式的段屬性。
mov ax,es:[bx+si]
short
用來修飾jmp指令中轉向位址的屬性,指出轉向位址
是在下一條指令位址的±127個位元組範圍之內。
jmp short tag
this
this attribute或type
可以象ptr一樣建立乙個指定型別(byte、word、
dword)或指定距離(near或far)的位址運算元。
該運算元的段位址和偏移位址與下乙個儲存單元位址相同。
start equ this far
mov cx, 100
這樣,mov指令有乙個far屬性的符號位址start,這就允許其他段的jmp指令直接跳轉到start來。
high
和low
稱為位元組分離操作符,它接收乙個數或位址表示式,
high取其高位位元組,low取其低位位元組。
const equ 0abcdh
mov ah, high const
彙編成 mov ah, 0abh
mov ah, low const
彙編成 mov ah, 0cdh
highword
和lowword
稱為位元組分離操作符,它接收乙個數或位址表示式,highword取其高位位元組,lowword取其低位位元組。
操作符的優先級別:(
操作符的優先級別從高到低排列如下)
在圓括號中的項,方括號中的項,結構變數(變數,字段。),然後是length、size、width和mask。4.3.4注釋項名:(段取代)。
ptr,offset,seg,type,this及段操作符。
high和low。
乘法和除法:*,/,mod。
加法和減法:+,-。
關係操作:eq,ne,lt,le,gt,ge。
邏輯:not。
邏輯:and。
邏輯:or,xor。
short。
用來說明程式或語句的功能。";"為識別注釋項的開始。";"也可以從一行的第乙個字元開始,此時整行都是注釋,常用來說明下面一段程式的功能。完整段定義格式
簡化段定義格式
組合語言的程式格式
1 程式執行步驟及生成的檔案 編輯程式 匯程式設計序 連線程式 2 偽操作 偽指令 directives 偽操作是匯程式設計序對源程式進行彙編時處理的操作,完成處理器選擇 儲存模式定義 資料定義 儲存器分配 指示程式開始結束等功能。3 處理器選擇偽操作 8086 選擇 8086 指令系統 段定義偽操...
組合語言筆記 記憶體訪問 組合語言程式常用格式
第三章 暫存器 記憶體訪問 3.2 ds和 address 記憶體單元位址,由段位址和偏移位址組成,可以利用mov進行修改,但是不能利用立即數進行修改,需要利用通用暫存器作為中介。對於字的傳送,指定低位位址,高位位元組自動放在高位址單元。3.3 mov sub add指令 兩個運算元,add sub...
組合語言 指令格式
記得前面提到過這個問題,幾句話就給帶過了。為什麼還要囉裡囉嗦的再說一下呢?呵呵,是這樣的,我在看一本彙編的資料時,懷疑上面的乙個語句弄錯了。想知道是不是他的彙編指令 裡包含 印刷錯誤 我想如果是印刷錯誤的話,很可能他的二進位制 跟看得懂的指令碼對不上。那麼我如何自己將那個二進位制 轉換成彙編指令碼呢...