彙編cmp比較指令的小問題

2025-07-20 23:10:16 字數 3741 閱讀 7578

彙編add指令運算元問題

1樓:du知道君

具體的順序現在有2種,如果是inter 彙編的話 後面的是源運算元,前面的是目的運算元 at&t彙編的話恰恰相反 實際上這個問題取決於彙編器,不過的彙編器決定了不同的格式,如果是微控制器裡面的話 還有更多的區別呢。

關於彙編指令cmp?(簡單題)

2樓:湯旺河邊

(1)cmp 15,bx

立即數只能用作源運算元,這裡用作目的運算元(2)cmp x,25

正確(3)cmp x,y

兩個運算元不能都是記憶體單元。

4)cmp ax,x

若x定義為字型別,正確;否則,錯誤,型別不匹配。

3樓:紅塵魯賓遜

(1) 目標運算元不能為立即數。

3) 不能同時為儲存器。

翻過教科書確認的,保證正確。

4樓:網友

(3)cmp x,y

錯誤,同為記憶體數,不能比。

彙編cmp指令的用法 大神請進

5樓:網友

舉個例子吧:

假設現在ax暫存器中的數是0002h,bx暫存器中的數是0003h。

執行的指令是:cmp ax, bx

執行這條指令時,先做用ax中的數減去bx中的數的減法運算。

列出二進位運算式子:

0000 0000 0000 0011___借位1) 1111 1111 1111 1111所以,運算結果是 0ffffh

根據這個結果,各標誌位將會被分別設定成以下值:

cf=1,因為有借位。

of=0,未溢位。

sf=1,結果是負數。

zf=0,結果不全是零。

還有af, pf等也會相應地被設定。

cmp 比較指令做了減法運算以後,根據運算結果設定了各個標誌位。

標誌位設定過以後,0ffffh這個減法運算的結果就沒用了,它被丟棄,不儲存。

執行過了cmp指令以後,除了cf,zf,of, sf,等各個標誌位變化外,其它的資料不變。

對照普通的減法指令 sub ax, bx,它們的區別就在於:

sub指令執行過以後,原來ax中的被減數丟了,被換成了減法的結果。

cmp指令執行過以後,被減數、減數都保持原樣不變。

6樓:網友

就是說,標誌暫存器裡有很多資訊,始終記錄上次計算是否溢位,得0,最高位退位,最高位進位等,cmp會對a,b相減,後面的指令(je,ja,jb,jna,jnb,jne等)就可以根據標誌判斷了。比如如果得0,就是a=b。最高位退位,就是結果小於0,就是a

7樓:網友

例如:假設ax暫存器編號0002h,bx暫存器編號0003h。

執行的指令:cmp ax,bx

該指令執行數減的減,在bx ax中的數字。

列表二進位算術公式:

0000 0000 0000 0011___借)1111 1111 1111 1111/>所以,運算結果為0ffffh

根據這個結果,標誌位將被分別設定為以下值:

cf = 1,因為借。

0 ,不會溢位。

sf = 1,其結果是負數。

zf = 0時,結果是不是所有的零。

af,pf,進行相應的設定。

cmp比較指令做減法,每個標誌都被設定,根據操作的結果。

標誌設定,0ffffh減法的結果是沒有用的,它會被丟棄,不會被儲存。

cmp指令的執行,除了cf,zf,of,sf,和其他各種標誌的變化,和其他資料不變。

控制的普通減法指令sub ax,bx,它們之間的區別是:ax被減數的sub指令執行後,失去了和被替換的減法結果。

cmp指令執行,減數,減數完整的不變。

彙編中的cmp(cmpsb/cmpsw)指令,是如何比較字元的大小的?

8樓:做而論道

兩者相減,產生 cf 標誌。

彙編比較指令為什麼是cmp al,...而不是 cmp ax,...?

9樓:哥德堡快遞

同樣的cmp,al是8位,ax是16位,eax是32位,rax是64位。。。

根據需求選用,沒有可比性。

彙編中的test和cmp有什麼區別?答對有加分!!!

10樓:網友

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

1.意義上的區別:

