Các loại mã trong vi xử lý

Vi xử lý vốn là một khái niệm đã quá quen thuộc với những người sử dụng máy tính hay những kĩ sư, lập trình viên. Tuy nhiên đây cũng là một khái niệm có một vài điểm cần lưu ý. Hôm nay BKAII sẽ cùng các bạn khái quát lại một số những kiến thức liên quan đến vi xử lý nhé!

 

Các loại mã trong vi xử lý

Với những tiến bộ của công nghệ hiện đại, vi xử lý ra đời và phát triển nhanh chóng theo thời gian. Những hãng sản xuất tên tuổi lần lượt đưa ra những vi xử lý với thương hiệu riêng của mình. Một số hãng tên tuổi với những sản phẩm hiện được bán rộng rãi như: Intel, Texas Instruments và Garett AiResearch. Đây cũng chính là ba hãng sản xuất đầu tiên cho ra đời những bộ vi xử lý hoàn chỉnh.

Vi xử lý (viết tắt là µP hay uP), đôi khi còn được gọi là bộ vi xử lý, là một linh kiện điện tử máy tính được chế tạo từ các tranzito thu nhỏ tích hợp lên trên một vi mạch tích hợp đơn. Khối xử lý trung tâm (CPU) là một bộ vi xử lý được nhiều người biết đến nhưng ngoài ra nhiều thành phần khác trong máy tính cũng có bộ vi xử lý riêng của nó, ví dụ trên card màn hình chúng ta cũng có một bộ vi xử lý. Trước khi xuất hiện các bộ vi xử lý, các CPU được xây dựng từ các mạch tích hợp cỡ nhỏ riêng biệt, mỗi mạch tích hợp chỉ chứa khoảng vào chục tranzito.

Sự tiến hóa của các bộ vi xử lý một phần nhờ vào việc chạy theo định luật Moore và hiệu suất của nó tăng lên một cách ổn định sau hàng năm. Vi xử lý chính là bộ xử lý trung tâm trong: máy tính (PC, Laptop,…), smartphone, thiết bị nhúng,... và đặc biệt trong công nghiệp ngành điện với bộ điều khiển khả trình PLC và vi điều khiển để ứng dụng điều khiển các dây chuyền, hệ thống tự động,…

Để hiểu hơn về vi xử lý chúng ta sẽ tìm hiểu một vài thông tin chi tiết về CPU

Khái niệm CPU

CPU được gọi là bộ xử lý, bộ xử lý trung tâm, hoặc bộ vi xử lý, CPU viết tắt của Central Processing Unit là bộ xử lý trung tâm của máy tính. Nhiệm vụ chính của CPU là xử lý các chương trình và dữ kiện. CPU có nhiều kiểu dáng khác nhau. Ở hình thức đơn giản nhất, CPU là một con chip với vài chục chân. Phức tạp hơn, CPU được ráp sẵn trong các bộ mạch với hàng trăm con chip khác. CPU là một mạch xử lý dữ liệu theo chương trình được thiết lập trước. Nó là một mạch tích hợp phức tạp gồm hàng triệu transistor.

Cấu tạo

CPU được cấu tạo bởi 3 thành phần chính:

  • Bộ điều khiển: là các vi xử lí có nhiệm vụ thông dịch các lệnh của chương trình và điều khiển hoạt động xử lí, được điều tiết chính xác bởi xung nhịp đồng hồ hệ thống.
  • Bộ số học logic: có chức năng thực hiện lệnh của đơn vị điều khiển và xử lý tín hiệu. Bộ phận này thực hiện các phép tính số học hay các phép tính logic
  • Thanh ghi: Thanh ghi này có nhiệm vụ ghi mã lệnh trước khi xử lý và sau đó ghi kết quả đã xử lý.

Cách thức hoạt động

