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

Readstring

Bước 1:

sử dụng DEBUG để ghi lại thông tin về thực thi của chương trình. Trong trường hợp
này, nó in ra chuỗi "\n ReadString here." để thông báo rằng hàm ReadString đang
được gọi.

Bước 2:

lấy độ dài của chuỗi ký tự mà người dùng sẽ nhập vào từ thanh ghi số 5 của máy ảo
và lưu giá trị đó vào biến len.

Bước 3:

sử dụng toán tử new để cấp phát một buffer có độ dài len ký tự và lưu trữ địa chỉ
bộ nhớ của buffer này vào biến con trỏ buffer.

Bước 4:

sử dụng đối tượng console (SynchConsole) để đọc chuỗi từ bàn phím và lưu trữ nó vào
buffer. Giá trị trả về của hàm console.Read() sẽ là số lượng ký tự đã đọc được từ
bàn phím.

Bước 5:

Sau khi đọc chuỗi từ bàn phím, hàm sẽ kiểm tra xem có lỗi xảy ra trong quá trình
đọc không (check == -1). Nếu có lỗi, hàm sẽ ghi giá trị -1 vào thanh ghi số 2 của
máy ảo để báo hiệu cho chương trình người dùng biết.

Nếu độ dài chuỗi đã đọc được từ bàn phím lớn hơn len (check+1 > len), hàm sẽ in ra
thông báo "End of stream!" để báo hiệu cho người dùng biết rằng chuỗi đã đọc không
được lưu trữ hoàn chỉnh trong buffer và ghi giá trị -2 vào thanh ghi số 2 của máy
ảo.

Nếu không có lỗi xảy ra trong quá trình đọc, hàm sẽ thêm ký tự kết thúc chuỗi '\0'
vào cuối buffer.

Bước 6:

sử dụng hàm System2User để chuyển dữ liệu từ kernel space sang user space. Nó lấy
địa chỉ của buffer trong kernel space từ thanh ghi số 4 của máy ảo và gọi hàm
System2User để chuyển dữ liệu sang user space

=>

Printstring

Mã nguồn trên triển khai hệ thống gọi hệ thống PrintString, trong đó PrintString là
một hệ thống gọi không có giá trị trả về và được sử dụng để in ra màn hình chuỗi ký
tự được cung cấp bởi người dùng.
Cụ thể, khi một chương trình sử dụng hệ thống gọi PrintString, các bước được thực
hiện như sau:

1. Ghi log và đọc địa chỉ buffer của chuỗi ký tự cần in ra màn hình từ thanh ghi
$a0.
2. Dùng hàm User2System để chuyển đổi chuỗi ký tự từ địa chỉ đọc được ở userspace
sang kernelspace.

3. Trong một vòng lặp, in từng ký tự của chuỗi ký tự này ra màn hình bằng cách sử
dụng phương thức console.Write của lớp SynchConsole.

4. Vòng lặp sẽ dừng khi gặp ký tự null '\0' trong chuỗi.

5. Tăng giá trị của thanh ghi $pc để chuyển sang lệnh tiếp theo.

6. Kết thúc hệ thống gọi.

Điều này cho phép người dùng có thể in ra màn hình các thông báo hoặc các dòng văn
bản tùy ý bằng cách sử dụng hệ thống gọi PrintString.

Sort

Trong hàm main(), đầu tiên chương trình yêu cầu người dùng nhập vào kích thước của
mảng bằng cách gọi hàm ReadInt() để đọc một số nguyên từ bàn phím và lưu giá trị
vào biến n.

Sau đó, một vòng lặp for được sử dụng để yêu cầu người dùng nhập giá trị cho mảng.

Trong vòng lặp này, chương trình sẽ hiển thị một thông báo yêu cầu người dùng nhập
giá trị cho từng phần tử của mảng và sử dụng hàm ReadInt() để đọc giá trị nhập vào
và lưu trữ nó vào mảng A.

Tiếp theo, chương trình sử dụng thuật toán Bubble Sort để sắp xếp mảng. Vòng lặp
for lồng nhau được sử dụng để so sánh các phần tử của mảng và hoán đổi chúng nếu
cần.

Nếu phần tử hiện tại lớn hơn phần tử tiếp theo, chúng sẽ được hoán đổi với nhau
bằng cách sử dụng biến tạm tmp để trung gian.

Cuối cùng, chương trình hiển thị mảng đã được sắp xếp bằng cách sử dụng vòng lặp
for và gọi hàm PrintInt() và PrintString() để in từng phần tử của mảng ra màn hình.

Sau đó, chương trình sử dụng hàm Exit() để kết thúc chương trình và trả về giá trị
của phần tử đầu tiên của mảng A (vì nó là phần tử nhỏ nhất trong mảng đã được sắp
xếp).

You might also like