Microsoft Word Huong dan thuc hanh mips asm tren pcspim doc



tải về 0.57 Mb.
Chế độ xem pdf
trang3/10
Chuyển đổi dữ liệu02.11.2023
Kích0.57 Mb.
#55526
1   2   3   4   5   6   7   8   9   10
huong dan thuc hanh mips asm tren pcspim 5652
MIPSSSS, 5
 
 


3. Tập lệnh của MIPS 
Lệnh 
Cú pháp 
Định dạng lệnh 
Ý nghĩa 
Cộng số bù 2 
add rd, rs, rt 
rd <-- rs+rt ; 
Cộng không dấu 
addu rd, rs, rt
rd <-- rs+rt ; 
Cộng với hằng số 
16 bit bù 2 
addi rd, rs, const 
rd Å rs+const ; 
Cộng với hằng số 
16 bit không dấu 
addiu rd, rs, const 
rd Å rs+const ; 
AND từng bit 
and rd, rs, rt
rd Å bitwise AND of rs with rt 
AND từng bit với 
hằng số 16 bit
andi rd, rs, const 
rd Å bitwise AND of rs with 
const 
Nhảy nếu bằng 
beq rs, rt, addr 
nhảy đến addr nếu rs == rt. Cần 
phải thêm delay theo sau (nop) 
Nhảy nếu lớn hơn 
hay bằng 0 
bgez rs, addr 
nhảy đến addr nếu số bù 2 trong 
rs >= 0. Cần thêm delay
Nhảy nếu nhỏ hơn 

bltz rs, addr 
nhảy đến addr nếu số bù 2 trong 
rs < 0. Cần thêm delay 
Nhảy nếu khác 
bne rs, rt, addr 
nhảy đến addr nếu rs != rt. Cần 
thêm delay
Chia hai số bù 2 
div rs, rt 
lo Å rs div rt; hi Å rs mod rt
hai số rs và rt ở dạng bù 2 
Chia hai số không 
dấu 
divu rs, rt 
lo Å rs div rt; hi Å rs mod rt
hai số rs và rt ở dạng không dấu 
Nhảy không điều 
kiện 
j target 
delay sau một chu kỳ máy:
PC Å địa chỉ của target 
Nhảy không điều 
kiện và link 
jal target 
gọi hàm target, $ra = PC +4
PC Å địa chỉ của target, thêm 
nop 
Nhảy không điều 
kiện theo giá trị 
thanh ghi 
jr rs 
trở về hàm gọi, thường dùng
jr $ra , PC Å $ra, cần thêm lệnh 
delay nop theo sau 
Load byte và mở 
rộng dấu 
lb rd, offset(base) 
rd Å byte đã được mở rộng dấu 
từ ô nhớ có địa chỉ base + 


offset, offset là số bù 2 
Load byte và mở 
rộng số 0 đầu 
lbu rd, offset(base) 
rd Å byte đã được mở rộng 0 từ 
ô nhớ có địa chỉ base + offset, 
offset là số bù 2 
Load half-word 
và mở rộng dấu 
lh rd, offset(base) 
rd Å 2 byte liên tiếp đã được 
mở rộng dấu từ ô nhớ có địa chỉ 
base + offset , offset là số bù 2 
Load half-word 
và mở rộng số 0 
lhu rd, offset(base) 
rd Å 2 byte liên tiếp đã được 
mở rộng 0 từ ô nhớ có địa chỉ 
base + offset, offset là số bù 2 
Load hằng vào 16 
bit cao 
lui rd, const 
2 byte cao của rd Å 16 bit const
2 byte thấp của rd Å 0x0000 
Load word 
lw rd, offset(base) 
rd Å word bộ nhớ có địa chỉ 
base + offset, offset là số bù 2 
Chuyển giá trị từ 
hi vào thanh ghi 
mfhi rd 
rd Å hi 
Chuyển giá trị từ 
lo vào thanh ghi 
mflo rd 
rd Å lo 
Nhân hai số bù 2 
mult rs, rt 
value(hi, lo) Å rs*rt; rs và rt là 
hai số bù 2 
Nhân hai số 
không dấu 
multu rs, rt 
value(hi, lo) Å rs*rt; rs và rt là 
hai số không dấu 
NOT từng bit
nor rd, rs, $0 
rd Å NOT từng bit của rs 
NOR từng bit 
nor rd, rs, rt 
rd Å NOR từng bit của rs và rt 
OR từng bit 
or rd, rs, rt 
rd Å OR từng bit của rs và rt 
OR từng bit với 
hằng 16 bit 
or rd, rs, const 
rd Å OR từng bit của rs và 
hằng sau khi mở rộng 0 
Lưu byte thấp của 
thanh ghi vào bộ 
nhớ 
sb rs, offset(base) 
byte ở offset +base Å byte thấp 
của rs, offset dạng bù 2
Lưu hai byte thấp 
vào bộ nhớ 
sh rs, offset(base) 
2 byte ở offset +base Å 2 byte 
thấp của rs, offset dạng bù 2 
Lệnh nop 
sll $0, $0, 0 
tạo thời gian trễ cần thiết 