cmp屬於加減運算的範疇,而test屬於邏輯運算的範疇。

2.概念上的區別。

cmp與sub類似,即從目的運算元減去源運算元,但sub會將運算結果送至目的運算元,而cmp不會送至目的運算元;

test則與and類似,即將兩個運算元進行按位「與」運算,但and將運算結果送至目的運算元,而test則不會。

3.用法上的區別。

cmp主要用於比較兩數的關係,可以在有符號數和無符號數之間進行比較。兩數相等影響zf標誌,無符號數影響cf標誌,有符號數影響sf和of標誌。一般根據標誌位的影響設定程式跳轉,即根據不同的條件完成對應的程式片段,類似於高階語言的if-else結構。

所有的有條件轉移指令都可以用在這條指令之後。

test通常用於檢測某些位是否為1,但又不希望改變運算元的場合。比如檢查al中的位6和位2是否有一位為1,可以用如下指令:

test al,01000100b,如果這兩個位全為0.則zf的值為1,否則清0,那麼根據標誌位設定的跳轉就只能為jz或jnz

這兩條指令的相同點是都不會影響運算元,只是通過標誌暫存器的某些位反映運算結果。

11樓:網友

text x,y

主要功能是x與y相與,結果不送回,但是影響標誌位。

cmp x,y

功能是x-y,不送回結果,同樣影響標誌位…

12樓:可愛的黃蝴蝶

樓下贊最多的說的是非常好的,但是個人感覺對於初學者有點過多了 題主問的是test和cmp

有什麼區別 我就從這說吧。

cmp的作用:判斷兩數是否相等 例:cmp ax ax 相等的話 zf為1 不等的話 zf為0

test的(常用)作用:判斷暫存器內容是否為零 例: test ah ah 如果ah為o 則zf為1 如果ah不為0的話,zf為0

如果是題主的問題,上文足夠了。那麼接下來就是給看完上文想看下文的同學們準備的了。

zf (zero flag) 中文:零標誌器 作用:反映運算結果 運算結果為零時,zf為1,運算結果為1時,zf為0(這個好理解,因為是零標誌器嘛,意思不就是有零為1嘛)

cmp 指令原理 (兩個運算元做減法,但不返回值,僅修改標誌位): 例 cmp ax bx

如果ax-bx等於0 那麼zf為1

test指令原理(將兩個運算元做與運算,但不返回值,僅修改標誌位):例 test ah ah

那麼在這個指令中,計算結果恆為0,zf為1

求解彙編中cmp比較的意思

13樓:

//a in %rdi, b in %rsicmpq %rsi,%rdi

雖然引數列出的順序先是%rsi(b)再是%rdi(a),實際上比較的是a和b。

深入理解計算機系統 第三版 原話。

即原題是 edx大於ecx才跳。

幾個彙編的問題 1 8086組合語言指令由幾部分組成 各部分的作用是什麼

1.8086組合語言指令由標號 操作碼 運算元和註釋組成,其中標號和註釋可以省略,操作碼指出指令要過盛的功能,運算元指出完成的物件.2.變數和標號的區別是變數由偽指令定義,標號是指令前面的符號,變數也偽指令定義符之間由空格分隔,標號與指令助詞符之間由冒號分隔。3.開發組合語言源程式的主要步驟有分析問...

jne的彙編指令是什麼,這條彙編指令是什麼意思?

彙編指令是組合語言中使用的一些操作符和助記符,還包括一些偽指令 如assume,end 用於告訴彙編程式如何進行彙編的指令,它既不控制機器的操作也不被彙編成機器 只能為彙編程式所識別並指導彙編如何進行。jne是彙編指令中的一個條件轉移指令。當zf 0,轉至標號處執行。1.分類 彙編指令按功能可分為以...

彙編中的TEST指令

test執行的就是and的指令,只不過不會儲存and執行的結果,而是根據and的結果設定flags暫存器的各種標誌 test al,08h 就是測試al的第4位是不是1,8h 0000 1000 同理test ax,0200h 測試ax的第10位,0200h 0000 0010 0000 0000 ...