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

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


  • 72 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' บทที่ 8 : การประกาศข้อมูล' - logan-espinoza


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
บทที่ 8 : การประกาศข้อมูล

  • รูปแบบในการประกาศข้อมูล

  • การอ้างใช้ข้อมูล

  • การประกาศข้อมูลสำหรับการเรียกใช้งานบริการของ DOS หมายเลข 09h และ 0Ah

204221 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์

สัณฑิติ พัชรรุ่งเรือง

จิตร์ทัศน์ ฝักเจริญผล


i : การประกาศข้อมูล

j :

ch :

การประกาศข้อมูลหรือตัวแปร

  • ข้อมูลที่โปรแกรมใช้ และ ตัวแปรต่าง ๆ ที่อยู่ในหน่วยความจำ เป็นสิ่งเดียวกัน.

  • การประกาศข้อมูล =

    • การระบุให้ assembler จองเนื้อที่ในหน่วยความจำไว้ใช้สำหรับการเก็บข้อมูล

    • และตั้งชื่อให้กับหน่วยความจำตำแหน่งนั้น (สร้างเลเบล)

  • ตัวอย่างการประกาศตัวแปรแบบเลขจำนวนเต็ม 16 บิต 2 ตัว (i, j) และอักขระ 1 ไบต์ (ch)

จะเป็นการจองเนื้อที่ในหน่วยความจำขนาด 5 ไบต์ โดยจะมีเลเบล i j และ ch ชี้ตำแหน่งดังรูป

204221 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์

สัณฑิติ พัชรรุ่งเรือง

จิตร์ทัศน์ ฝักเจริญผล


คำสั่งเทียมสำหรับการจองเนื้อที่ในหน่วยความจำคำสั่งเทียมสำหรับการจองเนื้อที่ในหน่วยความจำ

  • เราใช้คำสั่งเทียมในการระบุกับ 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 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์

สัณฑิติ พัชรรุ่งเรือง

จิตร์ทัศน์ ฝักเจริญผล


การจัดเรียงค่าในหน่วยความจำการจัดเรียงค่าในหน่วยความจำ

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 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์

สัณฑิติ พัชรรุ่งเรือง

จิตร์ทัศน์ ฝักเจริญผล


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 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์

สัณฑิติ พัชรรุ่งเรือง

จิตร์ทัศน์ ฝักเจริญผล


การอ้างใช้ข้อมูลในหน่วยความจำการอ้างใช้ข้อมูลในหน่วยความจำ

  • เราสามารถใช้เลเบลที่ประกาศแทนตำแหน่งของมูลในหน่วยความจำได้ทันที. เรายังสามารถอ้างหน่วยความจำโดยคิดสัมพัทธ์กับตำแหน่งของ เลเบลได้.

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 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์

สัณฑิติ พัชรรุ่งเรือง

จิตร์ทัศน์ ฝักเจริญผล


การอ้างใช้ข้อมูลในหน่วยความจำการอ้างใช้ข้อมูลในหน่วยความจำ

  • การอ้างตำแหน่งของข้อมูล

    • ใช้คำสั่งเทียม 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 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์

สัณฑิติ พัชรรุ่งเรือง

จิตร์ทัศน์ ฝักเจริญผล


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 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์

สัณฑิติ พัชรรุ่งเรือง

จิตร์ทัศน์ ฝักเจริญผล


09h dos
การประกาศข้อมูลสำหรับการใช้บริการหมายเลข 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 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์

สัณฑิติ พัชรรุ่งเรือง

จิตร์ทัศน์ ฝักเจริญผล


0ah dos
การประกาศข้อมูลสำหรับการใช้บริการหมายเลข 0Ah ของ DOS

บริการหมายเลข 0Ah : อ่านข้อความ

  • รับข้อมูลผ่านรีจิสเตอร์ดังนี้

    • AH = 09h

    • DS : DX = ตำแหน่งของหน่วยความจำที่จะใช้เก็บข้อมูล (บัฟเฟอร์) โดยที่จะต้องมีรูปแบบดังนี้

      • ไบต์ที่ 1 : ความยาวของข้อมูลทั้งหมด (ต้องเผื่อที่ว่างไว้ 1 ไบต์สำหรับอักขระขึ้นบรรทัดใหม่)

      • ไบต์ที่ 2 : DOS จะใส่ความยาวข้อมูลจริงลงที่หน่วยความจำตำแหน่งนี้

      • ไบต์ต่อ ๆ ไป : ข้อความที่อ่านได้. เราต้องจองเนื้อที่หน่วยความจำให้เพียงพอ

  • ตัวอย่างของการประกาศข้อมูลเพื่อให้เขียนโปรแกรมได้สะดวก

.data

maxlen db 30

msglen db ?

msg db 30 dup (?)

204221 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์

สัณฑิติ พัชรรุ่งเรือง

จิตร์ทัศน์ ฝักเจริญผล


0ah dos1
การประกาศข้อมูลสำหรับการใช้บริการหมายเลข 0Ah ของ DOS

บัฟเฟอร์

msg

msglen

maxlen

ในการส่งแอดเดรสของบัฟเฟอร์ไปยัง DOS เราจะส่งตำแหน่งของ maxlen ไปให้ เพื่อให้รูปแบบของข้อมูลตรงตามข้อกำหนด.

  • การเรียกใช้บริการอ่านข้อความ

mov ah,0Ah

mov dx,offset maxlen

int 21h

  • msglen จะเก็บความยาวของข้อความที่อ่านได้.

  • อักขระต่างในข้อความจะถูกเก็บในหน่วยความจำตั้งแต่ msg เป็นต้นไป.

204221 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์

สัณฑิติ พัชรรุ่งเรือง

จิตร์ทัศน์ ฝักเจริญผล


ตัวอย่างโปรแกรม 0Ah ของ DOS

  • โปรแกรมที่รับข้อความจากผู้ใช้แล้วแสดงข้อความนั้นออกมา.

  • รับข้อความ

    • บริการหมายเลข 0Ah

  • แสดงข้อความ

    • บริการหมายเลข 09h

      • ข้อความต้องจบด้วย ‘$’

204221 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์

สัณฑิติ พัชรรุ่งเรือง

จิตร์ทัศน์ ฝักเจริญผล


ad