โปรแกรมภาษาแอสเซมบลี้ (2)

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
โครงสร้างของภาษา C ในโปรแกรมที่พัฒนาด้วยภาษา C ทุกโปรแกรมจะมีโครงสร้างการพัฒนาไม่แตกต่างกัน ซึ่งประกอบด้วย 6 ส่วนหลัก ๆ โดยที่แต่ละส่วนจะมีหน้าที่แตกต่างกัน.
Advertisements

ชนิดของข้อมูลในโปรแกรม Interactive C
ครั้งที่ 9 Function(ต่อ).
บทที่ 2 รหัสควบคุมและการคำนวณ
โครงสร้างโปรแกรมภาษา C
บทที่ 11 โปรแกรมย่อยขั้นต้น
สาขาวิชาคอมพิวเตอร์ คณะวิทยาศาสตร์และเทคโนโลยี
ตัวแปรประเภทตัวชี้ (Pointer)
โดยอาจารย์ศิริพร ศักดิ์บุญญารัตน์ ครูชำนาญการ โรงเรียนมหิดลวิทยานุสรณ์
ตัวแปรชุด การเขียนโปรแกรมภาษาคอมพิวเตอร์ 1
2.2.3 การแก้ไขแอดเดรส โดยการใช้อินเด็กรีจิสเตอร์
Introduction to C Programming
การรับค่าและแสดงผล.
CS Assembly Language Programming
CS Assembly Language Programming
CS Assembly Language Programming
CS Assembly Language Programming
CS Assembly Language Programming
CS Assembly Language Programming Period 16.
Week 6 ประกาศค่าตัวแปร.
รับและแสดงผลข้อมูล.
NUMBER SYSTEM เลขฐานสิบ (Decimal Number) เลขฐานสอง (Binary Number)
ตัวชี้ P O I N T E R Created By Tasanawan Soonklang
การประกาศตัวแปร “ตัวแปร” คือสิ่งที่เราสร้างขึ้นมาเพื่อใช้เก็บค่าต่างๆและอ้างอิงใช้งานภายในโปรแกรม ตามที่เรากำหนดขึ้น การสร้างตัวแปรขึ้นมาเราเรียกว่า.
Week4 Data types, Variables, Operators and Input/output (ต่อ)
ขั้นตอนการแปลงไฟล์.
C Programming Lecture no. 6: Function.
SCC : Suthida Chaichomchuen
การจัดการข้อมูลด้วยคอมพิวเตอร์
Addressing Modes Assembly Programming.
1 Structures & Records SCC : Suthida Chaichomchuen
บทที่ 3 ตัวดำเนินการ และ นิพจน์
บทที่ 2 ประเภทข้อมูล (DATA TYPE)
บรรณารักษชำนาญการพิเศษ
CS Assembly Language Programming
CS Assembly Language Programming Period 7.
CS Assembly Language Programming
CS Assembly Language Programming Period 30.
CS Assembly Language Programming Period 33.
ดีบักเป็นเครื่องมืออันหนึ่งที่ให้ผู้ใช้ ตรวจสอบ และแก้ไขค่าใน หน่วยความจำ โหลด เก็บ ตรวจสอบค่าในเรจิสเตอร์ และสามารถ เขียนโปรแกรมแอสเซมบลีได้อย่าง สะดวก.
ASSIGN3-4. InstructionResult Z-FlagC-FlagP-FlagS-FlagO-Flag MOV AL,9Eh 9Eh H ????? ADDAL,9Eh 3C ADD AL,1Eh 5A
อาร์เรย์และข้อความสตริง
บทที่ 15 โปรแกรมย่อยและแสต็ก
บทที่ 17 คำสั่งตารางและการสร้างแมคโคร
ธนาวินท์ รักธรรมานนท์
ธนาวินท์ รักธรรมานนท์
อาร์เรย์ (Array).
ตัวแปร (Variable) คือ ชื่อที่ตั้งขึ้นเพื่อเก็บข้อมูลในหน่วยความจำ สามารถเก็บข้อมูลชนิดใดก็ ได้ ลักษณะที่สำคัญ ค่าที่จัดเก็บ เมื่อปิดโปรแกรมข้อมูลจะหายไป.
Debug #2 โครงสร้างคอมพิวเตอร์ และภาษาแอสเซมบลี้
เซกเมนต์ (Segment) โครงสร้างคอมพิวเตอร์ และภาษาแอสเซมบลี้
อินเทอร์รัพท์ (Interrupt)
ตัวแปรกับชนิดของข้อมูล
ง30212 การเขียนโปรแกรมภาษาคอมพิวเตอร์ โรงเรียนปลวกแดงพิทยาคม
ฟังก์ชันรับข้อมูล ง30212 การเขียนโปรแกรมด้วยภาษาคอมพิวเตอร์
ง30212 พื้นฐานการเขียนโปรแกรม ศูนย์คอมพิวเตอร์ โรงเรียนปลวกแดงพิทยาคม
ปฏิบัติการครั้งที่ 10 pointer. หน่วยความจำ หน่วยความจำนั้นเสมือนเป็นช่องว่างไว้เก็บ ของที่มีหมายเลขประจำติดไว้ที่แต่ละช่อง เพื่อใช้ในการระบุตำแหน่งของช่องได้
ตัวแปรกับชนิดของข้อมูล
Week 2 Variables.
เสรี ชิโนดม ฟังก์ชัน เสรี ชิโนดม
CS Assembly Language Programming
Computer Programming for Engineers
วิทยา กรระสี (วท.บ. วิทยาการคอมพิวเตอร์)
โครงสร้างภาษาซี #include <stdio.h> void main() {
คำสั่งเกี่ยวกับการรับ และแสดงผล
ตัวแปร Array แบบ 1 มิติ การเขียนโปรแกรมแบบวนซ้ำ
หลักการเขียนโปรแกรม ( )
การแสดงผลและการรับข้อมูล (Data Output and Input)
stack #1 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
Microcomputer and Assembly Language
โปรแกรมภาษาแอสเซมบลี้เบื้องต้น
ใบสำเนางานนำเสนอ:

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

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

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

