SƠ ĐỒ KHỐI VÀ TẬP LỆNH (N.V.Dũng)

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 20

SƠ ĐỒ KHỐI VÀ CÁC THÀNH PHẦN CHÍNH

1. Sơ đồ khối kiến trúc Netburst

Sơ đồ khối của vi kiến trúc NetBurst

Die picture of Pentium IV processor


Sơ đồ khối vi kiến trúc NetBurst Gồm 4 thành phần chính sau:
1. The In-Order Front End
2. The Out-Of-Order Execution Engine
3. The Integer and Floating-Point Execution Units
4. The Memory Subsystem

A.The In-Order Front End


In-Order Front End có nhiệm vụ nạp và giải mã lệnh.Front End có khả năng dự đoán rẽ
nhánh chính xác cao nhờ lưu trữ lịch sử thực hiện chương trình và suy đoán nhánh mà
chương trình sẽ thực hiện tiếp.Địa chỉ lệnh dự đoán từ front-end branch
prediction logic này được sử dụng để nạp các byte lệnh từ Cache L2.Những byte lệnh IA
32 bit này sau đó được giải mã thành các vi lệnh (uops).
Vi kiến trúc Netburst có 1 dạng Cache lệnh L1 đặc biệt tiên tiến gọi là Execution
Trace Cache.Không giống như các Cache lệnh thong thường,Trace Cache nằm giữa
khối giải mã và khối thực hiện cơ bản như hình vẽ.Ở vị trí này Trace Cache có thể lưu
trữ được các lệnh IA 32 đã được giải mã hay còn gọi là các vi lệnh.Sau khi được lưu
trữ vào đây,các lệnh IA 32 đã được giải mã này sẽ được xóa khỏi vòng lặp thực hiện
lệnh chính của chương trình.Thông thường các lệnh được giải mã 1 lần và được đặt
vào Trace Cache sau đó được sử dụng nhiều lần từ đây giống như giống như các
cache lệnh thông thường trước .Bộ giải mã lệnh IA 32 chỉ được sử dụng khi Trace
Cache bị nhỡ và cần phải đến Cache L2 để lấy và giải mã các byte lệnh IA 32 mới.

B . Out-of-Order Execution Logic


Out-of-order execution engine là nơi các lệnh được chuẩn bị để thực hiện.
khối logic thực thi Out-of-order có một số bộ đệm để sắp xếp lại trật tự thực hiện các lệnh
khi chúng được đưa vào ống lệnh và được lập lịch thực hiện.Khi 1 vi lệnh đang
chờ được cấp phát tài nguyên hoặc dữ liệu ,các lệnh khác (thường là trong buffer) có
thể chen vào thực thi miễn là các lệnh khác này không phụ thuộc vào lệnh đang chờ
kia.
Khối logic Retirement nhận được trạng thái hoàn thành của các lệnh đã được thực
hiện từ đơn vị thực hiện và quy trình kết quả,sau đó yêu cầu lại các lệnh này,thực
hiện chúng 1 cách không tuần tự so với chương trình ban đầu.Khối logic này cũng sẽ
báo cáo thông tin thực hiện nhánh vừa xong cho bộ phận dự đoán rẽ nhánh của Front-
end để cập nhật thông tin mới nhất về tình trạng nhánh phục vụ cho việc dự đoán rẽ
nhánh được chính xác hơn.

C . Integer and Floating-Point Execution Units


Excution Units là nơi lệnh thực sự được thực hiện.Phần này bao gồm các register
files lưu trữ các giá trị toán tử số nguyên và dấu phẩy động của các lệnh cần thực hiện.
D. Memory Subsystem
Như hình vẽ ta có thể thấy,Memory Subsystem bao gồm cache L2 và bus hệ
thống(system bus).Nó lưu trữ các lệnh và dữ liệu mà Execution Trace Cache và cache
dữ liệu L1 không thể lưu trữ được.Bus hệ thống bên ngoài (external) được kết nối với
mặt sau của cache L2,được sử dụng để truy nhập bộ nhớ chính khi Cache L2 bị miss
và để truy nhập thiết bị vào ra.

2.Sơ đồ khối bộ vi xử lí Pentium IV

Nhìn vào hình vẽ ta có thể thấy phần bên trên bên trái là tương ứng với khối Front-
Out,phần giữa là tương ứng khối logic Out-Of-Order ,phần dưới là khối xử lí số nguyên
và dấu chấm động và Cache dữ liệu L1.Phần bên phải hình vẽ là khối Memory
subsystem.
A . Front End

Khối Front End bao gồm một số đơn vị như hình vẽ,bao gồm :
- Instruction TLB (ITLB)
- The front-end branch predictor (labeled here Front - End BTB)
- The IA-32 Instruction Decoder
- The Trace Cache
- Micocode ROM

a. Trace Cache
Trace Cache là cache chính hay cache lệnh level 1(L1) đảm nhiệm vận chuyển 3 vi
lệnh mỗi xung nhịp đồng hồ tới khối logic Out-Of-Order Execution.Phần lớn các lệnh
trong chương trình là được nạp và thực hiện từ Trace Cache.Chỉ khi nào miss Trace
Cache thì vi kiến trúc NetBurst mới nạp và giải mã đến các lệnh ở Cache L2.Trace
Cache có khả năng nắm giữ tới 12 vi lệnh, mỗi vi lệnh trong Pentium IV có độ rộng
100-bit nên trong Trace Cache có dung lƣợng 150KB (12288 x 100 /8).Nó có tỷ lệ hit từ 8
đến 16K byte tương tự như các Cache lệnh thông thường.

Các lệnh IA-32 khá rườm rà để giải mã.Mỗi lệnh này có nhiều giá trị và lựa chọn
khác nhau.Khối logic giải mã lệnh(instruction decoding logic) cần phải sắp xếp lại và
chuyển đổi các lệnh phức tạp này thành các vi lệnh đơn giản mà máy có thể hiểu và
thực hiên được.Việc giải mã này sẽ đặc biệt khó khi cố gắng giải mã các lệnh IA 32
phức tạp trong mỗi chu kì xung nhịp đồng hồ khi Pentium IV hoạt động ở mức tần số
xung nhịp đồng hồ cao. Một bộ giải mã IA-32 băng thông cao có khả năng giải mã
nhiều lệnh mỗi nhịp đồng hồ, có nhiều đường ống để làm công việc đó. Khi một nhánh
dự đoán sai, thời gian phục hồi ngắn hơn nhiều nếu máy không giải mã lại tập lệnh IA-
32 cần để tiếp tục thực hiện tại vị trí nhánh mục tiêu . Bằng việc lưu trữ các vi lệnh của
các lệnh đã được giải mã ,vi kiến trúc NetBurst có thể bỏ qua phần lớn thời gian giải
mã lệnh do đó giảm thiểu độ trễ khi miss dự đoán và cho phép việc giải mã trở nên
đơn giản hóa:khi một lệnh được thực thi nhiều lần thì nó sẽ lấy vi lệnh đã được giải
mã sẵn và lưu trong Trace Cache,không cần phải giải mã lại nhiều lần như các bộ VXL
trước nữa. Execution Trace Cache lấy các vi lệnh đã thực sự được giải mã từ bộ giải
mã lệnh IA 32 và lắp ráp hay xây dựng chúng thành một trình tự yêu cầu chương trình
gọi là vết (trace).Cứ 6 vi lệnh thì được gói thành một dòng vết(trace line).Một vết đơn lại
gồm nhiều dòng vết . Những vết này bao gồm các vi lệnh (μops) chạy liên tục xuống
đường dẫn dự đoán của quá trinh thực hiện chương tình.
Trace Cache cũng có riêng 1 cơ chế dự đoán nhánh để chỉ dẫn vị trí tiếp theo trong
Trace Cache cho các lệnh đang được nạp.Cơ chế dự đoán trong Trace Cache
này(trong hình vẽ là BTB Trace) thì đơn giản hơn cơ chế dự đoán của khối Front
End,mục đích chính của nó là dự đoán các nhánh con của chương trình hiện đang
được lưu trữ trong Trace Cache. . Bộ phận dự đoán rẽ nhánh logic gồm 16 lối vào địa
chỉ có tác dụng dự đoán địa chỉ trả lại. Cùng với BTB front-end, BTB Trace
Cache làm giảm tỷ lệ dự đoán nhánh sai khoảng 1 / 3 so với dự đoán nhánh của vi
kiến trúc P6

b. Microcode ROM

Nằm ở gần vị trí Trace Cache là đơn vị Micocode Rom.Rom này được sử dụng cho các
lệnh IA 32 phức tạp như là string move,xử lí lỗi và gián đoạn.Khi gặp phải một lệnh phức
tạp,Trace Cache sẽ chuyển lệnh sang Microcode Rom ,Microcode Rom sẽ cung cấp các
vi lệnh cần thiết có trong nó để hoàn thành hoạt động.Sau khi kết thúc,khối front end sẽ
tiếp tục nạp các các vi lệnh từ Trace Cache.

c. ITLB and Front-End BTB

ITLB = Instruction Translation Look-aside Buffer. Nó là một bảng có chứa thông


tin về các trang trong bộ nhớ mà bộ xử lý đã truy cập gần đây.nó Dịch các địa chỉ lệnh
tuyến tính để được các địa chỉ vật lý cần thiết để truy cập vào bộ nhớ cache L2.ITLB
cũng thực hiên kiểm tra page-level protection . Instruction TLB and front-end BTB sẽ chỉ
đạo các hoạt động của Fron End khi máy bị missTrace Cache..

