Bài giảng Kiến trúc tập lệnh it3030 1 (instruction set architecture)
Chương trình hợp ngữ gồm các dòng lệnh, mỗi lệnh
viết trên một dòng, mỗi dòng có thể là:
Lệnh của bộ vi xử lý (instruction)
Chỉ dẫn của chương trình dịch ASSEMBLER
Các lệnh hợp ngữ không phân biệt chữ hoa, chữ
thường.
Khi dịch thành mã máy thì chỉ có các lệnh của bộ vi
102
Khi dịch thành mã máy thì chỉ có các lệnh của bộ vi
xử lý mới được dịch
105 trang |
Chia sẻ: hao_hao | Lượt xem: 3412 | Lượt tải: 2
Bạn đang xem trước 20 trang tài liệu Bài giảng Kiến trúc tập lệnh it3030 1 (instruction set architecture), để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
NKK-HUT
Kiến trúc máy tính
Chương 4
KIẾN TRÚC TẬP LỆNH
IT3030 1
(Instruction Set Architecture)
Nguyễn Kim Khánh
Trường Đại học Bách khoa Hà Nội
NKK-HUT
Nội dung học phần
n Chương 1. Giới thiệu chung
n Chương 2. Cơ bản về logic số
n Chương 3. Hệ thống máy tính
n Chương 4. Kiến trúc tập lệnh
2n24 July 2011
n Chương 5. Số học máy tính
n Chương 6. Bộ xử lý
n Chương 7. Bộ nhớ
n Chương 8. Vào-ra
n Chương 9. Kiến trúc máy tính tiên tiến
IT3030
NKK-HUT
4.1. Giới thiệu chung kiến trúc tập lệnh
4.2. Các kiểu thao tác
4.3. Các phương pháp định địa chỉ
4.4. Kiến trúc tập lệnh MIPS
Nội dung của chương 4
IT3030 3
4.5. Kiến trúc tập lệnh Intel x86
NKK-HUT
4.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
IT3030 4
NKK-HUT
Tập thanh ghi
n Chức năng và đặc điểm:
n 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
n Được coi là mức đầu tiên của hệ thống nhớ
n Số lượng thanh ghi nhiều à tăng hiệu năng
IT3030 5
của CPU
n Có hai loại thanh ghi:
n Các thanh ghi lập trình được
n Các thanh ghi không lập trình được
NKK-HUT
Phân loại thanh ghi theo chức năng
n Thanh ghi địa chỉ: quản lý địa chỉ của ngăn
nhớ hay cổng vào-ra.
n Thanh ghi dữ liệu: chứa tạm thời các dữ
liệu.
Thanh ghi đa năng: có thể chứa địa chỉ
IT3030 6
n
hoặc dữ liệu.
n Thanh ghi điều khiển/trạng thái: chứa các
thông tin điều khiển và trạng thái của CPU.
n Thanh ghi lệnh: chứa lệnh đang được thực
hiện.
NKK-HUT
Một số thanh ghi điển hình
n Các thanh ghi địa chỉ
n Bộ đếm chương trình PC (Program Counter)
n Con trỏ dữ liệu DP (Data Pointer)
n Con trỏ ngăn xếp SP (Stack Pointer)
IT3030 7
n Thanh ghi cơ sở và Thanh ghi chỉ số
(Base Register & Index Register)
n Các thanh ghi dữ liệu
n Thanh ghi trạng thái
NKK-HUT
Bộ đếm chương trình PC
n Còn được gọi là con trỏ
lệnh IP (Instruction
Pointer)
n Giữ địa chỉ của lệnh
tiếp theo sẽ được nhận
IT3030 8
vào.
n 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.
NKK-HUT
Thanh ghi con trỏ dữ liệu
n Chứa địa chỉ của
ngăn nhớ dữ liệu mà
CPU muốn truy nhập
n Thường có một số
IT3030 9
thanh ghi con trỏ dữ
liệu
NKK-HUT
Ngăn xếp (Stack)
n Ngăn xếp là vùng nhớ có cấu trúc LIFO
(Last In - First Out)
n Ngăn xếp thường dùng để phục vụ cho
chương trình con
IT3030 10
n Đáy ngăn xếp là một ngăn nhớ xác định
n Đỉnh ngăn xếp là thông tin nằm ở vị trí
trên cùng trong ngăn xếp
n Đỉnh ngăn xếp có thể bị thay đổi
NKK-HUT
Con trỏ ngăn xếp SP (Stack Pointer)
n Chứa địa chỉ của ngăn nhớ đỉnh
ngăn xếp
n Khi cất một thông tin vào ngăn
xếp:
n Nội dung của SP giảm
n Thông tin được cất vào ngăn nhớ
IT3030 11
được trỏ bởi SP
n Khi lấy một thông tin ra khỏi ngăn
xếp:
n Thông tin được đọc từ ngăn nhớ
được trỏ bởi SP
n Nội dung của SP tăng
n Khi ngăn xếp rỗng, SP trỏ vào đáy
NKK-HUT
Thanh ghi cơ sở và thanh ghi chỉ số
n Thanh ghi cơ sở: chứa địa
chỉ của ngăn nhớ cơ sở
(địa chỉ cơ sở)
n Thanh ghi chỉ số: chứa độ
lệch địa chỉ giữa ngăn
nhớ mà CPU cần truy
IT3030 12
nhập so với ngăn nhớ cơ
sở (chỉ số)
n Địa chỉ của ngăn nhớ cần
truy nhập = địa chỉ cơ sở
+ chỉ số
24 July 2011
NKK-HUT
Các thanh ghi dữ liệu
n Chứa các dữ liệu tạm thời hoặc các kết
quả trung gian
n Cần có nhiều thanh ghi dữ liệu
n Các thanh ghi số nguyên: 8, 16, 32, 64
IT3030 13
bit
n Các thanh ghi số dấu phẩy động
NKK-HUT
Thanh ghi trạng thái (Status Register)
n Còn gọi là thanh ghi cờ (Flag Register)
n Chứa các thông tin trạng thái của CPU
n Các cờ phép toán: báo hiệu trạng thái của
kết quả phép toán
IT3030 14
n Các cờ điều khiển: biểu thị trạng thái điều
khiển của CPU
NKK-HUT
Ví dụ cờ phép toán
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.
n 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
n Cờ Carry (cờ nhớ): được thiết lập lên 1 nếu
IT3030 15
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.
n 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 .
NKK-HUT
Ví dụ cờ điều khiển
n Cờ Interrupt (Cờ cho phép ngắt):
n 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
IT3030 16
n 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
NKK-HUT
Thứ tự lưu trữ các byte trong bộ nhớ chính
n Bộ nhớ chính thường đánh địa chỉ theo
byte
n Hai cách lưu trữ thông tin nhiều byte:
n Đầu nhỏ (Little-endian): Byte có ý nghĩa
thấp được lưu trữ ở ngăn nhớ có địa chỉ
IT3030 17
nhỏ, byte có ý nghĩa cao được lưu trữ ở
ngăn nhớ có địa chỉ lớn.
n Đầu to (Big-endian): Byte có ý nghĩa cao
đượ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.
NKK-HUT
Ví dụ lưu trữ dữ liệu 32-bit
0001 1010 0010 1011 0011 1100 0100 1101
IT3030 1824 July 2011
NKK-HUT
Lưu trữ của các bộ xử lý điển hình
n Intel 80x86 và các Pentium: little-endian
n Motorola 680x0, MIPS, SunSPARC: big-endian
n Power PC, Itanium: bi-endian
IT3030 1924 July 2011
NKK-HUT
Giới thiệu chung về tập lệnh
n Mỗi bộ xử lý có một tập lệnh xác định
n Tập lệnh thường có hàng chục đến hàng
trăm lệnh
n 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
IT3030 20
định.
n 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ữ
NKK-HUT
Các thành phần của lệnh máy
n Mã thao tác (operation code à opcode):
mã hóa cho thao tác mà bộ xử lý phải thực
hiện
IT3030 21
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
n Toán hạng nguồn: dữ liệu vào của thao tác
n Toán hạng đích: dữ liệu ra của thao tác
24 July 2011
NKK-HUT
Số lượng địa chỉ toán hạng trong lệnh (1)
n Ba địa chỉ toán hạng:
n 2 toán hạng nguồn, 1 toán hạng đích
n c = a + b
n Từ lệnh dài vì phải mã hoá địa chỉ cho cả ba
toán hạng
IT3030 22
n Được sử dụng trên các bộ xử lý tiên tiến
NKK-HUT
Số lượng địa chỉ toán hạng trong lệnh (2)
n Hai địa chỉ toán hạng:
n 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
n a = a + b
IT3030 23
n Giá trị cũ của 1 toán hạng nguồn bị mất vì
phải chứa kết quả
n Rút gọn độ dài từ lệnh
n Phổ biến
NKK-HUT
Số lượng địa chỉ toán hạng trong lệnh (3)
n Một địa chỉ toán hạng:
n Một toán hạng được chỉ ra trong lệnh
n Một toán hạng là ngầm định à thường là
thanh ghi (thanh chứa –accumulator)
IT3030 24
n Được sử dụng trên các máy ở các thế hệ
trước
NKK-HUT
Số lượng địa chỉ toán hạng trong lệnh (4)
n 0 địa chỉ toán hạng:
n Các toán hạng đều được ngầm định
n Sử dụng Stack
n Ví dụ:
push a
IT3030 25
push b
add
pop c
có nghĩa là : c = a+b
n không thông dụng
NKK-HUT
Máy tính với tập lệnh thu gọn: RISC
n CISC và RISC
n CISCàComplex Instruction Set Computer:
n Máy tính với tập lệnh phức tạp
n Các bộ xử lý truyền thống: Intel x86, Motorola 680x0
IT3030 26
n RISCàReduced Instruction Set Computer:
n Máy tính với tập lệnh thu gọn
n SunSPARC, Power PC, MIPS, ARM ...
n RISC đối nghịch với CISC
NKK-HUT
Các đặc trưng của RISC
n Số lượng lệnh ít
n Hầu hết các lệnh truy nhập toán hạng ở các
thanh ghi
n Truy nhập bộ nhớ bằng các lệnh LOAD/STORE
n Thời gian thực hiện lệnh là một chu kỳ máy
IT3030 27
n Các lệnh có độ dài cố định (32 bit)
n Số lượng khuôn dạng lệnh ít (<=4)
n CPU có tập thanh ghi lớn
n Có ít phương pháp định địa chỉ toán hạng(<=4)
n Hỗ trợ các thao tác của ngôn ngữ bậc cao
NKK-HUT
4.2. Các kiểu thao tác của lệnh
n Chuyển dữ liệu
n Xử lý số học
n Xử lý logic
Điều khiển vào-ra
IT3030 28
n
n Chuyển điều khiển (rẽ nhánh)
n Điều khiển hệ thống
NKK-HUT
Các lệnh chuyển dữ liệu
n MOVE Copy dữ liệu từ nguồn đến đích
n LOAD Nạp dữ liệu từ bộ nhớ đến bộ xử lý
n STORE Cất dữ liệu từ bộ xử lý đến bộ nhớ
n EXCHANGE Trao đổi nội dung của nguồn và đích
n CLEAR Chuyển các bit 0 vào toán hạng đích
IT3030 29
n SET Chuyển các bit 1 vào toán hạng đích
n PUSH Cất nội dung toán hạng nguồn vào ngăn xếp
n POP Lấy nội dung đỉnh ngăn xếp đưa đến
toán hạng đích
NKK-HUT
Các lệnh số học
n ADD Cộng hai toán hạng
n SUBTRACT Trừ hai toán hạng
n MULTIPLY Nhân hai toán hạng
n DIVIDE Chia hai toán hạng
n NEGATE Đổi dấu toán hạng (lấy bù 2)
IT3030 30
n INCREMENT Tăng toán hạng thêm 1
n DECREMENT Giảm toán hạng đi 1
n COMPARE Trừ hai toán hạng để lập cờ
NKK-HUT
Các lệnh logic
n AND Thực hiện phép AND hai toán hạng
n OR Thực hiện phép OR hai toán hạng
n XOR Thực hiện phép XOR hai toán hạng
n 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
IT3030 31
n
để lập cờ
n SHIFT Lệnh dịch bit
n ROTATE Lệnh quay bit
NKK-HUT
Minh hoạ các lệnh AND, OR, XOR
n Giả sử có hai thanh ghi chứa dữ liệu như sau:
(R1) = 1010 1010
(R2) = 0000 1111
n 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.
IT3030 32
n R1 ß (R1) OR (R2) = 1010 1111
Phép toán OR dùng để thiết lập một số bit và giữ
nguyên một số bit còn lại của toán hạng.
n R1 ß (R1) XOR (R2) = 1010 0101
Phép toán XOR dùng để đảo một số bit và giữ
nguyên một số bit còn lại của toán hạng.
NKK-HUT
Các lệnh SHIFT và ROTATE
IT3030 33
NKK-HUT
Các lệnh vào ra chuyên dụng
n INPUT Copy dữ liệu từ một cổng xác
định đến toán hạng đích
n OUTPUT Copy dữ liệu từ toán hạng
nguồn đến một cổng xác định
IT3030 34
NKK-HUT
Các lệnh chuyển điều khiển
n JUMP (BRANCH) Lệnh nhảy không điều kiện
n JUMP CONDITIONAL Lệnh nhảy có điều kiện
n CALL Lệnh gọi chương trình con
n RETURN Lệnh trở về từ chương trình con:
IT3030 35
NKK-HUT
Lệnh rẽ nhánh không điều kiện
n Chuyển tới thực hiện lệnh
ở vị trí có địa chỉ XXX:
PC ß XXX
IT3030 36
NKK-HUT
Lệnh rẽ nhánh có điều kiện
n Trong lệnh có kèm theo điều
kiện
n Kiểm tra điều kiện trong
lệnh:
n Nếu điều kiện đúng à chuyển
tới thực hiện lệnh ở vị trí có
IT3030 37
địa chỉ XXX
PC ß XXX
n Nếu điều kiện sai à chuyển
sang thực hiện lệnh_kế_tiếp
n Điều kiện thường được kiểm
tra thông qua các cờ
n Có nhiều lệnh rẽ nhánh có
điều kiện
NKK-HUT
Lệnh CALL và RETURN
n Lệnh gọi chương trình con: lệnh
CALL
n Cất nội dung PC (chứa địa chỉ của
lệnh_kế_tiếp) ra Stack
n 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
IT3030 38
hiện chương trình con tương ứng
n Lệnh trở về từ chương trình
con: lệnh RETURN
n 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
CALL
NKK-HUT
Gọi các thủ tục lồng nhau
IT3030 39
NKK-HUT
Các lệnh điều khiển hệ thống
n HALT Dừng thực hiện chương trình
n 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
n NO OPERATION Không thực hiện gì cả
IT3030 40
n LOCK Cấm không cho xin chuyển nhượng
bus
n UNLOCK Cho phép xin chuyển nhượng bus
NKK-HUT
4.3. Các phương pháp định địa chỉ toán hạng
Khái niệm về định địa chỉ (addressing)
n Toán hạng của lệnh có thể là:
n Một giá trị cụ thể nằm ngay trong lệnh
n Nội dung của thanh ghi
Nội dung của ngăn nhớ hoặc cổng vào-ra
IT3030 41
n
n 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
NKK-HUT
Các phương pháp định địa chỉ thông dụng
n Định địa chỉ tức thì
n Định địa chỉ thanh ghi
n Định địa chỉ trực tiếp
Định địa chỉ gián tiếp qua thanh ghi
IT3030 42
n
n Định địa chỉ gián tiếp qua ngăn nhớ
n Định địa chỉ dịch chuyển
NKK-HUT
Định địa chỉ tức thì
n Toán hạng nằm ngay trong Trường địa chỉ
của lệnh
n Chỉ có thể là toán hạng nguồn
IT3030 43
n Ví dụ:
ADD R1, 5 ; R1ß R1+5
n Không tham chiếu bộ nhớ
n Truy nhập toán hạng rất nhanh
n Dải giá trị của toán hạng bị hạn chế
NKK-HUT
Định địa chỉ thanh ghi
n Toán hạng được chứa trong
thanh ghi có tên trong Trường
địa chỉ
n Ví dụ:
ADD R1, R2 ; R1ß R1+R2
n Số lượng thanh ghi ít à
IT3030 44
Trường địa chỉ chỉ cần ít bit
n Không tham chiếu bộ nhớ
n Truy nhập toán hạng nhanh
n Tăng số lượng thanh ghi à
hiệu quả hơn
NKK-HUT
Định địa chỉ trực tiếp
n 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
n Ví dụ:
ADD R1, A ;R1 ß R1 + (A)
IT3030 45
n Cộng nội dung thanh ghi R1 với
nội dung của ngăn nhớ có địa chỉ
là A
n Tìm toán hạng trong bộ nhớ ở địa
chỉ A
n CPU tham chiếu bộ nhớ một
lần để truy nhập dữ liệu
NKK-HUT
Định địa chỉ gián tiếp qua thanh ghi
n Toán hạng là ngăn nhớ
có địa chỉ nằm trong
thanh ghi
n Trường địa chỉ cho biết
tên thanh ghi đó
Thanh ghi có thể là
IT3030 46
n
ngầm định
n Thanh ghi này được gọi
là thanh ghi con trỏ
n Vùng nhớ có thể được
tham chiếu là lớn (2n),
(với n là độ dài của
thanh ghi)
NKK-HUT
Định địa chỉ gián tiếp qua ngăn nhớ
n 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
n Có thể gián tiếp nhiều lần
n Giống như khái niệm biến
IT3030 47
con trỏ và biến động trong
lập trình
n CPU phải thực hiện tham
chiếu bộ nhớ nhiều lần để
tìm toán hạng à chậm
n Vùng nhớ có thể được
tham chiếu là lớn
NKK-HUT
Định địa chỉ dịch chuyển
n Để xác định toán
hạng, Trường địa
chỉ chứa hai thành
phần:
n Tên thanh ghi
Hằng số
IT3030 48
n
n Địa chỉ của toán
hạng = nội dung
thanh ghi + hằng
số
n Thanh ghi có thể
được ngầm định
NKK-HUT
Các dạng của định địa chỉ dịch chuyển
n Địa chỉ hoá tương đối với PC
n Thanh ghi là Bộ đếm chương trình PC
n Toán hạng có địa chỉ cách ngăn nhớ được
trỏ bởi PC một độ lệch xác định
n Định địa chỉ cơ sở
IT3030 49
n Thanh ghi chứa địa chỉ cơ sở
n Hằng số là chỉ số
n Định địa chỉ chỉ số
n Hằng số là địa chỉ cơ sở
n Thanh ghi chứa chỉ số
NKK-HUT
4.4. Kiến trúc tập lệnh MIPS
n Giới thiệu kiến trúc MIPS
n Tập thanh ghi
n Các khuôn dạng lệnh
n Các chế độ địa chỉ
n Một số lệnh cơ bản
n Lập trình hợp ngữ sử dụng tập lệnh MIPS
50IT3030
NKK-HUT
MIPS
n MIPS- Microprocessor without Interlocked
Pipeline Stages
n Sở hữu bởi MIPS Technologies
(www.mips.com)
Được sử dụng rộng rãi trong các thiết bị điệnn
tử dân dụng, các thiết bị mạng, camera, máy
in…
51IT3030
NKK-HUT
Các thanh ghi của MIPS
NKK-HUT
Các khuôn dạng lệnh MIPS
5 bits 5 bits
31 25 20 15 0
Opcode Source
register 1
Source
register 2
op rs rt
R 6 bits 5 bits
rd
5 bits
sh
6 bits
10 5
fn
Destination
register
Shift
amount
Opcode
extension
31 25 20 15 0
op rs rt operand / offset
I
IT3030 Slide 53
Imm ediate operand
or address offset
Opcode Destination
or data
Source
or base
5 bits 6 bits 16 bits 5 bits
0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0
31 0
Opcode
op jump target address
J
Memory word address (byte address divided by 4)
26 bits
25
6 bits
NKK-HUT
MIPS R-format Instructions
n Các thành phần của lệnh
n op: mã thao tác
op rs rt rd shamt funct
6 bits 6 bits5 bits 5 bits 5 bits 5 bits
n rs: thanh ghi nguồn thứ nhất
n rt: thanh ghi nguồn thứ hai
n rd: thanh ghi đích
n shamt: dự trữ (mặc định hiện nay là 00000)
n funct: mã chức năng (extends opcode)
54IT3030
NKK-HUT
Ví dụ lệnh R-format
add $t0, $s1, $s2
op rs rt rd shamt funct
6 bits 6 bits5 bits 5 bits 5 bits 5 bits
special $s1 $s2 $t0 0 add
0 17 18 8 0 32
000000 10001 10010 01000 00000 100000
0000 0010 0011 0010 0100 0000 0010 00002 = 0232402016
55IT3030
NKK-HUT
Phân tích khuôn dạng lệnh R-format
NKK-HUT
MIPS I-format Instructions
n Các phép toán tức thì và các lệnh
load/store
op rs rt constant or address
6 bits 5 bits 5 bits 16 bits
n rt,rs: thanh ghi toán hạng đích hoặc thanh ghi
nguồn
n Hằng số: –215 to +215 – 1
n Địa chỉ: địa chỉ độ lệch so với địa chỉ cơ sở
57IT3030
NKK-HUT
Load and Store Instructions
0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 x 1 0 0 0 0 0 0
31 25 20 15 0
lw = 35
sw = 43
Base
register
Data
register
Offset relative to base
op rs rt operand / offset
I 1 1 0 0 1 1 1 1 1
A[0]
A[1]
Address in
base register
Memory
Note on base and offset:
The memory address is the sum
of (rs) and an immediate value.
Calling one of these the base
and the other the offset is quite
lw $t0,40($s3)
lw $t0,A($s3)
MIPS lw and sw instructions and their memory addressing convention
that allows for simple access to array elements via a base address and
an offset (offset = 4i leads us to the i th word).
A[2]
A[i]
Offset = 4i
.
.
.
Element i
of array A
arbitrary. It would make perfect
sense to interpret the address
A($s3) as having the base A
and the offset ($s3). However,
a 16-bit base confines us to a
small portion of memory space.
58IT3030
NKK-HUT
lui Instructions
op rs rt operand / offset
lui $s0, 61 # The immediate value 61 is
# loaded in upper half of $s0
# with lower 16b set to 0s
0
0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0
31 25 20 15 0
lui = 15 Destination Unused
Immediate operand
I
Content of $s0 after the instruction is executed
59IT3030
NKK-HUT
Các chế độ địa chỉ
IT3030 60
NKK-HUT
Một số lệnh cơ bản
n Lệnh toán học và logic
n Lệnh load/store
n Lệnh nhảy và rẽ nhánh (jump/branch)
IT3030 61
NKK-HUT
Lệnh toán học và logic
IT3030 62
NKK-HUT
Lệnh toán học và logic (kiểu I-Format)
IT3030 63
NKK-HUT
Lệnh load/store
IT3030 64
NKK-HUT
Lệnh load/store (I-Format)
IT3030 65
NKK-HUT
Lệnh nhảy và rẽ nhánh không điều kiện
IT3030 66
NKK-HUT
Lệnh nhảy và rẽ nhánh có điều kiện
IT3030 67
NKK-HUT
Lệnh kiểm tra điều kiện
IT3030 68
NKK-HUT
NKK-HUT
Compiling If Statements
n C code:
if (i==j) f = g+h;
else f = g-h;
n f, g, h, i, j in $s0, $s1, $s2, $s3, $s4
n Compiled MIPS code:
bne $s3, $s4, Else
add $s0, $s1, $s2
j Exit
Else: sub $s0, $s1, $s2
Exit: …
Assembler calculates addresses
70IT3030
NKK-HUT
Compiling Loop Statements
n C code:
while (save[i] == k) i += 1;
n i in $s3, k in $s5, address of save in $s6
n Compiled MIPS code:
Loop: sll $t1, $s3, 2
add $t1, $t1, $s6
lw $t0, 0($t1)
bne $t0, $s5, Exit
addi $s3, $s3, 1
j Loop
Exit: …
71IT3030
NKK-HUT
NKK-HUT
Lập trình hợp ngữ sử dụng tập lệnh MIPS
n Khung chương trình hợp ngữ
n Biên dịch và thực thi chương trình hợp
ngữ
IT3030 73
NKK-HUT
Khung chương trình hợp ngữ
Chương trình hợp ngữ cho MIPS bao
gồm các thành phần
ØĐịnh hướng biên dịch
ØLệnh
ØGiả lệnh
NKK-HUT
Khung chương trình hợp ngữ
#include
.data
#Khai báo biến
.text
.globl start
.ent start
start:
#Nội dung chương trình chính
.end start
.ent CTCon
CTCon:
#Nội dung chương trình con
.end CTCon
NKK-HUT
Chương trình ví dụ
#include
.data
test: .asciiz "Hello World"
.text
.set noreorder
.globl start
.ent start
start:
la a0,test #load the address of test string to a0
jal printf #print test tring to console
.end start
NKK-HUT
Biên dịch và thực thi với MIPSIT & MIPS
nMIPSIT2000
UPLOAD
nMIPS
n
NKK-HUT
4.5. Kiến trúc tập lệnh x86
n Giới thiệu kiến trúc x86
n Tập thanh ghi 8086
n Tập lệnh và các chế độ địa chỉ
n Ví dụ lập trình hợp ngữ sử dụng tập lệnh 8086
78IT3030
NKK-HUT
4.6. Kiến trúc tập lệnh Intel x86
n Evolution with backward compatibility
n 8080 (1974): 8-bit microprocessor
n Accumulator, plus 3 index-register pairs
n 8086 (1978): 16-bit extension to 8080
n Complex instruction set (CISC)
8087 (1980): floating-point coprocessorn
n Adds FP instructions and register stack
n 80286 (1982): 24-bit addresses, MMU
n Segmented memory mapping and protection
n 80386 (1985): 32-bit extension (now IA-32)
n Additional addressing modes and operations
n Paged memory mapping as well as segments
79IT3030
NKK-HUT
The Intel x86 ISA
n Further evolution…
n i486 (1989): pipelined, on-chip caches and FPU
n Compatible competitors: AMD, Cyrix, …
n Pentium (1993): superscalar, 64-bit datapath
n Later versions added MMX (Multi-Media eXtension)
instructions
n The infamous FDIV bug
n Pentium Pro (1995), Pentium II (1997)
n New microarchitecture (see Colwell, The Pentium
Chronicles)
n Pentium III (1999)
n Added SSE (Streaming SIMD Extensions) and
associated registers
n Pentium 4 (2001)
n New microarchitecture
n Added SSE2 instructions
80IT3030
NKK-HUT
The Intel x86 ISA
n And further…
n AMD64 (2003): extended architecture to 64 bits
n EM64T – Extended Memory 64 Technology
(2004)
n AMD64 adopted by Intel (with refinements)
n Added SSE3 instructions
n Intel Core (2006)
n Added SSE4 instructions, virtual machine support
n AMD64 (announced 2007): SSE5 instructions
n Intel declined to follow, instead…
n Advanced Vector Extension (announced 2008)
n Longer SSE registers, more instructions
n If Intel didn’t extend with compatibility, its
competitors would!
n Technical elegance ≠ market success
81IT3030
NKK-HUT
Giới thiệu kiến trúc x86
IT3030 82
NKK-HUT
Cấu trúc bên trong của 8086
n Gồm 2 phần:
n Đơn vị nối ghép bus (Bus Interface Unit –
BIU)
n Đơn vị thực hiện (Execution Unit – EU)
n Hai phần này có thể hoạt động đồng
83
thời: trong khi EU đang thực hiện lệnh
trước thì BIU đã tìm và nhận lệnh tiếp
theo từ bộ nhớ chính.
NKK-HUT
Bus Interface Unit - BIU
n Bao gồm:
n Các thanh ghi đoạn
n Con trỏ lệnh
n Mạch tạo địa chỉ và điều khiển bus
n Hàng đợi lệnh (8088: 4 Byte, 8086: 6 Byte)
84
n Nhiệm vụ:
n Tạo và phát địa chỉ
n Nhận lệnh từ bộ nhớ
n Trao đổi dữ liệu với bộ nhớ chính và cổng
vào-ra
n Phát tín hiệu điều khiển bộ nhớ và mạch
vào-ra
Nhận các tín hiệu yêu cầu từ bên ngoài
NKK-HUT
Execution Unit – EU
n Gồm:
n Các thanh ghi chung
n Các thanh ghi đệm
n Đơn vị số học và logic (ALU)
Khối giải mã lệnh
85
n
n Nhiệm vụ:
n Giải mã lệnh
n Thực hiện lệnh
NKK-HUT
Tập thanh ghi 8086
n 4 thanh ghi đoạn:
n CS (Code Segment): thanh ghi đoạn lệnh
n DS (Data Segment): thanh ghi đoạn dữ liệu
n SS (Stack Segment): thanh ghi đoạn ngăn xếp
n ES (Extra Segment): thanh ghi đoạn dữ liệu phụ
n 3 thanh ghi con trỏ:
n IP (Instruction Pointer): thanh ghi con trỏ lệnh
n SP (Stack Pointer): con trỏ ngăn xếp
86
n BP (Base Pointer): thanh ghi con trỏ cơ sở
n 4 thanh ghi dữ liệu:
n AX (Accumulator): thanh chứa - thanh ghi tích lũy
n BX (Base): thanh ghi cơ sở
n CX (Count): thanh ghi đếm
n DX (Data): thanh ghi dữ liệu
Mỗi thanh ghi này đều có thể được chia ra thành 2 nửa có
khả năng sử dụng độc lập.
n Thanh ghi cờ
NKK-HUT
Tập thanh ghi (tiếp)
87
NKK-HUT
Tập lệnh và các chế độ địa chỉ
n Tập lệnh:
Tập lệnh của 8088 có khoảng 120 lệnh,
chia thành các nhóm như sau:
n Các lệnh chuyển dữ liệu (copy)
n Các lệnh số học
88
n Các lệnh logic, dịch, quay
n Các lệnh xử lý xâu ký tự (string)
n Các lệnh điều khiển hệ thống
n Các lệnh chuyển điều khiển (rẽ nhánh)
n Các lệnh xử lý đặc biệt
n Các lệnh vào-ra trực tiếp
NKK-HUT
Tập lệnh và các chế độ địa chỉ (tiếp)
n Các chế độ địa chỉ (Addressing modes):
n Chế độ địa chỉ là cách xác định toán hạng của
lệnh
n Toán hạng gồm: toán hạng nguồn và toán hạng
đích
n Họ Intel x86: nếu trong lệnh có 2 toán hạng thì toán
89
hạng đích được viết ở bên trái.
n Toán hạng có thể là:
n Hằng số (được cho ngay trong lệnh)
n Nội dung của thanh ghi (trong lệnh cần cho biết tên
thanh ghi)
n Nội dung của ngăn nhớ
n Nội dung của cổng vào-ra
NKK-HUT
Các chế độ địa chỉ
n Chế độ địa chỉ tức thì:
n Toán hạng là một giá trị hằng số nằm ngay trong
lệnh.
n Ví dụ:
MOV CX, 5 ; nạp giá trị 5 vào thanh ghi CX
MOV 5, CX ; chú ý: không tồn tại lệnh này !!!
90
n Chế độ địa chỉ thanh ghi:
n Toán hạng là nội dung của 1 thanh ghi mà tên
thanh ghi được cho biết ở trong lệnh.
n Ví dụ:
MOV AX, BX ; chuyển nội dung của BX vào AX
NKK-HUT
Các chế độ địa chỉ (tiếp)
n Chế độ địa chỉ trực tiếp:
n Toán hạng là nội dung của ngăn nhớ mà địa chỉ
của ngăn nhớ đó được cho ở trong lệnh.
n Ví dụ:
MOV AX, [1234h] ; khác với MOV AX,
ES:[1234h]
91
n 1234h là địa chỉ offset của ngăn nhớ
n Nếu không chỉ định địa chỉ đoạn thì ngầm định
thanh ghi đoạn tương ứng là DS
n Lệnh này chuyển 1 word nằm trong bộ nhớ bắt đầu
từ địa chỉ DS:1234h vào thanh ghi AX
NKK-HUT
Minh họa chế độ địa chỉ trực tiếp
92
NKK-HUT
Các chế độ địa chỉ (tiếp)
n Chế độ địa chỉ gián tiếp qua thanh
ghi:
n Toán hạng là nội dung của ngăn nhớ có địa chỉ
offset nằm trong 1 trong các thanh ghi sau: BX, SI,
DI.
93
n Chú ý: nếu không chỉ định địa chỉ đoạn thì ngầm
định thanh ghi đoạn tương ứng là DS.
n Ví dụ:
MOV AL, [SI] ; tương đương MOV AL,
DS:[SI]
Lệnh này chuyển 1 byte nhớ ở địa chỉ DS:SI vào
thanh ghi AL
NKK-HUT
Minh họa
94
NKK-HUT
Các chế độ địa chỉ (tiếp)
n Chế độ địa chỉ cơ sở:
n Toán hạng là nội dung của ngăn nhớ có địa chỉ
offset bằng tổng nội dung của một thanh ghi cơ sở
(BX hoặc BP) + hằng số.
n Nếu không chỉ định thanh ghi đoạn thì ngầm định
thanh ghi đoạn đó là:
95
n DS nếu thanh ghi cơ sở là BX
n SS nếu thanh ghi cơ sở là BP
n Ví dụ:
MOV AL, [BX+3] ; tương đương MOV AL,
[BX]+3
; tương đương MOV AL,
3[BX]
NKK-HUT
Minh họa
96
NKK-HUT
Các chế độ địa chỉ (tiếp)
n Chế độ địa chỉ chỉ số:
n Toán hạng là nội dung của ngăn nhớ có địa chỉ
offset bằng tổng nội dung của một thanh ghi chỉ số
(SI hoặc DI) + hằng số.
n Nếu không chỉ định thanh ghi đoạn thì ngầm định
thanh ghi đoạn đó là DS.
97
n Ví dụ:
MOV AX, [SI+3] ; tương đương MOV AX,
[SI]+3
; tương đương MOV AX,
3+[SI]
; tương đương MOV AX,
3[SI]
NKK-HUT
Minh họa
98
NKK-HUT
Các chế độ địa chỉ (tiếp)
n Chế độ địa chỉ chỉ số cơ sở:
n Toán hạng là ngăn nhớ có địa chỉ offset
bằng tổng của nội dung một thanh ghi cơ
sở (BX, BP) với một thanh ghi chỉ số (SI,
DI) và một hằng số.
99
n Ví dụ:
MOV AL, [BX][SI]+4 ; Û MOV AL,
[BX+SI+4]
NKK-HUT
Lập trình hợp ngữ với 8086
n Cú pháp
n Khung chương trình
n Ví dụ
IT3030 100
NKK-HUT
Chương trình dịch hợp ngữ
n Được gọi là ASSEMBLER
n Một số chương trình dịch hợp ngữ cho
IBM-PC:
n MASM – Microsoft Marco Assembler:
Các tệp: MASM.EXE, LINK.EXE,
101
n
EXE2BIN.EXE ...
n TASM – Turbo Assembler:
n Các tệp: TASM.EXE, TLINK.EXE ...
n 8086 Emulator
NKK-HUT
Cú pháp của hợp ngữ
n Chương trình hợp ngữ gồm các dòng lệnh, mỗi lệnh
viết trên một dòng, mỗi dòng có thể là:
n Lệnh của bộ vi xử lý (instruction)
n Chỉ dẫn của chương trình dịch ASSEMBLER
n Các lệnh hợp ngữ không phân biệt chữ hoa, chữ
thường.
n Khi dịch thành mã máy thì chỉ có các lệnh của bộ vi
102
xử lý mới được dịch.
n Cấu trúc của một dòng lệnh :
Tên Thao tác Toán hạng Chú thích
(Name Operation Operand Comment )
n Giữa các trường phải có ít nhất một dấu cách (hoặc
TAB)
n Ví dụ:
MAIN PROC
BAT_DAU: MOV CX, 50 ; khoi tao bo
dem
NKK-HUT
Khung chương trình EXE
.Model Small
.Stack 100h
.Data
; khai báo biến và hằng ở đây
.Code
Main Proc
mov ax, @Data
mov ds, ax ; khởi tạo DS trỏ đến
103
đoạn Data
; mov es, ax ; bỏ dấu ; để khởi tạo
ES = DS
; thân chương trình
mov ah, 4Ch ; hàm thoát về DOS
int 21h
Main EndP
End Main
NKK-HUT
Ví dụ
.Model Small
.Stack 100h
.Data
TBao db 'Hello World$' ; kết thúc bằng '$'
.Code
Main Proc
mov ax, @Data
mov ds, ax ; DS trỏ đến đoạn Data
104
HienTB:
mov ah, 9 ; hàm hiện chuỗi
lea dx, TBao ; DS:DX Þ chuỗi TBao
int 21h ; gọi hàm
Thoat:
mov ah,4Ch ; hàm thoát về DOS
int 21h
Main EndP
End Main
NKK-HUT
Hết chương 4
IT3030 105
Các file đính kèm theo tài liệu này:
- doko_vn_36557_kien_truc_may_tinh_kien_truc_4043.pdf