รีจิสเตอร์ Register
Digital logic | OS | คำสั่งดอส | Batch | Debug | Assembly | GWBasic | Docker |
    รีจิสเตอร์ (Register)
    ความหมาย (Meaning)
    #1 เป็นส่วนประกอบหนึ่งใน Microprocessor ทำหน้าที่ในการเก็บข้อมูลชั่วคราว
    #2 หน่วยความจำขนายย่อยที่เก็บผลจากการคำนวณ โดยแยกพื้นที่ส่วนหนึ่งของหน่วยความจำภายในไมโครโปรเซสเซอร์มาใช้ นั่นคือ Register เป็นหน่วยความจำส่วนหนึ่งใน CPU

    แนะนำเว็บ (Web Guides)
    - Assembly turorial : http://www.xs4all.nl/~smit/asm01001.htm
    - http://www.school.net.th/library/snet1/hardware/z8086/cpu8086.html
ตัวอย่างการดู Register ด้วยโปรแกรม debug
    C:\MASM611\BIN>debug
    -r
    AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
    DS=119B  ES=119B  SS=119B  CS=119B  IP=0100   NV UP EI PL NZ NA PO NC
    119B:0100 C8            DB      C8
    -r SS
    SS 119B
    :                    เปลี่ยนค่าของ Register ได้ตามต้องการ
    -d
    119B:0100  C8 C6 06 71 E1 03 BA A4-83 F9 C3 3C 01 01 00 00   ...q.......<....
    119B:0110  B2 00 00 00 22 00 12 2F-BD FC 46 36 99 00 8A 11   ...."../..F6....
    119B:0120  2E 74 16 3C 5B 74 12 3C-5D 74 0E 3C 2B 74 0A 3C   .t.<[t.<]t.<+t.<
    119B:0130  2C 74 06 3C 3B 74 02 3C-3D C3 3A C0 C3 3C 20 74   ,t.<;t.<=.:..< t
    119B:0140  02 3C 09 C3 06 57 0E 07-E8 13 00 86 F2 89 0E 90   .<...W..........
    119B:0150  84 89 16 92 84 BA 7E 84-E8 24 24 5F 07 C3 BF B2   ......~..$$_....
    119B:0160  E8 B4 2A CD 21 98 51 52-8B F0 D1 E6 03 F0 8B CE   ..*.!.QR........
    119B:0170  A1 12 83 B6 03 57 E8 A9-25 5F 03 F1 B9 03 00 F3   .....W..%_......
    -q
    C:\MASM611\BIN>
    

