You are on page 1of 8

Lời mở đầu (Preface)

Những định nghĩa (Definitions)

Các thanh ghi (Registers)

Trong danh sách các thanh ghi sau đây, các tên thanh ghi dùng để tham khảo cho một
thanh ghi hoặc các nội dung của thanh ghi đó.

AH-DH

Các thanh ghi AH, BH, CH 8-bit cao và DH. So với AL-DL.

AL-DL

Các thanh ghi AL, BL, CL 8-bit thấp và DL. So với AH-DH.

AL–r15B

Các thanh ghi AL, BL, CL, DL, SIL, DIL, BPL, SPL 8-bit thấp và R8B–R15B, sẵn sàng trong
chế độ 64-bit.

BP

Thanh ghi con trỏ cơ sở.

CRn

Thanh ghi điều khiển số n.

CS

Thanh ghi mã đoạn.

eAX–eSP

Các thanh ghi AX, BX, CX, DX, DI, SI, BP 16-bit và SP hoặc các thanh ghi EAX, EBX, ECX,
EDX, EDI, ESI, EBP 32-bit và ESP. So với rAX–rSP.

EFER

Thanh ghi cho phép mở rộng tính năng.

eFLAGS

Thanh ghi cờ 16-bit hoặc 32-bit. So với rFLAGS.

EFLAGS

Thanh ghi cờ (mở rộng) 32-bit.

eIP

Thanh ghi con trỏ lệnh 16-bit hoặc 32-bit. So với rIP.

EIP
Thanh ghi con trỏ lệnh 32-bit (mở rộng)

FLAGS

Thanh ghi cờ 16-bit.

GDTR

Thanh ghi bảng mô tả toàn bộ.

GPRs

Các thanh ghi đa dụng. Dành cho dữ liệu kích thước16-bit, là những thanh ghi AX, BX, CX,
DX, DI, SI, BP và SP. Dành cho dữ liệu kích thước 32-bit, là những thanh ghi EAX, EBX,
ECX, EDX, EDI, ESI, EBP và ESP. Dành cho dữ liệu kích thước 64-bit, gồm các thanh ghi
RAX, RBX, RCX, RDX, RDI, RSI, RBP, RSP và R8–R15.

IDTR

Thanh ghi bảng mô tả ngắt.

IP

Thanh ghi con trỏ lệnh 16-bit.

LDTR

Thanh ghi bảng mô tả cục bộ.

MSR

Thanh ghi mẫu đặc trưng.

r8–r15

Thanh ghi R8B–R15B 8-bit, hoặc thanh ghi R8W–R15W 16-bit, hoặc thanh ghi R8D–R15D
32-bit hoặc thanh ghi R8–R15 64-bit.

rAX–rSP

Các thanh ghi AX, BX, CX, DX, DI, SI, BP 16-bit và SP, hoặc các thanh ghi EAX, EBX, ECX,
EDX, EDI, ESI, EBP 32-bit và ESP, hoặc các thanh ghi RAX, RBX, RCX, RDX, RDI, RSI,
RBP 64-bit và RSP. Bỏ đi kí tự “r” cho kích thước 16-bit, thay thế bằng kí tự “E” cho kích
thước 32-bit hoặc “R” cho kích thước 64-bit.

RAX

Phiên bản 64-bit của thành ghi EAX.

RBP

Phiên bản 64-bit của thanh ghi EBP.

RBX
Phiên bản 64-bit của thanh ghi EBX.

RCX

Phiên bản 64-bit của thanh ghi ECX.

RDI

Phiên bản 64-bit của thanh ghi EDI.

RDX

Phiên bản 64-bit của thanh ghi EDX.

rFLAGS

Thanh ghi cờ 16-bit, 32-bit hoặc 64-bit. So với RFLAGS.

RFLAGS

Thanh ghi 64-bit. So với rFLAGS.

rIP

Thanh ghi con trỏ lệnh 16-bit, 32-bit hoặc 64-bit. So với RIP.

RIP

Thanh ghi con trỏ lệnh 64-bit.

RSI

Phiên bản 64-bit của thanh ghi ESI.

RSP

Phiên bản 64-bit của con trỏ ESP.

SP

Thanh ghi con trỏ ngăn xếp.

SS

Thanh ghi ngăn xếp đoạn.

TPR

Thanh ghi độ ưu tiên của tiến trình (CR8). Một thanh ghi mới, được giới thiệu trong kiến trúc
AMD64 với tốc độ quản lí ngắt.

TR

Thanh ghi tiến trình.


Quy cách tổ chức dữ liệu (Endian Order) chú ý là không thể dịch theo nghĩa thông thường là
“Vấn đề cuối cùng” vì “Endian” trong kiến trúc máy tính là một thuật ngữ riêng chỉ cách mà CPU đọc/ghi các byte trong một
nhóm các byte như 16-bit “word”, 32-bit “word” hay 64-bit “word”.

