Professional Documents
Culture Documents
Bai Dich Cua Dung
Bai Dich Cua Dung
Bai Dich Cua Dung
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
CRn
CS
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
eFLAGS
EFLAGS
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
GDTR
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
IP
LDTR
MSR
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
RBP
RBX
Phiên bản 64-bit của thanh ghi EBX.
RCX
RDI
RDX
rFLAGS
RFLAGS
rIP
Thanh ghi con trỏ lệnh 16-bit, 32-bit hoặc 64-bit. So với RIP.
RIP
RSI
RSP
SP
SS
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
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ả)
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.
• 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”:
Chế độ 16 16 16
8086 ảo
Chế độ Kế thừa 16 16
thực OS 16-bit
Bảng 1-1
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)
R8–R15
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.
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.5. dà