Một số thanh ghi điển hình Các thanh ghi địa chỉ Bộ đếm chương trình PC Program Counter Con trỏ dữ liệu DP Data Pointer Con trỏ ngăn xếp SP Stack Pointer Thanh ghi cơ sở và Th
Trang 2Nội dung học phần
Trang 34.1 Giới thiệu chung kiến trúc tập lệnh
Trang 44.1 Giới thiệu chung về kiến trúc tập lệnh
Mô hình lập
trình của máy
tính
Trang 5Tập thanh ghi
Chức năng và đặc điểm:
Chứa các thông tin tạm thời phục vụ cho hoạt động ở thời điểm hiện tại của CPU
Được coi là mức đầu tiên của hệ thống nhớ
Số lượng thanh ghi nhiều tăng hiệu năng của CPU
Có hai loại thanh ghi:
Các thanh ghi lập trình được
Các thanh ghi không lập trình được
Trang 6
Phân loại thanh ghi theo chức năng
Thanh ghi địa chỉ: quản lý địa chỉ của ngăn nhớ hay cổng vào-ra
Thanh ghi dữ liệu: chứa tạm thời các dữ
Trang 7Một số thanh ghi điển hình
Các thanh ghi địa chỉ
Bộ đếm chương trình PC (Program Counter)
Con trỏ dữ liệu DP (Data Pointer)
Con trỏ ngăn xếp SP (Stack Pointer)
Thanh ghi cơ sở và Thanh ghi chỉ số (Base Register & Index Register)
Các thanh ghi dữ liệu
Thanh ghi trạng thái
Trang 8Bộ đếm chương trình PC
Còn được gọi là con trỏ
lệnh IP (Instruction
Pointer)
Giữ địa chỉ của lệnh
tiếp theo sẽ được nhận
vào
Sau khi một lệnh được
nhận vào, nội dung PC
tự động tăng để trỏ
sang lệnh kế tiếp
LÖnh LÖnh LÖnh kÕ tiÕp LÖnh sÏ ®-îc nhËn vµo
LÖnh LÖnh LÖnh
PC
Trang 9Thanh ghi con trỏ dữ liệu
Chứa địa chỉ của
D÷ liÖu D÷ liÖu D÷ liÖu
DP
Trang 10Ngăn xếp (Stack)
Ngăn xếp là vùng nhớ có cấu trúc LIFO
(Last In - First Out)
Ngăn xếp thường dùng để phục vụ cho
chương trình con
Đáy ngăn xếp là một ngăn nhớ xác định
Đỉnh ngăn xếp là thông tin nằm ở vị trí
trên cùng trong ngăn xếp
Đỉnh ngăn xếp có thể bị thay đổi
Trang 11Con trỏ ngăn xếp SP (Stack Pointer)
Chứa địa chỉ của ngăn nhớ đỉnh
ngăn xếp
Khi cất một thông tin vào ngăn
xếp:
Nội dung của SP giảm
Thông tin được cất vào ngăn nhớ
Nội dung của SP tăng
Khi ngăn xếp rỗng, SP trỏ vào đáy
§¸y Stack
§Ønh Stack SP
Trang 12Thanh ghi cơ sở và thanh ghi chỉ số
Thanh ghi cơ sở: chứa địa
chỉ của ngăn nhớ cơ sở
(địa chỉ cơ sở)
Thanh ghi chỉ số: chứa độ
lệch địa chỉ giữa ngăn
nhớ mà CPU cần truy
nhập so với ngăn nhớ cơ
sở (chỉ số)
Địa chỉ của ngăn nhớ cần
truy nhập = địa chỉ cơ sở
+ chỉ số
Ng¨n nhí cÇn truy nhËp
Ng¨n nhí c¬ së Thanh ghi c¬ së
Thanh ghi chØ sè
Trang 13Các thanh ghi dữ liệu
Chứa các dữ liệu tạm thời hoặc các kết
quả trung gian
Cần có nhiều thanh ghi dữ liệu
Các thanh ghi số nguyên: 8, 16, 32, 64
bit
Các thanh ghi số dấu phẩy động
Trang 14Thanh ghi trạng thái (Status Register)
Còn gọi là thanh ghi cờ (Flag Register)
Chứa các thông tin trạng thái của CPU
Các cờ phép toán: báo hiệu trạng thái của kết quả phép toán
Các cờ điều khiển: biểu thị trạng thái điều khiển của CPU
Trang 15Ví dụ cờ phép toán
Cờ Zero (cờ rỗng): được thiết lập lên 1 khi
kết quả của phép toán bằng 0
Cờ Sign (cờ dấu): được thiết lập lên 1 khi kết
quả phép toán nhỏ hơn 0
Cờ Carry (cờ nhớ): được thiết lập lên 1 nếu
phép toán có nhớ ra ngoài bit cao nhất cờ báo tràn với số không dấu
Cờ Overflow (cờ tràn): được thiết lập lên 1
nếu cộng hai số nguyên cùng dấu mà kết quả
có dấu ngược lại cờ báo tràn với số có
dấu
Trang 16Ví dụ cờ điều khiển
Cờ Interrupt (Cờ cho phép ngắt):
Nếu IF = 1 CPU ở trạng thái cho phép ngắt với tín hiệu yêu cầu ngắt từ bên ngoài gửi tới
Nếu IF = 0 CPU ở trạng thái cấm ngắt với tín hiệu yêu cầu ngắt từ bên ngoài gửi tới
Trang 17Thứ tự lưu trữ các byte trong bộ nhớ chính
Bộ nhớ chính thường đánh địa chỉ theo
byte
Hai cách lưu trữ thông tin nhiều byte:
thấp được lưu trữ ở ngăn nhớ có địa chỉ nhỏ, byte có ý nghĩa cao được lưu trữ ở ngăn nhớ có địa chỉ lớn
được lưu trữ ở ngăn nhớ có địa chỉ nhỏ, byte có ý nghĩa thấp được lưu trữ ở ngăn nhớ có địa chỉ lớn
Trang 18Ví dụ lưu trữ dữ liệu 32-bit
4D
1A 2B 3C
little-endian
300
303 302 301
1A
4D 3C 2B
big-endian
300
304 302 301
0001 1010 0010 1011 0011 1100 0100 1101
Trang 19Lưu trữ của các bộ xử lý điển hình
Intel 80x86 và các Pentium: little-endian
Motorola 680x0, MIPS, SunSPARC: big-endian
Power PC, Itanium: bi-endian
Trang 20Giới thiệu chung về tập lệnh
Mỗi bộ xử lý có một tập lệnh xác định
Tập lệnh thường có hàng chục đến hàng
trăm lệnh
Mỗi lệnh là một chuỗi số nhị phân mà bộ xử
lý hiểu được để thực hiện một thao tác xác định
Các lệnh được mô tả bằng các ký hiệu gợi
nhớ dạng text chính là các lệnh của hợp ngữ
Trang 21Các thành phần của lệnh máy
Mã thao tác (operation code opcode):
mã hóa cho thao tác mà bộ xử lý phải thực hiện
Địa chỉ toán hạng: chỉ ra nơi chứa các toán hạng mà thao tác sẽ tác động
Toán hạng nguồn: dữ liệu vào của thao tác
Toán hạng đích: dữ liệu ra của thao tác
M· thao t¸c §Þa chØ cña c¸c to¸n h¹ng
Trang 22Số lượng địa chỉ toán hạng trong lệnh (1)
Trang 23Số lượng địa chỉ toán hạng trong lệnh (2)
Hai địa chỉ toán hạng:
Một toán hạng vừa là toán hạng nguồn vừa là toán hạng đích; toán hạng còn lại là toán hạng nguồn
Trang 24Số lượng địa chỉ toán hạng trong lệnh (3)
Một địa chỉ toán hạng:
Một toán hạng được chỉ ra trong lệnh
Một toán hạng là ngầm định thường là thanh ghi (thanh chứa –accumulator)
Được sử dụng trên các máy ở các thế hệ trước
Trang 25Số lượng địa chỉ toán hạng trong lệnh (4)
có nghĩa là : c = a+b
không thông dụng
Trang 26Máy tính với tập lệnh thu gọn: RISC
CISCComplex Instruction Set Computer:
Máy tính với tập lệnh phức tạp
Các bộ xử lý truyền thống: Intel x86, Motorola 680x0
RISCReduced Instruction Set Computer:
Máy tính với tập lệnh thu gọn
SunSPARC, Power PC, MIPS, ARM
RISC đối nghịch với CISC
Trang 27Các đặc trưng của RISC
CPU có tập thanh ghi lớn
Có ít phương pháp định địa chỉ toán hạng(<=4)
Hỗ trợ các thao tác của ngôn ngữ bậc cao
Trang 284.2 Các kiểu thao tác của lệnh
Chuyển dữ liệu
Xử lý số học
Xử lý logic
Điều khiển vào-ra
Chuyển điều khiển (rẽ nhánh)
Điều khiển hệ thống
Trang 29Các lệnh chuyển dữ liệu
MOVE Copy dữ liệu từ nguồn đến đích
LOAD Nạp dữ liệu từ bộ nhớ đến bộ xử lý
STORE Cất dữ liệu từ bộ xử lý đến bộ nhớ
SET Chuyển các bit 1 vào toán hạng đích
PUSH Cất nội dung toán hạng nguồn vào ngăn xếp
POP Lấy nội dung đỉnh ngăn xếp đưa đến
toán hạng đích
Trang 30Các lệnh số học
ADD Cộng hai toán hạng
Trang 31Các lệnh logic
AND Thực hiện phép AND hai toán hạng
OR Thực hiện phép OR hai toán hạng
XOR Thực hiện phép XOR hai toán hạng
NOT Đảo bit của toán hạng (lấy bù 1)
TEST Thực hiện phép AND hai toán hạng
để lập cờ
Trang 32Minh hoạ các lệnh AND, OR, XOR
Giả sử có hai thanh ghi chứa dữ liệu như sau:
(R1) = 1010 1010
(R2) = 0000 1111
R1 (R1) AND (R2) = 0000 1010
Phép toán AND dùng để xoá một số bit và giữ
nguyên một số bit còn lại của toán hạng
Trang 33Quay tr¸i logic
Quay ph¶i logic
Trang 35Các lệnh chuyển điều khiển
CALL Lệnh gọi chương trình con
Trang 36Lệnh rẽ nhánh không điều kiện
Chuyển tới thực hiện lệnh
ở vị trí có địa chỉ XXX:
PC XXX
lÖnh lÖnh
lÖnh lÖnh
lÖnh
lÖnh_kÕ_tiÕp lÖnh_rÏ_nh¸nh XXX
lÖnh lÖnh
XXX
Trang 37
PC XXX
Nếu điều kiện sai chuyển
sang thực hiện lệnh_kế_tiếp
Điều kiện thường được kiểm
tra thông qua các cờ
Có nhiều lệnh rẽ nhánh có
điều kiện
lÖnh lÖnh
lÖnh lÖnh
lÖnh
lÖnh_kÕ_tiÕp lÖnh_rÏ_nh¸nh_®k XXX
lÖnh lÖnh
XXX
Trang 38
Nạp vào PC địa chỉ của lệnh đầu
tiên của chương trình con được gọi
Bộ xử lý được chuyển sang thực
hiện chương trình con tương ứng
Lệnh trở về từ chương trình
con: lệnh RETURN
Lấy địa chỉ của lệnh_kế_tiếp được
cất ở Stack nạp trả lại cho PC
Bộ xử lý được điều khiển quay trở
về thực hiện tiếp lệnh nằm sau lệnh
lÖnh lÖnh
lÖnh lÖnh lÖnh ®Çu tiªn cña CTCon
lÖnh_kÕ_tiÕp
CALL CTCon
lÖnh lÖnh
CTCon
RETURN
Trang 39
Gọi các thủ tục lồng nhau
Trang 40Các lệnh điều khiển hệ thống
HALT Dừng thực hiện chương trình
WAIT Tạm dừng thực hiện chương trình,
lặp kiểm tra điều kiện cho đến khi thoả mãn thì tiếp tục thực hiện
NO OPERATION Không thực hiện gì cả
LOCK Cấm không cho xin chuyển nhượng
bus
UNLOCK Cho phép xin chuyển nhượng bus
Trang 414.3 Các phương pháp định địa chỉ toán hạng
Toán hạng của lệnh có thể là:
Một giá trị cụ thể nằm ngay trong lệnh
Nội dung của thanh ghi
Nội dung của ngăn nhớ hoặc cổng vào-ra
Phương pháp định địa chỉ (addressing
modes) là cách thức địa chỉ hóa trong trường địa chỉ của lệnh để xác định nơi chứa toán hạng
Trang 42Các phương pháp định địa chỉ thông dụng
Định địa chỉ tức thì
Định địa chỉ thanh ghi
Định địa chỉ trực tiếp
Định địa chỉ gián tiếp qua thanh ghi
Định địa chỉ gián tiếp qua ngăn nhớ
Định địa chỉ dịch chuyển
Trang 43 Không tham chiếu bộ nhớ
Truy nhập toán hạng rất nhanh
Dải giá trị của toán hạng bị hạn chế
Trang 44Định địa chỉ thanh ghi
Toán hạng được chứa trong
thanh ghi có tên trong Trường
địa chỉ
Ví dụ:
ADD R1, R2 ; R1 R1+R2
Số lượng thanh ghi ít
Trường địa chỉ chỉ cần ít bit
Không tham chiếu bộ nhớ
Truy nhập toán hạng nhanh
Tăng số lượng thanh ghi
hiệu quả hơn
M· thao t¸c Tªn thanh ghi
TËp thanh ghi
To¸n h¹ng
Trang 45Định địa chỉ trực tiếp
Toán hạng là ngăn nhớ có địa
chỉ được chỉ ra trực tiếp trong
Trường địa chỉ của lệnh
Ví dụ:
ADD R1, A ;R1 R1 + (A)
Cộng nội dung thanh ghi R1 với
nội dung của ngăn nhớ có địa chỉ
Trang 46Định địa chỉ gián tiếp qua thanh ghi
Toán hạng là ngăn nhớ
có địa chỉ nằm trong
thanh ghi
Trường địa chỉ cho biết
tên thanh ghi đó
Thanh ghi có thể là
ngầm định
Thanh ghi này được gọi
là thanh ghi con trỏ
Vùng nhớ có thể được
tham chiếu là lớn (2 n ),
(với n là độ dài của
M· thao t¸c Tªn thanh ghi
TËp thanh ghi
Bé nhí
§Þa chØ
To¸n h¹ng
Trang 47Định địa chỉ gián tiếp qua ngăn nhớ
Ngăn nhớ được trỏ bởi
Trường địa chỉ của lệnh
chứa địa chỉ của toán
hạng
Có thể gián tiếp nhiều lần
Giống như khái niệm biến
con trỏ và biến động trong
Trang 48+
Trang 49Các dạng của định địa chỉ dịch chuyển
Địa chỉ hoá tương đối với PC
Thanh ghi là Bộ đếm chương trình PC
Toán hạng có địa chỉ cách ngăn nhớ được trỏ bởi PC một độ lệch xác định
Trang 504.4 Kiến trúc tập lệnh MIPS
Trang 51 Large share of embedded core market
Applications in consumer electronics, network/storage equipment, cameras, printers, …
Typical of many modern ISAs
Trang 52Arithmetic Operations
Add and subtract, three operands
Two sources and one destination
add a, b, c # a gets b + c
All arithmetic operations have this form
Trang 53Register Operands
Arithmetic instructions use register
operands
MIPS has a 32 × 32-bit register file
Use for frequently accessed data
Numbered 0 to 31
32-bit data called a “word”
Assembler names
$t0, $t1, …, $t9 for temporary values
$s0, $s1, …, $s7 for saved variables
Trang 54MIPS Register File
b yte h a s th e
l o w e s t a d d re s s )
Trang 55A typical instruction for MIPS and steps in its execution
In s t ru c t io n
c a c h e
D a t a c a c h e (n o t u s e d )
R e g is t e r file
Trang 56Register Operand Example
Trang 57Memory Operands
Main memory used for composite data
Arrays, structures, dynamic data
To apply arithmetic operations
Load values from memory into registers
Store result from register to memory
Memory is byte addressed
Each address identifies an 8-bit byte
Words are aligned in memory
Address must be a multiple of 4
MIPS is Big Endian
Most-significant byte at least address of a word
( Little Endian: least-significant byte at least address)
Trang 58Memory Operand Example 1
C code:
g = h + A[8];
g in $s1, h in $s2, base address of A in $s3
Compiled MIPS code:
Index 8 requires offset of 32 (index from 0)
4 bytes per word
lw $t0, 32($s3) # load word
add $s1, $s2, $t0
offset base register
Trang 59Memory Operand Example 2
C code:
A[12] = h + A[8];
h in $s2, base address of A in $s3
Compiled MIPS code:
Index 8 requires offset of 32
lw $t0, 32($s3) # load word
add $t0, $s2, $t0
sw $t0, 48($s3) # store word
Trang 60Registers vs Memory
Registers are faster to access than
memory
Operating on memory data requires
loads and stores
More instructions to be executed
Compiler must use registers for
variables as much as possible
Only spill to memory for less frequently used variables
Register optimization is important!
Trang 61Immediate Operands
Constant data specified in an instruction
addi $s3, $s3, 4 # $s3 $s3+4
No subtract immediate instruction
Just use a negative constant
addi $s2, $s1, -1
Trang 62The Constant Zero
MIPS register 0 ($zero) is the constant 0
Cannot be overwritten
Useful for common operations
E.g., move between registers add $t2, $s1, $zero
Trang 63Representing Instructions
Instructions are encoded in binary
Called machine code
MIPS instructions
Encoded as 32-bit instruction words
Small number of formats encoding operation code (opcode), register numbers, …
Register numbers
$t0 – $t7 are reg’s 8 – 15
$t8 – $t9 are reg’s 24 – 25
$s0 – $s7 are reg’s 16 – 23
Trang 64MIPS Instruction Formats
Trang 65MIPS R-format Instructions
Instruction fields
op: operation code (opcode)
rs: first source register number
rt: second source register number
rd: destination register number
shamt: shift amount (00000 for now)
funct: function code (extends opcode)
op rs rt rd shamt funct
Trang 67MIPS I-format Instructions
Immediate arithmetic and load/store
Trang 68MIPS lw and sw instructions and their memory addressing convention that allows for simple access to array elements via a base address and
Trang 69lui $s0, 61 # The immediate value 61 is
# loaded in upper half of $s0
# with lower 16b set to 0s
Trang 70Stored Program Computers
Instructions represented in binary, just like data
Instructions and data stored
in memory
Programs can operate on programs
e.g., compilers, linkers, …
Binary compatibility allows compiled programs to work
on different computers
Standardized ISAs
Trang 71Logical Operations
Instructions for bitwise manipulation
Operation C Java MIPS Shift left << << sll Shift right >> >>> srl Bitwise AND & & and, andi Bitwise OR | | or, ori Bitwise NOT ~ ~ nor
Useful for extracting and inserting
groups of bits in a word
Trang 72Shift Operations
shamt: how many positions to shift
Shift left logical
Shift left and fill with 0 bits
sll by i bits multiplies by 2 i
Shift right logical
Shift right and fill with 0 bits
srl by i bits divides by 2 i (unsigned only)
op rs rt rd shamt funct
Trang 73AND Operations
Useful to mask bits in a word
Select some bits, clear others to 0 and $t0, $t1, $t2
Trang 74OR Operations
Useful to include bits in a word
Set some bits to 1, leave others unchanged
Trang 77Conditional branches use PC-relative addressing
Trang 79Compiling Loop Statements
j Loop Exit: …
Trang 80Basic Blocks
A basic block is a sequence of instructions with
No embedded branches (except at end)
No branch targets (except at beginning)
A compiler identifies basic blocks for optimization
An advanced processor can accelerate execution
of basic blocks
Trang 81More Conditional Operations
Set result to 1 if a condition is true
Trang 82slt $s1,$s2,$s3 # if ($s2)<($s3), set $s1 to 1 # else set $s1 to 0;
# often followed by beq/bne slti $s1,$s2,61 # if ($s2)<61, set $s1 to 1 # else set $s1 to 0
Trang 83Branch Instruction Design
Why not blt, bge, etc?
Hardware for <, ≥, … slower than =, ≠
Combining with branch involves more work per instruction, requiring a slower clock
All instructions penalized!
beq and bne are the common case
This is a good design compromise