รูปแบบโปรแกรมแบบใหม่ ; This program prints "Hello world" .model small .dosseg .data msg1 db ’Hello world’,10h,13h,’$’ .stack 100h .code start: mov ax,@data mov ds,ax mov ah,9h mov dx,offset msg1 int 21h mov ax,4c00h end start

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

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

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

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

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

คำสั่งเทียมสำหรับการจองเนื้อที่ในหน่วยความจำ เราใช้คำสั่งเทียม Dx ในการระบุกับ assembler ว่าจะต้องการหน่วยความจำขนาดหน่วยละเท่าใด เราใช้ เครื่องหมาย ‘?’ ในการระบุการจองเนื้อที่หน่วยความจำ โดยไม่ระบุค่าของข้อมูล คำสั่ง ความหมาย ขนาด (ไบต์) DB Define Byte 1 DW Define Word 2 DD Define Double 4 DQ Define Quad word 8 DT Define Ten byte 10 dseg segment data1 db 1,? data2 dw 1,2 data3 db ’Hi’,10,13 data4 dd 1234h dseg ends

dseg : 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D db 1,? data1 01h ? data2 dw 1,2 01h 00h 02h dseg segment data1 db 1,? data2 dw 1,2 data3 db ’Hi’,10,13 data4 dd 1234h dseg ends data3 db ’Hi’,10,13 48h 69h 0Ah 0Dh data4 dd 1234h 34h 12h 00h

การระบุค่าของหน่วยความจำที่มีการซ้ำ เราใช้คำสั่งเทียม dup ในการระบุค่าเริ่มต้นที่มีการซ้ำกันหลายชุด. รูปแบบ จำนวนซ้ำ dup (ค่าที่ซ้ำ) 5 1 2 4 ? ซ้ำ data7 data9 data8 data10 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 (?)

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

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

การอ้างใช้ข้อมูลในหน่วยความจำ การอ้างตำแหน่งของข้อมูล ใช้คำสั่งเทียม OFFSET การใช้รีจิสเตอร์ BX ในการอ้างตำแหน่งข้อมูล ใช้ BX เก็บออฟเซ็ตของ DATA7 ไว้ จากนั้นเราอ้างใช้หน่วยความจำเทียบกับ BX ใช้หน่วยความจำเทียบกับ DATA7 และค่าในBX mov ax,data2 mov bx,offset data2 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

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

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

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

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

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

Question ?