เรื่องนี้เป็นเรื่องต่อเนื่องจากเมื่อสองอาทิตย์ที่แล้ว เรามาลองเล่นซีพียูจำลองกันที่ www.cp.eng.chula.ac.th/~piak/pro ject/cpu1001.htm ผมเล่าไว้ถึงตอนที่เรากำลังเขียนโปรแกรมเพื่อสั่งให้ซีพียูทำงานเพื่อบวกเลขสองตัวเข้าด้วยกัน ดังนี้ (ขวามือเป็นรหัสคำสั่ง ตัดปะเข้าซีพียูจำลองเลย)mov r1 1,1
add r1 2,2
put r3 3,3 ซึ่งเมื่อเราสั่งให้โปรแกรมทำงาน จะได้ผลลัพธ์ออกมา แต่ถ้าสังเกตดูจะพบว่ามีแต่เลขศูนย์ไม่มีการเปลี่ยนแปลง เพราะเรายังไม่ได้ให้เลขตั้งต้น เราสามารถเขียนโปรแกรมเพิ่มเพื่อใส่เลข 10 ที่ช่อง 1 และ 20 ที่ช่อง 2 ดังนี้mvi 10 4,10
put 1 3,1
mvi 20 4,20
put 2 3,2
mov r1 1,1
add r1 2,2
put r3 3,3 คำสั่ง mvi จะเอาเลข (เช่น 10 ตามตัวอย่าง) ไปใส่ไว้ในกระดาษทด แล้ว put 1 เพื่อเอาไปเก็บที่ช่อง 1 ให้รหัส 4 หมายถึง mvi ให้คุณผู้อ่านลองกรอกโปรแกรมดังนี้ “4,10,3,1,4,20,3,2,1,1,2,2,3,3,0“ (เลข 0 ข้างท้ายสั่งให้ซีพียูหยุดการทำงาน) แล้วลองใหม่อีกครั้ง ท่านก็จะได้คำตอบตามต้องการ สังเกตช่องเก็บ 3 มีค่า 30 อยู่ เรามาทำโปรแกรมที่สองกันเถอะ โจทย์คือ เราอยากคูณเลขสองตัว แต่เราไม่มีคำสั่งคูณ เราต้องใช้วิธีบวกซ้ำ ๆ กัน เช่น เอา m คูณ n เราใช้วิธีบวก m ซ้ำ ๆ กัน n ครั้ง ดังนี้ ให้ช่อง 1 เก็บ m ช่อง 2 เก็บ n ช่อง 3 เก็บผล จะได้สี่บรรทัดแรกใส่เลขทั้งสองในช่องเก็บ “mvi 0” ลบกระดาษทด จากนั้น “eqz r2” ทดสอบว่า ค่าในช่อง 2 เป็นศูนย์หรือไม่ จะได้ผลเป็นค่าจริง/เท็จ ซึ่งนำไปใช้ในคำสั่งถัดไป “jt exit” จะกระโดดไปบรรทัดที่ติดป้าย “exit” ไว้ ถ้าการทดสอบเป็นจริง แต่ถ้าการทดสอบไม่เป็นจริง จะเริ่มทำต่อที่บรรทัด “add r1” บวก m ซ้ำ ๆ กับกระดาษทด ตามด้วย “dec r2” ให้ลดค่า n ทีละหนึ่ง จากนั้นวนซ้ำกลับไปที่บรรทัด “loop” โดยคำสั่งกระโดด “jmp loop” ผลที่ได้คือ การบวก m ซ้ำ ๆ โดยเก็บผลในกระดาษทด จำนวน n ครั้ง เพราะ n ลดไปรอบละหนึ่งในที่สุดจะเป็นศูนย์ แล้วกระโดดออกมา “put r3” เอาผลไปเก็บในช่อง 3 เราให้รหัสกับคำสั่งที่เพิ่มมา 4 คำสั่งดังนี้ 5 eqz, 6 jt, 7 dec, 8 jmp ในการเข้ารหัส ให้สังเกตว่า คำสั่งแต่ละบรรทัดมีเลขที่ของมัน เริ่มจาก 0 ผมจะเขียนเลขที่อยู่ในคอลัมน์ซ้ายมือหลังคำสั่งนะครับ ในการเข้ารหัส ขอให้สังเกตว่า คำสั่ง jt และ jmp ต้องใส่เลขที่บรรทัดเป็นตัวประกอบลงไป คือ 6,10 และ 8,5 นั่นเองรหัสโปรแกรมเป็นดังนี้ “4,4,3,1,4,3,3,2,4,0,5,2,6,10,2,1,7,2,8,5,3,3,0” ลอง “รัน” โปรแกรมนี้ในเบราว์เซอร์ดู เราเอา 4 คูณกับ 3 ขอให้สังเกตว่า ทำงานจนเสร็จ ต้องทำไปกี่คำสั่ง?
ถ้าท่านผู้อ่านตามมาถึงตอนนี้ และได้“รัน” โปรแกรมดูแล้ว คงจะตอบตัวเองได้ว่า ซีพียูทำงานได้อย่างไร ซีพียูที่เรากำลังเล่นอยู่นี้มีองค์ประกอบแทบครบทุกอย่างของซีพียูจริง ๆ ก่อนจากกัน ขอฝากการบ้านให้ท่านลองคิดและเขียนดู โปรแกรมคูณของเราไม่ดีนัก เพราะยิ่งบังคับให้คูณใหม่ยิ่งวนซ้ำมาก ท่านหาวิธีที่เร็วกว่านี้ได้ไหม ตอนเด็ก ๆ ผมเล่นคูณเลขโดยวิธีเบิ้ลตัวตั้งแล้วหารสองตัวคูณ จะแสดงตัวอย่างให้ดู เช่น จะทำ 35×24 จะหาคำตอบได้โดย เบิ้ลตัวตั้ง 35×2=70 หารสองตัวคูณ 24/2=12 คำตอบคือ 70×12=840
แนวความคิดนี้จะทำให้เรามีวิธีคูณที่เร็วกว่าเดิมมาก ท่านลองคิดดูนะครับ แล้วลองเขียนโปรแกรมดู ผมให้คำสั่งเพิ่มอีกหนึ่งคำสั่ง คือ “หารสอง” ด้วยการ shr (เลื่อนขวา, รหัส 9) จะเอาค่าในกระดาษทดหารด้วยสองขอให้สนุกครับ ส่งคำตอบที่คุณภูมิใจมาให้ผมได้ที่ prabhas.c@chula.ac.th โดยจั่วหัวว่า “1001” ผมจะมีรางวัลให้กับคำตอบที่ถูกใจ สัปดาห์หน้าจะเฉลยครับ.ประภาส จงสถิตย์วัฒนา
ภาควิชาวิศวกรรมคอมพิวเตอร์
จุฬาลงกรณ์มหาวิทยาลัย
ขอขอบคุณแหล่งที่มา : ซีพียูทำงานอย่างไร (2) – 1001
Posts related
- ธุรกิจน้ำดื่มใสสะอาด เพราะชีวิตขาดน้ำไม่ได้!
- ธุรกิจเสื้อผ้า ดีไม?ดียังไง? ปัจจุบันมีกี่รูปแบบ?
- ธุรกิจส่งออกสินค้า ดีไม?ดียังไง? ปัจจุบันมีกี่รูปแบบ?
- ธุรกิจร้านดอกไม้กับความรัก ความยินดี และ ความสดชื่นของชีวิต
- ธุรกิจโรงแรมรีสอร์ทที่พัก ดีไม?ดียังไง? ปัจจุบันมีกี่รูปแบบ?
- ธุรกิจร้านกาแฟ คุณคิดว่าคนที่ดื่มกาแฟเป็นประจำ จะมีสักกี่วันที่หยุดดื่ม? น่าลองขายนะ!
- ธุรกิจซักอบรีด รูปแบบไหนดีที่สุด?
- ธุรกิจค้าปลีกสินค้า ดีไม?ดียังไง?
- ธุรกิจร้านเบเกอรี่ รูปแบบไหนดีที่สุด?
- ธุรกิจขายส่งสินค้า ดีไม?ดียังไง? ปัจจุบันมีกี่รูปแบบ?
- อาชีพเสริมรายได้เสริม เมื่อมีรายได้หลายทางย่อมดีกว่ารายได้ทางเดียว
- 10 อาชีพเสริมที่น่าสนใจ
- อาชีพเสริม ถ้าไม่เริ่มทำตอนนี้แล้วจะรวยตอนไหน?
- ธุรกิจสปา ดีไม?ดียังไง?
- ธุรกิจคาร์แคร์ ดีไม?ดียังไง?
- 6 รูปแบบธุรกิจออนไลน์ที่ใครก็ทำได้ง่ายๆ
- 5 Trendsของยุค2020ที่จะนำไปสู่ธุรกิจชั้นนำที่น่าสนใจ
- แบบทดสอบประเมินตัวคุณเป็นยังไงและควรจะทำธุรกิจแนวไหนดี
- ความแตกต่างระหว่างธุรกิจส่วนตัวกับอาชีพอื่นๆ
- จะเริ่มต้นขายของออนไลน์ได้อย่างไร
- 5 ขั้นตอนการเริ่มต้นเปิดร้านค้าออนไลน์
- เทคนิคในการเลือกธุรกิจแฟรนไชส์ที่น่าสนใจ
- ทำไมต้องธุรกิจแฟรนไชส์ ดียังไง
- 5 เทคนิคควรรู้ก่อนตั้งชื่อธุรกิจออนไลน์
- 5 สิ่งที่ต้องห้ามเมื่่ออยากทำธุรกิจส่วนตัว
- 7 เทคนิคพื้นฐานสร้างธุรกิจSMEให้รอด
- จะเริ่มต้นธุรกิจส่วนตัวยังไงเริ่มจากไหนดี?
- ทำไมจะต้องทำธุรกิจส่วนตัว?
- ความรู้เบื้องต้นความหมายธุรกิจSMEs