CS Assembly Language Programming

Slides:



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

Pointers. Why have pointers? / pointers ทำให้ฟังก์ชันหรือส่วนของ โปรแกรมสามารถใช้งานข้อมูลร่วมกันได้ / ใช้ pointers ในการสร้างโครงสร้างข้อมูลที่ ซับซ้อนได้
Introduction to C Introduction to C.
โครงสร้างโปรแกรมภาษา C
สาขาวิชาคอมพิวเตอร์ คณะวิทยาศาสตร์และเทคโนโลยี
ข้อมูลชนิดอาร์เรย์ Array (บทที่ 5)
Introduction to C Programming
ปฎิบัติการที่ ห้า.
Department of Computer Business
การรับค่าและแสดงผล.
พอยน์เตอร์ (Pointer) Chapter Introduction to Programming
บทที่ 11 การเขียนโปรแกรมโดยใช้ข้อมูลชนิดพอยท์เตอร์
หลักการโปรแกรม 1 Lecture 3: ตัวแปร, นิพจน์คณิตศาสตร์, การคำนวณทางคณิตศาสตร์,การดำเนินการกับสายอักขระ.
Lecture 11: อาร์เรย์แบบหลายมิติ
CS Assembly Language Programming
CS Assembly Language Programming
CS Assembly Language Programming
CS Assembly Language Programming
CS Assembly Language Programming Period 29.
CS Assembly Language Programming Period 12.
CS Assembly Language Programming
CS Assembly Language Programming
CS Assembly Language Programming
CS Assembly Language Programming
CS Assembly Language Programming Period 16.
ชนิดของข้อมูลและตัวดำเนินการ
หลักการออกแบบเว็บ กำหนดกลุ่มเป้าหมาย จำแนกกลุ่มเนื้อหา
PHP LANGUAGE.
โครงสร้างภาษาซี.
การเขียนโปรแกรม ASP การประกาศตัวแปร
Lecture no. 2: Overview of C Programming
Arrays.
ขั้นตอนการแปลงไฟล์.
SCC : Suthida Chaichomchuen
Addressing Modes Assembly Programming.
การเขียนโปรแกรมเชิงวัตถุ ด้วยภาษาจาวา
บทที่ 3 ตัวดำเนินการ และ นิพจน์
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.
CS Assembly Language Programming Period 13.
ระบบจำนวนเต็ม โดย นางสาวบุณฑริกา สูนานนท์
การใช้งานเบื้องต้นของเครื่องคิดเลขทางการเงิน
ดีบักเป็นเครื่องมืออันหนึ่งที่ให้ผู้ใช้ ตรวจสอบ และแก้ไขค่าใน หน่วยความจำ โหลด เก็บ ตรวจสอบค่าในเรจิสเตอร์ และสามารถ เขียนโปรแกรมแอสเซมบลีได้อย่าง สะดวก.
บทที่ 15 โปรแกรมย่อยและแสต็ก
ธนาวินท์ รักธรรมานนท์
โปรแกรมภาษาแอสเซมบลี้ (2)
Debug #2 โครงสร้างคอมพิวเตอร์ และภาษาแอสเซมบลี้
เซกเมนต์ (Segment) โครงสร้างคอมพิวเตอร์ และภาษาแอสเซมบลี้
อินเทอร์รัพท์ (Interrupt)
Page: 1 โครงสร้างคอมพิวเตอร์ และภาษาแอสเซมบลี้ inkey.com มหาวิทยาลัยเนชั่น จังหวัดลำปาง ผศ. บุรินทร์
Introduction to C Language
HTML, PHP.
ตัวแปรกับชนิดของข้อมูล
ตัวแปร ชนิดข้อมูล และ ตัวดำเนินการใน PHP
Week 2 Variables.
Week 12 Engineering Problem 2
CS Assembly Language Programming
Computer Programming for Engineers
Overview of C Programming
กองซ้อน ยอดกองซ้อน (stack).
โครงสร้าง ภาษาซี.
การกระทำทางคณิตศาสตร์
stack #1 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
โครงสร้างของภาษา HTML
หลักการทั่วไปเกี่ยวกับการเขียนโปรแกรม
Microcomputer and Assembly Language
โปรแกรมภาษาแอสเซมบลี้เบื้องต้น
ใบสำเนางานนำเสนอ:

CS344-321 Assembly Language Programming Period 10

ตัวอย่าง การเขียนโปรแกรมแบบแฟ้ม .EXE display equ 9h ;display output function doscall equ 21h ;DOS interrupt number data_seg segment hello_message db 'Hello, world!', 0dh, 0ah, '$' data_seg ends code_seg segment assume cs:code_seg, ds:data_seg start: mov ax,data_seg mov ds,ax mov ah,display mov dx,offset hello_message int doscall mov ax,4c00h code_seg ends end start

