1 / 12

บทที่ 8 : การประกาศข้อมูล

บทที่ 8 : การประกาศข้อมูล. รูปแบบในการประกาศข้อมูล การอ้างใช้ข้อมูล การประกาศข้อมูลสำหรับการเรียกใช้งานบริการของ DOS หมายเลข 09h และ 0Ah. i :. j :. ch :. การประกาศข้อมูลหรือตัวแปร. ข้อมูลที่โปรแกรมใช้ และ ตัวแปรต่าง ๆ ที่อยู่ในหน่วยความจำ เป็นสิ่งเดียวกัน. การประกาศข้อมูล =

Télécharger la présentation

บทที่ 8 : การประกาศข้อมูล

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. บทที่ 8 : การประกาศข้อมูล • รูปแบบในการประกาศข้อมูล • การอ้างใช้ข้อมูล • การประกาศข้อมูลสำหรับการเรียกใช้งานบริการของ DOS หมายเลข 09h และ 0Ah 204221 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์ สัณฑิติ พัชรรุ่งเรือง จิตร์ทัศน์ ฝักเจริญผล

  2. i : j : ch : การประกาศข้อมูลหรือตัวแปร • ข้อมูลที่โปรแกรมใช้ และ ตัวแปรต่าง ๆ ที่อยู่ในหน่วยความจำ เป็นสิ่งเดียวกัน. • การประกาศข้อมูล = • การระบุให้ assembler จองเนื้อที่ในหน่วยความจำไว้ใช้สำหรับการเก็บข้อมูล • และตั้งชื่อให้กับหน่วยความจำตำแหน่งนั้น (สร้างเลเบล) • ตัวอย่างการประกาศตัวแปรแบบเลขจำนวนเต็ม 16 บิต 2 ตัว (i, j) และอักขระ 1 ไบต์ (ch) จะเป็นการจองเนื้อที่ในหน่วยความจำขนาด 5 ไบต์ โดยจะมีเลเบล i j และ ch ชี้ตำแหน่งดังรูป 204221 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์ สัณฑิติ พัชรรุ่งเรือง จิตร์ทัศน์ ฝักเจริญผล

  3. คำสั่งเทียมสำหรับการจองเนื้อที่ในหน่วยความจำคำสั่งเทียมสำหรับการจองเนื้อที่ในหน่วยความจำ • เราใช้คำสั่งเทียมในการระบุกับ assembler ว่าจะต้องการหน่วยความจำขนาดหน่วยละเท่าใด. • คำสั่งต่าง ๆ ระบุขนาดของหน่วยย่อยของการจองหน่วยความจำ • ตัวอย่างของการจองหน่วยความจำ DB DW DD DQ DT Define Byte Define Word Define Doubleword Define Quadword Define Tenbytes dseg segment data1 db 1,? data2 dw 1,2 data3 db ’Hi’,10,13 data4 dd 1234h dseg ends 204221 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์ สัณฑิติ พัชรรุ่งเรือง จิตร์ทัศน์ ฝักเจริญผล

  4. การจัดเรียงค่าในหน่วยความจำการจัดเรียงค่าในหน่วยความจำ data1 dseg : 0000 0001 0002 0003 0004 0005 01h db 1,? ? data2 01h dw 1,2 00h 02h 00h data3 48h 0006 0007 0008 0009 000A 000B 000C 000D db ’Hi’,10,13 69h 0Ah 0Dh data4 34h dd 1234h 12h 00h 00h สังเกตว่าในการประกาศ data1 ไบต์ที่สอง เราใช้ เครื่องหมาย ‘?’ ในการระบุการจองเนื้อที่หน่วยความจำโดยไม่ระบุค่าของข้อมูล. ? 204221 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์ สัณฑิติ พัชรรุ่งเรือง จิตร์ทัศน์ ฝักเจริญผล

  5. 0 0 0 0 0 0 5 5 5 5 5 5 1 2 4 4 4 1 2 4 4 4 1 2 4 4 4 1 2 4 4 4 ? ? ? ? ? ? การระบุค่าของหน่วยความจำที่มีการซ้ำ • เราใช้คำสั่งเทียม dup ในการระบุค่าเริ่มต้นที่มีการซ้ำกันหลายชุด. • รูปแบบ • ตัวอย่าง จำนวนซ้ำdup (ค่าที่ซ้ำ) data7 db 10 dup (0) data8 db 5 dup (4 dup (5)) data9 db 4 dup (1, 2, 3 dup (4)) data10 db 20 dup (?) data7 ซ้ำ data8 ซ้ำ ซ้ำ data9 data10 ซ้ำ ซ้ำ 204221 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์ สัณฑิติ พัชรรุ่งเรือง จิตร์ทัศน์ ฝักเจริญผล

  6. การอ้างใช้ข้อมูลในหน่วยความจำการอ้างใช้ข้อมูลในหน่วยความจำ • เราสามารถใช้เลเบลที่ประกาศแทนตำแหน่งของมูลในหน่วยความจำได้ทันที. เรายังสามารถอ้างหน่วยความจำโดยคิดสัมพัทธ์กับตำแหน่งของ เลเบลได้. data1 data2 00h mov al,data1 mov bx,data2 mov data1,0 mov [data2+2],1123h mov data1[1],22h mov cl,byte ptr data4 22h 01h 00h 23h 11h AL = 01h BX = 01h CL = 34h 48h data3 data4 69h 0Ah 0Dh สังเกตว่าในการกำหนดค่าคงที่ให้กับหน่วยความจำนั้น เราไม่ต้องระบุขนาดอีก เพราะเราระบุตอนประกาศแล้ว. แต่ไม่จำเป็นต้องใช้ข้อมูลตามขนาดที่ระบุเสมอไป โดยเราสามารถระบุขนาดกำกับไปด้วย. 34h 12h 00h 00h 204221 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์ สัณฑิติ พัชรรุ่งเรือง จิตร์ทัศน์ ฝักเจริญผล

  7. การอ้างใช้ข้อมูลในหน่วยความจำการอ้างใช้ข้อมูลในหน่วยความจำ • การอ้างตำแหน่งของข้อมูล • ใช้คำสั่งเทียม OFFSET mov ax,data2 ;ค่าในหน่วยความจำ mov bx,offset data2 ; ออฟเซ็ตของข้อมูล • การใช้รีจิสเตอร์ BX ในการอ้างตำแหน่งข้อมูล mov bx,offset data7 ; ออฟเซ็ตของข้อมูล mov byte ptr [bx],10 mov byte ptr [bx+1],20 mov bx,2 mov data7[bx],30 mov data7[bx+1],40 • ในโปรแกรมช่วงแรก BX เก็บออฟเซ็ตของ DATA7 ไว้ จากนั้นเราอ้างใช้หน่วยความจำเทียบกับ BX. • ในส่วนหลังเราอ้างใช้หน่วยความจำเทียบกับ DATA7 และค่าในBX. 204221 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์ สัณฑิติ พัชรรุ่งเรือง จิตร์ทัศน์ ฝักเจริญผล

  8. 01 02 03 ? ? ? 05 00 06 00 ตัวอย่าง จากการประกาศข้อมูลต่อไปนี้ DS:0000 DS:0001 dseg segment data1 db 1,2,3 data2 db 3 dup (?) data3 dw 5,6 dseg ends DS:0003 DS:0004 DS:0005 DS:0006 DS:0007 DS:0008 mov al,data1 DS:0009 • AL = 01h DS:000A mov bx,offset data1 • BX = 0000h mov cx,data3[2] • CX = 0006h mov bx,offset data2 mov [bx],cx • [DS:0004] = 06h • [DS:0005] = 00h 204221 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์ สัณฑิติ พัชรรุ่งเรือง จิตร์ทัศน์ ฝักเจริญผล

  9. การประกาศข้อมูลสำหรับการใช้บริการหมายเลข 09h ของ DOS บริการหมายเลข 09h : แสดงผลข้อความ • รับข้อมูลผ่านรีจิสเตอร์ดังนี้ • AH = 09h • DS : DX = ตำแหน่งของข้อความที่จะแสดง โดยข้อความนี้ต้องจบด้วยเครื่องหมาย ‘$’ • เราสามารถประกาศข้อมูลได้ดังนี้ โดยรหัส 10 (Line Feed) และ 13 (Carriage Return) เป็นรหัสที่สั่งให้ขึ้นบรรทัดใหม่. • การสั่งพิมพ์ dseg segment msg db ’hello’,10,13,’$’ dseg ends mov ah,9 mov dx,offset msg int 21h 204221 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์ สัณฑิติ พัชรรุ่งเรือง จิตร์ทัศน์ ฝักเจริญผล

  10. การประกาศข้อมูลสำหรับการใช้บริการหมายเลข 0Ah ของ DOS บริการหมายเลข 0Ah : อ่านข้อความ • รับข้อมูลผ่านรีจิสเตอร์ดังนี้ • AH = 09h • DS : DX = ตำแหน่งของหน่วยความจำที่จะใช้เก็บข้อมูล (บัฟเฟอร์) โดยที่จะต้องมีรูปแบบดังนี้ • ไบต์ที่ 1 : ความยาวของข้อมูลทั้งหมด (ต้องเผื่อที่ว่างไว้ 1 ไบต์สำหรับอักขระขึ้นบรรทัดใหม่) • ไบต์ที่ 2 : DOS จะใส่ความยาวข้อมูลจริงลงที่หน่วยความจำตำแหน่งนี้ • ไบต์ต่อ ๆ ไป : ข้อความที่อ่านได้. เราต้องจองเนื้อที่หน่วยความจำให้เพียงพอ • ตัวอย่างของการประกาศข้อมูลเพื่อให้เขียนโปรแกรมได้สะดวก .data maxlen db 30 msglen db ? msg db 30 dup (?) 204221 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์ สัณฑิติ พัชรรุ่งเรือง จิตร์ทัศน์ ฝักเจริญผล

  11. การประกาศข้อมูลสำหรับการใช้บริการหมายเลข 0Ah ของ DOS บัฟเฟอร์ msg msglen maxlen ในการส่งแอดเดรสของบัฟเฟอร์ไปยัง DOS เราจะส่งตำแหน่งของ maxlen ไปให้ เพื่อให้รูปแบบของข้อมูลตรงตามข้อกำหนด. • การเรียกใช้บริการอ่านข้อความ mov ah,0Ah mov dx,offset maxlen int 21h • msglen จะเก็บความยาวของข้อความที่อ่านได้. • อักขระต่างในข้อความจะถูกเก็บในหน่วยความจำตั้งแต่ msg เป็นต้นไป. 204221 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์ สัณฑิติ พัชรรุ่งเรือง จิตร์ทัศน์ ฝักเจริญผล

  12. ตัวอย่างโปรแกรม • โปรแกรมที่รับข้อความจากผู้ใช้แล้วแสดงข้อความนั้นออกมา. • รับข้อความ • บริการหมายเลข 0Ah • แสดงข้อความ • บริการหมายเลข 09h • ข้อความต้องจบด้วย ‘$’ 204221 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์ สัณฑิติ พัชรรุ่งเรือง จิตร์ทัศน์ ฝักเจริญผล

More Related