zoukankan      html  css  js  c++  java
  • 初学 Delphi 嵌入汇编[8] 8 位寄存器、16 位寄存器与 32 位寄存器

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




    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 也就有了值.
    //测试1
    var
      i: integer;  {4 字节、32 位}
      w: word;     {2 字节、16 位}
      b1,b2: byte; {1 字节、 4 位}
    begin
      i  := maxint;
      w  := 0;
      b1 := 0;
      b2 := 0;
    
      asm
        mov ecx, i
        mov w, cx
        mov b1, ch
        mov b2, cl
      end;
    
      ShowMessage(Format('w=%d; b1=%d; b2=%d',[w,b1,b2]));
    
    {结果显示: w=65535; b1=255; b2=255
    
      果然没错, 给 ecx 赋值后, cx ch cl 都有值了!
    }
    end;
    
    //测试2 var i: integer; {4 字节、32 位} w: word; {2 字节、16 位} b: byte; {1 字节、 4 位} begin b := 255; i := 0; w := 0; asm mov cl, b mov w, cx mov i, ecx end; ShowMessage(Format('i=%d; w=%d',[i,w])); {结果显示: i=255; w=255 这好像是没有问题的, 我用 al ax eax 三个寄存器测试也是如此; 但用 dl dx edx 测试, 就会有意外的结果, 奇怪呀! } end;
  • 相关阅读:
    python:JSON的两种常用编解码方式实例解析
    Python中的map与reduce函数简介
    Python初学者的几个迷惑点
    Python Numpy中数据的常用的保存与读取方法
    python全栈 day03 操作系统 -- 摘要
    python全栈 day02 计算机原理 -- 硬件
    Python作业之购物商城
    Lesson one of python
    总体设计
    ASP.Net页面上用户控件相互调用的方法
  • 原文地址:https://www.cnblogs.com/del/p/1051944.html
Copyright © 2011-2022 走看看