next up previous contents index
Next: คำสั่งสำหรับการตัดสินใจ Up: คำสั่ง: ภาษาของคอมพิวเตอร์ Previous: แนวคิด ``Store Program''   Contents   Index

การประมวลผลตรรกะ

นอกจากการประมวลผลข้อมูลที่กระทำในระดับ Word แล้ว ในหลายกรณี มีความจำเป็นต้องทำการประมวลผลในระดับส่วนของ Word หรือ ในระดับบิท เช่นการเรียกดูอักษรหนึ่งตัวขนาด 8 บิท ใน Word ในคอมพิวเตอร์ MIPS จึงมีชุดคำสั่งสำหรับประมวลผลตรรกะ เพื่อลดขั้นตอนต่างๆ เช่น การนำบิทเข้า หรือ ออก จาก Word รูป 2.4 แสดงตัวประมวลผลตรรกะระหว่างภาษา C และJAVA กับชุดคำสั่งของ MIPS

Figure 2.4: ตัวประมวลผลตรรกะระหว่างภาษา C และ JAVA กับชุดคำสั่งของ MIPS
\begin{figure}\centering
\begin{tabular}{cccc}\toprule
Logical operations & C op...
...it-by-bit NOT & $\sim$ & $\sim$ & nor\ \bottomrule
\end{tabular}
\end{figure}

ชุดของคำสั่งแรกเป็นชุดคำสั่งการเลื่อนบิต หรือ การ Shift ซึ่งคำสั่งการเลื่อนบิต มีชุดคำสั่งเพื่อเลื่อนคำสั่งไปทางด้าน ซ้าย และ ทาง ขวา จากคำสั่ง sll และ srl ตามลำดับ เมื่อทำการเลื่อนบิตแล้ว จะทำการใส่ค่า ศูนย์ ในบิตที่ถูกเลื่อนไป ตัวอย่างเช่น กรณีที่ $s0 มีค่า

$0000 0000 0000 0000 0000 0000 0000 1001_{two} = 9_{ten}$

เมื่อใช้คำสั่ง sll โดยเลื่อนไป 4 บิต จะได้ค่าใหม่ดังต่อไปนี้

$0000 0000 0000 0000 0000 0000 1001 0000_{two} = 144_{ten}$

สามารถแสดงค่าคำสั่งเอสแซมบลีได้ดังต่อไปนี้

sll $t2, $s0, 4 # reg $t2 = reg $s0 << 4 bits

ค่า 4 ในการเลื่อนบิตนั้น ในคำสั่ง MIPS จะใช้ฟิลด์ shamt ในการแสดงค่า ซึ่งสามารถแสดงดังต่อไปนี้

\includegraphics[width=4in]{fig/isaformat5.eps}

การเลื่อนบิตไปทางซ้ายมีผลข้างเคียงที่สามารถใช้งานได้คือ การเลื่อนบิตไปทางซ้าย $i$ บิต มีค่าเท่ากับการคูณตัวเลขเดิมด้วยค่า $2^i$

คำสั่งที่สำคัญต่อมาได้แก่คำสั่ง $AND$ คำสั่ง AND เป็นประโยชน์อย่างมากในการแยกฟิลด์ออกจากกัน เนื่องจากการทำ AND นั้น ทั้งสองตัวกระทำจะต้องมีค่าเป็นหนึ่ง จึงจะได้ผลลัพธ์เป็น หนึ่ง ตัวอย่าง ให้รีจีสเตอร์ $t2 เก็บค่า

$0000 0000 0000 0000 0000 1101 0000 0000_{two}$

และ รีจีสเตอร์ $t1 เก็บค่า

$0000 0000 0000 0000 0011 1100 0000 0000_{two}$

หลังจากเมื่อเรียกคำสั่ง

and $t0, $t1, $t2 # reg $t0 = reg $y1 & reg $t2

ค่าในรีจีสเตอร์ $t0 จะได้เท่ากับ

$0000 0000 0000 0000 0000 1100 0000 0000_{two}$

จากตัวอย่างขั้นต้น ถ้าจะใช้คำสั่ง $OR$

or $t0, $t1, $t2 # reg $t0 = reg $y1 | reg $t2

ผลลัพธ์ในค่าในรีจีสเตอร์ $t0 จะได้เท่ากับ

$0000 0000 0000 0000 0011 1101 0000 0000_{two}$

คำสั่งสุดท้ายได้แก่คำสั่ง $NOT$ และ $NOR$

ถ้าใช้คำสั่ง nor

nor $t0, $t1, $t2 # reg $t0 = ~(reg $y1 | reg $t2)

ผลลัพธ์ในค่าในรีจีสเตอร์ $t0 จะได้เท่ากับ

$1111 1111 1111 1111 1100 0010 1111 1111_{two}$



Subsections
next up previous contents index
Next: คำสั่งสำหรับการตัดสินใจ Up: คำสั่ง: ภาษาของคอมพิวเตอร์ Previous: แนวคิด ``Store Program''   Contents   Index
Vara Varavithya 2006-11-06