Với ba bước chính theo một quy trình, bao gồm: tìm nạp, giải mã, thực thi.

  • Tìm nạp: Khi nhận lệnh, lênh được biểu diễn dưới dạng một chuỗi các số và chuyển tới CPU từ RAM. Mỗi lệnh chỉ là một phần nhỏ của bất kì thao tác nào vì vậy CPU cần biết lệnh nào đến tiếp theo.
  • Giải mã: Khi một lệnh được tìm nạp và lưu trữ trong IR, CPU sẽ truyền lệnh tới một mạch gọi là bộ giải mã lệnh. Qua đây chuyển đổi lệnh thành các tín hiệu được chuyển qua phần khác để thực hiện hành động.
  • Thực thi: Các lệnh được giải mã được gửi đến bộ phận liên quan của CPU để thực hiện. Các kết quả được ghi vào một CPU register, nơi chúng được tham chiếu bằng các lệnh sau đó.

Xem thêm:

  • Khái niệm, công dụng và cách phân loại vi mạch
  • Những tìm hiểu cơ bản về linh kiện điện tử
  • Tìm hiểu chung về tụ điện: khái niệm, cấu tạo, đặc điểm và phân loại
  • Chức năng, ứng dụng, nguyên tắc vận hành rơ le

Trên đây là một vài tìm hiểu về vi xử lý và CPU. Hi vọng qua bài viết này các bạn đã có thêm cho mình những kiến thức thú vị và hữu ích. Có thắc mắc hay cần thêm thông tin gì các bạn nhớ liên hệ BKAII nhé!

"BKAII - Thiết bị truyền thông TỐT nhất với giá CẠNH TRANH nhất!"


  • GIỚI THIỆU
  • TOÁN TỬ (operation)
  • TOÁN HẠNG (operand)
  • Các lệnh rẽ nhánh

Mục đích: Giới thiệu về tập lệnh vi xử lý MIPS bao gồm các lệnh số học – luận lý, lệnh truyền dữ liệu, lệnh rẽ nhánh….Các kiểu toán hạng khác nhau được sử dụng như: toán hạng thanh ghi, toán hạng bộ nhớ và toán hạng trực tiếp. Ba định dạng lệnh cơ bản của MIPS như: R-format, I-format và J-format. Cách chuyển từ một lệnh vi xử lý MIPS sang mã máy.

GIỚI THIỆU

Chương này sẽ giới thiệu về tập lệnh của vi xử lý, là ngôn ngữ mà máy có thể hiểu và thực hiện chương trình. Kiến trúc tập lệnh được tìm hiểu ở chương này tập trung vào vi xử lý MIPS (Microprocessor without Interlocked Pipeline Stages). Vi xử lý MIPS được phát triển bởi công ty MIPS Technologies vào những năm đầu thập niên 80. Đây là vi xử lý thuộc kiến trúc RISC (Reduced Instruction Set Computer). So với kiến trúc CISC (Complex Instruction Set Computer) mà đại diện là các dòng vi xử lý x86 của hãng Intel thì kiến trúc RISC có các lệnh đơn giản và số lượng lệnh ít hơn.

Vì vậy, RISC thường chạy nhanh hơn RISC do kiến trúc này có thiết kế đơn giản.

MIPS là vi xử lý 32 bit, sau đó được mở rộng thành vi xử lý 64 bit.

TOÁN TỬ (operation)

Phép toán cơ bản trong máy tính đó là các phép toán số học, xem biểu diễn của phép toán cộng hai số thể hiện trong kiến trúc MIPS như sau: ADD a, b, c phép toán này thể hiện cộng b với c và kết quả lưu vào a. Trong kiến trúc MIPS các phép toán số học như thế này thường bao gồm ba toán hạng: một toán hạng đích dùng để chứa kết quả và hai toán hạng nguồn.

Một ví dụ khác, để tính tổng của bốn biến b, c, d, e và kết quả lưu vào a. Ta có chuỗi các lệnh để thực hiện như sau: ADD a, b, c # tính tổng b + c và lưu vào a ADD a, a, d # tính tổng của b+c+d và lưu vào a ADD a, a, e # tính tổng của b+c+d+e và lưu vào a Như vậy để cộng bốn biến thì ta cần sử dụng đến ba lệnh máy. Kí hiệu # là dùng để chú thích trong MIPS để người đọc dễ hiểu, khi biên dịch máy sẽ bỏ qua các chú thích này.

