首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 內嵌組合語言教學 (18):SHL/SHR 位移指令詳解

     編輯:Delphi

SHL (Shift Left) 與 SHR (Shift Right) 是組合語言基本位移指令,分別對應乘 2 與除 2 (無符號) 的高效實現。語義與 Delphi shl/shr 運算子完全一致。

指令語法

SHL 目標, 計數   { 邏輯左移,低位補 0,高位進入 CF }
SHR 目標, 計數   { 邏輯右移,高位補 0,低位進入 CF }

計數可為立即數 (1) 或 CL 寄存器 (變量計數)。

代碼範例

var ByteNum: Byte;
begin
  { SHR 右移:相當於除 2 }
  asm
    mov al, 10000000b  { 128 }
    shr al, 1          { 01000000b = 64 }
    mov ByteNum, al
  end;
  ShowMessage(IntToStr(ByteNum));  { 64 }

  { SHL 左移:相當於乘 2 }
  asm
    mov al, 00000001b  { 1 }
    shl al, 1          { 00000010b = 2 }
    shl al, 1          { 00000100b = 4 }
    mov ByteNum, al
  end;
  ShowMessage(IntToStr(ByteNum));  { 4 }
end;

進階:多位移動與進位旗標

{ 乘 256 (左移 8 位) }
shl eax, 8

{ 除 256 (右移 8 位) }
shr eax, 8

{ 獲取高位元組 → 低位 }
mov al, ah
{ 或 }
shr eax, 8
mov al, al

相關指令對比

指令方向補位符號保持用途
SHL左0否無符號乘 2^n
SHR右0否無符號除 2^n
SAL左0否SHL 同義
SAR右符號位是有符號除 2^n
ROL/ROR循環循環-位循環、加密
RCL/RCR帶進位循環CF參與-多精度移位
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved