ดาวน์โหลดโปรแกรม RSS Reader ได้ที่นี่ ...

|
|
|
Visitors - Session views |       
7 ธันวาคม พ.ศ.2549 100 Users On-Line. |
|
Visitors - Page views |        1 กุมภาพันธ์ พ.ศ.2551 |
|
|
|
 |
|
การแปลงเลขฐาน 16 เป็นเลขฐาน 2 และ เลขฐาน 10 - VB6 |
Category »
VB 6/VB.Net โดย : Webmaster เมื่อ 14/7/2553 เวลา: 09:29 | (อ่าน : 75256) |
คำว่า บิต คือ หน่วยที่เล็กที่สุดของคอมพิวเตอร์ หากมีขนาด 8 บิต ก็เท่ากับ 1 ไบต์ อันนี้ก็คงท่องเพื่อสอบกันมาได้แล้วแหละครับ ... สิ่งที่เราศึกษาเรื่องพวกนี้เอาไว้ ไม่ใช่เฉพาะการนำมาเขียนเป็นโปรแกรมแปลงเลขฐานได้เท่านั้น เพราะการเขียนโปรแกรมเราก็ต้องประกาศชนิดของตัวแปร เช่น Integer มีขนาด 2 ไบต์ (หรือ 16 บิต) แบบ Long Integer มีขนาด 4 ไบต์ (หรือ 32 บิต) ทีนี้จะมีใครรู้บ้างว่าที่เรียกกันเป็นบิต เป็นไบต์นั้น มันเอามาใช้กับอะไรได้บ้าง อันนี้ผมเคยอธิบายไปแล้ว คลิ๊กเข้ามาอ่านได้ที่นี่ ... ซึ่งหากเราสามารถทำความเข้าใจในเรื่องพวกนี้ได้ ก็จะทำให้เลือกชนิด และ ขนาดของตัวแปรมาใช้งานได้อย่างเหมาะสม ... ทีนี้มาว่ากันถึงเรื่องการแปลงเลขฐาน ... เอาตั้งแต่ Basic เพื่อให้กระจ่างกันไปเลย ... 55555+
อธิบายเรื่องของการกระจายเลขฐาน 10
- ค่าเลขฐาน 10 = ... + (10^3 x Dec) + (10^2 x Dec) + (10^1 x Dec) + (10^0 x Dec)
- (เครื่องหมาย ^ คือ การยกกำลังน่ะครับ)
- พวก 10 ยกกำลังค่าต่างๆนั้น เราเรียกว่าน้ำหนักประจำหลัก (Weight) น่ะครับ
- Dec = ค่าประจำหลักใดๆ
- เช่น 4327 ก็คือ ...
- = (10^3 x 4) + (10^2 x 3) + (10^1 x 2) + (10^0 x 7)
- = (1000 x 4) + (100 x 3) + (10 x 2) + (1 x 7)
- = 4000 + 300 + 20 + 7 = 4327
ดังนั้นการคิดเลขฐาน 2 ก็ใช้หลักการเดียวกัน แต่เปลี่ยนจาก 10 ที่ยกกำลัง ให้กลายเป็น 2 ยกกำลังแทน
- เพราะนั่นคือเลขฐานที่เราต้องการ (ฐาน 2) คำนวณหาเลขฐาน 10
- สูตรสมการในการแปลงเลขฐาน 2 เป็นเลขฐาน 10
- Decimal หรือ เลขฐาน 10 = ... + (2^3 x Bit) + (2^2 x Bit) + (2^1 x Bit) + (2^0 x Bit)
- พวก 2 ยกกำลังค่าต่างๆนั้น เราเรียกว่าน้ำหนักประจำหลัก (Weight) หรือ ประจำบิต
- เมื่อ Bit มีค่าเป็น 0 หรือ 1 (กรณีเป็น 0 ให้ข้ามไปเลย เพราะ 0 คูณอะไรก็ได้ 0)
- เช่น ... 1 0 1 1 เลขฐาน 2 ...
- = (2^3 x 1) + (2^2 x 0) + (2^1 x 1) + (2^0 x 1)
- = (8 x 1) + (4 x 0) + (2 x 1) + (1 x 1)
- = 8 + 0 + 2 + 1 = 11 (ฐาน 10)
การคิดเลขฐาน 16 ก็ใช้หลักการเดียวกัน คือ เปลี่ยนจาก 10 ที่ยกกำลัง ให้กลายเป็น 16 ยกกำลังแทน
- เพราะนั่นคือเลขฐานที่เราต้องการ (ฐาน 16) คำนวณหาเลขฐาน 10
- สูตรสมการในการแปลงเลขฐาน 16 เป็นเลขฐาน 10
- Decimal หรือ เลขฐาน 10 = ... + (16^3 x Hex) + (16^2 x Hex) + (16^1 x Hex) + (16^0 x Hex)
- เมื่อ Hex คือ ค่าของเลขฐาน 16 ในแต่ละหลัก แต่ต้องคิดเป็นเลขฐาน 10 ก่อน เช่น
- 0 - 9 มีค่าเท่ากับฐาน 10 อยู่แล้ว ไม่ต้องแปลงค่าใดๆ แต่ A=10, B=11,C=12,D=13,E=14,F=15
- เช่น 2EF ...
- = (16^2 x 2) + (16^1 x 14) + (16^0 x 15)
- = (256 x 2) + (16 x 14) + (1 x 15)
- = 512 + 224 + 15 = 751 (ฐาน 10)
- ตัว 2 E หรือ F (ฐาน 16) แต่ละตัวมีขนาด 4 บิตเท่านั้นน่ะครับ
สังเกตว่า การคำนวณหาค่าน้ำหนัก (Weight) ประจำหลัก จะอาศัยเลขฐานนั้นๆ ยกกำลังตั้งแต่ 0 (ทางขวามือสุด) แล้วเพิ่มค่าเลขยกกำลังไปทางซ้ายมือขึ้นไปครั้งละ 1 ไปเรื่อยๆ จนกว่าจะสิ้นสุดหลักทางซ้ายมือ ... (เพราะนี่แหละคือหลักการที่เราต้องนำเอาไปเขียนเป็นโปรแกรม)
จะเห็นได้ชัดเจนจากเลขทั้ง 3 ฐานเลยว่า หลักการที่นำมาใช้ (หรือสมการมันนั่นแหละ) ในการแปลงเลขฐานใดๆไปเป็นเลขฐาน 10 มันไม่ได้เปลี่ยนไปเลย สิ่งที่เปลี่ยน คือ เลขฐานที่ใช้ยกกำลัง เพื่อหาค่าน้ำหนัก (Weight) ประจำหลัก และจะยกเว้นเลขฐาน 16 เพราะเนื่องจากว่าตั้งแต่ค่า 10 - 15 ตัวเลขมันมีขนาด 2 หลัก จึงไม่สะดวกต่อการนำมาใช้งาน ทางผู้คิดระบบเลขฐาน จึงได้นำค่า A - F มาแทนค่าที่ว่าดังกล่าว ดังนั้นก่อนที่จะแปลงเลขฐาน 16 ไปเป็นเลขฐาน 10 จะต้องมีการตรวจสอบเสียก่อนว่าหลักนั้นๆ มีค่า A - F อยู่หรือไม่ ... หากมีต้องแปลงค่าให้ไปอยู่ในเลขฐาน 10 ตามจำนวนของมันเองก่อน (พิจารณาจากตารางข้างล่างประกอบ)
การแปลงเลขฐาน 16 เป็นเลขฐาน 10 จะมีวิธีการหลักๆอยู่ 2 แบบ คือ
- แปลงจากฐาน 16 ไปเป็นฐาน 10 ตรงๆไปเลย โดยใช้สมการทางด้านบน
- แปลงเลขฐาน 16 เป็นเลขฐาน 2 ก่อน แล้วค่อยแปลงเลขฐาน 2 ไปเป็นเลขฐาน 10 อีกที
ซึ่งผมจะแสดงวิธีการ และ แจกโค้ดไปให้ดูทั้ง 2 แบบนั่นแหละครับ ... แต่ถ้าหากอ่านมาถึงตรงนี้แล้วยังไม่เข้าใจ ผมแนะนำไปศึกษาเรื่องของเลขฐาน 10 ก่อนน่าจะดีกว่าน่ะครับ
HEXADECIMAL (เลขฐาน 16 แต่ละตัวจะมี Binary ขนาด 4 บิต)
|
DECIMAL (ค่าในเลขฐาน 10)
|
FOUR DIGIT BINARY (น้ำหนักประจำหลักของแต่ละบิต) |
บิต 3 |
บิต 2 |
บิต 1 |
บิต 0 |
2^3 = 8
|
2^2 = 4
|
2^1 = 2
|
2^0 = 1
|
0
|
0
|
0
|
0
|
0
|
0
|
1
|
1
|
0
|
0
|
0
|
1
|
2
|
2
|
0
|
0
|
1
|
0
|
3
|
3
|
0
|
0
|
1
|
1
|
4
|
4
|
0
|
1
|
0
|
0
|
5
|
5
|
0
|
1
|
0
|
1
|
6
|
6
|
0
|
1
|
1
|
0
|
7
|
7
|
0
|
1
|
1
|
1
|
8
|
8
|
1
|
0
|
0
|
0
|
9
|
9
|
1
|
0
|
0
|
1
|
A
|
10
|
1
|
0
|
1
|
0
|
B
|
11
|
1
|
0
|
1
|
1
|
C
|
12
|
1
|
1
|
0
|
0
|
D
|
13
|
1
|
1
|
0
|
1
|
E
|
14
|
1
|
1
|
1
|
0
|
F
|
15
|
1
|
1
|
1
|
1
|
|
 |
ฟังค์ชั่น หรือ โปรแกรมย่อยในการแปลงเลขฐาน 16 เป็นฐาน 10 โดยตรง ด้วยการใช้สมการ
' #######################################################
' ฟังค์ชั่นการแปลงเลขฐาน 16 เป็นเลขฐาน 10 โดยใช้สมการ
' โดยที่มีการรับค่าชุดเลขฐาน 16 เข้ามา (String) แล้วคืนค่ากลับเลขฐาน 10 กลับไป
' #######################################################
Function HexToDecimal(Hex As String) As Double
Dim i As Integer
' เก็บค่าเลขฐาน 10 เป็นตัวแปรแบบ Double มีขนาด 8 ไบต์
' หากกำหนดแบบ Long จะได้ค่าเลขฐาน 10 ไม่เกิน 2,147,483,647 ค่า
Dim Dec As Double
' ตรวจสอบว่าหลักนั้นมีค่า A - F หรือไม่ หากใช่ต้องเปลี่ยนเป็นเลขฐาน 10 ก่อน
' เช่น A = 10, B = 11, C = 12 , ... F = 15
Dim Hex2Dec As Byte
' ตัวแปรกำหนดค่าเลขยกกำลังของแต่ละหลัก จาก 0, 1, 2, 3 ... ไปเรื่อยๆจนครบจำนวนหลักฐาน 16
Dim HexWeight As Byte
' เริ่มต้นให้เป็น 0 เพราะต้องให้ 16 ยกกำลัง 0 และ เพิ่มขึ้นทีละ 1 จนกว่าจะครบจำนวนจำนวนหลัก
HexWeight = 0
' เป็นการคำนวณหาจากหลักขวามือสุด ไปทางหลักซ้ายมือสุด
' ลดค่าความยาวของเลขฐาน 16 ลงครั้งละ 1 หลัก
' โดยปกติเรามักจะถนัดอ่านจากซ้ายไปขวา ทำให้เขียนโปรแกรมได้ง่ายขึ้น ... พอเจอแบบนี้อาจงงกัน
' ยกตัวอย่างเช่น A3F (มีความยาว = 3) ... ต้องลองทำการ Debug Program ดูด้วยน่ะครับ
' รอบแรก i จะอ่านค่าเริ่มต้นได้ 3 นั่นคือคำสั่ง Mid$(Hex, 3, 1) ก็อ่านค่าได้หลักที่ 3 (1 ตัว) คือ F
' รอบที่สอง i จะถูกลดค่าลง 1 (เหลือ 2) นั่นคือคำสั่ง Mid$(Hex, 2, 1) ก็จะอ่านค่าในหลักที่ 2 (1 ตัว) คือ 3
' รอบที่สาม i จะถูกลดค่าลง 1 (เหลือ 1) นั่นคือคำสั่ง Mid$(Hex, 1, 1) ก็จะอ่านค่าในหลักที่ 1 (1 ตัว) คือ A
For i = Len(Hex) To 1 Step -1
' ทดสอบหาค่าตัวอักษร A - F ที่แทนเลขฐาน 10 ระหว่าง 10 - 15 ก่อน
Select Case Mid$(Hex, i, 1)
Case "A"
Hex2Dec = 10
Case "B"
Hex2Dec = 11
Case "C"
Hex2Dec = 12
Case "D"
Hex2Dec = 13
Case "E"
Hex2Dec = 14
Case "F"
Hex2Dec = 15
Case Else
' หากเป็นค่า 0 - 9 ก็ใช้ค่าของตัวมันเองไปเลย (เพราะเท่ากับ ฐาน 10 อยู่แล้ว)
Hex2Dec = Mid$(Hex, i, 1)
End Select
' ตรวจสอบว่าหลักนั้นเป็น 0 หรือไม่ หากใช่ให้ข้ามไปเลย เพราะ 0 คูณกับอะไรก็ได้ 0 เสมอ
If Hex2Dec <> 0 Then Dec = Dec + ((16 ^ HexWeight) * Hex2Dec)
' เพิ่มค่าเลขยกกำลังขึ้นอีก 1
HexWeight = HexWeight + 1
Next
' ส่งค่ากลับผ่านชื่อฟังค์ชั่นตัวมันเอง
HexToDecimal = Dec
End Function
' #######################################################
' การเรียกใช้งาน
' #######################################################
Private Sub Form_Load()
Me.Move (Screen.Width - Me.Width) \ 2, (Screen.Height - Me.Height) \ 2
' เรียกใช้ฟังค์ชั่นโดยการคำนวณหาค่าเลขฐาน 10 จากสมการโดยตรง
MsgBox HexToDecimal("FED0")
End Sub
|
 Run Time