14
BTB = Branch Target Buffer,nó lưu trữ lịch sử của các nhánh lệnh đã thực hiện
trước đó và mục tiêu thực hiện của chúng để tiết kiệm thời gian tính toán cho ra các
mục tiêu này.

Đơn vị logic nạp (fetch) sẽ luôn cố gắng nạp đầu vào cho đơn vị giải mã là các lệnh
IA 32 tiếp theo mà chương trình sẽ cần thực hiện. Đơn vị Instruction prefetch sẽ được
chỉ đạo từ đơn vị logic branch prediction (đơn vị dự đoán nhánh)(trên hình vẽ chính là
khối Front-End BTB) để biết được lệnh gì sẽ được nạp tiếp theo.Bộ dự đoán nhánh cho
phép bộ xử lí bắt đầu nạp và thực hiện lệnh trước khi kết quả của nhánh trước đó
được biết. Đơn vị dự đoán rẽ nhánh này(branch prediction logic/front - end BTB) có
dung lượng khá rộng lên tới 4K entries ,do đó nó có thể nắm được hầu hết các thông
tin của các nhánh cũ đã thực hiện. Nếu 1 nhánh không tìm thấy ở BTB ,bộ dự đoán rẽ
nhánh dự đoán kết quả của nhánh dựa trên hướng của sự dời chỗ nhánh (tiến hoặc
lùi). Nhánh lùi được cho là được thực hiện và nhánh tiến cho là không thực hiện.

d. IA-32 Instruction Decoder

The Istruction Decoder nhận các byte lệnh 32 bit từ Cache L2 64 bit,và giải mã
chúng thành các vi lệnh (uops) mà máy có thể hiểu và thực hiện được.Một bộ giải mã
đơn instruction decoder chỉ có thể giải mã được tối đa là 1 lệnh IA 32 trong 1 chu kì
đồng hồ mà thôi.Một số lệnh IA 32,mỗi lệnh có thể chuyển đổi được thành 1 vi lệnh
đơn,nhưng cũng có nhiều lệnh thì lại mỗi lệnh chuyển đổi được thành nhiều hơn 1 vi
lệnh .Trong trường hợp cần nhiều hơn 4 vi lệnh để hoàn thành giải mã 1 lệnh IA 32 thì
lúc này bộ giải mã sẽ gửi tín hiệu vào trong microcode ROM để lấy các vi lệnh tương
ứng .Tuy nhiê phần lớn các lệnh không cần phải nhảy vào microcode ROM để hoàn
thành giải mã.Ví dụ điển hình về 1 lệnh phức tạp gồm nhiều vi lệnh chúng ta có thể kể
đến lênh string move,lệnh này cần tới hàng nghìn vi lệnh để hoàn thành giải mã nó.

B. Out-of-oder Eexcution Logic

Out- Of - Order Excution Engine bao gồm các thành phần:

- allocation, renaming.

- scheduling functions.

Khối logic thực thi này có một số bộ đệm để sắp xếp lại trật tự thực hiện các lệnh khi
chúng được đưa vào ống lệnh và được lập lịch thực hiện để có thể thực hiện chương
trình nhanh hơn.Bộ xử lí sẽ cố gắng tìm ra thật nhiều lệnh có thể thực hiện xong chỉ
trong mỗi chu kì và thực hiện chúng kể cả khi chúng không còn sắp xếp theo trình tự
chương trinh gốc nữa.Bằng việc thấy được một lượng lớn các lệnh từ chương trình
cùng lúc ,Out- Of- Order Excution Engine có thể thường xuyên tìm ra nhiều lệnh độc lập
đã sẵn sàng để thực hiện.Vi kiến trúc NetBurst có bộ nhớ đệm sâu hơn so với kiến trúc
P6 giúp cho phép thực hiện được việc này . Nó có thể thực hiện được 126 lệnh tại
cùng 1 thời điểm và có thể thực hiện 48 lệnh nạp và 24 lệnh lưu tại mỗi thời điểm.

a. Allocator và Register Renamer

Trong giai đoạn alloc, allocator sẽ:

- Dành ra một trong 126 reorder buffers (ROB) cho vi lệnh hiện thời. Nó cho phép thực hiện
vi lệnh không theo thứ tự (out-of-order), CPU có thể đặt chúng trở lại thứ tự cũ sử dụng bảng này.
- Dành ra một trong 128 register files (RF) để lƣu trữ kết quả dữ liệu từ xử lí vi lệnh.
- Nếu vi lệnh là nạp (LOAD) hoặc ghi (STORE), có nghĩa là nó sẽ đọc hoặc viết
dữ liệu trên bộ nhớ RAM, nó sẽ dành một trong số 48 bộ đệm nạp (Load Buffers - LB)
hoặc một trong 24 bộ đệm lưu trữ (Store Buffers - SB) tương ứng.
- Dành ra một đầu vào trên bộ nhớ hoặc hàng đợi, tuỳ thuộc vào từng vi lệnh.
Tập lệnh CISC x86 chỉ có 08 thanh ghi 32-bit (EAX, EBX, ECX, EDX, EBP, ESI,
EDI và ESP). Số này đơn giản là quá ít, đặc biệt là khi CPU có thể thực thi theo kiểu
out-of-order. Do đó, CPU phải đổi tên và nội dung của những thanh ghi đƣợc sử
dụng trong chương trình thành một trong 128 thanh ghi của CPU, điều này cho phép
những lệnh sử dụng cùng thanh ghi có thể chạy đồng thời. Thậm trí out-of-order, có
nghĩa là cho phép lệnh thứ hai chạy trước lệnh thứ nhất ngay cả khi chúng sử dụng
cùng một thanh ghi.

Chúng ta cần chú ý rằng Pentium IV thực sự có tới có 256 thanh ghi: 128 cho những lệnh
số nguyên và 128 thanh ghi cho lệnh dấu chấm động và lệnh SSE.
b. Scheduling functions
Scheduler là trái tim của hệ thống out-of-order Pentium IV. Mục đích của
Scheduler là giữ cho mọi execution unit trong CPU luôn luôn làm việc. Các vi lệnh
tới scheduler sẽ đƣợc nó phân tích và đặt vào một trong bốn scheduler unit tùy theo
kiểu của vi lệnh:
- Memory scheduler unit: cho những vi lệnh liên quan đến bộ nhớ. Những vi
lệnh này đến từ hàng đợi của các vi lệnh bộ nhớ (memory microinstruction
queue).
- Fast scheduler unit: cho những vi lệnh đơn giản.
- Slow / General FP scheduler unit: cho những vi lệnh khác và những vi lệnh xử lý
dấu chấm động phức tạp.
- Simple FP scheduler unit: cho những vi lệnh dấu chấm động đơn giản.

Scheduler sắp xếp những vi lệnh theo kiểu của chúng. Sau đó nó có thể gửi mỗi vi
lệnh trực tiếp tới Execution Unit tương ứng để xử lí. Những Execution Unit đƣợc nối
tới Scheduler qua 04 cổng gửi đi (dispatch port) được đánh số từ 0 tới 3, như
hình dưới đây:

C. Integer and Floating-Point Execution Units


a. Execution Unit
Execution Unit là nơi mà các lệnh thực sự được thực hiên.Nó được thiết kế ra để
tối ưu hoá hiệu suất tổng thể bằng cách xử lí các trường hợp phổ biến nhất càng nhanh
càng tốt.Có nhiều đơn vị thực hiện (Execution units) khác nhau trong vi kiến trúc
NetBurst.
Như đã đề cập, Pentium IV có bốn cổng gửi đi đánh số từ 0 tới 3. Mỗi cổng được nối tới
một, hai hoặc ba đơn vị thực thi (execution unit). Pentium IV có 05 execution unit làm việc
song song (02 FPU cho số dấu chấm động, 03 ALU cho số nguyên) và thêm 02 AGU để
đọc và ghi dữ liệu vào bộ nhớ RAM. Các execution unit, kể cả cùng loại, được chia ra phục
vụ những loại vi lệnh khác nhau như hình vẽ:

Phần chính của Rapid Execution Engine là các rapid execution unit, bao gồm hai
ALU và hai AGU được đánh dấu “clock x2” trên hình vẽ. Các vi lệnh đơn giản có thể
được thực thi bằng những đơn vị này và chỉ mất một nửa xung clock, những lệnh
dịch và xoay không thể đƣợc thực thi được bằng các rapid execution unit sẽ được
gửi đến “Slow ALU”. Cổng 0 và 1 có thể gửi hai vi lệnh trong một xung clock tới 2 rapid
execution ALU, do đó số lƣợng tối đa các vi lệnh có thể đƣợc chuyển đi trong một xung
clock là 6:
- Hai vi lệnh cho cổng 0
- Hai vi lệnh cho cổng 1
- Một vi lệnh cho cổng 2
- Một vi lệnh cho cổng 3
Một điều chúng ta cần nhớ là những lệnh phức tạp có thể cần đến vài xung
clock để xử lí. Ví dụ ở cổng số 1, có một đơn vị xử lý dấu chấm động. Trong khi đơn
vị này đang xử lý một lệnh rất phức tạp mất vài xung clock, cổng 1 sẽ vẫn tiếp tục
nhận các lệnh đơn giản nó và chuyển đến ALU trong khi FPU còn bận. Nếu để ý một
chút, ta thấy Intel đặt vào cùng một cổng một fast unit và một complex (slow) unit. Khi
complex unit còn đang bận tính toán, đơn vị còn lại có thể tiếp tục nhận vi lệnh
từ cổng tương ứng.
Nên, mặc dù tối đa chỉ có 6 lệnh được chuyển, thực sự CPU có thể có đến 7 lệnh cùng
được xử lý một lúc.
b. L1 Cache
Cache dữ liệu Level 1(L1) là một loại cache 8K-byte sử dụng cho cả các lệnh
load,store số nguyên ,dấu phẩy động/SSE.Nó được tổ chức thành 4 đường tập kết hợp
với 64 byte cho mỗi dòng cache (cache line).Nó là cache kiểu write-through,nghĩ là cái gì
mà được ghi vào nó thì sẽ luôn luôn được copy vào L2.Nó có thể thực hiện được 1 lênh
load và 1 lệnh store trong mỗi chu kì đồng hồ.
Độ trễ của hoạt động Load là một khía cạnh quan trọng của hiệu suất bộ vi xử lí.
Điều này đặc biệt đúng đối với các chương trình IA-32 có rất nhiều lệnh Load và các
Store vì số lượng hạn chế của các thanh ghi. Đối với hầu hết các chương trình IA 32 thì cấu
hình tuy nhỏ nhưng rất chậm,cache dữ liệu L1 theo sau bởi cache L2 có độ trễ trung
bình đem lại độ trễ truy nhập load thấp hơn,tuy nhiên hiệu suất lại cao hơn 1 cache L1
to và chậm hơn.

D. Memory Subsystem
Vi xử lí Pentium 4 có một memory subsystem với khả năng nổi bật cho phép ứng
dụng mới, các ứng dụng luồng định hướng bang thong cao như 3D, video, và content
creation. Memory subsystem bao gồm bộ nhớ cache mức 2 và bus hệ thống. Cache
level 2 lưu trữ các dữ liệu không lưu trữ được trong cache L1. Bus hệ thống ngoài
được sử dụng để truy cập main memory khi xảy ra miss ở cache mức 2 hay cũng để
truy cập hệ thống thiết bị I/O.

a. Cache mức 2 hay còn gọi là Advanced Transfer Cache

Bộ nhớ cache mức 2 là bộ nhớ cache 256K-byte mà giữ cả các lệnh bị miss trong
Trace Cache và dữ liệu bị miss trong cache dữ liệu mức 1. Bộ nhớ cache mức 2 được tổ
chức như một bộ 8 đường liên kết với 128 bytes trên một dòng cache. Những
đường cache 128-byte bao gồm 2 phần 64-byte sectors.

Cache L2 của Pentium 4 kết nối với cache dữ liệu L1 qua bus có độ rộng là 256-bit.
Trong các thế hệ vi xử lí trƣớc của Intel độ rộng này là 64-bit. Với một vàiphép toán đơn
giản ta sẽ thấy băng thông giữa cache L2 và nhân là 44.8GB/s vớiPentium 4 ở mức
xung 1.4 GHz và 48GB/s với Pentium 4 ở mức xung 1.5 GHz,nhanh gấp 4 lần so với
thế hệ trước với cùng một xung nhịp.
Cache L2 có các dung lượng có thể có 2-MB/1-MB/256-KB/512-KB

b. Bus hệ thống
Bộ vi xử lí Pentium IV có bus hệ thống với bang thông 3,2 Gbytes mỗi giây.
Băngthông cao là một tạo khả năng quan trọng cho các ứng dụng dòng dữ liệu từ
bộ nhớ.Băng thông này đạt được như vậy là nhờ một bus rộng 64 bit có khả năng
truyền dữ liệu với tốc độ 400MHz.Xung nhịp đồng hồ là 100MHz nhưng nhờ sử dụng
một công nghệ mới gọi là “quad-pumped” mà bus 100 MHz có thể gửi được tới 400
triệu dữ liệu trong một giây.Nó có một phương thức phân chia giao dịch (split-
transaction),ống lệnh sâu(deeply pipeline) cho phép memory subsystem cho phép
chồng chéo lên nhau nhiều yêu cầu đồng thời để thực sự cung cấp bang thông bộ nhớ cao
cho hệ thống thực.

TẬP LỆNH
A. Khuôn dạng lệnh P4

B. Các nhóm lệnh:

1. General Pupose (Nhóm lệnh chung)

2. System Instructions (Các lệnh hệ thống)

3. x87 FPU

4. x87 FPU và SIMD

5. Công nghệ MMX

6. SSE

7. SSE2

8. SSE3

9. IA-32e: 64-Bit Mode (chế độ 64 bit)


1. 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
2. Nhóm lệnh hệ thống (system instruction)

Các lệnh này 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. Sau đây
là một số lệnh thường gặp:
3. 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.

 x87 FPU Data Transfer Instructions (tập lệnh di chuyển dữ liệu)


FLD/FST: tải/lưu giá trị dấu phẩy động
FILD/FIST:tải/lưu số nguyên
FCMOVE/FCMOVNE:di chuyển số dẩu phảy động vs điều kiện bằng
nhau/không bằng nhau,
v..v…
 x87 FPU Basic ArithmetiC Instructions(tập lệnh số học cơ
bản) thực thi trên các toán hạng số nguyên và số thực dấu chấm
động; FADD/ FSUB: cộng/trừ toán hạng số thực dấu chấm động
FISUB: trừ số nguyên
FMUL/FIMUL: nhân toán hạng số thực dấu chấm động/số nguyên ..v…v
 x87 FPU Comparison Instructions (các lệnh so sánh)
kiểm tra hoặc so sánh các toán hạng số nguyên/số thực chấm động:
FCOM/FXAM: so sánh/kiểm tra các toán hạng dấu phảy động,
FTST kiểm tra toán hạng dấu phảy động (so sánh với 0.0)
FICOMP : so sánh các số nguyên
FCOMI : so sánh các số thực dấu chấm động và đặt EFLAGS (Compare
floating-point and set EFLAGS) …v…v
 x87 FPU Transcendental Instructions (các lệnh siêu việt)
thực thi các phép tính lượng giác và logarit trên các toán hạng dấu phảy động
 x87 FPU Load Constants Instructions (các lệnh tải hằng số)
các lệnh này sẽ tải các hằng số phổ biến vào các thanh ghi x87 floating-point
FLDZ Load +0.0, FLDPI Load π, FLDLG2 Load log10,FLDL2E Load log2e,
FLDLN2 Load loge, FLDL2T Load log210
 x87 FPU Control Instructions (các lệnh điều khiển)
FINCSTP/ FDECSTP: Increment/ Decrement FPU register stack pointer
FFREE : giải phóng thanh ghi chứa số thực dấu chấm động (Free floating-
point register)
FSTENV: lưu trữ môi trường FPU sau khi đã kiểm tra các điều kiện lỗi ( Store
FPU environment after checking error conditions)
FRSTOR : khôi phục các vùng FPU (Restore FPU state)

4. X87 FPU and SIMD state management instructions


Được giới thiệu từ dòng VXL Pentium II, SIMD (Single Instruction, Multiple Data:
một lệnh đơn,nhiều dữ liệu) cho phép một lệnh xử lý một số mục dữ liệu đồng thời.
Các tập lệnh MMX, SSE được xây dựng xoay quanh khái niệm này.

FXSAVE : lưu x87 FPU và SIMD


