lOMoARcPSD| 59994889
Bài 08: Kiến trúc x86-32bit
Phạm Tuấn Sơn
ptson@fit.hcmus.edu.vn
lOMoARcPSD| 59994889
2
L
ch s
phát tri
n vi x
lý Intel
Vi x
đầ
u tiên c
a Intel
4-
bit
Thanh ghi 8-bit
Đư
ng truy
n d
li
u 8-bit
Đư
ng truy
n
đị
a ch
16-bit (có th
truy xu
t b
nh
RAM 64 KB)
Đư
c s
d
ng trên máy tính cá nhân
đầ
u tiên -
Altair
Intel 8086/8088 (1978)
Thanh ghi 16-bit
Đư
ng truy
n d
li
u 16-bit (8088: 8-bit)
Đư
ng truy
n
đị
a ch
20-bit
Đư
c dùng trên máy tính cá nhân IBM PC
đầ
u tiên
Intel 80286 (1982)
Có th
truy xu
t b
nh
16 MB
Đư
ng truy
n
đị
a ch
24-bit
lOMoARcPSD| 59994889
3
L
ch s
phát tri
n vi x
lý Intel (tt)
Ki
ế
n trúc x86-32bit (IA-32)
Intel 80386/ i386 (1985)
Thanh ghi 32 bit
Đư
ng truy
n
đị
a ch
32-bit
Intel 80486/ i486 (1989)
K
thu
t
đư
ng
ng (pipelining)
Pentium (1993)
Đư
ng truy
n d
li
u 64-bit
Siêu vô h
ướ
ng (2
đư
ng
ng song song)
Pentium Pro (1995), II (1997), III (1999), IV (200
0)
, M
(2003).
lOMoARcPSD| 59994889
4
L
ch s
phát tri
n vi x
lý Intel (tt)
Ki
ế
n trúc x86-64bit
Athlon64 c
a AMD (2003)
B
vi x
lý x86-64bit
đầ
u tiên
Pentium 4 Prescott (2004)
Core 2 (2006), Core i3, i5, i7, Atom (2008)
Intel Sandy Bridge (2010)
Ki
ế
n trúc IA-64
Itanium (2001)
lOMoARcPSD| 59994889
5
Ki
ế
n trúc x86-32bit
Ch
ế
độ
ho
t
độ
ng
T
ch
c b
nh
T
p thanh ghi
T
p l
nh
Ng
ă
n x
ế
p
Th
t
c
lOMoARcPSD| 59994889
6
Ch
ế
độ
ho
t
độ
ng
Ch
ế
độ
th
c
16
bit
(8086)
Truy xu
t 1 MB b
nh
chính
MS-DOS
Ch
ế
độ
b
o v
32
bit
Truy xu
t 4 GB b
nh
chính
Windows, Linux
Ch
ế
độ
qu
n lý h
th
ng
Qu
n lý ngu
n cung c
p
Ch
n l
i và b
o m
t h
th
ng
Ch
ế
độ
8086
o
Ch
ế
độ
th
c d
ướ
i s
qu
n lý c
a ch
ế
độ
b
o v
Cho phép ho
t
độ
ng
đồ
ng th
i
2 ch
ế
độ
lOMoARcPSD| 59994889
7
lOMoARcPSD| 59994889
8
Chuyển đổi đa ch chế độ thc
Địa ch logic  địa ch vt lý
Phy_address = segment * 10h + offset
Vd: địa ch logic 1234h:0005h s ng với địa ch vt
1234 h * 10h + 0005h = 12340h + 0005h = 12345h
Địa ch vt lý địa ch logic
Do các đoạn gối đầu nhau nên mi ô nh có th thuc
một vài đoạn khác nhau. Vì vy, mt đa ch vt lý có
th ng vi nhiều địa ch logic khác nhau.
Vd: địa ch vt lý 12345h có th ng với các địa ch
logic sau:
1234h:0005h, 1230h:0045 h
1200h:0345h, 1000h:2345 h
lOMoARcPSD| 59994889
9
1232h:0025h,
T chc b nh chế đ bo v
B nh cũng được chia thành các đoạn. Tuy nhiên, kích
thước các đoạn không được định sẵn như chế độ thc.
Do đó, để định v một đoạn nào đó thì phải s dng mt
bng mô t các đoạn.
Để truy xut vào mt ô
nh trong b nh chính
thì cũng phải thc hin
chuyển đổi t địa ch
logic (segment, offset)
thành địa ch vt lý
3000
RAM
00003000
Local Descriptor Table
0002
00008000
000
A
00026000
0010
base
limit
access
8000
26000
lOMoARcPSD| 59994889
10
Chuy
n
đổ
i
đị
a ch
ch
ế
độ
b
o v
Th
c hi
n quá
trình chuy
n
đổ
i
đị
a ch
m
t
b
ướ
c
ho
c
hai
b
ướ
c
để
chuy
n
đổ
i t
đị
a ch
logic
segment, offset)
(
thành
đị
a ch
v
t
B
ướ
c 1, k
ế
t h
p
segment và
offset thành
đị
a
ch
tuy
ế
n tính
)
linear address
(
Selector
Offset
Logical address
Segment Descriptor
Descriptor table
+
GDTR/LDTR
(
contains base address of
descriptor table)
Linear address
lOMoARcPSD| 59994889
11
Chuy
n
đổ
i
đị
a ch
ch
ế
độ
b
o v
(tt)
B
ướ
c 2, chuy
n
đị
a ch
tuy
ế
n tính thành
đị
a ch
v
t lý
(
physical address
)
Directory
Table
Offset
Directory Entry
CR3
Page Directory
Page-Table Entry
Page Table
Physical Address
Page Frame
Linear Address
10
10
12
32
lOMoARcPSD| 59994889
12
Chương trình chạy trên h thng
Chương trình chạy trên h thng thông thường chiếm 3
đon b nh
Một đoạn dành cho mã lnh (code segment)
Một đoạn dành cho d liu (data segment)
Một đoạn ngăn xếp (stack segment) dành để lưu các giá trị trung
gian hoặc các địa ch tr v dùng khi gi hàm
Trên h thng x86, cn có các thanh ghi chứa địa ch
đoạn và địa ch ô để truy xut b nh
lOMoARcPSD| 59994889
13
lOMoARcPSD| 59994889
14
Mt s thanh ghi khác
Thanh ghi chứa địa ch lnh (EIP 32 bit), kết hp thanh
ghi đoạn CS 16 bit (CS:EIP )
Thanh ghi c (EFLAGS 32 bit )
32 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
0
……. VM RF NT IO IO OF DF IF TF SF ZF AF PF CF
PL PL
Carry: c tràn không du
Overflow: c tràn có du
Sign: c du
Zero: c zero
Auxiliary Carry: c nh t bit 3 vào bit 4
Parity: c chn l
Giá tr ca tng c đưc thiết lp sau mi lệnh được thc thi
lOMoARcPSD| 59994889
15
Mt s thanh ghi khác: IDTR (16bit), GDTR (48bit), LDTR
(48bit), TR (16bit), ...
lOMoARcPSD| 59994889
16
lOMoARcPSD| 59994889
17
ADD CL, AL
Lnh này cng dn giá tr trong thanh ghi AL vào
thanh ghi CL: CL = CL + AL Giá tr 001
(kết hp vi
Giá tr 11 trường d=0) Giá tr
0 cho biết cho biết cho biết toán cng dồn trường
trường R/M hạng đích là
REG vào trường R/M là thanh ghi thanh ghi CL
d Kiu R/M
… … 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 … …
Mã thao tác ca REG
lnh ADD là s Giá tr 000 (kết
000000 hp với trường
d=0) cho biết
Giá tr 0 cho biết toán hng lnh
thc hin ngun là thanh trên 2 giá tr
8-bit ghi AL
lOMoARcPSD| 59994889
18
ADD ECX, EAX
Lnh này cng dn giá tr trong thanh ghi EAX
vào thanh ghi ECX
Giá tr 0 cho biết cng
dồn trường
REG vào trường R/M
d
… … 0 0 0 0 0 0
0 1
Mã thao tác ca
lnh ADD là s
000000
Giá tr 1 cho biết
lnh thc hin
trên 2 giá tr 32-bit
Giá tr 001
(kết hp vi
Giá tr 11 trường d=0) cho
biết cho biết toán trường R/M
hạng đích là là thanh ghi
thanh ghi ECX
Kiu R/M
1 1 0 0 0 0 0 1 … … …
REG
Giá tr 000 (kết
hp với trường
d=0) cho biết
toán hng
ngun là thanh
ghi EAX
lOMoARcPSD| 59994889
19
ADD EDX, [2000]
Lnh này cng dn giá tr t nh 4 byte có địa ch
bt đu là DS:2000 vào thanh ghi EDX
Giá tr 00 kết hp vi
Giá tr 1 cho biết trường R/M=101 cho cng dn
trường biết đnh v b nh theo
R/M vào trường REG độ di
d Kiu R/M
… … 0 0 0 0 0 0 1 1 0 0 0 1 1 1 0 1 … … …
Mã thao tác ca REG S dng 4 lnh ADD là s Giá tr 011 (kết byte
ca
000000 hp với trường trường độ
d=1) cho biết di biu Giá tr 1 cho
biết toán hạng đích din giá tr lnh thc hin là thanh ghi
2000
trên 2 giá tr 32-bit EDX
lOMoARcPSD| 59994889
20
ADD EDI, [EBX]
Lnh này cng dn giá tr t nh 4 byte có địa ch
bt đu là DS:EBX vào thanh ghi EDI
Giá tr 1 cho biết cng
dồn trường
R/M vào trường REG
d
… … 0 0 0 0 0 0 1 1
Mã thao tác ca
lnh ADD là s
000000
Giá tr 1 cho biết
lnh thc hin
trên 2 giá tr 32-
bit Giá tr 00
cho biết không dùng Giá tr 011
cho trường độ biết đnh v b
di nh [EBX]
Kiu R/M
0 0 1 1 1 0 1 1 … … …
REG
Giá tr 111 (kết
hp với trường
d=1) cho biết
toán hạng đích
là thanh ghi
EDI

Preview text:

lOMoAR cPSD| 59994889
Bài 08: Kiến trúc x86-32bit Phạm Tuấn Sơn ptson@fit.hcmus.edu.vn lOMoAR cPSD| 59994889 Lị ử ể ử ch s phát tri n vi x lý Intel • Intel 4004 (1971)
– Vi x ử lý đầ u tiên c ủ a Intel – 4- bit • Intel 8080 (1972) – Thanh ghi 8-bit
– Đườ ng truy ề n d ữ li ệ u 8-bit
– Đườ ng truy ề n đị a ch ỉ 16-bit (có th ể truy xu ấ t b ộ nh ớ RAM 64 KB)
– Đượ c s ử d ụ ng trên máy tính cá nhân đầ u tiên - Altair • Intel 8086/8088 (1978) – Thanh ghi 16-bit
– Đườ ng truy ề n d ữ li ệ u 16-bit (8088: 8-bit)
– Đườ ng truy ề n đị a ch ỉ 20-bit
– Đượ c dùng trên máy tính cá nhân IBM PC đầ u tiên • Intel 80286 (1982)
– Có th ể truy xu ấ t b ộ nh ớ 16 MB
– Đườ ng truy ề n đị a ch ỉ 24-bit 2 lOMoAR cPSD| 59994889 Lị ử ể ử ch s
phát tri n vi x lý Intel (tt) • ế Ki n trúc x86-32bit (IA-32) – Intel 80386/ i386 (1985) • Thanh ghi 32 bit
• Đườ ng truy ề n đị a ch ỉ 32-bit – Intel 80486/ i486 (1989)
• K ỹ thu ậ t đườ ng ố ng (pipelining) – Pentium (1993)
• Đườ ng truy ề n d ữ li ệ u 64-bit
• Siêu vô h ướ ng (2 đườ ng ố ng song song)
– Pentium Pro (1995), II (1997), III (1999), IV (200 0) , M (2003). 3 lOMoAR cPSD| 59994889 Lị ử ể ử ch s
phát tri n vi x lý Intel (tt) • ế Ki n trúc x86-64bit
– Athlon64 c ủ a AMD (2003)
• B ộ vi x ử lý x86-64bit đầ u tiên – Pentium 4 Prescott (2004)
– Core 2 (2006), Core i3, i5, i7, Atom (2008) – Intel Sandy Bridge (2010) • ế Ki n trúc IA-64 – Itanium (2001) 4 lOMoAR cPSD| 59994889 Kiến trúc x86-32bit • ế độ ạ độ Ch ho t ng • ổ ứ ộ ớ T ch c b nh • ậ T p thanh ghi • ậ ệ T p l nh • ă ế Ng n x p • ủ ụ Th t c 5 lOMoAR cPSD| 59994889 Chế độ hoạt động • Ch ế độ th ự c – 16 bit (8086)
– Truy xu ấ t 1 MB b ộ nh ớ chính – MS-DOS • Ch ế độ b ả o v ệ – 32 bit
– Truy xu ấ t 4 GB b ộ nh ớ chính – Windows, Linux • Ch ế độ 8086 ả o •
Ch ế độ th ự c d ướ i s ự qu ả n lý c ủ a ch ế độ b ả o v ệ •
Cho phép ho ạ t độ ng đồ ng th ờ i ở 2 ch ế độ • Ch ế độ qu ả n lý h ệ th ố ng
– Qu ả n lý ngu ồ n cung c ấ p
– Ch ẩ n l ỗ i và b ả o m ậ t h ệ th ố ng 6 lOMoAR cPSD| 59994889 7 lOMoAR cPSD| 59994889
Chuyển đổi địa chỉ ở chế độ thực
• Địa chỉ logic  địa chỉ vật lý
– Phy_address = segment * 10h + offset
– Vd: địa chỉ logic 1234h:0005h sẽ ứng với địa chỉ vật lí
1234 h * 10h + 0005h = 12340h + 0005h = 12345h
• Địa chỉ vật lý địa chỉ logic
– Do các đoạn gối đầu nhau nên mỗi ô nhớ có thể thuộc
một vài đoạn khác nhau. Vì vậy, một địa chỉ vật lý có
thể ứng với nhiều địa chỉ logic khác nhau.
– Vd: địa chỉ vật lý 12345h có thể ứng với các địa chỉ logic sau: 1234h:0005h, 1230h:0045 h 1200h:0345h, 1000h:2345 h 8 lOMoAR cPSD| 59994889 1232h:0025h, …
Tổ chức bộ nhớ chế độ bảo vệ
• Bộ nhớ cũng được chia thành các đoạn. Tuy nhiên, kích
thước các đoạn không được định sẵn như chế độ thực.
• Do đó, để định vị một đoạn nào đó thì phải sử dụng một bảng mô tả các đoạn. RAM
• Để truy xuất vào một ô nhớ trong bộ nhớ chính thì cũng phả Local Descriptor Table i thực hiện
chuyển đổi từ địa chỉ logic (segment, offset) 26000 base limit access thành địa chỉ vật lý 00026000 0010 00008000 000 A 00003000 0002 8000 3000 9 lOMoAR cPSD| 59994889 Chuyể đổ đị ỉ ở ế độ ả ệ n i a ch ch b o v • Th ự c hi ệ n quá Logical address trình chuy Selector Offset ể n đổ i đị a ch ỉ m ộ t b ướ c Descriptor table ho ặ c hai b ướ c để chuy ể n đổ i t ừ đị a ch ỉ logic Segment Descriptor + segment, ( offset) thành đị a ch ỉ v ậ t lý
• B ướ c 1, k ế t h ợ p GDTR/LDTR segment và Linear address offset thành ( contains base address of đị a descriptor table) ch ỉ tuy ế n tính li ( ne ) ar address 10 lOMoAR cPSD| 59994889 Chuyể đổ đị ỉ ở ế độ ả ệ n i a ch ch b o v (tt)
• B ướ c 2, chuy ể n đị a ch ỉ tuy ế n tính thành đị a ch ỉ v ậ t lý ( physical address ) Linear Address 10 10 12 Directory Table Offset Page Frame Page Directory Page Table Physical Address Page-Table Entry Directory Entry CR3 32 11 lOMoAR cPSD| 59994889
Chương trình chạy trên hệ thống
• Chương trình chạy trên hệ thống thông thường chiếm 3 đoạn bộ nhớ
– Một đoạn dành cho mã lệnh (code segment)
– Một đoạn dành cho dữ liệu (data segment)
– Một đoạn ngăn xếp (stack segment) dành để lưu các giá trị trung
gian hoặc các địa chỉ trở về dùng khi gọi hàm
• Trên hệ thống x86, cần có các thanh ghi chứa địa chỉ
đoạn và địa chỉ ô để truy xuất bộ nhớ 12 lOMoAR cPSD| 59994889 13 lOMoAR cPSD| 59994889 Một số thanh ghi khác
• Thanh ghi chứa địa chỉ lệnh (EIP – 32 bit), kết hợp thanh
ghi đoạn CS – 16 bit (CS:EIP )
• Thanh ghi cờ (EFLAGS – 32 bit ) 32 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ……. VM RF NT IO IO OF DF IF TF SF ZF AF PF CF PL PL
– Carry: cờ tràn không dấu
– Overflow: cờ tràn có dấu – Sign: cờ dấu – Zero: cờ zero
– Auxiliary Carry: cờ nhớ từ bit 3 vào bit 4 – Parity: cờ chẵn lẻ – …
Giá trị của từng cờ được thiết lập sau mỗi lệnh được thực thi 14 lOMoAR cPSD| 59994889
• Một số thanh ghi khác: IDTR (16bit), GDTR (48bit), LDTR (48bit), TR (16bit), ... 15 lOMoAR cPSD| 59994889 16 lOMoAR cPSD| 59994889 ADD CL, AL
• Lệnh này cộng dồn giá trị trong thanh ghi AL vào
thanh ghi CL: CL = CL + AL Giá trị 001 (kết hợp với Giá trị 11 trường d=0) Giá trị
0 cho biết cho biết cho biết toán cộng dồn trường
trường R/M hạng đích là REG vào trường R/M là thanh ghi thanh ghi CL d Kiểu R/M … … 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 … … … Mã thao tác của REG lệnh ADD là s Giá trị 000 (kết 000000 hợp với trường d=0) cho biết Giá trị 0 cho biết toán hạng lệnh
thực hiện nguồn là thanh trên 2 giá trị 8-bit ghi AL 17 lOMoAR cPSD| 59994889 ADD ECX, EAX
• Lệnh này cộng dồn giá trị trong thanh ghi EAX vào thanh ghi ECX trên 2 giá trị 32-bit Giá trị 001 (kết hợp với Giá trị 11 trường d=0) cho
Giá trị 0 cho biết cộng
biết cho biết toán trường R/M dồn trường
hạng đích là là thanh ghi REG vào trường R/M thanh ghi ECX d Kiểu R/M … … 0 0 0 0 0 0 1 1 0 0 0 0 0 1 … … … 0 1 REG Mã thao tác của Giá trị 000 (kết lệnh ADD là s hợp với trường 000000 d=0) cho biết toán hạng Giá trị 1 cho biết nguồn là thanh lệnh thực hiện ghi EAX 18 lOMoAR cPSD| 59994889 ADD EDX, [2000]
• Lệnh này cộng dồn giá trị từ nhớ 4 byte có địa chỉ
bắt đầu là DS:2000 vào thanh ghi EDX
Giá trị 00 kết hợp với
Giá trị 1 cho biết trường R/M=101 cho cộng dồn
trường biết định vị bộ nhớ theo
R/M vào trường REG độ dời d Kiểu R/M
… … 0 0 0 0 0 0 1 1 0 0 0 1 1 1 0 1 … … …
Mã thao tác của REG Sử dụng 4 lệnh ADD là s Giá trị 011 (kết byte của
000000 hợp với trường trường độ d=1) cho biết dời biểu Giá trị 1 cho
biết toán hạng đích diễn giá trị lệnh thực hiện là thanh ghi 2000 trên 2 giá trị 32-bit EDX 19 lOMoAR cPSD| 59994889 ADD EDI, [EBX]
• Lệnh này cộng dồn giá trị từ nhớ 4 byte có địa chỉ
bắt đầu là DS:EBX vào thanh ghi EDI
Giá trị 1 cho biết cộng
cho biết không dùng Giá trị 011 dồn trường
cho trường độ biết định vị bộ R/M vào trường REG dời nhớ [EBX] d Kiểu R/M … … 0 0 0 0 0 0 1 1 0 0 1 1 1 0 1 1 … … … Mã thao tác của REG lệnh ADD là s Giá trị 111 (kết 000000 hợp với trường d=1) cho biết Giá trị 1 cho biết toán hạng đích lệnh thực hiện là thanh ghi trên 2 giá trị 32- EDI bit Giá trị 00 20