1. Trang chủ
  2. » Công Nghệ Thông Tin

kiến trúc máy tính 3 pdf

47 406 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 47
Dung lượng 0,9 MB

Nội dung

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 tro

Trang 1

Khoa KH & KT Máy tính

Bộ môn Kỹ thuật Máy tính

Phạm Tường Hải Nguyễn Quốc Tuấn

Trang 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

Trang 3

Chương 3.

Trang 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

Trang 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

Trang 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

sub d , a , e

Trang 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

Trang 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

Trang 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$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

Trang 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)

Trang 11

) Để 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ỉ

Trang 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$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

Trang 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

$s3 chứa địa chỉ nền của array A Dịch phát biểu sau

• 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]

Trang 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

01000 10010

10001 000000

Trang 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 : 1 st source operand Ö toán hạng nguồn thứ nhất

• rt : 2 nd 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 2 5 = 32

rd rt

rs op

Trang 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

rs op

10011 100011

Trang 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 0000 01000

01001 101011

100000 00000

01000 01000

10010 000000

0000 0100 1011 0000 01000

01001 100011

1200 8

9 43

32 0

8 8

18 0

1200 8

9 35

Trang 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)

Trang 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

Trang 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

Trang 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 ;}

Trang 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ề)

Trang 28

• $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)

Trang 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à pushpop

) Ở bộ xử lý MIPS, thanh ghi stack pointer có tên là $sp

lưu ý là stack tăng lên (push) theo chiều giảm địa chỉ

Trang 30

các biến g , h , ij được chứa trong $a0 , $a1 , $a2$a3

Trang 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

Trang 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

Trang 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

Trang 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ự

Trang 36

• 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

Trang 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

i = i + 1 ; }

Trang 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 )

rs op

0000 0000 0000 0100 11101

11101 001000

Trang 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

Trang 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

Trang 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

Trang 42

Assembly language program

Object module Library module

Trang 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

Trang 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

lệnh và dữ liệu một khi chương trình được nạp vào bộ nhớ

Trang 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

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ừ các phần: relocation information, symbol tabledebugging

Trang 46

) Loader

• Một executable file lưu trên đĩa có thể được hệ điều hành đọc,

nạp vào bộ nhớ và cho phép bắt đầu thực thi

• Công việc này, trên hệ điều hành UNIX , diễn ra theo các bước

sau

dữ liệu

* Chép mã lệnh và dữ liệu từ executable file vào bộ nhớ

* Khởi động trị cho các thanh ghi, trỏ stack pointer đến vị trí trống đầu tiên trong bộ nhớ

* Nhảy đến trình con start-up để chép các tham số đầu vào vào trong các thanh ghi tham số và sau đó gọi thực thi chương trình chính

* Khi chương trình chính kết thúc , trình con start-up kết thúc thực thi bằng lệnh goi exit

Trang 47

Bài tập

) 3.1 , 3.2 , 3.4 , 3.5 , 3.6 , 3.9) 3.10 , 3.11

) 3.16) 3.22

“Computer Organization and Design: the hardware/software

interface”,

John L Hennessy & David A Patterson, Second Edition,

MORGAN KAUFMANN PUBLISHERS, INC 1998

Ngày đăng: 11/07/2014, 10:20

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w