1樓:匿名使用者
因為,現實世界的對稱性是有限的,不會有無限的對稱,組合語言,只是用來代替機器碼的。
比如,加法與減法是一對關係極為密切的運算,但加法中兩個數可以交換次序(交換律),減法就不行。
二進位制數的左移與右移也類似。
算術移位與邏輯移位,既有相同點,也有不同點。
相同點是:在不溢位的時候,都是左移等於乘以2,右移等於除以2(忽略餘數)。
不同點是:算術移位是將資料看成是有正有負的補碼數時候的運算,邏輯移位是將資料看成是無符號數。
左移時,算術移位和邏輯移位最右端都是用0補充,操作相同,所以指令等價。
右移時,兩者最左端用什麼數補充的情況不一樣,所以指令不同。
若論根源,這與補碼的編碼方法跟原碼的關係有關。
如果不是使用補碼,而是使用原碼、反碼等其它編碼方式,指令功能就會不一樣。
2樓:
組合語言,將機器指令用符號化,主要目的之一,就是便於閱讀、編寫和記憶。
為了方便記憶和使用,有很多指令,是有多種寫法的。
shl和sal是這樣,jc和jb也是這樣,jg與jnle也是。
它們都是同一條機器指令,使用者可以按他們在不同應用場合下對其功能的理解用對應的英文縮寫。
目的是易記、易讀。
它們就如同生活語言中的同義詞。
3樓:做而論道
組合語言,是人們研究出來,用來代替機器碼程式設計的。
現在用的 80x86 組合語言的編譯軟體,出自微軟公司。
當年,比爾·蓋茨,還十分年輕,手下的程式設計師,牛,跳槽也是常事。
這個人,想用 shl,那個人,說用 sal。
蓋茨不得罪人,和稀泥,兩個詞,就都流傳下來了。
像喬布斯,當年,就太強勢了,反而,被驅逐出去了。
8086彙編中,shl和sal為什麼是一樣的而shr和sar為什麼是不一樣的?也就是邏輯左移右移跟
4樓:匿名使用者
算術右移和邏輯右移對最高位的填充不同。算術右移填充sf,邏輯右移填充0吧
5樓:
現實世界的對稱性是有限的,不會有無限的對稱。
比如,加法與減法是一對關係極為密切的運算,但加法中兩個數可以交換次序(交換律),減法就不行。
二進位制數的左移與右移也類似。
算術移位與邏輯移位,既有相同點,也有不同點。
相同點是:在不溢位的時候,都是左移等於乘以2,右移等於除以2(忽略餘數)。
不同點是:算術移位是將資料看成是有正有負的補碼數時候的運算,邏輯移位是將資料看成是無符號數。
左移時,算術移位和邏輯移位最右端都是用0補充,操作相同,所以指令等價。
右移時,兩者最左端用什麼數補充的情況不一樣,所以指令不同。
若論根源,這與補碼的編碼方法跟原碼的關係有關。
如果不是使用補碼,而是使用原碼、反碼等其它編碼方式,指令功能就會不一樣。
組合語言中 sal(算術左移指令)和shl(邏輯左移指令)指令的區別?
6樓:匿名使用者
算術左移需要對符號位進行擴充套件,即最高位為符號位時,如果左移高位需要使用符號位的值填充,負數(補碼)就用1填充,正數就用0填充;
邏輯左移不考慮符號位,直接在高位補0即可。
而右移就不存在這種區別。
7樓:黃米米米米米
算術用於帶符號數運算,邏輯用於不帶的。操作沒區別。都是最高位入cf最低位補0
8樓:匿名使用者
組合語言中 sal(算術左移指令)和shl(邏輯左移指令)指令的定址方式、控制移位方式等都一樣,區別其實只有一處:
sal算術移位指令在執行時,實際上把運算元看成有符號數進行移位,最高位符號位移入cf,但本身保持原值;其餘位順序左移,次高位被捨棄。
shl邏輯移位指令在執行時,實際上把運算元看成無符號數進行移位,所有位順序左移,最高位移入cf。
舉例如下:
mov ax,8001h;(ax)=1000 0000 0000 0001b
sal ax,1 ;(ax)=1000 0000 0000 0010b
mov ax,8001h;(ax)=1000 0000 0000 0001b
shl ax,1 ;(ax)=0000 0000 0000 0010b
9樓:id雞蛋炒韭菜
shl不考慮進位
sal考慮進位
組合語言中 “sal”(算術左移指令)和“shl”(邏輯左移指令)指令有什麼區別?
10樓:匿名使用者
組合語言中 sal(算術左移指令)和shl(邏輯左移指令)指令的定址方式、控制移位方式等都一內樣,區別其實只有一處:容
sal算術移位指令在執行時,實際上把運算元看成有符號數進行移位,最高位符號位移入cf,但本身保持原值;其餘位順序左移,次高位被捨棄。
shl邏輯移位指令在執行時,實際上把運算元看成無符號數進行移位,所有位順序左移,最高位移入cf。
舉例如下:
mov ax,8001h;(ax)=1000 0000 0000 0001b
sal ax,1 ;(ax)=1000 0000 0000 0010b
mov ax,8001h;(ax)=1000 0000 0000 0001b
shl ax,1 ;(ax)=0000 0000 0000 0010b
sal和shl有什麼區別?
11樓:諮詢霍老師
shl,抄sal分別是邏輯左移和算術左移,執行結果是一樣的,都是資料往左移動,然後在右邊補零;
shr是邏輯右移,資料往右移動,在左邊補零。如:1000 0000->0010 0000(邏輯右移兩位)
sar是算術右移,比較特殊。他的最高位一直是不變的。如1000 0000算術右移7位後就成了1111 1111.
12樓:千里3貓
sal可看做是有符號數的移位(符號位不變)
shl可看做無符號數的移位。
以上都為左移位
shr,sar,sal,shl區別
13樓:招瑜馬妤
shl,sal分別是邏輯左移bai和算術du左移,執行結果zhi是一樣的,都是資料往左dao移動,然後在右邊補零專;
shr是邏輯右移,資料往屬右移動,在左邊補零。如:10000000->0010
0000(邏輯右移兩位)
sar是算術右移,比較特殊。他的最高位一直是不變的。如10000000算術右移7位後就成了1111
1111.
14樓:匿名使用者
shl和baisal事實際沒有區別,移動結du果都是一樣的,zhishl是邏輯左移dao,sal,演算法左移,它們都內是向左移動幾位,最右就
容補幾個0比如 shl ax,cl ;ax=1111 1111b cl=4 ,移動後ax=1111 0000sal ax,cl ;ax=0101 1100 cl=5移動後 ax=1000 0000 shr是邏輯右往,向右移動幾位,最左邊(即最高位補0)比如 shr ax, cl ;ax=1101 1010 cx=3 移動後ax=0001 1011 sar是演算法右移,向右移動幾位,最左邊第一位保持,其他補0sar ax, cl ax=11 00 1111,cx=5移動後ax= 1000 0110sar ax,cl ax=0011 1111 cx=3 移動後 ax= 0 00 00111
15樓:匿名使用者
樓上覆說的對,shl和sal,左制移的操作,效果都是一樣的(shl和sal的機器碼都是相同的)
sar和shr的主要區別在於,向右移動時,sar會根據最高為是否為1來擴充套件符號位,shr只把移出來的位補0
比如 -1 的16位二進位制是1111 1111mov ax, -1
sar ax, 1 ; ax還是1111 1111shr ax, 1; 這下ax就變成0111 1111了這就是“算數”和“邏輯”移位的區別,算數移位保留運算元的符號,邏輯移位只把運算元當作一塊單純的儲存空間
巨集組合語言組合語言有什麼區別嗎
巨集組合語言也屬於組合語言 巨集組合語言,簡單來說組合語言的另一個別名 組合語言 assembly language 是一種用於電子計算機 微處理器 微控制器或其他可程式設計器件的低階語言,亦稱為符號語言。在組合語言中,用助記符 mnemonics 代替機器指令的操作碼,用地址符號 symbol 或...
組合語言中je 和jne的區別,組合語言指令JG與JGE的用法區別
je 表示等於就跳轉,jne是不等於就跳轉,完全相反的意思。je jmp equal jne jmp not equal jz 表示當zf 1 時跳轉,即結果為0跳轉。jnz 即 zf 0 時跳轉,即結果不為0 跳轉。jz是零標誌位置位 1 即為0 時跳轉。jnz與上面相反,是當零標誌位置0 0 即...
什麼是組合語言,什麼是彙編和組合語言?
叢依波弘瀾 組合語言 assembly language 是面向機器的程式設計語言。在彙編語閤中,用助記符 memoni 代替操作碼,用地址符號 symbol 或標號 label 代替地址媽。這樣用符號代替機器語盲的二進位制碼,就把機器語音變成了組合語言。於是組合語言亦稱為符號語言。使用組合語言編寫...