register.xls
  1. Register แบ่งได้ 4 กลุ่ม
    1. รีจิสเตอร์ทั่วไป (General Register)
    2. รีจิสเตอร์เซกเมนต์ (Segment Register)
    3. รีจิสเตอร์ Pointer และ Index (Pointer and Index Register)
    4. รีจิสเตอร์แฟลก (Flag Register)
  2. รีจิสเตอร์ที่ควรรู้จักตัวแรก ๆ มีอะไรบ้าง
    แต่ละรีจิสเตอร์มีขนาด 1 word หรือ 1 word = 2 byte
    จากตัวอย่างนี้จะแสดง Register 4 ตัวแรก คือ รีจิสเตอร์ทั่วไป (general purpose Register) กลุ่มข้อมูล อันประกอบด้วย AX, BX, CX และ DX โดยรีจิสเตอร์ที่เหลือคือ SP, BP, SI, DI, DS, ES, SS, CS และ IP ซึ่งเรียกรีจิสเตอร์เหล่านี้ว่า รีจิสเตอร์เฉพาะ(Special Register)
    รีจิสเตอร์แต่ละตัวเก็บตัวเลขได้ 4 หลัก ทำให้เก็บค่าเลขในแต่ละตัวได้สูงสุดเพียง 65536 หรือ 256 * 256 นั่นเอง และ 256 ก็คือ เลขฐาน 16 จำนวน 2 หลัก ดังนั้น 0000 จึงสามารถเก็บได้ตั้งแต่ 0 ถึง 65536 หรือ 64 KB นั่นเอง
  3. อะไรคือ เซกเมนต์(Segment) : ออฟเซต(Offset)
    เซกเมนต์เก็บอยู่ใน CS(Code segment) ส่วนออฟเซตเก็บใน IP(Instruction pointer)
    เพราะคอมพิวเตอร์มีหน่วยความจำมากกว่า 64 KB เมื่อใช้ debug และกดปุ่ม d ทุกครั้งจะกระทำการกับพื้นที่ในหน่วยความจำที่แตกต่างกัน จึงต้องใช้ เซกเมนต์และออฟเซต อ้างถึงหน่วยความจำโดยใช้ Register 2 ตัวนี้ เป็นผลให้อ้างอิงข้อมูลในหน่วยความจำได้สูงสุดถึง 4 GB หรือ (256*256)*(256*256) นั่นเอง จากตัวอย่างเมื่อใช้โปรแกรม debug ท่านจะเห็นเลข 119B และ 0100 นั่นคือ Register 2 ตัว โดย CS คือ Segment และ IP คือ Offset นั่นเอง เมื่อท่านออกจากโปรแกรม Debug ค่าของ segment จะเปลี่ยนไป แต่ IP ยังเริ่มต้นที่ 0100 เท่าเดิม
  4. อะไรคือ ความแตกต่างของ AX, AH และ AL
    เมื่อ AX ประกอบด้วย 1 word หรือ 2 byte แต่การแบ่งนั้นยังแบ่งได้อีกว่า 1 byte แรกของ AX ให้เรียกว่า AH(high byte) และ 1 byte หลังเรียกว่า AL(Low byte) ทดสอบเรื่อง AH และ AL ด้วยการใช้โปรแกรม debug เพิ่มค่า AL เข้าไปใน AH ค่าเริ่มต้น AX = 1234 นั่นคือ AH = 12 และ AL = 34 ผลการบวกจะทำให้ AH = 46 หรือ AX = 4634 นั่นเอง
    ตัวอย่างแสดงการใช้ AX, AH และ AL ผ่านคำสั่ง ADD
      C:\MASM611\BIN>debug
      -r
      AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
      DS=119B  ES=119B  SS=119B  CS=119B  IP=0100   NV UP EI PL NZ NA PO NC
      119B:0100 00C4          ADD     AH,AL
      -r ax
      AX 0000
      :1234
      -a
      119B:0100 add ah,al
      119B:0102
      -r
      AX=1234  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
      DS=119B  ES=119B  SS=119B  CS=119B  IP=0100   NV UP EI PL NZ NA PO NC
      119B:0100 00C4          ADD     AH,AL
      -t =cs:100
      AX=4634  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
      DS=119B  ES=119B  SS=119B  CS=119B  IP=0102   NV UP EI PL NZ NA PO NC
      119B:0102 00C4          ADD     AH,AL
      -
      
  5. การคูณ และหารจะเกี่ยวกับ DX อย่างไร
    MUL BX หมายถึง นำ AX คูณกับ BX หลักการนี้เหมือน DIV
    นำ AX คูณ BX เก็บ 16 Bit บนใน DX และ 16 Bit ล่างใน AX เช่น AX มีค่า 9001 และ BX มีค่า 0002 ผลการคูณจะได้ 00012002 จึงเก็บ 0001 ไว้ที่ DX และ 2002 ไว้ที่ AX
    ตัวอย่างแสดงการคูณ AX และ BX เก็บลง DX และ AX
      C:\>debug
      -r ax
      AX 0000
      :9001
      -r bx
      BX 0000
      :0002
      -a 100
      106F:0100 mul bx
      106F:0102
      -t =cs:100
      AX=2002  BX=0002  CX=0000  DX=0001  SP=FFEE  BP=0000  SI=0000  DI=0000
      DS=106F  ES=106F  SS=106F  CS=106F  IP=0102   OV UP EI PL NZ NA PO CY
      106F:0102 DB8B740903C6  ESC     19,[BP+DI+0974]TBYTE PTR [BP+DI+C603]SS:C603=E1C
      0
      -
      
  6. SP, BP, SI, DI และ IP คืออะไร
    รีจิสเตอร์ทั่วไปเหมือน AX, BX, CX และ DX แต่อยู่ในกลุ่มตัวชี้ และอินเด็กซ์
    SP : Stack pointer
    BP : Base pointer
    SI : Source index
    DI : Destination index
    IP : Instruction pointer
  7. CS, DS, SS และ ES คืออะไร
    รีจิสเตอร์กำหนดเซกเมนต์ เพราะโปรแกรมหนึ่ง ๆ จะประกอบด้วยส่วนสำคัญ 4 ส่วน แต่ละส่วนแยกออกจากกันอย่างชัดเจน แต่โปรแกรมทุกโปรแกรมมิได้ใช้ทุก segment เสมอไป
    CS : Code segment
    DS : Data segment
    SS : Stack segment
    ES : Extra segment