[Architecture] ฟิลด์ของคำสั่ง MIPS

ฟิลด์ของคำสั่ง MIPS

MIPS_instruction_set.jpg

ที่มาของรูป http://www.cise.ufl.edu/~mssz/CompOrg/Figure2.7-MIPSinstrFmt.gif

– MIP มี instruction อยู่ 3 แบบ

Type -31-                                 format (bits)                                 -0-
R opcode (6) rs (5) rt (5) rd (5) shamt (5) funct (6)
I opcode (6) rs (5) rt (5) immediate (16)
J opcode (6) address (26)

– ในแต่ละฟิลด์ มีความหมายดังต่อไปนี้

op: พื้นฐานการทำงานของคำสั่ง ซึ่งเรียกว่า opcode
rs: รีจีสเตอร์ ตัวแปรกระทำ ตัวแรก (s = source)
rt: รีจีสเตอร์ ตัวแปรกระทำ ตัวสอง (t = target)
rd: รีจีสเตอร์ ที่เก็บผลลัพธ์ (d = destination)
shamt: ค่าของการเลื่อนตำแหน่ง
funct: ฟังก์ชั่น เป็นฟิลด์ที่กำหนดการกระทำย่อยๆ ที่อธิบายเสริมกับพื้นฐานการทำงานของคำสั่ง หรือเรียกว่า function code

I-Type (immediate type) :

– เป็นคำสั่งที่มี immediate value (type อื่นจะให้ assembler จัดการ)

B31-26 B25-21 B20-16 B15-0
opcode register s register t immediate

– มีรีจิสเตอร์อยู่ 2 ตัวคือ rs,rt แล้วตามด้วย immediate ซึ่งต้องเป็น 2’s complement เท่านั้น
– ตัวอย่างคำสั่ง addi $5 $4 0xabcd : opcode rt rs imm หลังจากที่ทำคำสั่งนี้ $5 จะเก็บค่า 0xbcde
– ตัวอย่างคำสั่ง addi $4 $5 0xaabb : $4 คือ rt, $5 คือ rs การทำงานก็คือ $4 = ($5)  + 0xaabb

op(6) rs(5) rt(5) immediate
001000 00101 00100 1010 1010 1011 1011
addi 5 4 aabb

รวมค่ากันทีละ 4 ค่าที่ได้คือ 0010|0000|1010| 0100 | 1010| 1010| 1011| 1011 =  20a4aabb

– ในการบวกลบเลขกันนั้นปกติถ้าจำนวนบิตไม่เท่ากันจะไม่สามารถทำได้ แต่ MIPs มี sign extention คือการเพิ่มจำนวนบิตของเลขที่มีจำนวนบิตน้อยกว่าให้เท่ากับเลขที่มีจำนวนบิตมากกว่า
– สิ่งที่น่าสังเกตคือ I-Type มี register อยู่ 2 ตัว ดังนั้นถ้าเขียนคำสั่ง load เช่น lw $4, 0($5) เป็นการโหลดค่าใน memory สู่ register ซึ่งเป็นการบอกว่า EA = (($5) + Imm) , EA = Effective Address ซึ่งเป็นค่าในรีจิสเตอร์จริงๆ โดยมีลักษณะคล้าย Pointer ในภาษาซี

op(6) rs(5) rt(5) immediate
100011 00101 00100 0000 0000 0000 0000
lw 5 4 0

รวมกันค่าที่ได้คือ 1000|1100|1010|0100|0000|0000|0000|0000 = 8ca40000

R-Type (Register)

– เป็นการกระทำที่ operand เป็นregister ล้วนๆ

B31-26 B25-21 B20-16 B15-11 B10-6 B5-0
opcode register s register t register d shift amount functio

– ตัวอย่างเช่น add $3 $4 $5
– rd คือตัวระบุ destination
– ดังนั้นถ้าเปรียบเทียบระหว่าง R-type กับ I-Type
– op บอกว่าคำสั่งหลักเป็นคำสั่งอะไร โดย variation ของคำสั่งจะอยู่ใน function
– function คือ variation ของคำสั่งหลัก

op (6) rs (5) rt (5) rd (5) shamt (5) func (6)
000000 00100 00101 00011 00000 100000
add $4 $5 $3 0 2

ค่าที่ได้คือ 00851820
– shift amount หรือ shamt : ใช้ 5 bit
– ค่า variable ของ function เช่น addu 0/21, add 0/20 ซึ่งค่า 0 คือ opcode ส่วนค่า 21,20 เป็นค่าฟังก์ชั่น

J-type (jump type)

– เป็นคำสั่งที่มี imm มากสุดคือ 26 bit
– โดย 26 bit นี้อยู่ในโหมด word addressing, ถ้าอยู่ในรูปแบบ byte addressing จะได้ 28 bit

B31-26 B25-0
opcode target

– จากการ Instrument code (ใส่โค้ดเข้าไปเพื่อดูว่าการเปลี่ยนของ program counter เป็นอย่างไร)ของ MIPS พบว่าการ jump ไม่เคยเกิน 28 bit ซักที ดังนั้น MIPS ก็เลย implement คำสั่ง J-Type ขึ้นมา
– ถ้า jump เกิน 28 bit ก็ให้ใช้คำสั่งอื่นเช่น jump register

Leave a comment