Listing = 0009 display equ 9h ;display output function = 0021 doscall equ 21h ;DOS interrupt number 0000 data_seg segment 0000 48 65 6C 6C 6F 2C hello_message db 'Hello, world!', 0dh, 0ah, '$' 20 77 6F 72 6C 64 21 0D 0A 24 0010 data_seg ends 0000 code_seg segment assume cs:code_seg, ds:data_seg 0000 start: 0000 B8 ---- R mov ax,data_seg 0003 8E D8 mov ds,ax 0005 B4 09 mov ah,display 0007 BA 0000 R mov dx,offset hello_message 000A CD 21 int doscall 000C B8 4C00 mov ax,4c00h 000F CD 21 int doscall 0011 code_seg ends end start

คำสั่ง assume cs:code_seg, ds:data_segบอก assembler ว่า จะใช้ ds เป็นจุดเริ่มต้นของ data_seg แต่หลังจาก DOS บรรจุโปรแกรมแบบ .EXE แล้ว จะกำหนดให้ ds ชี้ไปที่จุดเริ่มต้นของ PSP ท่านต้องปรับให้ ds ชี้มาที่ data_seg ด้วยคำสั่ง สองคำสั่งต่อไปนี้ mov ax,data_seg mov ds,ax ท่านไม่สามารถใช้คำสั่งเดียว คือ mov ds,data_seg เพราะเป็นข้อห้ามข้อคำสั่ง mov (ดู chapter 4 หน้า 4) หมายเหตุ data_seg จะถูกปรับค่าให้ถูกต้องเมื่อมีการบรรจุโปรแกรมนี้ในหน่วยความจำ เพราะรู้ว่าได้บรรจุ data_seg ที่ใด

หมายเหตุ 1. Directive EQU 2. Operator OFFSET ซึ่งมีความหมายอธิบายได้ด้วยตัวอย่าง ต่อไปนี้ mov ax,OFFSET data กับ mov ax,data สมมุติว่าใน Listing บอกว่า data อยู่ที่ ออฟเซต 0020h และข้อมูลที่ออฟเซตดังกล่าว คือ 25h 0020 data dw 25h ถ้าทำคำสั่ง mov ax,offset data ค่าใน ax จะเท่ากับ 0020h แต่ถ้าทำคำสั่ง mov ax,data ค่าใน ax จะเท่ากับ 0025h สรุป ให้มองว่า data เป็นตัวแปรตัวหนึ่งที่เก็บค่า 25h ถ้าต้องการค่าของตัวแปร data ให้อ้าง ถึงชื่อตัวแปรนั้น คือ data แต่ถ้าต้องการอ้างถึงที่อยู่ในที่นี้คือ ค่าออฟเซตของตัวแปร data ให้ใส่ operator OFFSET ข้างหน้า คือ OFFSET data เป็นต้น

แฟ้มแบบ .exe มี header ตรงต้นแฟ้ม เพื่อเก็บข้อมูลบางอย่าง เช่น MINALLOC, MAXALLOC, MAGIC #, Relocation Table, และ CS:IP ที่จะเริ่มต้น execute (ตรง directive END) ใน Listing มี อักษร R ใช้เพื่อบอกให้ตัวเชื่อมโยง ปรับออฟเซตให้ถูกต้อง เมื่อมีการเชื่อมโยงระหว่างหลายๆ segment ที่เขียนแยกจากกัน แล้วนำมารวมเป็น segment เดียวกัน ผู้เขียนโปรแกรมจึงไม่จำเป็นต้องสนใจอักษร ดังกล่าว อักษรดังกล่าว จะไม่กินเนื้อที่ในหน่วยความจำ ตรง 0000 B8 ---- R mov ax,data_seg เนื่องจากช่วงการแปล ยังไม่รู้ว่า data_seg จะถูกบรรจุที่ตำแหน่งใดในหน่วยความจำ assembler จึงใส่ เครื่องหมาย --- และมีอัษร R เพื่อบอกให้รู้ว่า หลังการบรรจุโปรแกรมในหน่วยความจำ แล้ว ต้องมีการปรับค่าดังกล่าวให้ถูกต้อง ตำแหน่งดังกล่าว จะเก็บไว้ใน Relocation Table ตรง header ของแฟ้ม .exe

ดังนั้น ถ้าดูจาก Listing แล้ว ท่านจะสามารถตรวจสอบได้ว่า โปรแกรมดังกล่าว เป็นโปรแกรม แบบ .COM หรือไม่ โดยพิจารณา ดังนี้ 1. ตรง directive END เริ่มที่ CS:0100h หรือไม่ ถ้าไม่ แสดงว่าไม่ใช่โปรแกรมแบบ .COM 2. มี เครื่องหมาย ---- R ที่กล่าวมาข้างต้นหรือไม่ ถ้ามี แสดงว่าไม่ใช่โปรแกรมแบบ .COM 3. มี stack segment เช่น my_stack segment STACK my_stack ends เป็นต้น ถ้ามี แสดงว่าไม่ใช่โปรแกรมแบบ .COM ถ้า ไม่ใช่โปรแกรมแบบ .COM ท่านไม่สามารถใช้ exe2bin เปลี่ยนจากแฟ้ม .EXE เป็น .COM หมายเหตุ อย่าลืมว่า โปรแกรมแบบ .COM ต้องโตไม่เกิน 64K - 2 - 256