เซกเมนต์ (Segment) โครงสร้างคอมพิวเตอร์ และภาษาแอสเซมบลี้ ผศ.บุรินทร์ รุจจน พันธุ์ . ปรับปรุง 19 ตุลาคม 2555 มหาวิทยาลัยเนชั่น จังหวัดลำปาง http://www.nation.ac.th
1. เซกเมนต์ข้อมูล (Data Segment) 2. เซกเมนต์คำสั่ง (Code Segment) 4 Segments (1/2) 1. เซกเมนต์ข้อมูล (Data Segment) 2. เซกเมนต์คำสั่ง (Code Segment) 3. เซกเมนต์สแตก (Stack Segment) 4. เซกเมนต์พิเศษ (Extra Segment) Interrupt บางตัวใช้ใน Debug ไม่ได้ ต้องเขียนเป็นชุดคำสั่งให้ Compiler แปล
4 Segment (2/2) 1. เซกเมนต์ข้อมูล (Data Segment) .data เป็นเซกเมนต์ที่เก็บข้อมูลของโปรแกรม มักถูกอ้างอิงด้วยรีจิสเตอร์ DS 2. เซกเมนต์คำสั่ง (Code Segment) .code เป็นเซกเมนต์ที่เก็บคำสั่งโปรแกรมทั้งหมด มักทำงานร่วมกับรีจิสเตอร์ชี้คำสั่ง IP ซึ่งเป็นออฟเซตในการชี้ตำแหน่งคำสั่ง 3. เซกเมนต์สแตก (Stack Segment) .stack เป็นเซกเมนต์ที่เป็นหน่วยความจำแสตก การใช้หน่วยความจำส่วนนี้เป็นแบบ Last in first out (LIFO) ใช้ร่วมกับรีจิสเตอร์ SP หรือตัวชี้แสตก 4. เซกเมนต์พิเศษ (Extra Segment) เป็นเซกเมนต์ที่เป็นหน่วยความจำพิเศษ ใช้ร่วมกับรีจิสเตอร์ DI
เซกเมนต์แบบเก่า (1/4) cseg segment main proc mov ah,4ch int 21h main endp cseg ends end main
เซกเมนต์แบบเก่า (2/4) cseg segment main proc mov ah,2h mov dl,62h int 21h mov ah,4ch main endp cseg ends end main
เซกเมนต์แบบเก่า (3/4) dseg segment a db 63h dseg ends cseg segment main proc far assume cs:cseg,ds:dseg mov ax,dseg mov ds,ax mov ah,2 mov dl,a int 21h mov ah,4ch main endp cseg ends end main
เซกเมนต์แบบเก่า (4/4) dseg segment a db 'abc $' dseg ends cseg segment main proc far assume cs:cseg,ds:dseg mov ax,dseg mov ds,ax mov ah,9h lea dx,a int 21h mov ah,4ch main endp cseg ends end main
เซกเมนต์แบบใหม่ สั้นสุด 1 (1/4) .model small .data .code pmain proc near push ds mov ax,0 push ax mov ax,@data mov ds,ax ret pmain endp end pmain
เซกเมนต์แบบใหม่ สั้นสุด 2 (2/4) .model small .data .code main proc mov ax,@data mov ds,ax mov ah,4ch int 21h main endp end main
เซกเมนต์แบบใหม่ (3/4) .model small .stack 64h .data data1 db ‘abc $’ เซกเมนต์แบบใหม่ (3/4) .model small .stack 64h .data data1 db ‘abc $’ .code main proc mov ax,@data mov ds,ax mov ah,9h lea dx,data1 int 21h mov ah,4ch main endp end main
เซกเมนต์แบบใหม่มีโมดูล (4/4) เซกเมนต์แบบใหม่มีโมดูล (4/4) setproc macro push ds mov ax,0 push ax mov ax,@data mov ds,ax endm prtout macro mov ah,9 lea dx,msg int 21h .model small .data msg db 'abc $' .code pmain proc far setproc prtout ret pmain endp .stack 200h ; not required end pmain
วิธีติดตั้ง Macro Assembly 1. Download ตัวแปรภาษา เช่น masm611.zip 4.7 MB 2. คลาย zip ลงในเครื่อง 3. สั่ง run โปรแกรม setup.exe 4. กด Enter ประมาณ 20 ครั้ง - เมื่อ enter ที่ 12 ควรเปลี่ยน binr เป็น bin 5. ถ้าพบ Setup Successfully กด Ctrl-C ได้ 6. โปรแกรมทั้งหมดอยู่ในห้อง c:\masm611 7. พบตัวแปลภาษาใน c:\masm611\bin\ 8. ถ้าขณะ install ถ้าไม่เปลี่ยน bin เป็น binr - ต้อง cd c:\masm611\binr - ต้อง copy *.* c:\masm611\bin - จึงจะแปลโปรแกรมได้สำเร็จ ตามตัวอย่าง
วิธีแปล และประมวลผล 1. เขียนโปรแกรมเก็บไว้ในแฟ้มที่มีนามสกุล .asm เช่น x.asm 2. การแปลโปรแกรมเป็น Object โปรแกรม DOS> masm x.asm 3. การลิงค์เชื่อมกับแฟ้มต่าง ๆ เพื่อให้ได้ .exe DOS> link x,,,,, Object Modules [.obj] Run File [.exe] List File [.map] Libraries [.lib] Definitions File [.def] 4. ประมวลผล DOS> x
แบทไฟล์ช่วยแปลโปรแกรม DOS>a.bat x masm %1.asm link %1,,,,, %1