程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 初學 Delphi 嵌入匯編[8] - 8 位寄存器、16 位寄存器與 32 位寄存器

初學 Delphi 嵌入匯編[8] - 8 位寄存器、16 位寄存器與 32 位寄存器

編輯:Delphi

王爽老師書上說, CPU 內部主要就是寄存器.

  現在我們在 32 位的系統下工作, 當然主要使用的是 32 位寄存器; 那它和 8 位、16 位的寄存器又有什麼關系呢?

  從網上找到一個簡潔明了的圖片:

初學 Delphi 嵌入匯編[8] - 8 位寄存器、16 位寄存器與 32 位寄存器

  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 也就有了值.

  //測試1var
 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;
//測試2var
 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;


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved