53魔力发布网,提供最好最新的开机信息

查看完整版本: 初学 Delphi 嵌入汇编[8] - 8 位寄存器、16 位寄存器与 32 位寄存器

妖哥 2008-4-8 20:44

初学 Delphi 嵌入汇编[8] - 8 位寄存器、16 位寄存器与 32 位寄存器

王爽老师书上说, CPU 内部主要就是寄存器.
现在我们在 32 位的系统下工作, 当然主要使用的是 32 位寄存器; 那它和 8 位、16 位的寄存器又有什么关系呢?
从网上找到一个简洁明了的图片:

[img]http://www.cnblogs.com/images/cnblogs_com/del/121273/r_hb.gif[/img]
EAX 是 32 位的, 也就是 4 个字节大小; 它的低两位就是 AX;
AX 是 16 位的, 又分 2 个字节; 它的高字节是 AH、低字节是 AL;
AH 与 AL 是 8 位的.
这样就兼容了以前的 16 位与 8 位.

同理,
EBX 就包含着 BX BH BL;
ECX 就包含着 CX CH CL;
EDX 就包含着 DX DH DL;

好啊, 一下子认识了那么多寄存器!
按照这个道理, 如果给 EAX 赋了值, 那么 AX AH AL 也就都有了值;
如果给 AL 赋了值, 那么 AX EAX 也就有了值.

[color=#008000]//测试1
[/color][b][color=#000080]var[/color][/b]
  i: integer;  [color=#008000]{4 字节、32 位}[/color]
  w: word;     [color=#008000]{2 字节、16 位}[/color]
  b1,b2: byte; [color=#008000]{1 字节、 4 位}[/color]
[b][color=#000080]begin[/color][/b]
  i  := maxint;
  w  := [color=#0000ff]0[/color];
  b1 := [color=#0000ff]0[/color];
  b2 := [color=#0000ff]0[/color];

  [b][color=#000080]asm[/color][/b]
    mov ecx, i
    mov w, cx
    mov b1, ch
    mov b2, cl
  [b][color=#000080]end[/color][/b];

  ShowMessage(Format([color=#0000ff]'w=%d; b1=%d; b2=%d'[/color],[w,b1,b2]));

[color=#008000]{结果显示: w=65535; b1=255; b2=255

  果然没错, 给 ecx 赋值后, cx ch cl 都有值了!
}[/color]
[b][color=#000080]end[/color][/b];

[color=#008000]//测试2
[/color][b][color=#000080]var[/color][/b]
  i: integer;  [color=#008000]{4 字节、32 位}[/color]
  w: word;     [color=#008000]{2 字节、16 位}[/color]
  b: byte;     [color=#008000]{1 字节、 4 位}[/color]
[b][color=#000080]begin[/color][/b]
  b := [color=#0000ff]255[/color];
  i := [color=#0000ff]0[/color];
  w := [color=#0000ff]0[/color];

  [b][color=#000080]asm[/color][/b]
    mov cl, b
    mov w, cx
    mov i, ecx
  [b][color=#000080]end[/color][/b];

  ShowMessage(Format([color=#0000ff]'i=%d; w=%d'[/color],[i,w]));

[color=#008000]{结果显示: i=255; w=255

  这好像是没有问题的, 我用 al ax eax 三个寄存器测试也是如此;
  [/color][color=#ff0000]但用 dl dx edx 测试, 就会有意外的结果, 奇怪呀![/color]
[color=#008000]}[/color]
[b][color=#000080]end[/color][/b];
页: [1]
查看完整版本: 初学 Delphi 嵌入汇编[8] - 8 位寄存器、16 位寄存器与 32 位寄存器
妖城魔力欢迎您