組合語言中sal 算術左移指令)和shl(邏輯左移指令)指令的區別

時間 2021-09-12 17:38:28

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;

組合語言中的返回指令rst問題,組合語言中的返回指令Rst問題

先澄清一下你問得模糊的地方。1 你說的 rst 返回指令應該是 ret 吧?2 sp 不叫堆疊指令,它是堆疊指標,估計是stack pointer的首字母。該指標總是指向堆疊的棧頂,即始終存放的是棧頂的地址。堆疊的工作原理可簡述為 後進先出 即lifo,last in first out。具體解釋請...

彙編JB指令,組合語言中JB,JA,是什麼意思

墨汁諾 jb是指判斷位變數轉移指令,ja jump above 大於則轉移到目標指令執行。jb p1.3,l1意思就是說判斷p1.3的值是不是 1 如果是就跳轉到l1程式執行,如果不是就順序執行下一條指令。jnae jump not above and equal 低於,即不高於且不等於則轉移,但執...

組合語言指令 JMP BYTE PTR

兔老大米奇 jmp指令的運算元是地址,實際執行效果是修改ip的值。由於byte ptr使得bx指向的資料為位元組型別,而ip為字型別,資料型別不匹配,故該指令不正確。指令的正確寫法可以是jmp word ptr bx 此時將bx指向的字型別資料賦給ip 或者jmp dword ptr bx 該指令把...