偽指令實現分支結構

2021-06-21 11:33:49 字數 1085 閱讀 3784

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...