條件處理
This presentation is the property of its rightful owner.
Sponsored Links
1 / 28

條件處理 PowerPoint PPT Presentation


  • 52 Views
  • Uploaded on
  • Presentation posted in: General

條件處理. CPU 旗標. 1. 結果為零,則設定零值旗標 。 2. 運算結果太大或太小, 設定 進位旗標 。 3. 符號旗標是目的運算元高位元的複製。 4. 運算為無效的結果, 設定 溢位旗標 。 5.當運算元中低位元組裡其值為 一的位元為偶數個時, 設定 同位旗標 就。. CPU 旗標. 當運算的 結果為零,則設定零值旗標 。 如: AX=1 時 SUBAX,1; AX=0 ; ZF=1. CPU 旗標. 當指令所產生的目的 運算元之結果太大或太小時,進位旗標 會被設定。 如: AX=0FFFFh

Download Presentation

條件處理

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


5690706

條件處理


5690706

CPU旗標

1. 結果為零,則設定零值旗標。

2. 運算結果太大或太小,設定進位旗標。

3.符號旗標是目的運算元高位元的複製。

4.運算為無效的結果,設定溢位旗標。

5.當運算元中低位元組裡其值為一的位元為偶數個時,設定同位旗標就。


5690706

CPU旗標

當運算的結果為零,則設定零值旗標。

如: AX=1 時

SUBAX,1; AX=0

; ZF=1


5690706

CPU旗標

當指令所產生的目的運算元之結果太大或太小時,進位旗標會被設定。

如:AX=0FFFFh

ADDAX, 1; AX=10000h

; CF=1


5690706

CPU旗標

符號旗標是目的運算元高位元的複製,若符號旗標被設定表示為負,被清除則為正。

如:AX=01

MOV AX, 08000h; AX=08000h

; SF=1


5690706

CPU旗標

當指令產生無效的有號結果,則溢位旗標就會被設定。

如: AX=07FFFh ; >0

ADD AX,1h; AX=08000h <0

; OF=1


5690706

CPU旗標

當指令造成目的運算元中低位元組裡其值為一的位元為偶數個時,同位旗標就會被設定。

如: AX=0A5A5H, AL=A5h=10100101

MOV AX,AX; PF=1,偶數個1


5690706

AND指令

  • AND指令完成兩運算元中,相關對應位元間的AND布林運算(按位元的 ( bitwise ) )並且將結果存放於目的運算元 。


And cont

AND指令(cont.)

  • 按位元的 ( bitwise ):相關對應位元間的運算

  • 指令格式:

    AND 目的運算元,來源運算元

0100 0001

0110 0001

1110 0001


5690706

將字元轉換成大寫字母

  • AND指令提供了一個簡單的方法將字母從小寫轉換成大寫。

  • 大寫字母 (A,B,C,…Z)ASCII碼(41h,42h….)

  • 小寫字母 (a,b,c,…z)ASCII碼(61h,62h….)

41h0100 0001

61h0110 0001

AND mask1101 1111

61h and mask0100 0001=41h


5690706

OR指令

  • OR指令完成兩個運算元間,每對相對應位元的OR布林運算,並且將結果存放於目的運算元:指令格式:

    OR 目的運算元,來源運算元

61h0100 0001

41h0110 0001

OR mask0010 0000

41h OR mask0110 0001=61h


5690706

XOR指令

  • XOR指令完成兩運算元間相對應位元的互斥或(exclusive-OR)布林運算並且將結果存放於目的運算元。

    指令格式:

    XOR 目的運算元,來源運算元


Cpu and or

清除或設定個別CPU旗標(and, or)

  •  設定清除零旗標

    andal,0;ZF=1

    oral,1;ZF=0

  •  設定清除符號旗標

    oral,80h;SF=1

    andal,7Fh;SF=0


5690706

清除或設定個別CPU旗標(設定、運算)

  • 設定清除進位旗標

    stc;CF=1

    clc;CF=0

  • 設定清溢位旗標

    moval,7Fh

    incal;OF=1

    oreax,0;OF=0


5690706

運算指令

條件成立?

條件跳越

  • 根據運算結果更改程式流程, 提供此功能之指令稱條件跳越指令

  • 一般應用條件跳越指令完成分支流程圖(基本條件結構)


5690706

運算指令

條件成立?

條件結構

  • 在IA-32指令集中没有高階的邏輯結構,但無論多複雜的結構都能使用比較(comparisons)和跳越(jumps)的組合來完成。

cmpal,0

Jz L1

L1:

andal,B0h

Jnz L2

L2:

CMP

Jcond


Jcond

條件成立?

Jcond指令

  • 當旗標條件為true時條件跳越指令會分支到目的標號(destination label),若旗標條件為false時則會執行緊接在條件跳越之後的指令。

Jcond destination(是)

; 否


Jcond cont

Jcond指令(cont.)

  • 限制:要求跳越的目的地必須是現行程序內的標號,能以宣告全域標號(其後接::)來免除這個限制

  • 跳越的範圍必須是下一個指令偏移量的-128到+127位元組內。 


5690706

運算指令

條件成立?

使用CMP指令

  • 最常使用之運算指令為CMP (因為不會更改運算元數值)

  • 如:

CMPAX,5 ; AX=5?

JE L1

CMPAX,6 ; AX<6?

JLL1

CMPAX,4 ; AX>4?

JGL1


5690706

條件結構

  • 區塊結構IF敘述

  • IF (複合運算式)

  • WHILE迴圈


5690706

開始

運算式

敘述2

敘述1

結束

區塊結構IF敘述

if(運算式)

敘述列表1

else

敘述列表2

If (op1==op2)

{

X=1;

Y=2;

}


If cont

開始

運算式

敘述2

敘述1

結束

區塊結構IF敘述(cont.)

範例1

  • 使用Java/C++語法,

    如果 op1和op2相等則執行兩個指定敘述: 

If (op1==op2)

{

X=1;

Y=2;

}


5690706

CMASM

MOVeax, op1

CMPeax, op2

JEL1

JMPL2

L1:

mov X,1

mov Y,2

L2:

If (op1==op2)

{

X=1;

Y=2;

}


5690706

開始

運算式

敘述2

敘述1

結束

複合運算式

  • 右圖之運算式除基本之判斷運算外, 也可是多層級之複合運算式, 如:

    (a1>b1)AND (b1>c1)

    (a1>b1) OR (b1>c1)


5690706

AND邏輯運算子

  • If(a1>b1)AND(b1>c1)

    第一個運算式

    第二個運算式

CMPal, bl

JAL1

JMPNEXT

L1:

CMPbl, cl

JAL2

JMPNEXT

L2:

movX,1

Next:


5690706

OR邏輯運算子

  • If(a1>b1)OR(b1>c1)

    第一個運算式

    第二個運算式

CMPal, bl

JAL1

CMPbl, cl

JBENEXT

L1:

movX,1

Next:

(below equal)

=JA不成立


While

WHILE迴圈

  • WHILE 結構在執行一區塊的敘述前會先測試一條件是否成立,只要條件保持成立那麼這些敘述就會重複執行這些敘述,以下的使用C++所寫的迴圈

    while (val1<val2){

    val1++;

    val2--;

    }


While cont

WHILE迴圈(cont.)

while (val1<val2)

{

val1++;

val2--;

}

Mov eax, val1

while:

CMP eax,val2

JNLendwhile

INCeax

DECval2

JMPwhile

endwhile:

MOVval1, eax


  • Login