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

Delphi 內嵌組合語言教學 (26):大小寫字母 ASCII 碼轉換

     編輯:Delphi

利用 ASCII 碼表中大小寫字母相差 32 (0x20) 的特性,僅用 ADD/SUB 指令即可實現極高效的大小寫轉換,無需分支判斷。

轉換原理

'A' = 65 (0x41) = 0100 0001b
'a' = 97 (0x61) = 0110 0001b
差值 = 32 (0x20) = 0010 0000b  ← 僅第 5 位不同

組合語言實現

{ 小寫轉大寫:減 32 或減 'a'-'A' }
function LowerToUpper(C: Char): Char;
asm
  sub C, 32
  { sub C, 'a'-'A'  亦可,編譯器常數折疊 }
end;

{ 大寫轉小寫:加 32 }
function UpperToLower(C: Char): Char;
asm
  add C, 32
end;

測試代碼

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(LowerToUpper('b'));  { 'B' }
  ShowMessage(UpperToLower('B'));  { 'b' }
end;

擴展:無分支完整轉換

function ToggleCase(C: Char): Char;
asm
  xor C, 32   { 翻轉第 5 位:大↔小 }
end;

XOR 32 同時處理大轉小、小轉大,且對非字母字符 (數字、符號) 也會翻轉第 5 位,使用時需配合範圍檢查或查表法。

效能優勢

方法指令數分支預測適用場景
ASCII ADD/SUB1無已知字母範圍
XOR 321無批次翻轉、混合文本
Delphi UpCase/LowerCase函數調用內部有分支通用、Unicode 安全
查表法 (256 bytes)1 次內存讀取無極高頻、SIMD 並行
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved