Professional Documents
Culture Documents
Lab3 22520465
Lab3 22520465
22520465
2.Thực hành
2.1
- add : Thực hiện cộng giá trị thanh ghi rs với giá trị thanh ghi rt, tổng đưa vào
thanh ghi rd
+ Như đoạn chương trình bên dưới ta đã cộng thanh ghi $s1 và $s2 vào $s0 .
- addi : Thực hiện cộng giá trị thanh ghi rs với số tức
thời, kết quả đưa vào thanh ghi rt
+Cộng 1 với giá trị trong thanh ghi $s1 đưa vào $s2
-addu và addiu : Tương tự như add và addi nhưng thực hiện với số không dấu và
không xuất hiện overflow
-sub: thực hiện phép toán trừ 2 thanh ghi, kết quả lưu vào thanh ghi thứ 3
+ Thực hiện lấy giá trị trong thanh ghi $s2 (10) trừ đi giá trị trong thanh ghi $s1
và đưa nó vào trong thanh ghi $s0(5)
-andi : Lệnh này thực hiện and từng bit giá trị thanh ghi rs
và một số tức thời.
-or và nor : or và nor cách viết tương tự như and, nhưng thay vì thực hiện phép
toán and, 2 lệnh này sẽ thực hiện phép toán or hoặc nor cho từng bit trong 2 thanh
ghi, kết quả lưu vào thanh ghi thứ 3
-lw : Lấy giá trị trong thanh ghi rs cộng với số tức thời đang lưu trong offset (số
tức thời này này được mở rộng có dấu thanh 32 bits) ta được địa chỉ của từ nhớ cần
lấy dữ liệu. Dữ liệu của từ nhớ này sẽ được lấy để lưu vào thanh ghi rt
-sw : Lưu giá trị thanh ghi rt vào từ nhớ có địa chỉ được tính bằng giá trị thanh ghi
rs cộng với offset (offset được mở rộng có dấu thành số 32 bits trước khi cộng) có
nghĩa là ngược lại với lw
+ Ví dụ :
Đoạn chương trình trên đầu tiên ta cấp phát 4 ô nhớ đầu tiên trong bộ nhớ đặt nhãn
là arr .
Ta load địa chỉ arr vào $s1 -> $s1 đang lưu địa chỉ của arr là 0x10010000
Sau đó ta load giá trị 5 vào $s2 .Dùng sw để đưa 5 vào địa chỉ $s1 đang giữ ->
0x10001000 có giá trị là 5 . Dùng lw để lấy giá trị mà của địa chỉ $s1 đang giữ đưa
vào $s0
Mục đích : Đưa giá trị 23 vào thanh ghi $t0 và thay đổi giá trị của var1 thành 5 :
Mô phỏng : Khai báo 1 nhãn var1có kiểu word và có giá trị là 23 . Sau đó load giá
trị mà var1 đang giữ là 23 vào thanh ghi $t0 . Load giá trị 5 vào thanh ghi $t1 và
đổi giá trị của var bằng giá trị của thanh ghi $t1 (=5) .
-
Mục đích : Thay đổi giá trị của mảng
array1 . (Thay đổi giá trị bộ nhớ mà array1 đang giữ)
Mô phỏng: Khai báo 1 mảng array1 có 12 byte tương ứng với 3 ô nhớ trong bộ nhớ
Đầu tiên , ta load địa chỉ đầu tiên(ô nhớ đầu) của array1 vào $t0 , load 5 và $t1 ,
đưa giá trị của $t1 (5) vào ô nhớ đầu của array1 , load 13 vào $t1 , đưa 13 vào ô
nhớ thứ 2 ...... tiếp tục cho đến khi đưa vào cả 3 ô nhớ của array1 .
Mục đích : Chạy tiện ích syscall (5) : $v0 contains integer read
3.Bài tập
a>