Trong kiến trúc MIPS sử dụng 32 thanh ghi, các thanh ghi này có cùng độ dài 32 bit. Không gian địa chỉ trong bộ nhớ cũng sử dụng 32 bit. Bảng 2.1 thể hiện các thanh ghi và không gian bộ nhớ.

Các loại mã trong vi xử lý

Bảng 2.1: Các thanh ghi và địa chỉ bộ nhớ trong MIPS

Các lệnh trong kiến trúc MIPS được chia thành 5 loại: lệnh số học, lệnh truyền dữ liệu, lệnh luận lý, lệnh nhảy có điều kiện và lệnh nhảy không điều kiện.

Các loại mã trong vi xử lý

Bảng 2.2: Tập lệnh vi xử lý MIPS

TOÁN HẠNG (operand)

Toán hạng thanh ghi

Số toán hạng trong các lệnh luận lý được giới hạn là ba, các toán hạng này thông thường là các thanh ghi của vi xử lý MIPS. Các thanh ghi này có độ dài là 32 bit.
Một từ (word) trong bộ nhớ cũng có độ dài 32 bit.

Ví dụ: viết các lệnh MIPS thể hiện câu lệnh sau f = (g + h) – (i + j) giả sử f, g, h, i, và j lần lượt được lưu trong $s0, $s1, $s2, $s3 và $s4 Để thực hiện các phép tính trên ta dùng hai thanh ghi $t0 và $t1 lưu gửi kết quả trung gian ADD $t0, $s1, $s2 ADD $t1, $s3, $s4 SUB $s0, $t0, $t1

Toán hạng bộ nhớ

Đối với những kiểu dữ liệu đơn thì có thể chứa trong thanh ghi nhưng với những dữ liệu có cấu trúc như mảng thì phải được lưu trong bộ nhớ. Khác với thanh ghi, không gian bộ nhớ lớn nên có thể chứa rất nhiều dữ liệu.

Toán hạng trong các lệnh số học và luận lý chỉ là những thanh ghi. Do đó để thực hiện các phép toán này trên dữ liệu bộ nhớ thì phải có lệnh truyền dữ liệu từ bộ nhớ vào thanh ghi. Lệnh này chính là lệnh load có tên cụ thể trong kiến trúc MIPS là lệnh LW (load word).

Các loại mã trong vi xử lý

Hình 2.1: Địa chỉ ô nhớ và dữ liệu tương ứng

Các phần tử của mảng được lưu liên tiếp trong bộ nhớ, ví dụ một mảng A chứa 100 phần tử (mỗi phần tử là một từ – word). Giả sử địa chỉ của mảng được lưu trong thanh ghi $s3 và các biến g và h lần lượt được lưu trong $s1 và $s2. Ta cần thực hiện phép gán sau:

g = h + A[8]

Phép toán cộng trên bao gồm một toán hạng thanh ghi và một toán hạng bộ nhớ nhưng lệnh add thì chỉ thực hiện trên toán hạng thanh ghi. Do đó, đầu tiên phải thực hiện đưa dữ liệu từ bộ nhớ vào một thanh ghi tạm nào đó. Do mỗi word chiếm 4 byte dữ liệu nên để truy xuất đến A[8] cần phải cộng thêm 32 (8 x 4) vào địa chỉ mảng (Giả sử chỉ số phần tử đầu tiên của mảng bắt đầu từ 0).

LW $t0, 32($s3) # gán giá trị A[8] vào thanh ghi tạm $t0 lệnh này thực hiện lấy nội dung một từ (word) tại địa chỉ [$s3 + 32] lưu vào thanh ghi $t0. Thanh ghi chứa địa chỉ mảng $s3 được gọi là thanh ghi cơ sở (base register) và giá trị 32 để xác định phần tử mảng được gọi là độ dời (offset). Cuối cùng thực hiện phép cộng và gán kết quả.

