程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
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 位的寄存器又有什麼關系呢?

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

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