FXRSTOR : khôi phục x87 FPU và SIMD
Ban đầu,các lệnh này chỉ thực thi trên thanh ghi x87 FPU(và MMX) để lưu và
khôi phục một cách nhanh chóng, với sự giới thiệu của SSE ( phần mở rộng trong
Pentium III, các lệnh này được mở rộng để lưu và khôi phục trên các thanh ghi XMM và
MXCRS

5. Công nghệ MMX


Tập lệnh gồm 57 lệnh multimedia do Intel phát triển năm 1997. Mục đích chính
của MMX là nâng cao hiệu quả xử lý các lệnh lặp về âm thanh, hình ảnh và đồ họa.
Máy đạt được điều này phần nào do một dòng lệnh đơn có thể xử lý đồng thời một số
mục dữ liệu
Các lệnh MMX được thực hiện trên các gói byte, word, doubleword, quadword
được chứa trong bộ nhớ, thanh ghi MMX, thanh ghi chung. Các lệnh MMX chỉ được
thực hiện trên các VXL được hỗ trợ công nghệ MMX. Các lệnh MMX được chia
thành các nhóm sau

a. MMX Data Transfer Instructions (các lệnh di chuyển dữ liệu)


Các lệnh này sẽ di chuyển các lệnh doubleword và quadword giữa các thanh ghi
MMX, thanh ghi MMX và bộ nhớ
- MOVD : di chuyển doubleword
- MOVQ : di chuyển quadword

b. MMX Conversion Instructions (các lệnh chuyển đổi )


Chuyển qua lại giữa bytes, words, and doublewords

c. MMX Packed Arithmetic Instructions (các lệnh số học)

The packed arithmetic instructions perform packed integer arithmetic on packed byte,
word, and doubleword integers. (các lệnh này thực hiện việc đóng gói các phép
toán số học thao tác trên số nguyên vào các gói byte, word, doubleword )
PADDB/ PADDW/ PADDD: Add packed byte/word/doubleword integers
PSUBB/ PSUBW/ PSUBD: Subtract packed byte/word/doubleword integers
PMULHW / PMULLW: Multiply packed signed word integers and store
high/low result
PMADDWD: Multiply and add packed word integers

d. MMX Comparison Instructions (các lệnh so sánh)


The compare instructions compare packed bytes, words, or doublewords. (So ságiữa

byte, word, doubleword)

PCMPEQB Compare packed bytes for equal (so sánh byte)


PCMPEQW Compare packed words for equal (so sánh word)
PCMPEQD Compare packed doublewords for equal(so sánh doubleword)

e. MMX Logical Instructions (các lệnh logic)

Thực thi các toán tử logic cơ bản AND, NOT, OR, XOR trên các toán hạng
quadword

f. MMX Shift and Rotate Instructions (các lệnh dịch và quay)

The shift and rotate instructions shift and rotate packed bytes, words, or
doublewords, or quadwords in 64-bit operands.
( các lệnh này sẽ dịch và quay các byte, word, doubleword hoặc quadword trên các
toán hạng 64-bit).
Một số lệnh:

PSLLW/ PSLLD/ PSLLQ Shift packed words/doublewords/quadwords left


logical(dịch trái logic word/doubleword/quadword)
PSRAW/ PSRAD Shift packed words/ doublewords right arithmetic (dịch phải số
học word/doubleword)
6. SSE instructions
Là mở rộng của kiến trúc đơn dòng lệnh đa dữ liệu(SIMD) với công nghệ MMX,
SSE chỉ có thể thực thi trên các VXL Intel 64 và IA-32 mà hỗ trợ các mở rộng SSE
Thêm 70 lệnh mới giúp cải thiện hình ảnh, âm thanh và video 3D, tiếng nói, và
các chức năng Internet.

a. SIMD single-precision floating-point instructions that operate on the XMM

registers

- Thực thi với toán hạng dấu chấm động có độ chính xác đơn, trên các

thanh ghi XMM

Nhóm lệnh này được chia thành các nhóm nhỏ hơn:

 Các lệnh di chuyển dữ liệu (Data Transfer Instructions)


 SSE truyền dữ liệu: di chuyển toán hạng dấu chấm động có độ chính xác
đơn giữa các thanh ghi XMM và giữa các thanh ghi XMM với bộ nhớ
 Các lệnh số học (Arithmetic Instructions)

thực hiện các phép tính số học giữa các toán tử dấu phảy động có độ chính
xác đơn.một số lệnh
ADDPS: cộng các giá trị số thực dấu phảy động với độ chính xác đơn

SQRTPS: tính căn bậc 2

 Các lệnh so sánh (Comparison Instructions) các lệnh này sẽ so sánh các
toán hạng dấu chấm động có độ chính xác đơn. Ví dụ:
CMPPS: so sánh các giá trị số thực dấu phảy động với độ chính xác đơn

 Các lệnh logic (Logical Instructions): các lệnh này sẽ thực thi các toán tử
AND, OR, NOT, XOR trên các toán hạng dấu chấm động có độ chính xác
đơn
 Các lệnh chuyển đổi (Conversion Instructions)

CVTPI2PS: Convert packed doubleword integers to packed single-precision


Floating point values ( chuyển các số nguyên doubleword thành giá trị dấu
chấm động có độ chính xác đơn)
b. SSE MXCSR State Management Instructions (quản lý các MXCSR)
LDMXCSR: tải thanh ghi MXCSR (load MXCSR register) STMXCSR:
Save MXCSR register state.

7. Streaming SIMD Extension 2 (SSE2) Instructions


SSE2 có 144 lệnh mới. Các lệnh này bao gồm các tác vụ số Nguyên SIMD 128-bit
(128-bit SIMD integer arithmetic operations) và các tác vụ dấu chấm động với độ
chính xác kép SIMD 128-bit (128-bit SIMD double-precision floating-point
operations). Các lệnh mới này làm tối ưu hóa khả năng thực hịên các ứng dụng như
phim video, xử lý âm thanh - hình ảnh, mã hóa, tài chính, thiết kế và nghiên cứu
khoa học, kết nối mạng trực tuyến...
SSE2 extensions đại diện cho 1 sự mở rộng của mô hình thực thi SIMD(the SIMD
execution model) được giới thiệu với công nghệ MMX và SSE2 extension, các lệnh
SSE2 thực hiện trên gói chứa các toán hạng dấu chấm động với độ chính xác gấp đôi và
các gói byte, word, doubleword và quadword trong các thanh ghi XMM, tập lệnh SSE2
chỉ được thực hiện trên các VXL được hỗ trợ SSE2 extensions.

c. Double-precision floating-point instructions( các lệnh thực hiện trên các toán

hạng số thực dấu chấm động có độ chính xác kép) bao gồm:

- Di chuyển dữ liệu: di chuyển dữ liệu dấu chấm động có độ chính xác kép

giữa các thanh ghi XMM, thanh ghi XMM và bộ nhớ.ví dụ

- MOVAPD: di chuyển hai giá trị dấu chấm động có độ chính xác đơn giữa
thanh ghi XMM hoặc giữa thanh ghi XMM và bộ nhớ
- Số học: thực hiện các phép toán cộng/trừ/nhân/chia/tính căn bậc 2/min, max

trên các giá trị số thực dấu chấm động có độ chính xác kép

- ADDPD: cộng các giá trị dấu chấm động có độ chính xác kép

- MULSD: thực hiện phép nhân giá trị dấu chấm động có độ chính xác kép

- So sánh: so sánh các giá trị dấu chấm động có độ chính xác kép

- Chuyển đổi

- CVTPD2PI: chuyển đổi giá trị số thực dấu chấm động có độ chính xác đơn

sang số nguyên 32 bit

- Logic: thực hiện các phép toán logic trên các giá trị số thực có độ chính xác
kép
- ANDPD/XOR/NOT/OR: thực hiên phép toán logic AND/XOR/NOT/OR trên
giá trị số thực có độ chính xác kép
- Các lệnh khác (shuffle operations on double-precision floating-point
operands)
- SHUFPD: Shuffles values in packed double-precision floating-point operands
(sắp xếp lẫn lộn các toán hạng)

d. Packed single-precision floating-point conversion instructions(các lệnh


chuyển đổi trên số thực dấu chấm động có độ chính xác đơn)
thực hiện việc chuyển đổi trên các toán hạng dấu chấm động độ chính xác đơn và
số nguyên. Những lệnh này đại diện cho sự cải tiến từ tập lệnh tương tự trên SSE.
Một số lệnh:
CVTDQ2PS: chuyển giá trị số nguyên sang số thực dấu chấm động độ chính
xác đơn
CVTPS2DQ: chuyển giá trị dấu chấm động độ chính xác đơn sang số
nguyên

8. SSE3 instructions
Được phát triển từ thành công của công nghệ MMX (Matrix Math Extensions,
các mở rộng tính toán ma trận) từ thời CPU Pentium MMX, SSE (Streaming SIMD
Extensions, các mở rộng SIMD theo dòng) giờ đây đã được Intel phát triển tới phiên
bản thứ ba (SSE3) cho CPU Prescott với tên mã Prescott New Instructions (PNI, các
lệnh mới Prescott).
SIMD được viết tắt từ Single Instruction, Multiple Data (một lệnh, nhiều dữ liệu). Đó
là một bộ các hoạt động xử lý một cách hữu hiệu những khối lượng lớn dữ liệu song
song với nhau trong kiến trúc máy tính IA-32 (tức kiến trúc 32-bit).
SSE3 với 13 lệnh mới sẽ mở rộng các khả năng của SSE2, cải thiện hoạt động
của công nghệ siêu phân luồng HT cho hiệu quả hơn, tăng cường các chức năng
multimedia và Internet cho hệ thống.
Tập lệnh SSE3 chỉ được thực hiện trên các VXL IA-32 được hỗ trợ phần mở
rộng SSE3.
CPU Prescott có thêm 13 lệnh mới:

 1 lệnh cho tác vụ chuyển đổi floating point to integer:FISTTP


 5 lệnh cho tác vụ tính toán phức hợp complex arithmetic (tương đương với
các lệnh ADD/SUB/LOAD/MOVE/DUPLICATE)
ADDSUBPS, ADDSUBPD, MOVSHDUP, MOVSLDUP, MOVDDUP
 1 lệnh cho mã hóa video: LDDQU
 4 lệnh cho SIMD-FP dùng định dạng AOS /Array-of-Structures:
HADDPS, HSUBPS, HADDPD, HSUBPD
 2 lệnh cho sự đồng bộ hóa luồng thread synchronisation:
MONITOR: tạo 1 dãy địa chỉ để giám sát các kho dữ liệu được ghi lại
(Sets up an address range used to monitor write-back store
MWAIT: Enables a logical processor to enter into an optimized state while
waiting for a write-back store to the address range set up by the MONITOR
instruction ( cho phép một bộ xử lý logic nhập vào trạng thái tối ưu trong khi chờ
đợi kho dữ liệu ghi lại để dãy địa chỉ được thiết lập bởi lệnh
MONITOR)

9. 64-bit mode instructions


Các lệnh sau được giới thiệu với chế độ 64-bit, đây là chế độ phụ của IA-32:
CDQE: chuyển từ doubleword sang quadword (Convert doubleword to
quadword
CMPSQ: so sánh xâu (Compare string operand)
MOVSQ: di chuyển quadword từ địa chỉ (R)SI tới (R)DI
SYSRET: trở về từ lời gọi hệ thống nhanh

You might also like