ADD $s1,$s2,$t0 # g = h + A[8]

Trái ngược với lệnh load là lệnh store, lệnh này sẽ chép dữ liệu từ thanh ghi vào bộ nhớ.

Ví dụ xét một mảng A như ví dụ trên với địa chỉ mảng được lưu trong $s3 và nội dụng của biến h được lưu trong $s2. Thực hiện phép toán sau đây: A[12] = h + A[8] Trước tiên lấy nội dung A[8] từ bộ nhớ lưu vào một thanh ghi tạm, sau đó thực hiện phép toán cộng: LW $t0, 32($s3) # lưu A[8] vào thanh ghi tạm $t0 ADD $t0, $s2, $t0 # h + A[8] lưu vào $t0 Cuối cùng lưu kết quả vào phần tử A[12] trong bộ nhớ bằng cách dùng lệnh store mà lệnh này thể hiện trong MIPS là SW (store word). Để xác định phần tử A[12] của mảng thì độ dời (offset) tương ứng là 48 (4 x 12).

SW $t0, 48($s3) # lưu h + A[8] vào A[12] Do số lượng thanh ghi trong vi xử lý có giới hạn nên những dữ liệu nào được dùng thường xuyên sẽ được ưu đưa vào thanh ghi, còn những dữ liệu khác ít sử dụng hơn sẽ được lưu vào bộ nhớ. Hơn nữa, truy cập dữ liệu trong thanh ghi nhanh hơn và tiêu tốn ít năng lương hơn trong bộ nhớ. Do đó để đảm bảo hiệu quả cao, trình biên dịch phải biết cách sử dụng thanh ghi một cách hiệu quả.

Toán hạng trực tiếp (immediate operand)

Toán hạng trực tiếp còn được gọi là toán hạng hằng (constant operand) được sử dụng thường xuyên trong các phép toán. Điển hình là sử dụng để trỏ đến phần tử tiếp theo trong một mảng. Theo thống kê thì có hơn một nửa các lệnh có sử dụng toán hạng trực tiếp.

Ví dụ như khi thực hiện phép cộng với một hằng số ta sử dụng lệnh ADDI (add immediate) ADDI $s3, $s3, 4 # $s3 = $s3 + 4 Toán hạng trực tiếp cũng làm cho lệnh được thực hiện nhanh hơn. Trong MIPS có một thanh ghi đặc biệt, đó là thanh ghi $zero hay $0 mà thanh ghi này luôn có giá trị 0. Một ứng dụng của thanh ghi này có thể thay lệnh MOVE bằng lệnh ADD mà có một toán hạng nguồn là $zero. Ngoài ra, do MIPS có hỗ trợ toán hạng hằng là số âm nên sẽ không có lệnh SUBI (subtract immediate).

Lệnh lui: toán hạng hằng chỉ có độ lớn 16 bit. Do đó, để sử dụng hằng số 32 bit thì thường sử dụng kết hợp với lệnh lui.

LUI register, const # const là số 16 bit

Lệnh này ghi giá trị const vào 16 bit cao (16 bit bên trái) của thanh ghi register, còn 16 bit thấp (16 bit bên phải) được thiết lập bằng 0.

Ví dụ: hãy đưa giá trị sau vào thanh ghi $s0

Để thực hiện điều này, đầu tiên đưa 16 bit cao (giá trị 61) vào 16 bit cao của thanh ghi $s0 dùng lệnh lui LUI $s0, 61 # 0000 0000 0011 11012 = 6110 tiếp theo chèn 16 bit thấp (giá trị 2304) vào bằng lệnh ORI ORI $s0,$s0,2304 # 0000 1001 0000 00002 = 230410

Định dạng lệnh

Tất cả lệnh được biểu dạng trong MIPS có cùng độ dài là 32 bit được chia thành các trường (field) khác nhau tùy theo từng lệnh. Như chúng ta đã biết trong MIPS có tất cả 32 thanh ghi được đánh số từ 0 đến 31. Những thanh ghi này có chức năng khác nhau nên có thể sử dụng tên thay cho số. Như các thanh ghi từ $s0 đến $s7 tương ứng với các thanh ghi từ 16 đến 23 hoặc các thanh ghi từ $t0 đến $t7 tương ứng với các thanh ghi từ 8 đến 15. Điều này có nghĩa là $s0 tương ứng thanh ghi 16, $s1 tương ứng thanh ghi 17, $s2 tương ứng thanh ghi 18,…,$t0 tương ứng với thanh ghi 8,$t1 tương ứng với thanh ghi 9,v.v….Các số sẽ được sử dụng trong định dạng lệnh.

Ví dụ xét lệnh: ADD $t0, $s1, $s2

Định dạng của lệnh trên được thể hiện như sau:

Các loại mã trong vi xử lý

Định dạng lệnh trên gồm có 6 trường: trường thứ nhất (giá trị 0) và trường cuối cùng (giá trị 32) biểu diễn cho lệnh cộng. Trường thứ hai chứa thanh ghi nguồn đầu tiên (17 = $s1), trường thứ ba chứa thanh ghi nguồn thứ hai (18 = $s2). Trường thứ tư chứa thanh ghi đích để nhận kết quả của phép tính tổng (8 = $t0). Trường thứ 5 không sử dụng nên thiết lập giá trị bằng 0. Hay biểu diễn dưới dạng nhị phân của lệnh trên là:

Các loại mã trong vi xử lý

Một cách tổng quát, tập lệnh MIPS gồm có ba định dạng lệnh: R-format, I-format và J-format.

Định dạng R-format:

Một lệnh MIPS có chiều dài 32 bit, với định dạng này thì các bit được phân phối vào 6 trường như sau:

Các loại mã trong vi xử lý

− op: mã lệnh (opcode) cho biết lệnh được thực hiện

− rs: thanh ghi nguồn thứ nhất

− rt: thanh ghi nguồn thứ hai

− rd: thanh ghi đích dùng chứa kết quả của phép toán

− shamt: số bit được dịch shift amount (dùng trong lệnh các lệnh dịch chuyển, đối với các lệnh khác không sử dụng trường này thì được thiết lập giá trị 0)

− funct: mã hàm (function code) kết hợp với mã lệnh (opcode) để biết một lệnh cụ thể sẽ được thực hiện.

Định dạng I-format:

Định dạng này có các bit được phân phối như sau:

Các loại mã trong vi xử lý

Trong định dạng này ta có hai thanh ghi rs và rt (mỗi trường chứa 5 bit). Trường cuối cùng chứa 16 bit dùng để chứa giá trị hằng (các lệnh dùng toán hạng hằng như addi) hoặc chứa địa chỉ (các lệnh load, store và các lệnh nhảy có điều kiện). Giá trị của trường này nằm trong giới hạn (32768)

Ví dụ: lw $t0, 32($s3) trong lệnh này trường rs chứa giá trị 19 (của thanh ghi $s3), còn rt chứa giá trị 8 (của thanh ghi $t0). Trường cuối cùng 16 bít chứa giá trị 32. Trong trường hợp này thanh ghi rt đóng vai trò là thanh ghi đích để chứa kết quả của lệnh load.

Trong hai định dạng R-format và I-format: ba trường đầu tiên giống nhau, trường thứ tư trong I-format là bao gồm tổng số bit của ba trường còn lại trong định dạng R- format. Để vi xử lý MIPS phân biệt được định dạng nào thì trường op được sử dụng để nhận dạng. Dưới đây là một số giá trị của các định dạng trên:

Các loại mã trong vi xử lý

