if condition ;以英文「句號」開頭
指令序列 ;條件"condition"成立時所執行的指令序列
.endif
格式2:
.ifcondition
指令序列1
.else
指令序列2 ;條件"condition"不成立時所執行的指令序列
.endif
格式3:
.ifcondition1
指令序列1
.elseifcondition2
指令序列2 ;條件"condition2"成立時所執行的指令序列
.endif
其中:條件表示式「condition」的書寫方式與c語言中條件表示式的書寫方式相似,也可用括號來組成複雜的條件表示式。
條件表示式中可用的操作符有:==(等於)、!=(不等)、>(大於)、>=(大於等於)、<(小於)、<=(小於等於)、&(位操作與)、!(邏輯非)、&&(邏輯與)、||(邏輯或)等。
若在條件表示式中檢測標誌位的資訊,則可以使用的符號名有:carry?(相當於cf==1)、overflow?(of==1)、parity?(pf==1)、sign?(sf==1)、zero?(zf==1)等。例如:
.if carry? && ax != bx ;檢測cf==1且ax!=bx是否成立
;組合語言指令序列
.endif
在指令序列中,還可再含有其它的.if偽指令,即:允許巢狀。偽指令.elseif引導出另乙個二叉分支,但它不能作偽指令塊的第乙個偽指令。
匯程式設計序在對「條件表示式」進行**轉換時將進行**優化處理,以便盡可能生成最好的指令**。如:
.if ax == 0
匯程式設計序會把它轉換為指令「or ax, ax」,而不是「cmp ax, 0」,因為前者比後者更好,而不是簡單直接地轉換為後者。
如果用偽指令來書寫分支結構,那麼,例6.5的**段部分就可寫成如下程式段:
…mov
al, char1
.if al>='a' && al<='z'
;語句象c語言語句嗎?
sub char1, 20h
.endif
…
彙編偽指令注釋
彙編偽指令注釋 1 ds 預留儲存區命令 格式 標號 ds 表示式值 其功能是從指定位址開始,定義乙個儲存區,以備源程式使用。儲存區預留的儲存單元數由表示式的值決定。tmp ds 1 從標號tep位址處開始保留1個儲存單元 位元組 2 bit 定義位命令 其功能用於給字元名稱定義位位址。spk bi...
彙編偽指令注釋
1 ds 預留儲存區命令 格式 標號 ds 表示式值 其功能是從指定位址開始,定義乙個儲存區,以備源程式使用。儲存區預留的儲存單元數由表示式的值決定。tmp ds 1 從標號tep位址處開始保留1個儲存單元 位元組 2 bit 定義位命令 其功能用於給字元名稱定義位位址。spk bit p3.7 經...
彙編assume 偽指令
這幾天在看王爽大大的 組合語言。對於assume偽指令卻很是不懂。比如已經定義了assume cs code,ds data 但用debug觀察的時候,發現ds段暫存器卻沒有相關聯的資料。必須在cs中寫明 mov ax,data mov ds,ax 然後才能發現ds中有正確的資料。於是疑惑,assu...