1樓:牧起雲高媼
算術用於帶符號數運算,邏輯用於不帶的。操作沒區別。都是最高位入cf最低位補0
2樓:白柏亢泰清
算術左移需要對符號位進行擴充套件,即最高位為符號位時,如果左移高位需要使用符號位的值填充,負數(補碼)就用1填充,正數就用0填充;
邏輯左移不考慮符號位,直接在高位補0即可。
而右移就不存在這種區別。
3樓:考運旺查卯
組合語言中
sal(算術左移指令)和shl(邏輯左移指令)指令的定址方式、控制移位方式等都一樣,區別其實只有一處:
sal算術移位指令在執行時,實際上把運算元看成有符號數進行移位,最高位符號位移入cf,但本身保持原值;其餘位順序左移,次高位被捨棄。
shl邏輯移位指令在執行時,實際上把運算元看成無符號數進行移位,所有位順序左移,最高位移入cf。
舉例如下:
movax,8001h;(ax)=10000000
0000
0001b
salax,1
;(ax)=1000
0000
0000
0010b
movax,8001h;(ax)=10000000
0000
0001b
shlax,1
;(ax)=0000
0000
0000
0010b
組合語言中 “sal”(算術左移指令)和“shl”(邏輯左移指令)指令有什麼區別?
4樓:匿名使用者
組合語言中 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
無符號右移運算子>>> 為什麼只是對32位和64位的值有意義
5樓:匿名使用者
在c語言中,涉及位移的運算子有2個,>>表示右移,《則表示左移。而彙編指令中,shl和shr表示邏輯左移和邏輯右移,sar和sal表示算術左移和算術右移。其中,邏輯左移和算術左移都是暫存器二進位制位整體向左移動,並在右邊補0。
而右移則不同,邏輯右移是整體向右移,並在左邊補0,而算術左移則是根據原符號位的值補與其相同的值。根據c標準,如果在位移運算子左邊的變數是有符號數,如int,char,short等,編譯產生的彙編指令是算術位移指令,如果該變數是無符號數,如unsignedint,unsignedchar等,編譯產生的彙編指令則是邏輯位移指令。
6樓:鄲濱田伶
舉個例子
inta
=7>>1
,就是將7的二進位制(111)向右移動一位,就是(011)就是3,所以int
a=3;
也可看成是除以二,如果左運算元是奇數就看做(a-1)÷2,是偶數就是a÷2
右移位運算就是將左運算元的位元位向右移動第二個運算元指定的位數,在二進位制中,首位是用來表示正負的,若右移運算子的第一個運算元是正數,就填充0,是負數就填充1;
關於組合語言中的loop指令,關於組合語言中的LOOP指令
這個程式迴圈一次,是由cx存放的。cx中存放的是迴圈的次數 程式設計計算2 12 assume cs code code segment mov ax,2 mov cx,11 s add ax,ax loop s mov ax,4c00h int 21h code ends end執行loop s時...
組合語言XOR命令什麼意思,組合語言中,指令XOR CX,CX表示什麼意思
凡筱雲 組合語言xor命令是異或的意思,異或,英文為exclusive or,或縮寫成xor 異或 xor 是一個數 算符。它應用於邏輯運算。異或的數學符號為 計算機符號為 xor 異或可逆運算。1 xor 1 0,0 xor 0 0,1 xor 0 1,0 xor 1 1。a xor b的運算方法...
組合語言中MOV和OFFSET指令的兩個問題?請高手指教小弟
律景明仁琴 offset彙編偽指令 mov暫存器,offset 變數名把變數名的地址傳輸到暫存器中去,在編譯的時候完成 歸傅香開冬 1 立即數不能直接傳遞給段暫存器,例 dw 2010 movds,允許 是變數 movds,2010 不允許 2010是立即數 2 lea是計算機指令,在 執行期它具有...