การแปลงเลขฐาน 16 เป็นเลขฐาน 2 ก่อน จากฐาน 2 ให้กลายเป็นฐาน 10
Private Sub cmdConvert_Click()
Dim i As Integer
txtBinary.Text = ""
txtDecimal.Text = ""
If Trim$(txtHexadecimal.Text) = "" Or Len(Trim$(txtHexadecimal.Text)) = 0 Then Exit Sub
' #######################################################
' การแปลงเลขฐาน 16 (HexaDecimal) ให้กลายเป็นเลขฐาน 2 (Binary)
' #######################################################
' การเปรียบเทียบค่าเลขฐาน 16 ทีละหลัก นับจากทางขวามือสุดไปทางซ้ายมือสุด
' แล้วนับถอยหลังไปทีละ 1 หลัก (Step - 1)
' อาศัยหลักการง่ายๆ คือ เปรียบเทียบค่าของเลขฐาน 16 ทีละหลัก (ขวาไปซ้าย)
' เพราะแต่หลักของเลขฐาน 16 จะแทนเลขฐาน 2 ได้ขนาด 4 บิต
For i = Len(txtHexadecimal.Text) To 1 Step -1
Select Case Mid$(txtHexadecimal, i, 1)
Case "0"
txtBinary.Text = "0000" & txtBinary.Text
Case "1"
txtBinary.Text = "0001" & txtBinary.Text
Case "2"
txtBinary.Text = "0010" & txtBinary.Text
Case "3"
txtBinary.Text = "0011" & txtBinary.Text
Case "4"
txtBinary.Text = "0100" & txtBinary.Text
Case "5"
txtBinary.Text = "0101" & txtBinary.Text
Case "6"
txtBinary.Text = "0110" & txtBinary.Text
Case "7"
txtBinary.Text = "0111" & txtBinary.Text
Case "8"
txtBinary.Text = "1000" & txtBinary.Text
Case "9"
txtBinary.Text = "1001" & txtBinary.Text
Case "A"
txtBinary.Text = "1010" & txtBinary.Text
Case "B"
txtBinary.Text = "1011" & txtBinary.Text
Case "C"
txtBinary.Text = "1100" & txtBinary.Text
Case "D"
txtBinary.Text = "1101" & txtBinary.Text
Case "E"
txtBinary.Text = "1110" & txtBinary.Text
Case "F"
txtBinary.Text = "1111" & txtBinary.Text
End Select
Next
' #######################################################
' การแปลงเลขฐาน 2 (Binary) ให้กลายเป็นเลขฐาน 10 (Decimal)
' #######################################################
' เก็บค่าเลขฐาน 10 เป็นตัวแปรแบบ Double มีขนาด 8 ไบต์
' หากกำหนดแบบ Long จะได้ค่าเลขฐาน 10 ไม่เกิน 2,147,483,647 ค่า ...
' หากเราป้อนค่าฐาน 16 = FFFFFFFF จะทำให้เกิด Overflow (มีค่าเกินที่ตัวแปรจะรับได้)
Dim Dec As Double
' ตัวแปรกำหนดค่าเลขยกกำลังของบิตแต่ละหลัก จาก 0, 1, 2, 3 ... ไปเรื่อยๆจนครบจำนวนบิต
Dim BitWeight As Integer
' เริ่มต้นให้เป็น 0 เพราะต้องให้ 2 ยกกำลัง 0 และ เพิ่มขึ้นทีละ 1 จนกว่าจะครบจำนวนบิต
'BitWeight = 0
' เป็นการคำนวณหาจากบิตขวามือสุด (LSB - Least Significant Bit หรือ บิตนัยสำคัญต่ำสุด)
' ไปทางบิตซ้ายมือสุด (MSB - Most Significant Bit หรือ บิตนัยสำคัญสูงสุด)
' ลดค่าความยาวจากทางขวาของเลข Binary มาทางซ้ายลงครั้งละ 1
For i = Len(txtBinary.Text) To 1 Step -1
' หาน้ำหนักประจำหลักจากบิตขวามือสุด (LSB) ไปยังบิตซ้ายมือสุด (MSB)
' โดยการให้ 2 ยกกำลังตั้งแต่ 0 และ เพิ่มค่าขึ้น 1 ไปเรื่อยๆ จนกว่าจะครบจำนวนบิต
' จากนั้นคูณเข้ากับค่าบิต นั่นคือ ค่า 0 หรือ 1 เท่านั้น แล้วรวมค่าแต่ละบิตที่ได้ทั้งหมด
' เช่น 1011 ก็จะได้ (2^3 x 1) + (2^2 x 0) + (2^1 x 1) + (2^0 x 1)
' แบบนี้เป็นการคำนวณหาหมดทุกๆบิต
' Dec = Dec + ((2 ^ BitWeight) * Mid$(txtBinary.Text, i, 1))
' หรือ ตรวจสอบว่าบิตนั้นเป็น 0 หรือไม่ หากใช่ให้ข้ามไปเลย เพราะ 0 คูณกับอะไรก็ได้ 0 เสมอ
If Mid$(txtBinary.Text, i, 1) <> 0 Then Dec = Dec + ((2 ^ BitWeight) * Mid$(txtBinary.Text, i, 1))
' เพิ่มค่าเลขยกกำลังขึ้นอีก 1
BitWeight = BitWeight + 1
Next
' #######################################################
' กรณีที่ไม่ใช้สมการ แต่ใช้น้ำหนักของแต่ละบิตคูณ 2 ต่อเนื่องจากบิตขวาไปซ้าย เช่น
' คูณ 2 เท่ามาเรื่อยๆ ... 1024 512 256 128 64 32 16 8 4 2 1
'BitWeight = 1
'For i = Len(txtBinary.Text) To 1 Step -1
' Dec = Dec + (BitWeight * Mid$(txtBinary.Text, i, 1))
' BitWeight = BitWeight * 2
'Next
' #######################################################
' แสดงผลเลขฐาน 10 ใน TextBox
txtDecimal.Text = Dec
' เรียกใช้ฟังค์ชั่นโดยการคำนวณหาค่าเลขฐาน 10 จากสมการโดยตรง
MsgBox HexToDecimal(txtHexadecimal.Text)
End Sub
Private Sub Form_Load()
Me.Move (Screen.Width - Me.Width) \ 2, (Screen.Height - Me.Height) \ 2
txtHexadecimal.Text = ""
txtBinary.Text = ""
txtDecimal.Text = ""
End Sub
Private Sub txtHexadecimal_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeyReturn Then
KeyAscii = 0
Call cmdConvert_Click
Else
' ตรวจสอบการกดคีย์ให้รับได้เฉพาะค่า 0 - 9 และ A - F เท่านั้น
KeyAscii = CheckHexaDecimal(KeyAscii)
End If
End Sub
' #######################################################
' ฟังค์ชั่นตรวจสอบการกดคีย์ให้รับได้เฉพาะค่า 0 - 9 และ A - F เท่านั้น
' #######################################################
Function CheckHexaDecimal(Index As Integer)
Select Case Index
' ASCII Code 48 - 57 คือ ตัวอักขระ 0 - 9
' ASCII Code 65 - 70 คือ ตัวอักขระ A - F
Case 48 To 57, 65 To 70
Case 8, 13
Case Else
Index = 0
End Select
CheckHexaDecimal = Index
End Function
|
Conclusion: โดยตามปกติแล้วส่วนมากที่พยายามหาข้อมูลในการแปลงเลขฐานต่างๆ ก็เป็นโจทย์การบ้านกันแทบทั้งนั้นแหละครับ ซึ่งปกติในชีวิตจริงโอกาสที่เราจะใช้เลขฐานก็จะมีแค่ ฐาน 10 ฐาน 2 และ ฐาน 16 เท่านั้น ส่วนคนที่เรียนมาทาง Hardware หรือ เขียนภาษา Assembly ก็มักจะเกี่ยวข้องกับเลขฐาน 2 และ ฐาน 16 เท่านั้น ไม่นิยมใช้ฐาน 10 ดังนั้นบทความนี้ผมถึงได้แยกให้เห็นถึงการแปลงเลขฐาน 16 ไปหาเลขฐาน 2 ก่อน
ผมขอยกตัวอย่างของการเขียนภาษา Assembly กับไมโครโปรเซสเซอร์ Z80 ขนาด 8 บิต - คำสั่งของการบวก (ADD)
- LD A, 3F ; นี่เป็นการกำหนดค่า 3F (ฐาน 16 ขนาด 8 บิต) ให้กับ Register A (ภาษาระดับสูงคือการกำหนดค่าให้ตัวแปร)
LD B, 29 ; นี่เป็นการกำหนดค่า 29 (ฐาน 16 ขนาด 8 บิต) ให้กับ Register B ADD A, B ; การนำค่าใน Register A บวกกับค่าใน Register B แล้วนำผลลัพธ์กลับไปเก็บที่ Register A (แบบไม่คิดค่าตัวทดของหลักซ้ายมือสุด) Register คือ หน่วยความจำชนิดหนึ่งที่อยู่ภายในตัว CPU แต่ละรุ่น แต่ละเบอร์
วิธีการคิด (ด้วยมือ และ ในใจ) ยังแบ่งออกได้อีกหลักๆ 2 วิธี
- เอาค่าฐาน 16 คือ 3F บวก 29 โดยตรงไปเลย
3 F + 2 9 6 8 <--- คำตอบ นั่นคือเอา F ก็คือ 15 (ฐาน 10) บวกเข้ากับ 9 = 24 ค่าที่ได้มันเกินเลขฐาน 16 ก็ให้ลบออกจากเลขฐาน คือ 16 (24 - 16 = เศษ 8 ทด 1) ... หลักต่อไป 3 + 2 + 1 (ตัวทด) = 68 ... ง่ายมั้ยครับ ซึ่งมันไม่ได้คิดต่างไปจากเลขฐาน 10 เลย เช่น 29 + 5 ... คือเอา 9 + 5 = 14 ... 14 มันเกินค่าของเลขฐาน 10 ดังนั้นต้องเอา 14 - 10 = 4 เศษ 1 (เป็นตัวทด) ... ต่อไปเอา 2 + 1 (ตัวทด) ... ผลลัพธ์คำตอบคือ 34 นั่นเอง ... เห็นมั้ยครับว่าวิธีคิดมันต่างจากกับเลขฐาน 10 ตรงไหนล่ะ
- แปลงเลขฐาน 16 แต่ละหลักให้เป็นเป็นเลขฐาน 2 ก่อนแล้วค่อยแปลงกลับเป็นเลขฐาน 16 อีกที
3 F = 0011 1111 + (ฐาน 16 แต่ละตัว จะแทนเลข Binary ขนาด 4 บิต) 2 9 = 0010 1001 --> = 0110 1000 <-- แปลงเป็นเลขฐาน 16 จะได้ --> = 6 8
อนึ่ง ... ในการใช้เลขฐาน 2 มันมีความจำเป็นต่อการถอดรหัสคำสั่ง (Opcode) ก่อนด้วยน่ะครับว่าจะให้มันทำงานอะไร ... ซึ่งสมัยผมเรียนแต่ละคำสั่งเราต้องถอดรหัสกันด้วยมือ แต่ยุคสมัยนี้มี Assembler หรือ Simulator ให้ใช้งานได้ง่ายขึ้น ... ก็เพราะว่ามันง่ายนี่แหละ จึงทำให้เด็กรุ่นใหม่ๆ ขาดพื้นฐานที่ดีไป
|
|