Shift and Rotate — 組合語言筆記

Sharon Peng
4 min readDec 22, 2019

--

這次的主題,想要紀錄一下,Shift and Rotate在組與上的用法,順便增加印象。

主要可以分成下面兩大類,之後會再一一介紹。

首先先從,右半邊的Shift開始介紹。

Logic shift 跟 arithmetic shift比較不同的點在於「SAR」(shift arithmetic right)。等等會介紹。

Shift → Logic (SHL, SHR):

SHL: 白話文來說就是往左移。

規則:每個bit都會往左邊移動,The highest bit(也就是最左邊的那個數)會移動到CF(carry flag),然後the lowest bit (最右邊)會由0補上。

SHL destination, count (移動到的目的地,移動幾個bit)

SHL reg, imm8

SHL mem, imm8

SHL reg, CL

SHL mem, CL

*CL是一個暫存器可以幫忙存取,要移動幾個bit的個數。

SHR: 白話文來說就是往右移。

規則:每個bit都會往右邊移動,The Lowest bit(也就是最右的那個數)會移動到CF(carry flag),然後The Highest bit (最左邊)會由0補上。

以上兩種,在算數上可以有很多的幫助,

shift Lift (SHL)可以說是有「乘2」的概念。

shift Right(SHR):可以說有「除2」的概念。

Shift →Arithmetic (SAL, SAR) :

SAL:其實這個就跟SHL一模一樣,所以沒有什麼特別的,這邊就不多提。

SAR:

規則:往右移後,補上的0, 1會由他原本的東西來決定,看圖可以比較容易了解。

*依照The highest bit是多少來決定,要補什麼數字。

Rotate → 不包含carry flag(ROL, ROR) :

為什麼叫做rotate的原因是因為他有一點輪轉的感覺。

ROL:往左邊移動,補上的bit是由移動到CF的那個bit決定。

ROR:往右邊移動,補上的bit由移動到CF的那個bit決定。

Rotate → 包含carry flag(RCL, RCR) :

RCL: 往左邊移動,補上的bit是從CF得到的。

RCR:往右邊移動,補上的bit是從CF得到的。

SHLD/SHRD Instructions

還有一個好用的instruction可以使用。

SHLD/SHRD dest, source count (要存到哪裡,來源bit,移動幾格bit)

*這個有一個特色是source不會變,他只是把自己的某些bit給dest。

--

--

Sharon Peng
Sharon Peng

No responses yet