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