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 ระบบตัวเลขฐานสิบหก (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 0.7500 .7500 1.5000 .5000 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 ฐานสิบหก