Chú ý hai lệnh add và sub có mã lệnh op giống nhau (0) nhưng giá trị hàm funct khác nhau. Trong bảng trên n.a (not applicable) có nghĩa là không sử dụng trường này.

Xem một ví dụ khác về mảng như sau: giả sử $t1 chứa địa chỉ của mảng A, giá trị h chứa trong thanh ghi $s2, hãy biểu diễn các lệnh hợp ngữ tương ứng với phát biểu:

A[300] = h + A[300]

Các lệnh hợp ngữ tương ứng với phát biểu trên như sau:

LW $t0,1200($t1)

ADD $t0,$s2,$t0

SW $t0,1200($t1)

Hay biểu diễn lệnh mã máy là:

Các loại mã trong vi xử lý

Lệnh lw được xác định bằng giá trị 35 trong trường op, giá trị 9 ($t1) trong trường rs và giá trị 8 ($t0) trong trường rt. Giá trị offset để chọn phần tử A[300] là 1200 (1200 = 300 × 4). Tương tự với hai lệnh add và sw còn lại được biểu diễn bằng các giá trị tương ứng trong các trường.Tương ứng ta có biểu diễn dạng nhị phân của ba lệnh trên:

Các loại mã trong vi xử lý

Bảng sau đây thể hiện một số lệnh thông dụng trong MIPS

Các loại mã trong vi xử lý

Các lệnh nhảy có điều kiện cũng có định dạng I-format, xem ví dụ sau đây:

BNE $s0,$s1,Exit 

lệnh này có định dạng bao gồm có 4 trường: trường op (6 bit) có giá trị 5, trường thứ hai 5 bit chứa giá trị 16 ($s0), trường thứ ba 5 bit chứa giá trị 17 ($s1) và trường cuối cùng 16 bit chứa địa chỉ nhảy đến.

Các loại mã trong vi xử lý

v Định dạng J-format:

Lệnh nhảy không điều kiện sử dụng định dạng này, ví dụ:

J 10000

Câu lệnh này có định dạng J-format đơn giản nhất so với các định dạng trên gồm một trường op (6 bit) có giá trị 2 và trường địa chỉ (26 bit) chứa giá trị 10000:

Các loại mã trong vi xử lý

Bảng 2.3 trình bày tóm tắt cả 3 định dạng lệnh của tập lệnh MIPS với số bit được phân bố tương ứng với từng trường trong mỗi định dạng lệnh khác nhau.

Các loại mã trong vi xử lý

Bảng 2.3: Định dạng lệnh MIPS

Lệnh luận lý (logical operation) Các lệnh luận lý thực hiện trên từng bit bao gồm các lệnh sau:

  • Lệnh dịch trái SLL (shift left logical): các bit 0 được thêm vào bên phải khi thực hiện lệnh dịch.
  • Lệnh dịch phải SRL (shift right logical): các bit 0 được thêm vào bên trái khi thực hiện lệnh dịch.

Giả sử thanh ghi $s0 chứa giá trị 9

Các loại mã trong vi xử lý

Sau khi thực hiện lệnh dịch trái 4 bit: SLL $t2,$s0,4 thì kết quả thanh ghi $t2 chứa giá trị là 144.

Các loại mã trong vi xử lý

Lệnh dịch này được biểu diễn trong định dạng R-format như sau:

Các loại mã trong vi xử lý

Với hai trường op và funct chứa giá trị 0, trường thanh ghi rs không sử dụng nên thiết lập bằng 0, trường rt chứa giá trị 16 ($s0) và rd chứa giá trị 10 ($t2). Ngoài ra trường shamt (shift amount) chứa giá trị 4 là số bit để dịch trái.

Khi dịch trái i bit thì kết quả thu được tương đương với nhân 2i, như với ví dụ trên thì dịch trái 4 bit nên tương đương với nhân cho 24 hay 16 (9 × 16 = 144).

Lệnh AND: thực hiện phép toán and với hai toán hạng nguồn theo từng bit và kết quả lưu vào toán hạng đích.

Giả sử thanh ghi $t2 chứa giá trị:

Các loại mã trong vi xử lý

Các loại mã trong vi xử lý

Lệnh OR: tương tự như lệnh and nhưng thực hiện phép toán or trên từng bit.

Ví dụ: các thanh ghi $t1 và $t2 chứa giá trị như trên, sau khi thực hiện phép toán OR $t0,$t1,$t2 thanh ghi $t0 sẽ chứa kết quả là:

♠ Lệnh NOT và lệnh NOR: lệnh not thực hiện đảo bit (0 thành 1, 1 thành 0) trên một toán hạng, còn có lệnh NOR (not or) thực hiện đảo ngược của lệnh OR. Ngoài ra, khi một toán hạng nguồn chứa giá trị hằng số thì các lệnh ANDI (and immediate) và ORI (or immediate) được sử dụng.

Các lệnh rẽ nhánh

♠ Câu lệnh điều kiện IF: Các câu lệnh điều kiện dựa vào kết quả so sánh của biểu thức luận lý để quyết định chuyển điều khiển đến một nhãn (label) được chỉ định. Các lệnh này bao gồm:

BEQ register1,register2,L1

lệnh BEQ (branch if equal) nhảy điều khiển đến nhãn L1 nếu register1 = register2

BNE register1,register2,L1

lệnh BNE (branch if not equal) nhảy điều khiển đến nhãn L1 nếu register1 ≠ register2

Các lệnh này thường được sử dụng để thể hiện câu lệnh if-then-else của ngôn ngữ cấp cao.

Ví dụ hãy biểu diễn các lệnh hợp ngữ MIPS tương ứng với phát biểu if của ngôn ngữ C:

If (i == j) f = g + h; else f = g – h

với các biến f,g,h,i và j lần lượt được lưu trong các thanh ghi từ $s0 đến $s4.

Các lệnh tương ứng như sau:

BNE $s3,$s4,Else

ADD $s0,$s1,$s2

J Exit

Else: SUB $s0,$s1,$s2

Exit: …

♠ Vòng lặp: Giả sử ta có vòng lặp được thể hiện trong ngôn ngữ C như sau: while (save[i]==k) i +=1;

Với các giá trị i,k lần lượt được lưu trong thanh ghi $s3,$s5 và địa chỉ của mảng save (mỗi phần tử mảng là một từ – word gồm 4 byte) được lưu trong thanh ghi $s6.
Các lệnh hợp ngữ tương ứng trong MIPS là:

Loop: SLL $t1,$s3,2 # thanh ghi tạm $t1= i*4

ADD $t1,$t1,$s6 # $t1 chứa địa chỉ của save[i]

LW $t0,0($t1) # thanh ghi tạm $t0 = save[i]

BNE $t0,$s5,Exit # nhảy đến nhãn

Exit nếu save[i] ≠ k

ADDI $s3,$s3,1 # i = i+1

J Loop # lệnh nhảy không điều kiện

Exit: …

Ngoài ra, trong MIPS có các lệnh sau:

SLT register1,register2,register3 lệnh

SLT (set on less then) sẽ thiết lập thanh ghi register1 = 1 nếu thanh ghi register2 nhỏ hơn thanh ghi register3, thiết lập register1 = 0 nếu ngược lại.

SLTI register1,register2,const lệnh SLTI (set on less then immediate) giống như lệnh slt nhưng thanh ghi thứ 3 được thay bằng hằng số.

Ví dụ:

SLT $t0,$s3,$s4 # $t0 = 1 nếu $s3 < $s4

SLTI $t0,$s2,10 # $t0 = 1 nếu $s2 < 10

Trình biên dịch MIPS dùng tổ hợp của các lệnh SLT, SLTI, BEQ, BNE và giá trị 0 (dùng thanh ghi $zero) để tạo ra tất cả các điều kiện so sánh: bằng, không bằng, nhỏ hơn, nhỏ hơn hoặc bằng, lớn hơn, lớn hơn hoặc bằng.