Bài giảng Kiến trúc máy tính - Chương 3, Phần 3: Hợp ngữ MIPS - Võ Tấn Phương
dce
2015
KIẾN TRÚC MÁY TÍNH
KHOA HỌC & KỸ THUẬT MÁY TÍNH
BK
TP.HCM
Võ Tấn Phương
dce
2015
Chapter 3.2
Hợp ngữ MIPS
(Assembly Language)
Kiến trúc Máy tính– Chương 3
© Fall 2015
2
dce
2015
Nội dung
Các phát biểu trong hợp ngữ MIPS
Khung dạng chương trình hợp ngữ MIPS
Định nghĩa/khai báo dữ liệu
Địa chỉ bắt đầu (alignment) và thứ tự các byte trong bộ nhớ
Các hàm hệ thống
Thủ tục/hàm
Truyền tham số và Runtime Stack
Kiến trúc Máy tính– Chương 3
© Fall 2015
3
dce
2015
Các phát biểu trong hợp ngữ MIPS
Có 3 loại phát biểu trong hợp ngữ MIPS
Bình thường một phát biểu là một dòng
1. Các lệnh thật
Là các lệnh trong tập lệnh của bộ xử lý MIPS
Tương ứng một lệnh dạng mã máy (số 32 bit)
2. Lệnh giả (Pseudo-Instructions) và Macros
Được chuyển sang các lệnh thật bởi assembler
Mục đích giảm công sức cho lập trình viên
3. Các chỉ thị (directive) của Assembler
Cung cấp thông tin để assembler dịch chương trình
Dùng để định nghĩa phân đoạn, cấp phát dữ liệu bộ nhớ
Không thực thi được: chỉ thị không phải là lệnh
Kiến trúc Máy tính– Chương 3
© Fall 2015
4
dce
2015
Phát biểu loại lệnh
Lệnh hợp ngữ có định dạng:
[label:] mnemonic [operands]
[#comment]
Label: (optional)
Đánh dấu vị trí gợi nhớ của lệnh, phải có dấu ‘:’
Nhãn thường xuất hiện trong phân đoạn dữ liệu và mã
Mnemonic
Xác định phép toán (vd: add, sub, vv.)
Operands
Xác định toán hạn nguồn, đích của phép toán
Toán hạn có thể là thanh ghi, ô nhớ, hằng số
Thông thường một lệnh có 3 toán hạn
L1: addiu $t0, $t0, 1
#increment $t0
Kiến trúc Máy tính– Chương 3
© Fall 2015
5
dce
2015
Chú thích (Comments)
Chú thích rất quan trọng!
Giải thích mục đích của chương trình
Giúp việc đọc hiểu chương trình dễ dàng khi viết và xem lại
bởi chính mình và người khác
Giải thích dữ liệu vào, ra
Chú thích cần thiết ở đầu mỗi thủ tục/hàm
. Chỉ ra đối số, kết quả của thủ tục/hàm
. Mô tả mục đích của thủ tục/hàm
Chú thích trên một dòng
Bắt đầu với ký tự #
Kiến trúc Máy tính– Chương 3
© Fall 2015
6
dce
2015
Tiếp theo …
Các phát biểu trong hợp ngữ MIPS
Khung dạng chương trình hợp ngữ MIPS
Định nghĩa/khai báo dữ liệu
Địa chỉ bắt đầu (alignment) và thứ tự các byte trong bộ nhớ
Các hàm hệ thống
Thủ tục/hàm
Truyền tham số và Runtime Stack
Kiến trúc Máy tính– Chương 3
© Fall 2015
7
dce
2015
Khung dạng mẫu của chương trình hợp ngữ
# Title:
Filename:
Date:
# Author:
# Description:
# Input:
# Output:
################# Data segment #####################
.data
. . .
################# Code segment #####################
.text
.globl main
main:
# main program entry
# Exit program
. . .
li $v0, 10
syscall
Kiến trúc Máy tính– Chương 3
© Fall 2015
8
dce
2015
Chỉ thị .DATA, .TEXT, & .GLOBL
Chỉ thị .DATA
Định nghĩa phân đoạn dữ liệu (data segment)
Các biến của chương trình được định nghĩa tại vùng này
Assembler sẽ cấp phát và khởi tạo các biến này
Chỉ thị .TEXT
Định nghĩa phân đọa mã (code segment) của một chương
trình và chứa các lệnh
Chỉ thị .GLOBL
Khai báo ký hiệu toàn cục (global)
Các ký hiệu toàn cục có thể kham khảo ở các file khác nhau
Ký hiệu hàm main dùng chỉ thị toàn cục
Kiến trúc Máy tính– Chương 3
© Fall 2015
9
dce
2015
Phân chia phân đoạn của chương trình
0x7FFFFFFF
Stack Grows
Stack Segment
Downwards
Memory
Addresses
in Hex
Dynamic Area
Static Area
Data Segment
0x10000000
Text Segment
Reserved
0x04000000
0
Kiến trúc Máy tính– Chương 3
© Fall 2015
10
dce
2015
Tiếp theo …
Các phát biểu trong hợp ngữ MIPS
Khung dạng chương trình hợp ngữ MIPS
Định nghĩa/khai báo dữ liệu
Địa chỉ bắt đầu (alignment) và thứ tự các byte trong bộ nhớ
Các hàm hệ thống
Thủ tục/hàm
Truyền tham số và Runtime Stack
Kiến trúc Máy tính– Chương 3
© Fall 2015
11
dce
2015
Phát biểu khai báo dữ liệu
Nằm trong phân đọa dữ liệu .DATA
Đánh dấu ô nhớ tương ứng với tên và dữ liệu khởi tạo
Cú pháp:
[name:] directive initializer [, initializer] . . .
var1: .WORD 10
Các giá trị khởi tạo chuyển thành dạng dữ liệu nhị phân
trong vùn nhớ dữ liệu tương ứng
Kiến trúc Máy tính– Chương 3
© Fall 2015
12
dce
2015
Các chỉ thị kiểu dữ liệu (Data Directives)
.BYTE
Mỗi giá trị là 1 ô nhớ (8-bit, 1 byte)
.HALF
Mỗi giá trị là 2 ô nhớ (16-bit, 2 byte), có địa chỉ bắt đầu chi
hết cho 2 (half align)
.WORD
Mỗi giá trị là 4 ô nhớ (32-bit, 4 byte), có địa chỉ bắt đầu chi
hết cho 4 (word align)
.FLOAT
Mỗi giá trị là 4 ô nhớ số thực dấu chấm động đơn
.DOUBLE
Mỗi giá trị là 8 ô nhớ số thực dấu chấm động kép
Kiến trúc Máy tính– Chương 3
© Fall 2015
13
dce
2015
Các chỉ thị về chuỗi (String Directives)
.ASCII
Cấp phát các ô nhớ 1 byte cho chuỗi ASCII
.ASCIIZ
Giống với chỉ thị .ASCII, nhưng thêm ký tự NULL tại vị trí
kết thúc chuỗi
Ký tụ NULL có giá trị bằng 0, đánh dấu kết thúc chuỗi
.SPACE
Cấp phát n ô nhớ 1 byte không khởi tạo giá trị trong vùng
nhớ dữ liệu
Kiến trúc Máy tính– Chương 3
© Fall 2015
14
dce
2015
Ví dụ khai báo biến
.DATA
var1: .BYTE
var2: .HALF
var3: .WORD
var4: .FLOAT
'A', 'E', 127, -1, '\n'
-10, 0xffff
0x12345678:100
12.3, -0.1
Array of 100 words
var5: .DOUBLE 1.5e-10
str1: .ASCII "A String\n"
str2: .ASCIIZ "NULL Terminated String"
100 bytes (not initialized)
array: .SPACE
100
Kiến trúc Máy tính– Chương 3
© Fall 2015
15
dce
2015
Tiếp theo …
Các phát biểu trong hợp ngữ MIPS
Khung dạng chương trình hợp ngữ MIPS
Định nghĩa/khai báo dữ liệu
Địa chỉ bắt đầu (alignment) và thứ tự các byte trong bộ nhớ
Các hàm hệ thống
Thủ tục/hàm
Truyền tham số và Runtime Stack
Kiến trúc Máy tính– Chương 3
© Fall 2015
16
dce
2015
Địa chỉ bắt đầu (alignment) trong bộ nhớ
Bộ nhớ được xem là mảng các ô nhớ 1 byte
Định địa chỉ theo byte: mỗi địa chỉ tương ứng ô nhớ 1 byte
Từ nhớ (word) chiếm 4 byte liên tiếp trong bộ nhớ
Mỗi lệnh MIPS là một số nhị phân 4 byte
Alignment: địa chỉ bắt đầu phải chia hết cho kích thước
Memory
Địa chỉ một word là một số chia hết cho 4
. . .
. Hai bit thấp của địa chỉ là 00
aligned word
not aligned
12
8
Địa chỉ một half word chia hết cho 2
4
Chỉ thị.ALIGN n
not aligned
0
Quy định địa chỉ bắt đầu của biến khai báo kế tiếp có địa chỉ
bắt đầu là một số chia hết cho 2n
Kiến trúc Máy tính– Chương 3
© Fall 2015
17
dce
2015
Bảng ký hiệu (Symbol Table)
Assembler tạo bảng ký hiệu cho các biến (label)
Assembler tính toán địa chỉ của các biến trong vùng nhớ
dữ liệu và lưu vào bảng ký hiệu
Ví dụ
Symbol Table
.DATA
Label Address
var1: .BYTE 1, 2,'Z'
var1 0x10010000
str1 0x10010003
var2 0x10010010
var3 0x10010018
str1: .ASCIIZ "My String\n"
var2: .WORD 0x12345678
.ALIGN 3
var3: .HALF 1000
str1
var1
0x10010000
0x10010010
var2 (aligned)
Unused
1 2 'Z' 'M' 'y' ' ' 'S' 't' 'r' 'i' 'n' 'g' '\n' 0 0 0
0x12345678 0 0 0 0 1000
Unused
var3 (address is multiple of 8)
Kiến trúc Máy tính– Chương 3
© Fall 2015
18
dce
2015
Thứ tự trọng số các ô nhớ (Endianness)
Bộ xử lý xác định trọng số các ô nhớ trong một word theo:
Little Endian
Địa chỉ bắt đầu = địa chỉ của byte trọng số nhỏ LSB
Ví dụ: Intel IA-32, Alpha
a
a+1
a+2
a+3
MSB
LSB
address
. . .
. . .
Byte 3 Byte 2 Byte 1 Byte 0
32-bit Register
Byte 0 Byte 1 Byte 2 Byte 3
Memory
Big Endian
Địa chỉ bắt đầu = địa chỉ của byte trọng số lớn MSB
Ví dụ: SPARC, PA-RISC
a
a+1
a+2
a+3
MSB
LSB
address
. . .
. . .
Byte 3 Byte 2 Byte 1 Byte 0
32-bit Register
Byte 3 Byte 2 Byte 1 Byte 0
Memory
MIPS hỗ trợ cả hai dạng định thứ tự byte trên
Kiến trúc Máy tính– Chương 3
© Fall 2015
19
dce
2015
Tiếp theo …
Các phát biểu trong hợp ngữ MIPS
Khung dạng chương trình hợp ngữ MIPS
Định nghĩa/khai báo dữ liệu
Địa chỉ bắt đầu (alignment) và thứ tự các byte trong bộ nhớ
Các hàm hệ thống
Thủ tục/hàm
Truyền tham số và Runtime Stack
Kiến trúc Máy tính– Chương 3
© Fall 2015
20
Tải về để xem bản đầy đủ
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Kiến trúc máy tính - Chương 3, Phần 3: Hợp ngữ MIPS - Võ Tấn Phương", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
File đính kèm:
bai_giang_kien_truc_may_tinh_chuong_3_phan_3_hop_ngu_mips_vo.pdf