Kiến trúc x86 và AMD64 địa chỉ bộ nhớ sử dụng little-endian (bít thấp nhất lưu trước). Byte
thấp (byte có trọng số nhỏ) sẽ được lưu trữ ở ô nhớ đầu tiên trong vùng nhớ được cấp phát
cho word, sau đó các byte cao hơn sẽ được lưu trữ ở ô nhớ cao hơn. Vậy nên một số viết
dưới dạng con người đọc được là 100 khi chuyển sang 1 “word” sẽ là [00 64] (64h) ở little-
endian sẽ lưu 1 “word” đó thành [64 00].

Các tài liệu liên quan nên tham khảo: (phần này không cần dịch vì chỉ là tên tài liệu và tên tác giả)

1. TỔNG QUAN VỀ KIẾN TRÚC AMD64

1.1. Giới thiệu

Kiến trúc AMD64 là một kiến trúc đơn giản nhưng mạnh mẽ, tương thích ngược và
mở rộng kiến trúc x86. Cung cấp thêm địa chỉ 64-bit và mở rộng tài nguyên các
thanh ghi để hỗ trợ các chương trình 64-bit, trong khi vẫn kế thừa được các ứng
dụng 16-bit, 32-bit mà không cần sửa đổi hoặc biên dịch lại. Đây kiến trúc cơ sở mà
một bộ xử lí mới có thể cung cấp. Để hỗ trợ cả các phần mềm hiện có (16-bit và 32-
bit) và các phần mềm 64-bit cho các ứng dụng cần hiệu suất cao hơn.
Sự cần thiết của một kiến trúc x86 64-bit do các ứng dụng cần số lượng lớn địa chỉ
của bộ nhớ ảo và bộ nhớ vật lí. Chẳng hạn như các máy chủ hiệu suất cao, hệ
thống quản lí cơ sở dữ liệu lớn… Các ứng dụng này sẽ được hưởng lợi từ cả 64-bit
địa chỉ và sự ra tăng về số lượng các thanh ghi. Số lượng ít ỏi của các thanh ghi ở
kiến trúc x86 cũ giới hạn hiệu suất trong các ứng dụng tính toán chuyên sâu. Tăng
số lượng các thanh ghi cung cấp một sự đột phá về hiệu suất cho nhiều ứng dụng
như vậy.

1.1.1. Tính năng của AMD64

Mở rộng các thanh ghi:

• Bổ xung 8 thanh ghi đa dụng (GPRs).

• Tất cả có 16 thanh ghi GPRs rộng 64-bit

• 8 thanh ghi XMM 128-bit

• Tất cả thanh ghi GPRs được chia nhỏ thành những thanh ghi nhỏ hơn, được
gọi là “Uniform byte-register addressing”

• Một tiền tố chỉ thị (REX) chuy cập vào thanh ghi mở rộng
Chế độ “lâu dài”:

• Nâng lên 64-bit của địa chỉ ảo

• 64-bit cho con trỏ chỉ dẫn (RIP)

• Kiểu địa chỉ dữ liệu con trỏ lệnh tương đối

• Không gian địa chỉ phẳng


Chế độ vận hành Hệ thống Yêu cầu Mặc định Thanh Tiêu
yêu cầu biên dịch ghi mở chuẩn
ứng rộng
Cỡ địa Cỡ toán Độ rộng
dụng
chỉ (bit) hạng (bit) GPR (bit)

Chế độ Chế độ OS 64-bit Có 64 32 Có 64


“lâu dài” 64-bit

Chế độ Không 32 Không 32


tương
16 16 16
thích

Chế độ Chế dộ Kế thừa Không 32 32 Không 32


kế thừa được OS 32-bit
bảo vệ

Chế độ 16 16 16
8086 ảo

Chế độ Kế thừa 16 16
thực OS 16-bit

Bảng 1-1

1.1.2. Các thanh ghi

Bảng 1-2 so sánh thanh ghi và các tài nguyên ngăn xếp sẵn sàng cho phần
mền ứng dụng, bởi chế độ vận hành.

Thanh ghi hoặc Chế độ kế thừa hoặc tương thích Chế độ 64-bit (1)
Ngăn xếp Tên Số Cỡ (bit) Tên Số Cỡ (bit)

Thanh đa dụng EAX, EBX, ECX, 8 32 RAX, RBX, RCX, 16 64


(GPRs) (2)
EDX, EBP, ESI, RDX, RBP, RSI,

EDI, ESP RDI, RSP,

R8–R15

Thanh ghi XMM XMM0–XMM7 8 128 XMM0–XMM15 16 128


128-bit

Thanh ghi MMX MMX0–MMX7 (3) 8 64 MMX0–MMX7 8 64


64-bit

Thanh ghi x87 FPR0–FPR7 8 80 FPR0–FPR7 8 80

Con trỏ lệnh EIP 1 32 RIP 1 64

Các cờ EFLAGS 1 32 RFLAGS 1 64

Ngăn xếp - 16 - 64
hoặc
32

Chú thích: (1) Các mục được tô xám cho thấy sự khác biệt giữ các chế độ. Nhưng sự khác
biệt này là phần mở rộng các thanh ghi của kiến trúc AMD64

