hoa_tigon139
New Member
Download miễn phí Đề tài Kiến trúc tập lệnh X86-64
Đây là nhóm lệnh tính toán cơ sở mà lập trình viên thường xuyên sử dụng nhất. Bao gồm:
• Các lệnh truyền dữ liệu (data transfer instructions)
• Các phép tính số học nhị phân (binary arithmetic instructions)
• Các phép tính số học thập phân (decimal arithmetic instructions)
• Các phép tính luận lý (logical instructions)
• Các lệnh dịch và xoay (shift và rotate instructions)
• Các lệnh thao tác trên Bit và Byte (Bit và Byte instructions)
• Các câu lệnh điều khiển (control transfer instructions)
• Các lệnh xử lý chuỗi (string instructions)
• Các lệnh vào ra (I/O instructions)
• Bắt đầu, ra khỏi khối lệnh (enter và leave instructions)
• Điều khiển các cờ (EFLAG)
• Các câu lệnh với thanh ghi đoạn (segment register instructions)
• Các lệnh khác
http://cloud.liketly.com/flash/edoc/jh2i1fkjb33wa7b577g9lou48iyvfkz6-swf-2014-01-17-de_tai_kien_truc_tap_lenh_x8664.5CTyjPkZFZ.swf /tai-lieu/de-tai-ung-dung-tren-liketly-54337/
Để tải bản Đầy Đủ của tài liệu, xin Trả lời bài viết này, Mods sẽ gửi Link download cho bạn sớm nhất qua hòm tin nhắn.
Ai cần download tài liệu gì mà không tìm thấy ở đây, thì đăng yêu cầu down tại đây nhé:
Nhận download tài liệu miễn phí
Tóm tắt nội dung tài liệu:
lệnh hệ thống (system instructions)64-bit mode instructions
(Đây là nhóm lệnh cơ bản của tập lệnh x86-64, các nhóm lệnh như MMX, SSE, VMX, SMX được nhà sản xuất đưa vào từng dòng sán phẩm cụ thể nên không xét đến)
a. Các lệnh đa dụng (general-purpose instructions)
Đây là nhóm lệnh tính toán cơ sở mà lập trình viên thường xuyên sử dụng nhất. Bao gồm:
Các lệnh truyền dữ liệu (data transfer instructions)
Các phép tính số học nhị phân (binary arithmetic instructions)
Các phép tính số học thập phân (decimal arithmetic instructions)
Các phép tính luận lý (logical instructions)
Các lệnh dịch và xoay (shift và rotate instructions)
Các lệnh thao tác trên Bit và Byte (Bit và Byte instructions)
Các câu lệnh điều khiển (control transfer instructions)
Các lệnh xử lý chuỗi (string instructions)
Các lệnh vào ra (I/O instructions)
Bắt đầu, ra khỏi khối lệnh (enter và leave instructions)
Điều khiển các cờ (EFLAG)
Các câu lệnh với thanh ghi đoạn (segment register instructions)
Các lệnh khác
Bảng sau tóm tắt các lệnh thông dụng của nhóm này:
Tên
Đối số
Phép toán
Mô tả
Nhóm lệnh
mov
SRC, DST
DST = SRC
Sao chép nguồn vào đích
Truyền dữ liệu
xchg
SRC, DST
DST = SRC,
SRC = DST
Hoán chuyển
đẩy
SRC
(%esp) = SRC;
%esp -= 4;
Đẩy vào stack
pop
DST
DST = (%esp);
%esp += 4;
Lấy ra khỏi stack
xor
SRC, DST
DST = DST ^ SRC
Bitwise xor
Luận lý
or
SRC, DST
DST = DST | SRC
Bitwise or
và
SRC, ST
DST = DST & SRC
Bitwise và
cmp
A, B
EFLAGS = B - A
So sánh
Số học
test
A, B
EFLAGS = B & A
Và
inc
DST
DST++
Tăng
dec
DST
DST-
Giảm
add
SRC, DST
DST = DST + SRC
Cộng
sub
SRC, DST
DST = DST - SRC
Trừ
mul
SRC
%edx:%eax = %eax * SRC
Nhân (không dấu)
imul
SRC
%edx:%eax = %eax * SRC
Nhân (có dấu)
div
SRC
%edx = %eax MOD SRC;
%eax = %eax / SRC;
Chia (không dấu)
idiv
SRC
%edx = %eax MOD SRC; %eax = %eax / SRC;
Chia (có dấu)
jmp
LABEL
Nhảy vô điều kiện
Các lệnh nhảy
je
LABEL
Nhảy nếu bằng
jne
LABEL
Nhảy nếu không bằng
jg
LABEL
Nhảy nếu lơn hơn
jge
LABEL
Nhảy nếu lớn hơn hay bằng
jl
LABEL
Nhảy nếu nhỏ hơn
jle
LABEL
Nhảy nếu nhỏ hơn hay bằng
call
LABEL
Gọi thủ tục con
loop
LABEL
Vòng lặp
loope
LABEL
loopz
LABEL
loopnz
LABEL
int
INT_NR
Gây ra ngắt số hiệu INT_NR
Khác
b. Các lệnh hệ thống (system instructions)
Bảng sau liệt kê các lệnh dùng để hỗ trợ hệ điều hành trong việc điều khiển các chức năng của bộ VXL:
Tên lệnh
Chức năng
LGDT
Nạp thanh ghi bảng mô tả toàn cục (GDT register)
SGDT
Lưu thanh ghi bảng mô tả toàn cục (GDT register)
LLDT
Nạp thanh ghi bảng mô tả cục bộ (LDT register)
SLDT
Lưu thanh ghi bảng mô tả cục bộ (LDT register)
LTR
Nạp thanh ghi tác vụ
STR
Nhớ thanh ghi tác vụ
LIDT
Nạp thanh ghi bảng mô tả ngắt (IDT register)
SIDT
Lưu thanh ghi bảng mô tả ngắt (IDT register)
MOV
Nạp và lưu các thanh nghi điều khiển (control registers)
LMSW
Nạp trang thái (16 bit trạng thái)
SMSW
Lưu trạng thái
CLTS
Xóa cờ chuyển tác vụ
ARPL
Điều chỉnh quyền ưu tiên
LAR
Nạp quyền truy cập
LSL
Nạp giới hạn phân đoạn
VERR
Xác nhận đoạn để đọc
VERW
Xác nhận đoạn để ghi
MOV
Nạp và lưu thanh ghi soát lỗi (debug registers)
INVD
Vô hiệu hóa cache, không ghi trở lại.
WBINVD
Vô hiệu hóa cache, ghi trở lại.
INVLPG
Vô hiệu hóa TLB (Translation lookaside buffer)
LOCK (prefix)
Khóa Bus
HLT
Một nửa bộ VXL
RSM
Trở lại từ chế độ quản lý hệ thống (system management mode - SMM)
RDMSR
Mô hình đọc-chỉ định thanh ghi
WRMSR
Mô hình ghi-chỉ định thanh ghi
RDPMC
Đọc bộ đếm giám sát hiệu năng
RDTSC
Đọc bộ đếm time stamp
RDTSCP
Đọc bộ đếm time stamp và ID của bộ VLX
SYSENTER
Fast System Call, chuyển sang nhân flat protected mode với CPL = 0
SYSEXIT
Fast System Call, chuyển sang nhân flat protected mode với CPL = 0
XSAVE
Lưu các cờ mở rộng vào bộ nhớ
XRSTOR
Khôi phục các cờ mở rộng từ bộ nhớ
XGETBV
Đọc trạng thái của một thanh ghi điều khiển mở rộng (extended control registers)
XSETBV
Ghi trạng thái của một thanh ghi điều khiển mở rộng (extended control registers)
c. x87 FPU (Floating Point Unit) instructions
(các lệnh sử dụng đơn vị tính toán dấu chấm động)
Tuy không thuộc nhóm các lệnh cơ bản nhưng đây là một nhóm rất quan trọng có trong tất cả các vi xử lý x86 hiện đại. Nhóm lệnh này hỗ trợ tính toán trên số nguyên, số thực dấu chấm động, xử lý thập phân/nhị phân … Đó là cơ sở cho các tính toán đồ họa và khoa học phức tạp của các hệ thống bên trên.
Định dạng của các toán hạng:
STn
Một thanh ghi của bộ đồng xử lý toán học (80x87)
F
Số thực
D
Số thực (độ chính xác cao)
E
Kiểu số thực mở rộng (không thuộc 3 loại dưới)
I16
word (16-bit)
I32
double word (32-bit)
I64
quad word (64-bit)
FABS
ST0 = |ST0|
FADD src
ST0 += src
STn FD
FADD dest, ST0
dest += STO
STn
FADDP dest [,ST0]
dest += STO
STn
FCHS
ST0 = −ST0
FCOM src
So sánh ST0 và src
STn FD
FCOMP src
So sánh ST0 và src
STn FD
FCOMPP src
So sánh ST0 và ST1
FCOMI src
So sánh vào FLAGS
STn
FCOMIP src
So sánh vào FLAGS
STn
FDIV src
ST0/= src
STn FD
FDIV dest, ST0
dest /=STO
STn
FDIVP dest [,ST0]
dest /=STO
STn
FDIVR src
ST0= src /ST0
STn FD
FDIVR dest, ST0
dest =ST0/dest
STn
FDIVRP dest [,ST0]
dest =ST0/dest
STn
FFREE dest
Đánh dấu rỗng
STn
FIADD src
ST0+= src
I16I32
FICOM src
So sánh ST0 và src
I16I32
FICOMP src
So sánh ST0 và src
I16I32
FIDIV src
STO/= src
I16I32
FIDIVR src
STO= src /ST0
I16I32
FILD src
Đẩy src vào satck
I16I32I64
FIMUL src
ST0*= src
I16I32
FINIT
Khởi tạo bộ đồng xử lý
FIST dest
Lưu ST0
I16I32
FISTP dest
Lưu ST0
I16I32I64
FISUB src
ST0-= src
I16I32
FISUBR src
ST0= src -ST0
I16I32
FLD src
Đẩy src vào satck
STn FDE
FLD1
Đẩy 1.0 vào satck
FLDCW src
Nạp thanh ghi từ điều khiển
I16
FLDPI
Đẩy π vào satck
FLDZ
Đẩy 0.0 vào satck
FLDL2E
Đẩy log2e vào satck
FLDLN2
Đẩy loge2 vào satck
FLDL2T
Đẩy lg 2 vào satck
FLDLG2
Đẩy 0.0 vào satck
FMUL src
ST0*= src
STn FD
FMUL dest, STO
dest *=STO
STn
FMULP dest [,STO]
dest *=STO
STn
FRNDINT
Round ST0
FSCALE
ST0 = ST0 × 2[ST1]
FSQRT
ST0 = ST01/2
FSIN
Sin
FCOS
Cosin
FSINCOS
Sin và cos
FPTAN
Tan
FPATAN
arctan
F2XM1
2x-1
FYL2X
y∗log2x
FYL2XP1
y∗log2(x+1)
FST dest
Lưu ST0
STn FD
FSTP dest
Lưu ST0
STn FDE
FSTCW dest
Lưu thanh ghi từ điều khiển
I16
FSTSW dest
Lưu thanh ghi từ trạng thái
I16AX
FSUB src
ST0-= src
STn FD
FSUB dest, STO
dest -=STO
STn
FSUBP dest [,STO]
dest -=STO
STn
FSUBR src
ST0= src -ST0
STn FD
FSUBR dest, STO
dest =ST0-dest
STn
FSUBP dest [,STO]
dest =ST0-dest
STn
FTST
So sánh ST0 với 0.0
FXCH dest
Hoán đổi ST0 và dest
STn
d. 64-bit mode instructions
Chế độ 64-bit xuất hiện cùng với một vài lệnh mới. Phần lớn chúng hỗ trợ cho việc mở rộng cho không gian địa chỉ lên 64-bit.
CDQE
Chuyển số nguyên từ doubleword (32-bit) sang quadword (64-bit)
CMPSQ
So sánh chuỗi
CMPXCHG16B
So sánh RDX:RAX với m128
LODSQ
Nạp quadword tại địa chỉ (R)SI vào RAX
MOVSQ
Copy (R)SI vào (R)DI
MOVZX (64-bits)
Copy doubleword sang quadword, thêm các bit 0
STOSQ
Lưu RAX tại địa chỉ RDI
SWAPGS
Hoán đổi GS base register value với giá trị ở địa chỉ C0000102H của MSR
SYSCALL
Gọi nhanh các thủ tục hệ thống có mức ưu tiên là 0
SYSRET
Trở lại từ fast system call
III. Kết luận
Ưu điểm của kiến trúc x86-64
Không gian địa chỉ 64-bit.
Mở rộng các thanh ghi.
Sử dụng tập lệnh quen thuộc.
Khả năng chạy ứng dụng 32-bit trong hệ điều hành 64-bit.
Khả năng chạy hệ điều hành 32-bit.
Nhược điểm của kiến trúc x86-64
Kiến trúc mới không có nhược điểm nào lớn cả. Ta có thể chỉ ra bộ nhớ của chương trình phải tăng thêm một chút vì ...