編譯中的test和cmp有什麼區別? 做對了加分!!

發布 科技 2024-02-29
3個回答
  1. 匿名使用者2024-02-06

    一樓的朋友說有點麻煩,但其實解釋起來比較容易。

    1.含義的區別:

    CMP 屬於加法和減法運算的範疇,而 Test 屬於邏輯運算的範疇。

    2.概念上的差異。

    CMP 類似於 SUB,即從目標運算元中減去源運算元,但 SUB 會將結果傳送到目標運算元,而 CMP 不會傳送目標運算元;

    Test 類似於 AND,因為它對兩個運算元執行按位的“AND”運算,但 AND 將結果傳送到目標運算元,而 test 則不傳送。

    3.用法上的差異。

    CMP主要用於比較兩個數字之間的關係,可以比較有符號和無符號數字。 相等的數字影響 ZF 標誌,無符號數字影響 CF 標誌,有符號數字影響 SF 和 OF 標誌。 一般來說,程式跳轉是根據標誌的影響來設定的,即根據不同的條件完成相應的程式片段,類似於高階語言的if-else結構。

    在此訂單之後,所有有條件的轉移訂單都可以使用。

    test 通常用於檢查某些位是否為 1,但您不想更改運算元。 例如,要檢查位 6 中是否有 1 位,al 中是否有位 2,可以使用以下命令:

    測試 AL,01000100B,如果所有兩位均為 0如果 zf 的值為 1,否則為明文,則根據標誌設定的跳轉只能是 jz 或 jnz

    這兩條指令的相似之處在於它們都不影響運算元,而只是通過標誌暫存器的某些位反映操作的結果。

  2. 匿名使用者2024-02-05

    text x,y

    主要功能是 x 和 y 合併,結果不會發回,而是影響標誌位。

    cmp x,y

    函式是 x-y,不發回結果,也會影響標誌位。

  3. 匿名使用者2024-02-04

    樓下最喜歡的說很不錯,但個人覺得對於初學者來說有點過分了 題主問測試和cmp

    有什麼區別,我就從這個開始。

    CMP的功能:判斷兩個數是否相等 示例:cmp ax ax 等於 zf,如果不相等,zf 為 0

    test的(常用)函式:判斷暫存器內容是否為零 示例:test ah ah if ah is o then zf is 1 if ah is 0 zf is 0

    如果是題主的問題,以上就足夠了。 那麼接下來的事情是給那些想閱讀以上內容並想閱讀以下內容的學生。

    zf(zero flag) 中文:zero flager 功能:反映操作結果 當操作結果為零時,zf為1,當操作結果為1時,zf為0(這個很容易理解,因為是零flagor,表示有零作為1)。

    CMP 指令原理(減去兩個運算元,但不返回值,只修改標誌):例如 cmp ax bx

    如果 ax-bx 等於 0,則 zf 為 1

    test 指令的原理(兩個運算元一起操作,但不返回值,只修改標誌位):例如 test ah ah

    然後在此指令中,結果始終為 0,zf 為 1

相關回答
9個回答2024-02-29

雙絞線和訊號通過差流傳輸,但隨著資料量的增加,如果速率超過100Mbps,雙絞線的衰減會越來越大,換句話說,如果要進行超過1km的500Mbps的資料傳輸,雙絞線是不能勝任的,必須使用光纖進行通訊; >>>More

11個回答2024-02-29

跳躍的要領一定要記住雙腳同時落地,這樣落地後就可以用任何乙隻腳作為樞軸腳,這樣跳躍後的凝聚力動作就有了更多的選擇空間,也更加多樣化。 跳步其實就是乙個停止動作,在運球中跳躍,在跳步中完成從運球到持球的過程。 跳躍停止有兩種,雙腳連續著地和同時著地的區別。 >>>More

8個回答2024-02-29

瓜州的京口山和中山被幾座山隔開。 >>>More

4個回答2024-02-29

過去式總和過去分詞區別在於: >>>More

18個回答2024-02-29

事實上,每個人都幻想著自己的愛情故事是什麼樣的。 當我們年輕無知的時候,在知道了什麼是愛之後,我們可能會幻想我們的愛情是什麼樣子的。 而我們理想中的愛情,就像電視劇集裡演繹的一樣,一定有乙個驚心動魄的開端,乙個轟轟烈烈的愛情故事。 >>>More