(2) Danh sách các GPRs chỉ hiển thị các thanh ghi 32-bit. Các thanh ghi 8-bit và 16-bit ánh xạ
của thanh ghi 32-bit cũng có thể truy cập, như mô tả ở phần "Các thanh ghi" bên trên.

(3) Các thanh ghi MMX0–MMX7 được ánh xạ vào thanh ghi vật lí FPR0–FPR7, như trong hình
1-1. Thanh ghi ngăn xếp x87, ST(0)–ST(7) là những ánh xạ cục bộ của thanh ghi vật lí FPR0–
FPR7

Bảng 1-2:

Như bảng 1-2 cho thấy, các kế thừa từ kiến trúc x86 hỗ trợ 8 GPRs. Tuy nhiên trong thực
tế, việc dùng chung của ít nhất 4 thanh ghi (EBP, ESI, EDI và ESP) là không tốt vì chúng
phục vụ cho mục đích đặc biệt khi thực hiện nhiều lệnh. Kiến trúc AMD64 thêm 8 GPRs và
tăng độ rộng các thanh ghi từ 32-bit đến 64-bit. Cho phép các trình biên dịch cải thiện đáng
kể hiệu xuất của phần mềm. Trình biên dịch đã linh hoạt hơn trong việc dùng các thanh ghi
để giữ biến. Trình biên dịch cũng có thể giảm tối thiểu lưu lượng bộ nhớ và do đó tăng hiệu
xuất bởi cục bộ hóa làm việc trong các thanh ghi GPRs.

1.1.3. Tập lệnh

Kiến trúc AMD64 hỗ trợ đầy đủ các kế thừa của tập lệnh x86, với những lệnh
bổ xung hỗ trợ chế độ "lâu dài" (xem thêm bảng 1-1). Các hướng dẫn lập trình
ứng dụng được tổ chức thành 3 tập lệnh con như sau:

Tập lệnh đa dụng. Đây là những lệnh cơ bản của x86 sử dụng trong chương
trình ảo. Hầu hết việc tải lệnh, lưu trữ hoặc các hành động trên dữ liệu nằm
trong thanh ghi đa dụng GPRs hoặc bộ nhớ. Một vài lệnh thay đổi liên tục lưu
lượng chương trình bởi sự phân nhánh đến các chương trình cục bộ.

Lệnh phương tiện 128-bit. Đây là sự mở rộng dòng lệnh SIMD (SSE, SSE2,
SSE3, SSE4A) đó là sự tải, lưu trữ hoặc các hành động trên dữ liệu nằm chủ
yếu trong thành ghi XMM 128-bit. Chúng thực hiện các phép toán số nguyên và
dấu chấm động trên véc-tơ và dữ liệu vô hướng các loại. Bởi các lệnh véc-tơ
có thể độc lập và đồng thời thực hiện một hành động duy nhất trên nhiều bộ dữ
liệu. Chúng được gọi là lệnh đơn, lệnh đa dữ liệu (SIMD)

Lệnh phương tiện 64-bit. Đây là sự mở rộng câu lện đa phương tiện (công
nghệ MMX và công nghệ AMD 3DNow!). Những câu lệnh tải, lưu trữ hoặc hành
động trên dữ liệu nằm chủ yếu ong thanh ghi MMX 64-bit. Giống như các thanh
ghi 128-bit được miêu tả ở trên, chúng thực hiện phép toán số nguyên và dấu
chấm động trên véc-tơ và dữ liệu vô hướng các loại. Vì vậy chúng có lệnh
SIMD và có ích trong các ứng dụng Media hoạt động trên các khối dữ liệu.
AMD không còn đề nghị sử dụng lệnh 3DNow! vì đã có những lệnh phương
tiện 128-bit hiệu quả hơn. Những kiến nghị tương tự cũng sẽ được đề cập đến
ở Chương 5, "Lập trình phương tiện 64-bit" trên trang 193 và trong Hướng dẫn
cho lập trình viên, Phần 4: Lệnh phương tiện 64-bit và con trỏ dấu chấm động.

Lệnh con trỏ dấu chấm động x87. Đây là nhưng lệnh dấu chấm động sử
dụng trong các ứng dụng kế thừa x87. Chúng tải, lưu trữ hoặc hành động trên
dữ liệu trên thanh ghi x87.

Một vài lệnh lập trình ứng dụng kết nối hai hoặc nhiều hơn các tập lệnh con ở
trên. Ví dụ, có những câu lệnh di chuyển dữ liệu giữa các thanh ghi đa dụng và
thanh ghi XMM hoặc MMX và có rất nhiều lệnh véc-tơ số nguyên có thể hoạt
động ở 2 thanh ghi XMM hoặc MMX, mặc dù không cùng một lúc. Nếu câu lênh
kết nối 2 hay nhiều tập lệnh con. Những mô tả về chúng được lập lại trong tất
cả những tập lệnh con mà chúng áp dụng.

1.1.4. Câu lệnh phương tiện

1.1.5. dà

You might also like