大數左右移運算

2021-06-14 18:21:13 字數 2601 閱讀 2518

; mp_bit      = 30

; mp_nail = 32 - mp_bit

; mp_mask = 3fffffffh ;base 30bit 28~30

; mp_limb_t

; mpn_rshift (mp_ptr rp, mp_srcptr up, mp_size_t n, unsigned int cnt)

; assert (n >= 1);

; assert (cnt >= 1);

; assert (cnt < gmp_limb_bits);

align 16

mpn_rshift:

label .cp dword at esp+4

label .ap dword at esp+8

label .n dword at esp+12

label .cnt dword at esp+16

label .tnc dword at esp-4

mov [esp-4 ],esi

mov [esp-8 ],edi

mov [esp-12],ebx

mov [esp-16],ebp

mov edi,[.cp]

mov esi,[.ap]

mov ebx,[.n]

mov ecx,[.cnt] ;4

mov [.tnc],mp_bit ;30

sub [.tnc],ecx ;tnc=26

xor eax,eax

.loop:

mov ebp,[esi+ebx*4-4]

mov ecx,[.cnt]

mov edx,ebp

shr edx,cl

and edx,mp_mask

or eax,edx

mov [edi+ebx*4-4],eax

mov eax,ebp

mov ecx,[.tnc]

shl eax,cl

and eax,mp_mask

sub ebx,1

jnz .loop

shr eax,cl

mov esi,[esp-4 ]

mov edi,[esp-8 ]

mov ebx,[esp-12]

mov ebp,[esp-16]

ret 16

;---------------------------

; ==|== ==...== == == |====

; hsb lsb

;---------------------------

align 16

mpn_lshift:

label .cp dword at esp+4

label .ap dword at esp+8

label .n dword at esp+12

label .cnt dword at esp+16

label .tnc dword at esp-4

mov [esp-4 ],esi

mov [esp-8 ],edi

mov [esp-12],ebx

mov [esp-16],ebp

mov edi,[.cp]

mov esi,[.ap]

mov ebx,[.n]

mov ecx,[.cnt] ;4

mov [.tnc],mp_bit ;30

sub [.tnc],ecx ;tnc=26

lea esi,[esi+ebx*4]

lea edi,[edi+ebx*4]

neg ebx

xor eax,eax

.loop:

mov ebp,[esi+ebx*4]

mov ecx,[.cnt] ;4

mov edx,ebp

shl edx,cl

or edx,eax

and edx,mp_mask

mov eax,ebp

mov [edi+ebx*4],edx

mov ecx,[.tnc]

shr eax,cl

add ebx,1

jnz .loop

mov esi,[esp-4 ]

mov edi,[esp-8 ]

mov ebx,[esp-12]

mov ebp,[esp-16]

ret 16

java左 右移運算子

左移運算子,num 1 相當於num乘以2 右移運算子,num 1 相當於num除以2 比如num是40 10進製 對應的二進位制為 101000 2的5次方1 2的4次方4 2的3次方1 2的2次方0 2的1次方0 2的0次方0 二進位制轉換為十進位制方法原始方法 左移一位 左移一位是相對於二進位...

C51中左右移運算

彙編 1.對於51微控制器 rlc a 即將累加器acc中內容左移1位,最低位被cy原始值替代,最高位移入進製標誌cy 中,同理還有rrc a。具體使用 mov a,0ffh clr c rlc a 2.對於8086 1 左移 shl sal dst cnt 移位時運算元的最低位將移入0,最高位移入...

數碼的左右移位

學習三種移位方法後的總結 邏輯移位 符號位也參與移動,簡單了當進行移位 移位後產生的空位補零。被擠出去的一般放入cf 進製標誌 標誌位,如果沒有可以無視。算術移位 在計算時發生的移位,操作物件是帶符號資料,需要考慮符號位。在移位時移出去的位數直接丟棄,符號位不變。為了方便檢視直接列出乙個更適合記憶的...