งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

โปรแกรมภาษา แอสเซมบลี้ (2) ธนาวินท์ รักธรรมานนท์

งานนำเสนอที่คล้ายกัน


งานนำเสนอเรื่อง: "โปรแกรมภาษา แอสเซมบลี้ (2) ธนาวินท์ รักธรรมานนท์"— ใบสำเนางานนำเสนอ:

1 โปรแกรมภาษา แอสเซมบลี้ (2) ธนาวินท์ รักธรรมานนท์

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

3 3 ตัวอย่างโปรแกรมภาษา แอสเซมบลี้ ; This program prints the message ” Hello world ” dseg segment msg1 db ’ Hello world ’,10h,13h, ’ $ ’ dseg ends sseg segment stack db100 dup (?) sseg ends cseg segment assume cs:cseg,ds:dseg,ss:sseg start: movax,dseg ;set DS movds,ax movah,9h ;print message movdx,offset msg1 int21h movax,4c00h ;exit program int21h cseg ends endstart

4 4 รูปแบบโปรแกรมแบบ ใหม่ ; This program prints "Hello world".model small.dosseg.data msg1 db’Hello world’,10h,13h,’$’.stack 100h.code start: movds,ax movah,9h movdx,offset msg1 int21h movax,4c00h int21h end start

5 5 ประเภทการบริการของ DOS Function 01h : อ่านการกดปุ่มจากแป้นพิมพ์ AH = 01h AL = รหัสแอสกีของอักขระที่ผู้ใช้กด Function 02h : แสดงตัวอักษรออกทาง หน้าจอ AH = 02h DL = รหัสแอสกีของอักขระที่ต้องการแสดง Function 05h : พิมพ์ตัวอักษรทาง เครื่องพิมพ์ AH = 05h DL = รหัสแอสกีของอักขระที่ต้องการพิมพ์

6 6 ประเภทการบริการของ DOS Function 07h : อ่านการกดแป้นพิมพ์ โดยไม่ แสดงปุ่มที่กด ( ไม่ตรวจการกด Ctrl-Break) AH = 07h AL = รหัสแอสกีของอักขระที่ผู้ใช้กด Function 08h : อ่านการกดแป้นพิมพ์ โดยไม่ แสดงปุ่มที่กด ( ตรวจการกด Ctrl-Break) AH = 08h AL = รหัสแอสกีของอักขระที่ผู้ใช้กด

7 7 ประเภทการบริการของ DOS Function 09h : แสดงข้อความทางหน้าจอ AH = 09h DS:DX = ตำแหน่งของข้อความที่ต้องการแสดง โดยข้อความนี้ต้องจบด้วยอักษร ‘$’ เท่านั้น Function 0Ah : อ่านข้อความ AH = 0Ah DS:DX = ตำแหน่งของบัฟเฟอร์สำหรับเก็บข้อมูล Function 4Ch : จบโปรแกรม AH = 4Ch AL = ค่าที่ต้องการคืนให้กับระบบ

8 8 การประกาศข้อมูลหรือ ตัวแปร ข้อมูลที่โปรแกรมใช้และตัวแปรต่างๆ ที่ อยู่ในหน่วยความจำ เป็นสิ่ง เดียวกัน การประกาศข้อมูล คือ การระบุให้ assembler จองเนื้อที่ใน หน่วยความจำไว้ใช้สำหรับการเก็บ ข้อมูล และตั้งชื่อให้กับหน่วยความจำตำแหน่ง นั้น ( สร้างเลเบล )

9 9 ตัวอย่างแนวคิดการจอง พื้นที่ ตัวอย่างการประกาศตัวแปร เลขจำนวนเต็ม 16 บิต 2 ตัว (i, j) อักขระ 1 ไบต์ (ch) i : j : ch : จะเป็นการจอง เนื้อที่ใน หน่วยความจำ ขนาด 5 ไบต์ โดยจะมีเลเบล i j และ ch ชี้ ตำแหน่งดังรูป

10 10 คำสั่งเทียมสำหรับการจองเนื้อ ที่ในหน่วยความจำ เราใช้คำสั่งเทียม Dx ในการระบุกับ assembler ว่าจะต้องการหน่วยความจำ ขนาดหน่วยละเท่าใด เราใช้ เครื่องหมาย ‘?’ ในการระบุการจอง เนื้อที่หน่วยความจำ โดยไม่ระบุค่าของ ข้อมูล คำ สั่ง ความหมายขนา ด ( ไบ ต์ ) DBDefine Byte1 DWDefine Word2 DDDefine Double4 DQDefine Quad word8 DTDefine Ten byte10 dseg segment data1db1,? data2dw1,2 data3db ’ Hi ’,10,13 data4dd1234h dseg ends

11 11 dseg : A 000B 000C 000D dseg segment data1 db 1,? data2 dw 1,2 data3 db ’ Hi ’,10,13 data4 dd 1234h dseg ends db1, ? data1 01h ? data2 dw1,2 01h 00h 02h 00h data3 db ’ Hi ’,10,13 48h 69h 0Ah 0Dh data4 dd1234h 34h 12h 00h

12 12 การระบุค่าของ หน่วยความจำที่มีการซ้ำ เราใช้คำสั่งเทียม dup ในการระบุค่าเริ่มต้นที่มี การซ้ำกันหลายชุด. รูปแบบ จำนวนซ้ำ dup ( ค่าที่ซ้ำ ) Data7 db10 dup (0) Data8 db5 dup (4 dup (5)) Data9 db4 dup (1,2,3 dup (4)) Data10 db20 dup (?) ???? ? ? ซ้ำ data7 data9 data8 data10

13 13 การอ้างใช้ข้อมูลใน หน่วยความจำ 01h 00h 02h 00h 48h 69h 0Ah 0Dh 34h 12h 00h data1 data2 data3 data4 mov al,data1 mov bx,data2 mov data1,0 mov [data2+2],1123h mov data1[1],22h mov cl,byte ptr data4 dseg segment data1db1,? data2dw1,2 data3db ’ Hi ’,10,13 data4dd1234h dseg ends 00h23h 11h AL = 01h BX = 01h CL = 34h 22h

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

15 15 การอ้างใช้ข้อมูลใน หน่วยความจำ การอ้างตำแหน่งของ ข้อมูล ใช้คำสั่งเทียม OFFSET การใช้รีจิสเตอร์ BX ในการอ้างตำแหน่ง ข้อมูล ใช้ BX เก็บออฟเซ็ต ของ DATA7 ไว้ จากนั้นเราอ้างใช้ หน่วยความจำเทียบกับ BX ใช้หน่วยความจำเทียบ กับ DATA7 และค่าใน BX movax,data2 movbx,offset data2 movbx, offset data7 movbyte ptr [bx],10 mov byte ptr [bx+1],20 movbx, 2 movdata7[bx],30 mov data7[bx+1],40

16 16 ตัวอย่างการอ้างใช้ข้อมูลใน หน่วยความจำ dseg segment data1 db 1,2,3 data2 db 3 dup (?) data3 dw 5,6 dseg ends mov al,data1 mov bx,offset data1 mov cx,data3[2] mov bx,offset data2 mov [bx],cx ? ? ? DS:0000 DS:0001 DS:0003 DS:0004 DS:0005 DS:0006 DS:0007 DS:0008 DS:0009 DS:000A AL = 01h BX = 0000h CX = 0006h [DS:0004] = 06h [DS:0005] = 00h

17 17 การใช้บริการหมายเลข 09h ของ DOS บริการหมายเลข 09h : แสดงผลข้อความ รับข้อมูลผ่านรีจิสเตอร์ดังนี้ DS : DX = ตำแหน่งของข้อความที่จะแสดง โดยข้อความนี้ต้องจบด้วย เครื่องหมาย ‘$’ AH = 09h dseg segment msg db ’ hello ’,10,13, ’ $ ’ dseg ends mov ah,9 mov dx,offset msg int 21h

18 18 การใช้บริการหมายเลข 0Ah ของ DOS บริการหมายเลข 0Ah : อ่านข้อความ รับข้อมูลผ่านรีจิสเตอร์ดังนี้ DS : DX = ตำแหน่งของหน่วยความจำที่จะใช้เก็บ ข้อมูล ( บัฟเฟอร์ ) โดยที่จะต้องมีรูปแบบดังนี้ ไบต์ที่ 1 : ความยาวของข้อมูลทั้งหมด ( ต้องเผื่อที่ว่างไว้ 1 ไบต์สำหรับอักขระขึ้นบรรทัดใหม่ ) ไบต์ที่ 2 : DOS จะใส่ความยาวข้อมูลจริงลงที่ หน่วยความจำตำแหน่งนี้ ไบต์ต่อ ๆ ไป : ข้อความที่อ่านได้ โดยต้องจองเนื้อที่ หน่วยความจำให้เพียงพอ AH = 0Ah.data maxlen db 30 ;29char+return msglen db ? msg db 30 dup (?)

19 19 การใช้บริการหมายเลข 0Ah ของ DOS การเรียกใช้บริการอ่านข้อความ ต้องส่ง แอดเดรสของบัฟเฟอร์ไปยัง DOS เราจะส่ง ตำแหน่งของ maxlen ไปให้ เพื่อให้รูปแบบ ของข้อมูลตรงตามข้อกำหนด msglen จะเก็บความยาวของข้อความที่อ่าน ได้. อักขระต่างในข้อความจะถูกเก็บใน หน่วยความจำตั้งแต่ msg เป็นต้นไป บัฟเฟอร์ msglen maxlen msg

20 20 แบบฝึกหัด โปรแกรมที่รับข้อความจากผู้ใช้แล้ว แสดงข้อความนั้นออกมา รับข้อความ ใช้บริการหมายเลข 0Ah กำหนดความยาวสูงสุด รับค่าความยาวจริง รับข้อความ แสดงข้อความ ใช้บริการหมายเลข 09h ข้อความต้องจบด้วย ‘$’

21 21 Question ?


ดาวน์โหลด ppt โปรแกรมภาษา แอสเซมบลี้ (2) ธนาวินท์ รักธรรมานนท์

งานนำเสนอที่คล้ายกัน


Ads by Google