在 x86 組語中,型別轉換 是頻繁需求。MASM/TASM 提供的 BYTE PTR、WORD PTR、DWORD PTR、QWORD PTR 等操作符,讓我們能以不同寬度「重新解讀」同一記憶體位址的資料,無需額外搬移或轉換指令,極為高效。
buffer db "0123456789",0
lea esi, buffer
mov al, byte ptr [esi] ; AL = '0' (30h) - 讀取 1 位元組
mov ax, word ptr [esi] ; AX = '01' (3130h) - 讀取 2 位元組 (Little Endian)
mov eax, dword ptr [esi] ; EAX = '0123' (33323130h) - 讀取 4 位元組
[esi] 位址不變,PTR 僅告知組譯器/處理器「以多少位元組為單位存取」。'0' (30h) 在最低位址,'1' (31h) 在次低位址,故 WORD PTR 讀出為 3130h。MOVZX/MOVSX 可將較小運算元擴展至 32/64 位暫存器。POINT STRUC
x DWORD ?
y DWORD ?
POINT ENDS
lea esi, myPoint
mov eax, dword ptr [esi] ; 讀取 x
mov edx, dword ptr [esi+4] ; 讀取 y
; 假設 esi 指向封包頭部
movzx eax, word ptr [esi] ; 大端序港口號需再用 BSWAP 或手動交換
mov ecx, dword ptr [esi+2] ; 32位長度欄位
; 以 4 位元組為單位比較/複製字串 (需確保記憶體對齊與邊界安全)
mov eax, dword ptr [src]
mov dword ptr [dst], eax
善用 PTR 操作符,能寫出簡潔、高效、貼近硬體特性的組語代碼,是組語程式設計師的基本功之一。