How do you extract the high or low order byte from a word? How
do you insert it? There are built in methods hi() and lo() for extracting,
but for those that want to know how to do it on their own, here it is in
its most efficient form (if I do say so myself <G>). The functions
for inserting bytes are not in Delphi. Note: Assembler functions
return the contents of the AX register.
function GetHiByte(w: word): byte; assembler;
asm
mov ax, w
shr ax, 8
end;
function GetLoByte(w: word): byte; assembler;
asm
mov ax, w
end;
function SetHiByte(b: byte; w: word): word; assembler;
asm
xor ax, ax
mov ax, w
mov ah, b
end;
function SetLoByte(b: byte; w: word): word; assembler;
asm
xor ax, ax
mov ax, w
mov al, b
end;
Another way of doing it: How about REAL FAST, without using assembler
(i.e. let the compiler do the work for you)???
Type
TWord2Byte = record
Lo,Hi: Byte;
end;
var W: Word;
B: Byte;
begin
W := $1234;
B := TWord2Byte(W).Hi;
writeln(TWord2Byte(W).Hi);
{ going back }
TWord2Byte(W).Lo := $67;
TWord2Byte(W).Hi := $98; { no shl needed! }
end.