Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 7

CE119-Lab01/IT012-Lab03

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)

subu : Tương tự sub nhưng không có lỗi overflow .


-and : Thực hiện and từng bit giá trị của thanh ghi rs và rt với nhau, kết quả lưu vào
thanh ghi rd
+Giả sử giá trị đang chứa trong thanh ghi $s1 là 0x12345678, giá trị đang chứa
trong thanh ghi $s2 là 0x0000000f thì
Kết quả: sau lệnh add trên, giá trị trong thanh ghi $s0 là 0x00000008

-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

-slt: Kiểm tra


xem giá trị trong thanh ghi rs có nhỏ hơn thanh ghi rt hay không, nếu nhỏ hơn thì
thanh ghi rd nhận giá trị là 1; ngược lại thanh ghi rd sẽ nhận giá trị 0
-sltu: Ý nghĩa thực hiện giống như slt. Nhưng việc kiểm tra giá trị thanh ghi rs có
nhỏ hơn thanh ghi rt hay không trong lệnh slt thực hiện trên số có dấu, còn trong
sltu thực hiện trên số không dấu
-slti/sltiu:Giống slt và sltu nhưng so sánh với số tức thời .
-syscall:Bản chất không phải 1 lệnh là dịch vụ của hệ điều hành để thực hiện một
số chứng năng như nhập xuất ,...
2.2

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

Mục đích : In ra Print this.


Mô phỏng: Khai báo string1 là “Print this.\n”
Cho $v0 là 4
Load địa chỉ của string 1 vào $a0
Gọi syscall -> dùng tiện ích 4 (giá trị trong $v0) -> in nội dung string của địa chỉ
mà $a0 đang giữ

3.Bài tập
a>

b> 2 chuỗi trên theo dạng nhị phân là :


00100100000000100000000000000100
00111100000000010001000000000001
00110100001001000000000000000000
00000000000000000000000000001100
00100100000000100000000000000100
00111100000000010001000000000001
00110100001001000000000000101001
00000000000000000000000000001100
c>
-Như câu a ta dễ dàng in ra được lệnh nhập bằng syscall (4)
- Dùng syscall 8 để nhập chuỗi :
Đầu tiên ta phải khai báo nhãn input để chữa chuỗi được nhập vào
Sau đó đưa địa chỉ biến cần nhập chuỗi vào $a0
Tiếp đó đưa độ dài chuỗi vào $s1
Đến phần in thì in ra chuỗi “Xuất: “ sau đó in ra chuỗi đang lưu trong biến .
d>

You might also like