Dịch trái không 
dấu 
sll rd, rs, shft 
rd Å rs sau khi dich trái shft 
bit; 0 <= shft <32
So sánh hai thanh 
ghi dạng bù 2 
slt rd, rs, rt 
if rs < rt 
rd <-- 1 
else 
rd <-- 0 
hai toán hạng dạng bù 2 
So sánh thanh ghi 
với hằng bù 2 
slti rd, rs, const 
if rs < const 
rd <-- 1 
else 
rd <-- 0 
hai toán hạng dạng bù 2 
So sánh thanh ghi 
với hằng không 
dấu 
sltiu rd, rs, const 
if rs < const 
rd <-- 1 
else 
rd <-- 0 
hai toán hạng dạng không dấu 
So sánh hai thanh 
ghi không dấu 
sltu rd, rs, rt 
if rs < rt 
rd <-- 1 
else 
rd <-- 0 
hai toán hạng dạng không dấu 
Dịch phải có dấu 
sra rd, rs, shft 
rd Å rs sau khi dich phải shft 
bit và mở rộng dấu;
0 <= shft <32 
Dịch phải luận lý 
srl rd, rs, shft 
rd Å rs sau khi dich phải shft 
bit; 0 <= shft <32 
Trừ hai thanh ghi 
dạng bù 2 
sub rd, rs, rt 
rd Å rs – rt; các toán hạng dạng 
bù 2 
Trừ hai thanh ghi 
dạng không dấu 
subu rd, rs, rt 
rd Å rs – rt; các toán hạng dạng 
không dấu 
Lưu thanh ghi vào 
bộ nhớ 
sw rs, offset(base) 
word ở địa chỉ offset + base Å 
$rs; offset dạng bù 2 
XOR từng bit 
xor rd, rs, rt 
rd Å XOR từng bit rs và rt 
XOR từng bit với 
hằng 
xori rd, rs, rt 
rd Å XOR từng bit rs và hằng 
sau khi mở rộng 0 


4. Cú pháp của MIPS Assempler 
Chú thích (comment) chuỗi các từ bắt đầu bằng #, tất cả các từ bắt đầu từ # cho đến cuối 
dòng đều được bỏ qua. 
Tên định danh (identifier) là chuỗi các ký tự chữ, số, dấu gạch dưới (_) và dấu chấm (.) 
không bắt đầu bằng số. Tên không được trùng với các từ dành riêng là opcode của lệnh.
Các ví dụ về tên định danh hợp lệ:
main, loop, end_if, case1.2 
Các ví dụ về tên định danh không hợp lệ: 
1value
# số đứng đầu 

# trùng với opcode lệnh nhảy 
add 
# trùng với opcode lệnh cộng 
Nhãn bao gồm tên định danh theo sau là dấu hai chấm (:) được đặt ở đầu dòng.
Ví dụ: 
Số (number) mặc định là cơ số 10. Số thập lục phân (hexadecimal) thêm 0x vào phía 
trước. Hai số 256 và 0x100 diễn tả số có cùng giá trị. 
Chuỗi (string) được đặt giữa hai dấu nháy kép (“). Ví dụ: “Hello world!\n”. Các ký tự 
đặt biệt cho phép trong chuỗi: 
Chỉ thị (directive) được hỗ trợ gồm có: 
Tên chỉ thị 
Ý nghĩa 
.text <addr
Tất cả các phần theo sau cho tới chỉ thị mới (.text, .ktext, .data, .kdata) được 
đặt trong vùng nhớ chương trình (code segment). Tham số addr nếu có quy 
định địa chỉ bắt đầu của vùng nhớ chương trình dùng để lưu các phần trong 
phân đoạn mã chương trình này. Phần theo sau thường là các lệnh. 
.ktext <addr
Tất cả các phần theo sau cho tới chỉ thị mới (.text, .ktext, .data, .kdata) được 
đặt vào vùng nhớ nhân (kernel) của hệ điều hành. Tham số addr nếu có quy 
định địa chỉ bắt đầu của vùng nhớ dùng để lưu. Phần theo sau thường là các 
lệnh. 
.
globl sym
Khai báo nhãn sym là toàn cục và có thể được tham khảo từ file khác 
.data <addr
Tất cả các phần theo sau cho tới chỉ thị mới (.text, .ktext, .data, .kdata) được 
đặt trong vùng nhớ dữ liệu nhân (kernel data segment). Tham số addr nếu 
có quy định địa chỉ bắt đầu của vùng nhớ dùng để lưu. 
newline \n 
tab
\t 
quote \” 
.data 
item:
.word

.text 
.globl main 
# must be global 
main:
… 


.kdata <addr
Tất cả các phần theo sau cho tới chỉ thị mới (.text, .ktext, .data, .kdata) được 
đặt trong vùng nhớ dữ liệu (data segment). Tham số addr nếu có quy định 
địa chỉ bắt đầu của vùng nhớ dùng để lưu. 
.ascii str 
Lưu chuỗi str vào bộ nhớ, không có ký tự kết thúc chuỗi (giá trị = 0) sau 
cùng 
.asciiz str
Lưu chuỗi str vào bộ nhớ, thêm ký tự kết thúc chuỗi (giá trị = 0) sau cùng 
.byte b1,..,bn
Lưu n byte liên tiếp nhau b1,..,bn vào bộ nhớ 
.half h1,..,hn
Lưu n phần tử 16-bit liên tiếp nhau h1,..,hn vào bộ nhớ 
.word w1,..,wn
Lưu n phần tử 32-bit liên tiếp nhau w1,..,wn vào bộ nhớ 
.float f1,..,fn
Lưu n số thực dấu chấm động độ chính xác đơn liên tiếp nhau f1,..,fn vào bộ 
nhớ 
.double d1,..,dn
Lưu n số thực dấu chấm động độ chính xác đơn liên tiếp nhau d1,..,dn vào 
bộ nhớ 
.space n
Cấp phát n byte liên tiếp nhau trong phân đoạn dữ liệu hiện tại. Phải đặt sau 
chỉ thị .data
.extern sym n
Khai báo dữ liệu lưu ở sym có kích thước n byte và sym là nhãn toàn cục. 
Dữ liệu vùng nhớ này được truy xuất thông qua thanh ghi $gp 



tải về 0.57 Mb.

Chia sẻ với bạn bè của bạn:
1   2   3   4   5   6   7   8   9   10




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương