)Kiến trúc của máy tính bao gồm 2 phần
•Kiến trúc phần cứng
•Kiến trúc tập lệnh
)Cả 2 phần trên có mối quan hệ tương hỗ với nhau
)Có 2 cách để tiếp cận đến kiến trúc máy tính
•Tiếp cận từ phần cứng
•Tiếp cận từ tập lệnh
Ö chúng ta chọn cách tiếp cận từ tập lệnh
)Sử dụng hợp ngữ để giới thiệu tập lệnh
)Dùng tập lệnh của bộ xử lý MIPS để minh họa chính
47 trang |
Chia sẻ: lylyngoc | Lượt xem: 2565 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Chương 3 Câu lệnh: ngôn ngữ của máy, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Khoa KH & KT Máy tính
Boää moânâ Kyõõ thuaäät Maùùy tính
Phaïïm Töôøøng Haûûi
Nguyeãnã Quoáác Tuaáán
Kiến trúc Máy tính - Chap 03 2
Tài liệu tham khảo
) “Computer Organization and Design: the hardware/software
interface”,
John L. Hennessy & David A. Patterson, Second Edition,
MORGAN KAUFMANN PUBLISHERS, INC. 1998
) “Computer Architecture: a quantitative approach”,
John L. Hennessy & David A. Patterson, Third Edition,
MORGAN KAUFMANN PUBLISHERS, INC. 2002
Kiến trúc Máy tính - Chap 03 3
Chương 3.
Kiến trúc Máy tính - Chap 03 4
3.1 Dẫn nhập
)Kiến trúc của máy tính bao gồm 2 phần
• Kiến trúc phần cứng
• Kiến trúc tập lệnh
)Cả 2 phần trên có mối quan hệ tương hỗ với nhau
)Có 2 cách để tiếp cận đến kiến trúc máy tính
• Tiếp cận từ phần cứng
• Tiếp cận từ tập lệnh
Ö chúng ta chọn cách tiếp cận từ tập lệnh
)Sử dụng hợp ngữ để giới thiệu tập lệnh
)Dùng tập lệnh của bộ xử lý MIPS để minh họa chính
Kiến trúc Máy tính - Chap 03 5
3.2 Phép toán
)Các máy tính đều có thể thực hiện các phép toán số học
)Xét câu lệnh sau (hợp ngữ MIPS)
add a , b , c
• Chỉ thị cho máy tính thực hiện phép toán cộng
• Phép toán trên chỉ có thể thực hiện với 3 toán hạng
)Nếu muốn thực hiện phép toán với nhiều toán hạng ?
• Phải dùng nhiều câu lệnh để chỉ thị
add a , b , c # the sum of b and c is placed in a
add a , a , d # the sum of b, c and d is placed in a
add a , a , e # the sum of b, c, d and e is placed in a
• Mỗi hàng dành để ghi 1 câu lệnh
• Phần văn bản đi theo ký hiệu # dành cho chú thích
Kiến trúc Máy tính - Chap 03 6
...
)Việc cố định số lượng toán hạng trong câu lệnh giúp
đơn giản hóa đáng kể việc thiết kế mạch phần cứng
)Nguyên tắc thiết kế 1
Càng đơn giản, càng ổn định
) Thí dụ. Dịch đoạn chương trình C sau đây sang hợp
ngữ
a = b + c
d = a - e
)Giải đáp. add a , b , c
sub d , a , e
Kiến trúc Máy tính - Chap 03 7
...
) Thí dụ. Dịch đoạn chương trình C sau đây sang hợp
ngữ
f = ( g + h ) - ( i + j )
)Giải đáp.
add t0 , g , h # biến phụ t0 chứa g + h
add t1 , i , j # biến phụ t1 chứa i + j
sub f , t0 , t1 # f chính là kết quả cần tìm
Kiến trúc Máy tính - Chap 03 8
3.3 Toán hạng
)Ở các chương trình viết bằng ngôn ngữ cấp cao, biến
(variable) đóng vai trò của toán hạng
)Đối với các câu lệnh (instruction), ngôn ngữ cấp thấp,
toán hạng thường được chứa trong các thanh ghi
)Kích thước thanh ghi ở bộ xử lý MIPS là 32 bit.
Ö kích thước toán hạng trong các câu lệnh MIPS bị
giới hạn ở 32 bit, từ (word)
)Số lượng thanh ghi cũng giới hạn. Bộ xử lý MIPS chỉ có
32 thanh ghi 32 bit tham gia vào các phép toán số học
)Nguyên tắc thiết kế 2
Càng nhỏ, càng nhanh
Kiến trúc Máy tính - Chap 03 9
...
) Trong các thí dụ kế tiếp, chúng ta sử dụng
• Các thanh ghi $s0 , $s1 , ... chứa các biến trong mã nguồn C
• Các thanh ghi $t0 , $t1 , ... chứa các biến tạm trong quá trình
dịch từ C sang hợp ngữ MIPS
) Thí dụ. Dịch đoạn chương trình C sau đây sang hợp
ngữ MIPS với các biến f , g , h , i và j được chứa
sẵn trong các thanh ghi $s0 , $s1 , $s2 , $s3 và $s4
f = ( g + h ) - ( i + j )
)Giải đáp.
add $t0 , $s1 , $s2 # biến phụ t0 chứa g + h
add $t1 , $s3 , $s4 # biến phụ t1 chứa i + j
sub $s0 , $t0 , $t1 # f chính là kết quả cần tìm
Kiến trúc Máy tính - Chap 03 10
...
)Ngoài các biến đơn, còn có các biến phức tạp thể hiện
nhiều kiểu cấu trúc dữ liệu khác nhau, td. array
)Các cấu trúc dữ liệu phức tạp có số phần tử dữ liệu
nhiều hơn số thanh ghi của bộ xử lý
)Nếu các thanh ghi của bộ xử lý chỉ có thể chứa một
lượng nhỏ dữ liệu thì bộ nhớ của máy tính có thể chứa
được rất nhiều dữ liệu
Ö các cấu trúc dữ liệu phức tạp được chứa trong bộ
nhớ của máy tính
)Cần thiết các câu lệnh thực hiện việc chuyển dữ liệu
giữa thanh ghi và bộ nhớ
Ö nhóm lệnh chuyển dữ liệu (data transfer)
Kiến trúc Máy tính - Chap 03 11
...
)Bộ nhớ có thể được xem như là array một chiều rất lớn
của các ô nhớ
)Các ô nhớ được đánh số thứ tự từ 0 trở đi
Ö địa chỉ (address) ô nhớ
)Để có thể truy xuất (access) 1 từ nào đó trong bộ nhớ,
cần phải cung cấp địa chỉ ô nhớ
)Hình vẽ dưới đây minh họa bộ nhớ
Dữ liệuĐịa chỉ
10
1011
102
1003
......
Kiến trúc Máy tính - Chap 03 12
...
) Lệnh chuyển dữ liệu từ bộ nhớ vào thanh ghi gọi là lệnh
nạp (load)
) Từ gợi nhớ dùng trong hợp ngữ MIPS là lw (load word)
) Thí dụ. Giả sử A là 1 array gồm 100 từ với địa chỉ bắt
đầu (starting address) hay địa chỉ nền (base address)
chứa trong thanh ghi $s3 , các biến g , h chứa trong
thanh ghi $s1 và $s2 . Hãy dịch phát biểu sau:
g = h + A[8]
)Giải đáp.
lw $t0 , 8($s3) # chứa A[8] vào $t0
add $s1 , $s2 , $t0
Kiến trúc Máy tính - Chap 03 13
...
)Ô nhớ có kích thước 8 bit (byte)
)Mỗi từ 32 bit cần dùng đến 4 ô nhớ
• Mỗi từ phải được bắt đầu ở địa chỉ là bội số của 4
(alignment restriction)
• Thứ tự của các byte trong 1 từ: Big Endian hay Little Endian
)Hình vẽ minh họa bộ nhớ
Dữ liệuĐịa chỉ
10
1014
108
10012
......
Big Endian
08
09
110
011
Little Endian
08
19
010
011
Kiến trúc Máy tính - Chap 03 14
...
)Câu lệnh ngược lại với lw là sw (store word), ghi dữ
liệu từ thanh ghi ra bộ nhớ
) Thí dụ. Giả sử biến h được gán vào thanh ghi $s2 và
$s3 chứa địa chỉ nền của array A. Dịch phát biểu sau
A[12] = h - A[8]
)Giải đáp.
)Số biến của chương trình thường nhiều hơn số thanh
ghi của bộ xử lý
• Thanh ghi chỉ chứa các biến đang xử lý hiện hành và các biến
thường sử dụng
• Kỹ thuật spilling registers
lw $t0 , 32($s3) # chứa A[8] vào $t0
add $t0 , $s2 , $t0
sw $t0 , 48($s3) # kết quả vào A[12]
Kiến trúc Máy tính - Chap 03 15
3.4 Biểu diễn câu lệnh
)Các thanh ghi trong bộ xử lý cũng được gán địa chỉ
tương tự như đối với ô nhớ
• Các thanh ghi $s0 ÷ $s7 có địa chỉ từ 16 đến 23
• Các thanh ghi $t0 ÷ $t7 có địa chỉ từ 8 đến 15
)Xét câu lệnh hợp ngữ add $t0 , $s1 , $s2
• Dạng nhị phân
• Còn được gọi là dạng ngôn ngữ máy (machine language) hay
mã máy (machine code)
• Câu lệnh MIPS có độ dài cố định là 32 bits được chia ra thành
nhiều trường (field) có độ dài là 5 hay 6 bits
6 bits5 bits5 bits5 bits5 bits6 bits
10000000000010001001010001000000
Kiến trúc Máy tính - Chap 03 16
...
)Các trường trong câu lệnh MIPS
• op : operation code Ö tác vụ cơ bản của câu lệnh
• rs : 1st source operand Ö toán hạng nguồn thứ nhất
• rt : 2nd source operand Ö toán hạng nguồn thứ hai
• rd : destination operand Ö toán hạng đích (kết quả)
• shamt : shift amount Ö có ý nghĩa đối với lệnh dịch và
mang giá trị 00000 đối với các lệnh khác
• funct : function code Ö bổ túc cho vùng op
) Làm sao giải quyết trường hợp nếu câu lệnh đòi hỏi
trường dành cho toán hạng phải lớn hơn 5 bits ?
• Td. Lệnh lw cần biểu diễn 2 địa chỉ thanh ghi và 1 hằng số, nếu
giới hạn ở 5 bit, hằng số không lớn hơn 25 = 32
6 bits5 bits5 bits5 bits5 bits6 bits
functshamtrdrtrsop
Kiến trúc Máy tính - Chap 03 17
...
)Nguyên tắc thiết kế 3
Thiết kế tốt đòi hỏi phải có sự dàn xếp tốt
)Đối với tập lệnh MIPS, để giữ cho độ dài câu lệnh không
đổi Ö xây dựng 2 dạng lệnh khác nhau
• Dạng lệnh mà chúng ta đã xem xét là R-type
• Dạng lệnh I-type
• Thí dụ. Câu lệnh lw $t0 , 32($s3)
• Ba trường đầu của cả 2 dạng lệnh là giống nhau
16 bits5 bits5 bits6 bits
addressrtrsop
16 bits5 bits5 bits6 bits
0000 0000 0000 0000 0000 0010 00000100010011100011
Kiến trúc Máy tính - Chap 03 18
...
) Thí dụ. Tìm hiểu mã máy của đoạn hợp ngữ sau
)Giải đáp.
lw $t0 , 1200($t1)
add $t0 , $s2 , $t0
sw $t0 , 1200($t1)
0000 0100 1011 00000100001001101011
10000000000010000100010010000000
0000 0100 1011 00000100001001100011
12008943
32088180
12008935
Kiến trúc Máy tính - Chap 03 19
3.5 Lệnh ra quyết định
)Dựa trên dữ liệu đầu vào cùng với một số giá trị tính
toán mà một câu lệnh khác (không phải là câu lệnh kế
tiếp trong chương trình) được thực thi
)Hỗ trợ thực thi cho phát biểu rẽ nhánh ở ngôn ngữ cấp
cao: if , goto , while , ...
) Làm quen với 2 câu lệnh hợp ngữ của MIPS
• Branch if equal
beq reg1 , reg2 , L1
• Branch if not equal
bne reg1 , reg2 , L1
)Hợp ngữ gọi chúng là các lệnh rẽ nhánh có điều kiện
(conditional branch)
Kiến trúc Máy tính - Chap 03 20
...
) Thí dụ. Dịch đoạn mã C sau đây sang hợp ngữ MIPS
if ( i == j ) goto L1;
f = g + h;
L1: f = f - i;
giả sử các biến từ f đến j tương ứng với các thanh ghi từ
$s0 đến $s4
)Bài giải.
Kiến trúc Máy tính - Chap 03 21
...
) Thí dụ. Cũng sử dụng các biến và thanh ghi ở thí dụ
trước, dịch đoạn mã C sau đây sang hợp ngữ MIPS
if ( i == j ) f = g + h;
else f = g - h;
)Bài giải.
) Lệnh j (jump) là lệnh rẽ nhánh không điều kiện
(unconditional branch)
Kiến trúc Máy tính - Chap 03 22
...
) Thí dụ. Dịch đoạn mã C sau đây sang hợp ngữ MIPS
Array A 100 phần tử có
địa chỉ nền là $s5 , các biến
g , h , i và j tương ứng với
các thanh ghi $s1 đến $s4
)Bài giải.
Loop: g = g + A[i] ;
i = i + j ;
if ( i != h) goto Loop
Kiến trúc Máy tính - Chap 03 23
...
) Thí dụ. Dịch đoạn mã C sau đây sang hợp ngữ MIPS
Array A có địa chỉ nền là $s6 ,
các biến i , j và k tương ứng với
các thanh ghi $s3 , $s4 và $s5
)Bài giải.
while ( A[i] == k )
i = i + j ;
Kiến trúc Máy tính - Chap 03 24
...
) Lệnh set on less than slt reg0 , reg1 , reg2
) Thanh ghi $zero là thanh ghi đặc biệt luôn mang giá trị 0
) Thí dụ.
Giải thích ý nghĩa của đoạn mã hợp ngữ MIPS sau
)Bài giải. ?
slt $t0 , $s0 , $s1
bne $t0 , $zero , Less
Kiến trúc Máy tính - Chap 03 25
...
) Thí dụ. Dịch đoạn mã C sau đây sang hợp ngữ MIPS
giả sử các biến f đến k tương ứng với $s0 đến $s5,
thanh ghi $t2 mang giá trị 4
Switch ( k ) {
case 0 : f = i + j ; break ;
case 1 : f = g + h ; break ;
case 2 : f = g - h ; break ;
case 3 : f = i - j ; break ;
}
Kiến trúc Máy tính - Chap 03 26
...
)Bài giải.
slt $t3 , $s5 , $zero
bne $t3 , $zero , Exit
slt $t3 , $s5 , $t2
beq $t3 , $zero , Exit
add $t1 , $s5 , $s5
add $t1 , $t1 , $t1
add $t1 , $t1 , $t4
lw $t0, 0($t1)
jr $t0
..........................
L0: add $s0 , $s3 , $s4
j Exit
L1: add $s0 , $s1 , $s2
j Exit
L2: sub $s0 , $s1 , $s2
j Exit
L3: sub $s0 , $s3 , $s4
Exit:
Kiến trúc Máy tính - Chap 03 27
3.6 Trình con
) Trình con (subroutine) hay thủ tục (procedure) là công
cụ hữu hiệu cho lập trình cấu trúc
) Trình con vừa cho phép tái sử dụng mã nguồn, vừa giúp
cho chương trình trở nên trong sáng, dễ hiểu
)Để thực thi một trình con, chương trình phải lần lượt
thực hiện các thao tác như sau:
• Đặt các tham số vào vị trí mà trình con có thể truy xuất được
• Chuyển thực thi sang cho trình con
• Truy xuất các tài nguyên lưu trử cần thiết cho trình con
• Thực hiện tác vụ mong muốn
• Đặt kết quả và vị trí mà chương trình gọi (chương trình mẹ) có
thể truy xuất được
• Trả thực thi về điểm ban đầu (địa chỉ trở về)
Kiến trúc Máy tính - Chap 03 28
...
)Các thanh ghi vốn là những vị trí có thể lưu trử dữ liệu
nhanh nhất
)MIPS ưu tiên sử dụng các thanh ghi sau trong việc gọi
trình con
• $a0 ÷ $a3 : 4 thanh ghi dùng để chuyển tham số
• $v0 ÷ $v1 : 2 thanh ghi dùng để trả về kết quả
• $ra : thanh ghi chứa địa chỉ trở về
) Lệnh jump-and-link ( jal ) dùng để nhảy và đồng thời cất
địa chỉ câu lệnh kế tiếp vào $ra
Ö thực thi lệnh gọi trình con
) Thanh ghi chứa địa chỉ của câu lệnh hiện hành đang
thực thi gọi là thanh ghi bộ đếm chương trình (program
counter – PC)
Kiến trúc Máy tính - Chap 03 29
...
) Lệnh jal chứa giá trị PC + 4 vào trong thanh ghi $ra
)Việc quay trở về chương trình mẹ được thực hiện bởi lệnh
jr $ra
)Cần phải xét thêm đến các trường hợp
• Trình con đòi hỏi nhiều hơn 4 tham số và/hoặc 2 kết quả ?
• Bảo vệ (save) nội dung các thanh ghi của chương trình mẹ ?
Ö chứa tạm các thanh ghi (spill register) vào bộ nhớ
)Cấu trúc dữ liệu lý tưởng để chứa tạm các thanh ghi chính
là ngăn xếp (stack)
)Stack được quản lý bởi stack pointer và có 2 tác vụ hoạt
động cơ bản là push và pop
)Ở bộ xử lý MIPS, thanh ghi stack pointer có tên là $sp và
lưu ý là stack tăng lên (push) theo chiều giảm địa chỉ
Kiến trúc Máy tính - Chap 03 30
...
) Thí dụ.
Dịch đoạn mã C
ở hình bên sang
hợp ngữ MIPS
)Bài giải.
int leaf_example ( int g , int h , int i , int j )
{ int f ;
f = ( g + h ) - ( i + j ) ;
return f ;
}
các biến g , h , i và j được chứa
trong $a0 , $a1 , $a2 và $a3
Kiến trúc Máy tính - Chap 03 31
...
)Để giảm thiểu việc bảo vệ (lưu trử/phục hồi) các thanh ghi
vào stack, các lập trình viên MIPS qui ước như sau
• $s0 ÷ $s7 : 8 thanh ghi được bảo vệ bởi trình được gọi (callee)
• $t0 ÷ $t9 : 10 thanh ghi không được bảo vệ bởi trình được gọi
) Lưu ý khi lập trình
• Trình gọi (caller) bảo vệ các thanh ghi chứa tham số ( $a0 ÷ $a3 )
và các thanh ghi cần sử dụng sau khi kết thúc trình con ( $t0 ÷ $t9 )
• Trình được gọi bảo vệ thanh ghi địa chỉ trở về ( $ra ) và các thanh
ghi sử dụng ($s0 ÷ $s7)
• Stack pointer ( $sp ) được tăng/giảm một giá trị tương ứng với
lượng thanh ghi bảo vệ
) Trường hợp trình con lồng nhau (nested subroutine) ?
• Trình con vừa là của trình gọi vừa là trình bị gọi
Kiến trúc Máy tính - Chap 03 32
...
) Thí dụ.
Dịch đoạn mã C
ở hình bên sang
hợp ngữ MIPS
)Bài giải.
int fact ( int n )
{ if ( n < 1 ) return 1 ;
else return( n * fact ( n-1 ) ) ;
}
biến n được chứa trong $a0
Kiến trúc Máy tính - Chap 03 33
...
)Stack còn được sử dụng để chứa các biến cục bộ (local
variable) của trình con, nhất là các biến có cấu trúc,
(array, list, ...) không chứa vừa trong các thanh ghi
)Đoạn dữ liệu trong stack dành để bảo vệ giá trị các thanh
ghi và để chứa các biến cục bộ của một trình con được
gọi là khung trình con (procedure frame) hay bản ghi tích
cực (activation record) của trình con đó
)MIPS sử dụng thanh ghi $fp (frame pointer) để trỏ tới
phần tử dữ liệu đầu tiên của khung trình con
)Bên cạnh các biến cục bộ còn có các biến toàn cục
(global variable)
Ö MIPS sử dụng thanh ghi $gp (global pointer) để trỏ tới vùng nhớ
chứa các biến toàn cục
Kiến trúc Máy tính - Chap 03 34
...
) Trước thời điểm gọi trình con
) Tại thời điểm gọi trình con
)Sau khi kết thúc trình con và
trở về
$fp
$sp
Saved argument
registers
Saved return
address
Saved saved
registers
Local variables
$fp
$sp
Kiến trúc Máy tính - Chap 03 35
3.7 Ký tự
)Hầu hết các máy tính đều sử dụng giá trị 8-bit để biểu
diễn ký tự (character)
) Thông dụng nhất là mã ASCII
(American Standard Code for Information Interchange)
)Dữ liệu kiểu ký tự (char) được chứa trong 1 ô nhớ hay 1
phần của thanh ghi
) Lệnh truy xuất bộ nhớ 1 byte
• Load byte
lb reg , sou. addr
• Store byte
sb reg , des. addr
Ö thích hợp để truy xuất dữ liệu kiểu ký tự
Kiến trúc Máy tính - Chap 03 36
...
)Dữ liệu kiểu chuỗi ký tự (string) là một chuỗi của các ký
tự
)Mỗi chuỗi ký tự có độ dài (số ký tự trong chuỗi) khác
nhau
)Có 3 cách thức để biểu diễn dữ liệu chuỗi ký tự trong bộ
nhớ
• Sử dụng byte đầu tiên của chuỗi để chứa độ dài chuỗi
Ö Ngôn ngữ Pascal
• Dùng một biến đi kèm để chứa độ dài chuỗi
• Sử dụng byte cuối cùng của chuỗi để chứa 1 giá trị đặc biệt dùng
đánh dấu kết thúc của chuỗi
Ö Ngôn ngữ C (giá trị 00)
)Chúng ta sẽ sử dụng cách thức của ngôn ngữ C để biểu
diễn chuỗi trong các thí dụ minh họa
Kiến trúc Máy tính - Chap 03 37
...
) Thí dụ.
Trình con strcpy sao chép
string y sang string x
Biến i được chứa trong $s0 ,
địa chỉ nền của x và y là $a0
và $a1
)Bài giải.
int strcpy ( char x[ ] , char y [ ] )
{
int i ;
i = 0 ;
while ( ( x[i] = y[i] ) != 0 )
i = i + 1 ;
}
Kiến trúc Máy tính - Chap 03 38
3.8 Địa chỉ hóa ở MIPS
)Việc có 1 toán hạng trong câu lệnh xảy ra khá thường
xuyên đối với câu lệnh số học
• Trong chương trình gcc , 52% câu lệnh số học có 1 toán hạng
là hằng số
• Trong chương trình spice , con số này là 69%
)Hằng số hay toán hạng tức thời (immediate operand)
được biểu diễn bởi vùng 16 bit trong câu lệnh dạng i-type
• Lệnh add immediate ( addi )
addi $sp , $sp , 4
• Lệnh set on less than ( slti ) slti $t0 , $s2 , 10
16 bits5 bits5 bits6 bits
immediatertrsop
0000 0000 0000 01001110111101001000
Kiến trúc Máy tính - Chap 03 39
...
)Nguyên tắc thiết kế 4
Trường hợp càng phổ biến, càng phải nhanh
) Trong trường hợp hằng số lớn hơn 16 bit ?
• Lệnh load upper immediate ( lui )
Giá trị ban đầu của $s0
$s0 = 0000 0000 0000 0000 0000 0000 0000 0000
Thực thi lệnh lui
lui $s0 , 0b0000000000111101
$s0 = 0000 0000 0011 1101 0000 0000 0000 0000
Thực thi lệnh addi
addi $s0 , $s0 , 0b0000100100000000
$s0 = 0000 0000 0011 1101 0000 1001 0000 0000
Kiến trúc Máy tính - Chap 03 40
...
)Địa chỉ đích trong các lệnh nhảy
• Đối với lệnh nhảy có điều kiện, vùng địa chỉ là 16 bit (I-type)
• Dạng lệnh J-type cho phép vùng địa chỉ của lệnh nhảy không
điều kiện lên đến 26 bit
• Địa chỉ đích là 26 bit trong vùng toán hạng kết hợp với các bit
cao trong thanh ghi PC
• Lệnh j 10000
)Giải pháp cho lệnh nhảy có điều kiện ?
PC = PC + địa chỉ 16 bit
26 bits6 bits
Immediateop
Kiến trúc Máy tính - Chap 03 41
...
)Các phương thức địa chỉ hóa (addressing mode) ở
MIPS
• Register addressing Toán hạng là nội dung thanh ghi
• Base addressing hay displacement addressing
Toán hạng là nội dung ô nhớ có địa chỉ là tổng giữa nội dung
thanh ghi và 1 hằng số 16 bit chứa trong câu lệnh
• Immediate addressing
Toán hạng là hằng số 16 bit chứa trong câu lệnh
• PC-relative addressing
Toán hạng, địa chỉ đích của lệnh nhảy, là tổng giữa nội dung
thanh ghi PC với hằng số 16 bit chứa trong câu lệnh
• Pseudodirect addressing
Toán hạng, địa chỉ đích của lệnh nhảy, là hằng số 26 bit chứa
trong câu lệnh kết hợp với các bit cao trong thanh ghi PC
Kiến trúc Máy tính - Chap 03 42
3.9 Thực thi 1 chương trình
)Các bước chính trong qua
trình thực thi 1 chương
trình mã nguồn C
C program
Assembly language program
Object module Library module
Executable program
Memory
Compiler
Assembler
Linker
Loader
Kiến trúc Máy tính - Chap 03 43
…
)Chương trình dịch (Compiler)
• Dịch chương trình mã nguồn C sang chương trình dạng hợp ngữ
• Trước đây, đa phần các hệ điều hành và assembler được viết
bằng hợp ngữ do hạn chế về dung lượng bộ nhớ của máy tính
và do các chương trình dịch làm việc kém hiệu quả
• Ngày nay, dung lượng bộ nhớ đã được phát triển đáng kể, các
chương trình dịch cũng hoạt động tối ưu hơn nên đã có thể dịch
ra những chương trình dạng hợp ngữ tốt không kém các chuyên
gia hợp ngữ, nhất là đối với các chương trình lớn
)Assembler
• Có thể bổ sung vào tập lệnh các câu lệnh giả (pseudo-
instruction) không có trong kiến trúc tập lệnh nhưng có thể giúp
cho việc lập trình trở nên hiệu quả hơn
move $t0 , $t1 thay cho add $t0 , $zero , $t1
blt , bgt , bge , ble thay cho tổ hợp thích hợp giữa slt với bne , beq
Kiến trúc Máy tính - Chap 03 44
…
)Assembler (cont’d)
• Các toán hạng tức thời có thể viết dưới dạng thập phân, dạng thập
lục phân (0x …) hay dạng nhị phân (0b …)
• Assembler dịch chương trình dạng hợp ngữ sang object file, là tổ
hợp gồm các câu lệnh dạng mã máy, dữ liệu và những thông tin
cần thiết để có thể sắp xếp các câu lệnh và dữ liệu một cách đúng
đắn trong bộ nhớ
• Một object file trên hệ điều hành Unix gồm 6 thành phần
* object file header Ö kích thước và vị trí của các thành phần còn lại
* text segment Ö chương trình dạng mã máy
* data segment Ö chứa các loại dữ liệu (tĩnh/động) đi theo chương trình
* relocation information Ö cho phép xác định địa chỉ tuyệt đối của câu
lệnh và dữ liệu một khi chương trình được nạp vào bộ nhớ
* symbol table Ö lưu chứa các nhãn (label) chưa được định nghĩa
* debugging information
Kiến trúc Máy tính - Chap 03 45
…
) Linker
• Còn gọi là link editor, cho phép ghép các object file riêng lẻ lại với
nhau thành một chương trình thống nhất có thể thực thi được gọi
là executable file
• Quá trình ghép diễn ra theo 3 bước
* Xếp mã chương trình và dữ liệu lại với nhau
* Xác định địa chỉ cho các nhãn chương trình và dữ liệu
* So trùng các tham cứu nội và ngoại (internal/external reference)
• Một executable file có các thành phần gần giống với object file trừ