妖哥 2008-4-8 20:50
初学 Delphi 嵌入汇编[16] - 进制的表示方法
关于进制:
生活中有 7进制(星期)、60进制(小时)、10进制(算术)等等.
计算机要用到 10进制、16进制、2进制和 8进制.
8进制用得少了, 但也有, 譬如 Unix 服务器上的文件属性.
2进制是计算机容易识别的; 10进制是人容易识别的, 据说 10进制源自于人有十个手指.
计算机为什么会使用 8进制和 16进制呢? 因为: 23=8; 24=16; 这样比较容易和 2进制换算.
从这里也能看出, 2进制和 10进制的换算相对复杂些.
下面例子中说明了进制的表示方法, 七个函数都会返回整数 255:
[color=#008000]//十进制
[/color][b][color=#000080]function[/color][/b] Fun0: Integer;
[b][color=#000080]asm[/color][/b]
mov eax, [color=#0000ff]255[/color]
[b][color=#000080]end[/color][/b];
[color=#008000]//十进制数后面也可以加个 D(大小写无关)
[/color][b][color=#000080]function[/color][/b] Fun1: Integer;
[b][color=#000080]asm[/color][/b]
mov eax, 255D
[b][color=#000080]end[/color][/b];
[color=#008000]//二进制后面加 B(大小写无关)
[/color][b][color=#000080]function[/color][/b] Fun2: Integer;
[b][color=#000080]asm[/color][/b]
mov eax, 11111111B
[b][color=#000080]end[/color][/b];
[color=#008000]//八进制后面加 O(大小写无关)
[/color][b][color=#000080]function[/color][/b] Fun3: Integer;
[b][color=#000080]asm[/color][/b]
mov eax, 377O
[b][color=#000080]end[/color][/b];
[color=#008000]//十六进制前面加 $
[/color][b][color=#000080]function[/color][/b] Fun4: Integer;
[b][color=#000080]asm[/color][/b]
mov eax, [color=#0000ff]$FF[/color]
[b][color=#000080]end[/color][/b];
[color=#008000]//十六进制也可以是后面加 H(大小写无关)
[/color][b][color=#000080]function[/color][/b] Fun5: Integer;
[b][color=#000080]asm[/color][/b]
mov eax, 0FFH [color=#008000]{使用这种方法, 数字的首位不能是字母, 不然会被认为成标识符}[/color]
[b][color=#000080]end[/color][/b];
[color=#008000]//非汇编代码的 Delphi 只支持用 $ 表示十六进制
[/color][b][color=#000080]function[/color][/b] Fun6: Integer;
[b][color=#000080]begin[/color][/b]
Result := [color=#0000ff]$FF[/color];
[b][color=#000080]end[/color][/b];
[color=#008000]//测试
[/color][b][color=#000080]procedure[/color][/b] TForm1[color=#0000ff].[/color]Button1Click(Sender: TObject);
[b][color=#000080]begin[/color][/b]
ShowMessage(IntToStr(Fun0)); [color=#008000]{255}[/color]
ShowMessage(IntToStr(Fun1)); [color=#008000]{255}[/color]
ShowMessage(IntToStr(Fun2)); [color=#008000]{255}[/color]
ShowMessage(IntToStr(Fun3)); [color=#008000]{255}[/color]
ShowMessage(IntToStr(Fun4)); [color=#008000]{255}[/color]
ShowMessage(IntToStr(Fun5)); [color=#008000]{255}[/color]
ShowMessage(IntToStr(Fun6)); [color=#008000]{255}[/color]
[b][color=#000080]end[/color][/b];