100 likes | 225 Views
CS344-321 Assembly Language Programming. Period 4. ระบบตัวเลข ( Number Systems). ระบบตัวเลขฐานสอง (binary number system) ประกอบด้วย 0, 1 ระบบตัวเลขฐานแปด (octal number system) ประกอบด้วย 0, 1, 2, …, 7 ระบบตัวตัวเลขฐานสิบ (decimal number system) ประกอบด้วย 0, 1, 2, …, 9
E N D
ระบบตัวเลข (Number Systems) ระบบตัวเลขฐานสอง (binary number system) ประกอบด้วย 0, 1 ระบบตัวเลขฐานแปด (octal number system) ประกอบด้วย 0, 1, 2, …, 7 ระบบตัวตัวเลขฐานสิบ (decimal number system) ประกอบด้วย 0, 1, 2, …, 9 ระบบตัวเลขฐานสิบหก (hexadecimal number system) ประกอบด้วย 0, 1, 2, …, 9, A, B, C, D, E, F
การเปลี่ยนฐาน การเปลี่ยนจากเลขฐานสองให้เป็นเลขฐานสิบ ใช้สูตร (bnb n-1 … b2b1b0.b-1b-2 …b-m)2 = (bn2n+b n-1 2n-1 + … + b222 + b121+b0 + b-12-1 +b-2 2-2 + … + b-m2-m)10 เช่น (101101.1011)2 = (25 + 0 + 1*23 +22 + 0 + 1 + 2-1 + 0 + 2-3 + 2-4)10 = (45.6875)10 หมายเหตุ การเปลี่ยนจากเลขฐานแปดหรือสิบหกให้เป็นเลขฐานสิบ ใช้สูตรเหมือนกัน แต่เปลี่ยนจาก 2 เป็น 8 และ 16 ตามลำดับ โดยแทน A, B, C, D, E, F ด้วย 10, 11, 12, 13, 14, 15 ตามลำดับ
การเปลี่ยนตัวเลขหน้าจุด จากเลขฐานสิบให้เป็นเลขฐานสอง • ให้ใช้ 2 หาร ไปเรื่อย จนได้ผลลัพธ์เป็น 0 ขณะที่หารให้จดจำเศษที่ได้ นำเศษที่ได้จากการหารมาเรียงตามลำดับ เริ่มจากเศษที่ได้ครั้งสุดท้ายเรียงไปยังเศษที่ได้จากการหารครั้งแรก • เช่น 2 ) 123 • 61 เศษ 1 • 30 เศษ 1 • 15 เศษ 0 • 7 เศษ 1 • 3 เศษ 1 • 1 เศษ 1 • 0 เศษ 1 • (123)10 = (1111011)2 • หมายเหตุ การเปลี่ยนตัวเลขหน้าจุด จากเลขฐานสิบให้เป็นเลขฐานแปดหรือสิบหก ใช้สูตรเหมือนกัน แต่เปลี่ยนจากการหารด้วย 2 เป็นการหารด้วย 8 และ 16 ตามลำดับ โดยแทนเศษ 10, 11, 12, 13, 14, 15 ด้วย A, B, C, D, E, F ตามลำดับ
การเปลี่ยนตัวเลขหลังจุด จากเลขฐานสิบให้เป็นเลขฐานสอง ให้คูณตัวเลขที่อยู่หลังจุดทั้งหมดด้วย 2 ไปเรื่อย ๆ จนกว่าจะได้ผลลัพธ์เป็นศูนย์ หรือได้จำนวนตัวเลขหลังจุดทศนิยมตามที่ต้องการ แล้วนำเลขหน้าจุดที่ได้จากการคูณแต่ละครั้ง มาเรียงกัน เช่น (0.6875)10 = (0 . 1 0 1 1 )2.6875 * 2 1.3750 .3750 * 2 0.7500 .7500 * 2 1.5000 .5000 * 2 1.0000 .0000 หมายเหตุ การเปลี่ยนตัวเลขหลังจุด จากเลขฐานสิบให้เป็นเลขฐานแปดหรือสิบหก ใช้สูตรเหมือนกัน แต่เปลี่ยนจากการคูณด้วย 2 เป็นการคูณด้วย 8 และ 16 ตามลำดับ
การแทนข้อมูล (Data Representation) อักขระ (character) แทนอักขระ หนึ่งตัว มีสองแบบ คือ - ASCII (ใช้ 7 บิต แทนรหัส และ parity 1 บิตใช้ตรวจสอบ) ดู appendix D - EBCDIC (ใช้ทั้ง 8 บิต แทนรหัส) เลขจำนวนเต็ม (integer) • แทนเลขจำนวนเต็มทั้งแบบที่มีเครื่องหมาย และแบบที่ไม่มีเครื่องหมาย • กรณีไม่มีเครื่องหมาย ถ้าใช้จำนวนบิต n บิต จะแทนเลขจำนวนเต็มไม่มีเครื่องหมายได้ ตั้งแต่ 0 ถึง 2n-1 เช่น n = 16 จะแทนเลขจำนวนเต็มได้ตั้งแต่ 0 ถึง 65535 เป็นต้น • กรณีมีเครื่องหมาย สามารถแทนได้ในสามรูปแบบ คือ
ก. sign magnitudeใช้บิตซ้ายสุด (most significant bit) แทนเครื่องหมาย • โดยที่ 0 แทนเครื่องหมายบวก และ 1 แทนเครื่องหมายลบ • บิตที่เหลือใช้แทนขนาดของตัวเลข • most significant bit least significant bit • n-1 n-2 … 2 1 0 • sign magnitude • เช่น สมมุติว่าใช้ จำนวนบิต 8 บิต แทนเลขจำนวน +5 และ –5 ได้เป็น 00000101 และ 10000101 เป็นต้น • ถ้าใช้จำนวน n บิต จะแทนเลขจำนวนเต็มแบบมีเครื่องหมาย ได้ตั้งแต่ – (2n-1– 1) ถึง +(2n-1- 1) • เช่น n = 16 จะแทนเลขจำนวนเต็มมีเครื่องหมายได้ตั้งแต่ –32767 ถึง +32767 เป็นต้นโดยที่ 0 แทนได้ทั้ง +0 และ –0
ข.one complementใช้บิตซ้ายสุด (most significant bit) แทนเครื่องหมาย • โดยที่ 0 แทนเครื่องหมายบวก และ 1 แทนเครื่องหมายลบ เช่นกัน • การแทนเลขบวก จะเหมือนกับแบบ sign magnitude แต่การแทนตัวเลขลบ จะต่างกัน • แบบ one complement จะแทนตัวเลขลบโดยการ ทำ complement (เปลี่ยนจากเลข 0 เป็น 1 และ เปลี่ยนจากเลข 1 เป็น 0) กับ magnitude เช่น สมมุติว่าใช้ จำนวนบิต 8 บิต แทนเลขจำนวน +5 และ –5 ได้เป็น 00000101 และ 11111010 เป็นต้น • ถ้าใช้จำนวน n บิต จะแทนเลขจำนวนเต็มแบบมีเครื่องหมาย ได้ตั้งแต่ – (2n-1– 1) ถึง +(2n-1- 1) • เช่น n = 16 จะแทนเลขจำนวนเต็มมีเครื่องหมายได้ตั้งแต่ –32767 ถึง +32767 เป็นต้นโดยที่ 0 แทนได้ทั้ง +0 และ –0
ค.two complementใช้บิตซ้ายสุด (most significant bit) แทนเครื่องหมาย โดยที่ 0 แทนเครื่องหมายบวก และ 1 แทนเครื่องหมายลบ เช่นกัน • การแทนเลขบวก จะเหมือนกับแบบ sign magnitude แต่การแทนตัวเลขลบ จะต่างกัน • แบบ two complement จะแทนตัวเลขลบโดยการ ทำ complement (เปลี่ยนจากเลข 0 เป็น 1 และ เปลี่ยนจากเลข 1 เป็น 0) กับ magnitude แล้วบวกด้วยหนึ่งเช่น สมมุติว่าใช้ จำนวนบิต 8 บิต แทนเลขจำนวน +5 และ –5 ได้เป็น 00000101 และ 11111011 เป็นต้น • ถ้าใช้จำนวน n บิต จะแทนเลขจำนวนเต็มแบบมีเครื่องหมาย ได้ตั้งแต่ • – (2n-1) ถึง +(2n-1- 1) • เช่น n = 16 จะแทนเลขจำนวนเต็มมีเครื่องหมายได้ตั้งแต่ –32768 ถึง +32767 เป็นต้นโดยที่ 0 แทนด้วย +0 เท่านั้น
การแทนข้อมูลด้วยเลขฐานสิบหก (Hexadecimal Representation) • ใช้ตัวเลขฐานสอง 4 ตัวแทนด้วยตัวเลขฐานสิบหกหนึ่งตัว ดังนี้ • ฐานสอง ฐานสิบหก ฐานสอง ฐานสิบหก • 0000 0 1010 A • 0001 1 1011 B • 0010 2 1100 C • 0011 3 1101 D • 0100 4 1110 E • 0101 5 1111 F • 0110 6 • 0111 7 • 1000 8 • 1001 9 • เช่น 0000 0011 1100 0011 ฐานสอง • เท่ากับ 0 3 C 3 ฐานสิบหก