Enviar búsqueda
Cargar
แนะนำการเขียนโปรแกรมภาษาแอสเซมลีเบื้องต้น
•
7 recomendaciones
•
29,931 vistas
Phusit Konsurin
Seguir
Introduction to ibm pc assembly language. แนะนำการเขียนโปรแกรมภาษาแอสเซมลีเบื้องต้น
Leer menos
Leer más
Tecnología
Denunciar
Compartir
Denunciar
Compartir
1 de 17
Descargar ahora
Descargar para leer sin conexión
Recomendados
เอกสารประกอบการเรียน โปรแกรม Microsoft Excel 2010
เอกสารประกอบการเรียน โปรแกรม Microsoft Excel 2010
kanidta vatanyoo
ใบงานหน่วยที่3
ใบงานหน่วยที่3
Amnuay
การสร้างงานโปรแกรมด้วยภาษาคอมพิวเตอร์ ฟลุ๊ค
การสร้างงานโปรแกรมด้วยภาษาคอมพิวเตอร์ ฟลุ๊ค
Thidaporn Kaewta
คู่มือ Handbook app inventor
คู่มือ Handbook app inventor
Areefin Kareng
แผนการจัดการเรียนรู้ การเขียนโปรแกรมบนอุปกรณ์เคลื่อนที่เบื้องต้น
แผนการจัดการเรียนรู้ การเขียนโปรแกรมบนอุปกรณ์เคลื่อนที่เบื้องต้น
ssuser741b9d
ใบความรู้ Powerpoint 2010
ใบความรู้ Powerpoint 2010
สุดรัก หวานใจ
ข้อสอบปฏิบัติ Microsoft Word
ข้อสอบปฏิบัติ Microsoft Word
Supreeyar philarit
โครงงานวิชาคอมพิวเตอร์ เรื่อง แอปพลิเคชั่นตัดคะแนนนักเรียน
โครงงานวิชาคอมพิวเตอร์ เรื่อง แอปพลิเคชั่นตัดคะแนนนักเรียน
yudohappyday
Recomendados
เอกสารประกอบการเรียน โปรแกรม Microsoft Excel 2010
เอกสารประกอบการเรียน โปรแกรม Microsoft Excel 2010
kanidta vatanyoo
ใบงานหน่วยที่3
ใบงานหน่วยที่3
Amnuay
การสร้างงานโปรแกรมด้วยภาษาคอมพิวเตอร์ ฟลุ๊ค
การสร้างงานโปรแกรมด้วยภาษาคอมพิวเตอร์ ฟลุ๊ค
Thidaporn Kaewta
คู่มือ Handbook app inventor
คู่มือ Handbook app inventor
Areefin Kareng
แผนการจัดการเรียนรู้ การเขียนโปรแกรมบนอุปกรณ์เคลื่อนที่เบื้องต้น
แผนการจัดการเรียนรู้ การเขียนโปรแกรมบนอุปกรณ์เคลื่อนที่เบื้องต้น
ssuser741b9d
ใบความรู้ Powerpoint 2010
ใบความรู้ Powerpoint 2010
สุดรัก หวานใจ
ข้อสอบปฏิบัติ Microsoft Word
ข้อสอบปฏิบัติ Microsoft Word
Supreeyar philarit
โครงงานวิชาคอมพิวเตอร์ เรื่อง แอปพลิเคชั่นตัดคะแนนนักเรียน
โครงงานวิชาคอมพิวเตอร์ เรื่อง แอปพลิเคชั่นตัดคะแนนนักเรียน
yudohappyday
ลอการิทึม
ลอการิทึม
Jiraprapa Suwannajak
โปรแกรม Paint คืออะไร
โปรแกรม Paint คืออะไร
Benjapeon Jantakhot
โครงงานคอมพิวเตอร์ เรื่อง เว็บไซต์ NIFTY HEALTH ด้วยภาษา HTML
โครงงานคอมพิวเตอร์ เรื่อง เว็บไซต์ NIFTY HEALTH ด้วยภาษา HTML
ธณัชช์ภรณ์ ศิริวัชเดชากุล
โครงการบริจาคโลหิต
โครงการบริจาคโลหิต
บริษัท ไทยซอฟท์แวร์ เอ็นเตอร์ไพรส์ จำกัด
โครงงานคอม สตรอเบอร์รี่(strawberry)
โครงงานคอม สตรอเบอร์รี่(strawberry)
ตัวต่อ มองไรดีว่ะ
โครงงานคอมพิวเตอร์ เรื่อง โรคซึมเศร้า
โครงงานคอมพิวเตอร์ เรื่อง โรคซึมเศร้า
ธนัชพร ส่งงาน
ตัวอย่างบทคัดย่อ
ตัวอย่างบทคัดย่อ
sukanya5729
คู่มือ Thunkable
คู่มือ Thunkable
Khunakon Thanatee
ตัวอย่างโครงงานคอม
ตัวอย่างโครงงานคอม
ปยล วชย.
แบบฝึกหัดโครงสร้างการเขียนผังงาน
แบบฝึกหัดโครงสร้างการเขียนผังงาน
Chess
บทที่ 5 การแปลง er diagram ให้เป็น table
บทที่ 5 การแปลง er diagram ให้เป็น table
ครูสม ฟาร์มมะนาว
ผลวิเคราะห์การจัดประชุมสัมมนา
ผลวิเคราะห์การจัดประชุมสัมมนา
Ativitt Crystalbell
รูปเล่มวิชาโครงงาน
รูปเล่มวิชาโครงงาน
AjBenny Pong
เกณฑ์การประเมินรูบริคส์
เกณฑ์การประเมินรูบริคส์
Lamai Fungcholjitt
บทที่3 วิธีดำเนินงาน
บทที่3 วิธีดำเนินงาน
Champ Wachwittayakhang
ตัวอย่างโครงงาน
ตัวอย่างโครงงาน
Sattawat Backer
ใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซี
ใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซี
Nattapon
บทที่ 5สรุปผล และข้อเสนอแนะ
บทที่ 5สรุปผล และข้อเสนอแนะ
Beeiiz Gubee
ใบงาน1ประมวลผลคำ
ใบงาน1ประมวลผลคำ
โรงเรียนแหลมทอง
รูปเล่มวิชาโครงงาน
รูปเล่มวิชาโครงงาน
AjBenny Pong
พื้นฐานภาษาจาวา
พื้นฐานภาษาจาวา
JK133
บทที่ 4 การเขียนโปรแกรมภาษาแอสแซมบลี
บทที่ 4 การเขียนโปรแกรมภาษาแอสแซมบลี
Nattawut Kathaisong
Más contenido relacionado
La actualidad más candente
ลอการิทึม
ลอการิทึม
Jiraprapa Suwannajak
โปรแกรม Paint คืออะไร
โปรแกรม Paint คืออะไร
Benjapeon Jantakhot
โครงงานคอมพิวเตอร์ เรื่อง เว็บไซต์ NIFTY HEALTH ด้วยภาษา HTML
โครงงานคอมพิวเตอร์ เรื่อง เว็บไซต์ NIFTY HEALTH ด้วยภาษา HTML
ธณัชช์ภรณ์ ศิริวัชเดชากุล
โครงการบริจาคโลหิต
โครงการบริจาคโลหิต
บริษัท ไทยซอฟท์แวร์ เอ็นเตอร์ไพรส์ จำกัด
โครงงานคอม สตรอเบอร์รี่(strawberry)
โครงงานคอม สตรอเบอร์รี่(strawberry)
ตัวต่อ มองไรดีว่ะ
โครงงานคอมพิวเตอร์ เรื่อง โรคซึมเศร้า
โครงงานคอมพิวเตอร์ เรื่อง โรคซึมเศร้า
ธนัชพร ส่งงาน
ตัวอย่างบทคัดย่อ
ตัวอย่างบทคัดย่อ
sukanya5729
คู่มือ Thunkable
คู่มือ Thunkable
Khunakon Thanatee
ตัวอย่างโครงงานคอม
ตัวอย่างโครงงานคอม
ปยล วชย.
แบบฝึกหัดโครงสร้างการเขียนผังงาน
แบบฝึกหัดโครงสร้างการเขียนผังงาน
Chess
บทที่ 5 การแปลง er diagram ให้เป็น table
บทที่ 5 การแปลง er diagram ให้เป็น table
ครูสม ฟาร์มมะนาว
ผลวิเคราะห์การจัดประชุมสัมมนา
ผลวิเคราะห์การจัดประชุมสัมมนา
Ativitt Crystalbell
รูปเล่มวิชาโครงงาน
รูปเล่มวิชาโครงงาน
AjBenny Pong
เกณฑ์การประเมินรูบริคส์
เกณฑ์การประเมินรูบริคส์
Lamai Fungcholjitt
บทที่3 วิธีดำเนินงาน
บทที่3 วิธีดำเนินงาน
Champ Wachwittayakhang
ตัวอย่างโครงงาน
ตัวอย่างโครงงาน
Sattawat Backer
ใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซี
ใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซี
Nattapon
บทที่ 5สรุปผล และข้อเสนอแนะ
บทที่ 5สรุปผล และข้อเสนอแนะ
Beeiiz Gubee
ใบงาน1ประมวลผลคำ
ใบงาน1ประมวลผลคำ
โรงเรียนแหลมทอง
รูปเล่มวิชาโครงงาน
รูปเล่มวิชาโครงงาน
AjBenny Pong
La actualidad más candente
(20)
ลอการิทึม
ลอการิทึม
โปรแกรม Paint คืออะไร
โปรแกรม Paint คืออะไร
โครงงานคอมพิวเตอร์ เรื่อง เว็บไซต์ NIFTY HEALTH ด้วยภาษา HTML
โครงงานคอมพิวเตอร์ เรื่อง เว็บไซต์ NIFTY HEALTH ด้วยภาษา HTML
โครงการบริจาคโลหิต
โครงการบริจาคโลหิต
โครงงานคอม สตรอเบอร์รี่(strawberry)
โครงงานคอม สตรอเบอร์รี่(strawberry)
โครงงานคอมพิวเตอร์ เรื่อง โรคซึมเศร้า
โครงงานคอมพิวเตอร์ เรื่อง โรคซึมเศร้า
ตัวอย่างบทคัดย่อ
ตัวอย่างบทคัดย่อ
คู่มือ Thunkable
คู่มือ Thunkable
ตัวอย่างโครงงานคอม
ตัวอย่างโครงงานคอม
แบบฝึกหัดโครงสร้างการเขียนผังงาน
แบบฝึกหัดโครงสร้างการเขียนผังงาน
บทที่ 5 การแปลง er diagram ให้เป็น table
บทที่ 5 การแปลง er diagram ให้เป็น table
ผลวิเคราะห์การจัดประชุมสัมมนา
ผลวิเคราะห์การจัดประชุมสัมมนา
รูปเล่มวิชาโครงงาน
รูปเล่มวิชาโครงงาน
เกณฑ์การประเมินรูบริคส์
เกณฑ์การประเมินรูบริคส์
บทที่3 วิธีดำเนินงาน
บทที่3 วิธีดำเนินงาน
ตัวอย่างโครงงาน
ตัวอย่างโครงงาน
ใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซี
ใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซี
บทที่ 5สรุปผล และข้อเสนอแนะ
บทที่ 5สรุปผล และข้อเสนอแนะ
ใบงาน1ประมวลผลคำ
ใบงาน1ประมวลผลคำ
รูปเล่มวิชาโครงงาน
รูปเล่มวิชาโครงงาน
Similar a แนะนำการเขียนโปรแกรมภาษาแอสเซมลีเบื้องต้น
พื้นฐานภาษาจาวา
พื้นฐานภาษาจาวา
JK133
บทที่ 4 การเขียนโปรแกรมภาษาแอสแซมบลี
บทที่ 4 การเขียนโปรแกรมภาษาแอสแซมบลี
Nattawut Kathaisong
C slide
C slide
tawee1919
งานจารทรงศักดิ์
งานจารทรงศักดิ์
ลูกแก้ว กนกวรรณ
Basic
Basic
bpatra
3 instruction design
3 instruction design
Navapon Noppakhun
โครงสร้างของโปรแกรมภาษาซี
โครงสร้างของโปรแกรมภาษาซี
ณัฐพล บัวพันธ์
รายงาน PHP - Know2pro.com
รายงาน PHP - Know2pro.com
Know Mastikate
งานนำเสนอ1
งานนำเสนอ1
Thank Chiro
Php beginner
Php beginner
Somsak Nopharat
C lu
C lu
kaittisak
งานคอม 1
งานคอม 1
Warakuma Pengsuan
Know 1 1
Know 1 1
ชญานิษฐ์ ทบวัน
พื้นฐานภาษาจาวา
พื้นฐานภาษาจาวา
Saranporn Rungrueang
พื้นฐานภาษาจาวา
พื้นฐานภาษาจาวา
Aeew Autaporn
Presentation1
Presentation1
tungdonlasan
lesson 3
lesson 3
Monberry NooNan
Computer Programming 1
Computer Programming 1
Saranyu Srisrontong
ภาษา C
ภาษา C
0872671746
3.8 การทำงานตามลำดับ
3.8 การทำงานตามลำดับ
รัสนา สิงหปรีชา
Similar a แนะนำการเขียนโปรแกรมภาษาแอสเซมลีเบื้องต้น
(20)
พื้นฐานภาษาจาวา
พื้นฐานภาษาจาวา
บทที่ 4 การเขียนโปรแกรมภาษาแอสแซมบลี
บทที่ 4 การเขียนโปรแกรมภาษาแอสแซมบลี
C slide
C slide
งานจารทรงศักดิ์
งานจารทรงศักดิ์
Basic
Basic
3 instruction design
3 instruction design
โครงสร้างของโปรแกรมภาษาซี
โครงสร้างของโปรแกรมภาษาซี
รายงาน PHP - Know2pro.com
รายงาน PHP - Know2pro.com
งานนำเสนอ1
งานนำเสนอ1
Php beginner
Php beginner
C lu
C lu
งานคอม 1
งานคอม 1
Know 1 1
Know 1 1
พื้นฐานภาษาจาวา
พื้นฐานภาษาจาวา
พื้นฐานภาษาจาวา
พื้นฐานภาษาจาวา
Presentation1
Presentation1
lesson 3
lesson 3
Computer Programming 1
Computer Programming 1
ภาษา C
ภาษา C
3.8 การทำงานตามลำดับ
3.8 การทำงานตามลำดับ
Más de Phusit Konsurin
นักศึกษากับการแสวงหาความรู้ในศตวรรษที่21
นักศึกษากับการแสวงหาความรู้ในศตวรรษที่21
Phusit Konsurin
สอนการใช้งาน Debug ใน DOS mode
สอนการใช้งาน Debug ใน DOS mode
Phusit Konsurin
สร้างแบบทดสอบออนไลน์ ด้วยโปรแกรม Hot Potatoes
สร้างแบบทดสอบออนไลน์ ด้วยโปรแกรม Hot Potatoes
Phusit Konsurin
สร้าง E book ด้วยโปรแกรม sigil
สร้าง E book ด้วยโปรแกรม sigil
Phusit Konsurin
Joomla Day1
Joomla Day1
Phusit Konsurin
Joomla Day2
Joomla Day2
Phusit Konsurin
3D button and Animation Tips in Powerpoint
3D button and Animation Tips in Powerpoint
Phusit Konsurin
Más de Phusit Konsurin
(7)
นักศึกษากับการแสวงหาความรู้ในศตวรรษที่21
นักศึกษากับการแสวงหาความรู้ในศตวรรษที่21
สอนการใช้งาน Debug ใน DOS mode
สอนการใช้งาน Debug ใน DOS mode
สร้างแบบทดสอบออนไลน์ ด้วยโปรแกรม Hot Potatoes
สร้างแบบทดสอบออนไลน์ ด้วยโปรแกรม Hot Potatoes
สร้าง E book ด้วยโปรแกรม sigil
สร้าง E book ด้วยโปรแกรม sigil
Joomla Day1
Joomla Day1
Joomla Day2
Joomla Day2
3D button and Animation Tips in Powerpoint
3D button and Animation Tips in Powerpoint
แนะนำการเขียนโปรแกรมภาษาแอสเซมลีเบื้องต้น
1.
1 Introduction to
Assembly Language โดย อ.ภูษิต ก้อนสุรินทร์ โปรแกรมที่สร้างโดยภาษาแอสเซมบลีจะถูกแปลงให้เป็นภาษาเครื่องโดยแอสเซมเบลอร์ (Assembler) ดังนั้นเราจะต้องเขียนโปรแกรมให้อยู่ในรูปแบบที่แอสเซมเบลอร์ เข้าใจ ภาษาแอสเซมบลีจะไม่เป็น Case sensitive คือไม่มีความแตกต่างระหว่างการใช้ตัวอักษรแบบ ตัวพิมพ์ใหญ่ (Uppercase)และตัวพิมพ์เล็ก(Lowercase) แต่โดยส่วน ใหญ่จะเขียนตัวคาสั่งให้อยู่ในรูปแบบของ Uppercase และค่าอื่นๆจะให้เป็น Lowercase โครงสร้างของการเขียนภาษาแอสเซมบลี ตัวอย่าง This program prints the message “Hello world” .MODEL small .STACK 100h .DATA msg1 db ‘Hello world’, 10h, 13h, ‘$’ .CODE start: mov ax, @data mov ds, ax mov ah, 9h mov dx, offset msg1 int 21h mov ax, 4c00h int 21h end start .MODEL <model_type> .STACK <stack_size> .DATA ;This is data segment <Define_variables> .CODE ;This is code segment <statements>
2.
2 Statements ในโปรแกรมจะประกอบไปด้วยคาสั่ง
(Statement) การเขียนคาสั่งจะเขียน 1 คาสั่ง ต่อ 1 บรรทัด เราเรียกทั้ง บรรทัดว่า “Instruction” ซึ่งจะถูกแอสเซมเบลอร์แปลงให้เป็นภาษาเครื่อง และอีกประเภทหนึ่งคือ “Assembler directive” ซึ่งจะ สั่งให้ แอสเซมเบลอร์ทางานพิเศษบางอย่าง เช่นให้กาหนดพื้นที่ว่างในหน่วยความจาสาหรับค่าตัวแปร หรือใช้สาหรับ การสร้างโปรแกรมย่อย(Procedure) ทั้งการเขียน “Instructions” และ “Directives” จะประกอบไปด้วย 4 ฟิลด์ดังนี้ name operation operand(s) comment ระหว่างฟิลด์จะต้องเว้นช่องว่างอย่างน้อย 1 ช่อง ตัวอย่างของ Instruction เช่น START: MOV CX,5 ;initialize counter START: เป็น name field MOV เป็น Operation CX,5 เป็น Operand ;initialize counter เป็นคาอธิบาย (Comment) ตัวอย่างของ Directive MAIN PROC MAIN เป็น name field ส่วน PROC เป็น Operation เป็นการสร้าง Procedure ชื่อ MAIN Name Field Name field ถูกใช้สาหรับเป็น Instruction labels, Procedure names, Variable names เมื่อมีการแปลงไปเป็น ภาษาเครื่อง Assembler จะแปลงชื่อเหล่านี้ลงไปยังตาแหน่งของหน่วยความจา Name สามารถจะมีจานวนตัวอักษร ได้ตั้งแต่ 1-31 ตัวอักษร ซึ่งจะประกอบไปด้วย ตัวอักษร, ตัวเลข, เครื่องหมายพิเศษต่างๆ แต่ห้ามมีการใช้ช่องว่างใน การตั้งชื่อ ตัวอย่างของ Name field ที่ถูกต้อง COUNTER @character SUM_OF_DIGITS $100 DONE? .TEST ตัวอย่างของ Name field ที่ไม่ถูกต้อง TWO WORD เพราะมีช่องว่าง 2abc เพราะเริ่มต้นด้วยตัวเลข A45.28 เพราะมีเครื่องหมายจุด (ต้องอยู่ตาแหน่งแรกเท่านั้น) YOU&ME เพราะใช้ตัวอักษร & Operation Field แต่ละ Instruction ตัวที่เป็น Operation field จะมีสัญลักษณ์ของการทางานต่างๆ เช่น MOV, ADD, SUB แทนคาสั่ง การ MOVE ,ADDITIONAL, SUBTRACTION ซึ่งจะถูกแปลให้เป็นภาษาเครื่องโดย Assembler แต่สาหรับ Directives นั้น Operation field จะอยู่ในรูปของ Pseudo-operation code (Pseudo-op) ซึ่งจะไม่มีการแปลงให้เป็น ภาษาเครื่อง เช่นคาว่า PROC ถูกใช้ในการสร้าง Procedure เท่านั้น
3.
3 Operand Field
ใน Instruction มี Operand field จะกาหนดข้อมูลที่จะถูกกระทาโดย Operation ซึ่งอาจจะประกอบไปด้วย 1 หรือ 2 หรือไม่มี Operand เลยก็ได้ ดังตัวอย่างต่อไปนี้ NOP ไม่มี operation ไม่มีการทางานใดๆ INC AX มีเพียง 1 operand คือให้เพิ่มค่า 1 เข้าไปใน AX ADD WORD1,2 มี 2 operand คือให้เพิ่มค่า 2 เข้าไปในตัวแปร WORD1 สาหรับ Instruction ที่มี 2 Operand ตัวOperand ตัวแรกจะเป็น “Destination Operand” ซึ่งอาจจะเป็น Register หรือ Variables (Memory location) ซึ่งจะใช้เก็บผลลัพธ์ (แต่ในบางทีก็ไม่ใช้เก็บผลลัพธ์) และ Operand ส่วนที่สองก็จะ เรียกว่า “Source Operand” Comment Field ใช้หรับโปรแกรมเมอร์เพื่ออธิบายสิ่งที่เกิดขึ้นในแต่ละ Instruction โดยมีเครื่องหมาย semi-colon “;” เป็นเครื่องหมาย แรกของการเขียนคาอธิบาย เพราะ Assembler จะยกเลิกการแปลงค่าใดๆ ที่อยู่หลังเครื่องหมาย ; ในการเขียน โปรแกรมที่ดีควรมี คาอธิบายประกอบด้วยเพื่อให้ผู้ที่อ่าน Source Code สามารถเข้าใจได้โดยง่าย เช่น MOV CX,0 ;move 0 to CX อาจจะใช้ข้อความที่สื่อความหมายมากขึ้นคือ MOV CX,0 ; CX counter term ,initialize by 0 หรืออาจจะเขียนคาอธิบายในรูปแบบต่อไปนี้ ; ;initialize register ; MOV AX,0 MOV BX,0 Program Data เนื่องจากโพรเซสเซอร์จะใช้งานข้อมูลในรูปของเลขฐานสอง ดังนั้น Assembler จะต้องทาการแปลงค่าข้อมูลทั้งหมด ให้อยู่ในรูปของเลขฐานสองก่อน แต่อย่างไรก็ตามเรายังคงสามารถใช้ระบบเลขฐานต่างๆ และตัวอักษรได้ตามปกติ แต่เราต้องทราบวิธีการเขียนเพื่อแยกแยะให้ Assembler ทราบว่าข้อมูลนั้นๆ เป็นตัวเลขในระบบใด
4.
4 Numbers ระบบเลขฐานสองจะเขียนโดยใช้
ตัวอักษร B, b อยู่ด้านหลังเช่น 10b ระบบเลขฐานสิบจะเขียนโดยใช้ ตัวอักษร D, d อยู่ด้านหลังเช่น 10d หรืออาจจะไม่ต้องเขียน ระบบเลขฐานสิบหกจะเขียนโดยใช้ ตัวอักษร H, h อยู่ด้านหลังเช่น 10h แต่ถ้าเป็น A-F ทั้งหมดจะต้องมี 0 อยู่ ด้านหน้าเสมอเช่น 0ABCh Number Type 11011 Decimal 11011b Binary -1234 Illegal ->เพราะมี - 1,234 Illegal ->เพราะมี , 1BD4h Hex 1BD4 Illegal -> ขาด h FFFFh Illegal ->เพราะขาด 0 นาหน้า 0FFFFh Hex Character สาหรับข้อมูลที่เป็น Character หรือ Character string จะใช้เครื่องหมาย “ ” หรือ ‘ ’ เช่น “A” ‘Hello’ โดย Assembler จะแปลงค่าให้เป็น รหัส ASCII ดังนั้นถ้าเราใช้ 41h ก็ไม่มีความแตกต่างกับ “A” ในโปรแกรม Variables บทบาทของตัวแปรในโปรแกรมภาษาแอสเซมบลี นั้นก็จะเหมือนกับโปรแกรมภาษาระดับสูง โดยตัวแปรแต่ละตัวจะ มี data type ของตัวเองและถูกกาหนดตาแหน่งในหน่วยความจาโดย โปรแกรม สาหรับในโปรแกรมภาษาแอสเซมบลี จะมีการกาหนดชนิดของข้อมูลจะเรียกว่า Pseudo-op ดังนี้ Pseudo-op ความหมาย DB Define Byte DW Define Word DD Define Double word DQ Define Quad word DT Define Tenbytes Byte Variables ในส่วนของ assembler directive นั้นจะมีการกาหนดค่าตัวแปรให้เป็น Byte โดยมีรูปแบบดังนี้ name DB initial_value ตัวอย่างเช่น ALPHA DB 4
5.
5 จะทาให้ assembler
รู้จักว่า ส่วนของหน่วยความจา ที่มีชื่อว่า ALPHA นั้นมีเป็นชนิด byte และมีค่าเริ่มต้นคือ 4 ถ้ายัง ไม่ต้องการกาหนดค่าเริ่มต้นสามารถใช้เครื่องหมาย ? แทน เช่น BYT DB ? ค่าของตัวแปร BYT นั้นจะมีค่าที่อาจเป็นไปได้คือ -128 ถึง 127 ถ้าเป็นแบบ signed หรือ 0-255 ถ้าเป็น Unsigned Word Variables ในส่วนของ assembler directive นั้นจะมีการกาหนดค่าตัวแปรให้เป็น Word โดยมีรูปแบบดังนี้ name DW initial_value ตัวอย่างเช่น WRD DW -2 ตัวแปรชื่อ WRD มีชนิดข้อมูลเป็นแบบ Word และมีค่าเริ่มต้นเป็น -2 และถ้ามีการใช้เครื่องหมาย ? แทนค่าเริ่มต้น จะ ทาให้ช่วงของข้อมูลจะขึ้นอยู่กับว่าเป็น Signed (-32768 ถึง 32767) หรือ Unsigned (0 ถึง 65535) Arrays ในภาษาแอสเซมบลีนั้น array จะเป็นโครงสร้างข้อมูลที่อยู่เรียงกันในหน่วยความจา โดยขนาดของสมาชิกแต่ละตัวจะ ขึ้นอยู่กับ data type ว่าจะเป็น DB หรือ DW ตัวอย่าง สาหรับ array ขนาด 3 ตัวโดยมีชื่อว่า B_ARRAY มีชนิดข้อมูล แบบ byte และได้กาหนดค่าเริ่มต้นคือ 10h, 20h, 30h จะกาหนดได้ดังนี้ B_ARRAY DB 10h, 20h, 30h Array ชื่อ B_ARRAY ถูกกาหนดไว้ในหน่วยความจาโดยมีค่า Offset เป็น 0200h ดังนั้นถ้าพิจารณาใน array นี้คือ การอ้างอิง Address contents B_ARRAY 200h 10h B_ARRAY + 1 201h 20h B_ARRAY + 2 202h 30h ทานองเดียวกัน ถ้ากาหนดให้ Array มีชนิดข้อมูลแบบ Word ก็สามารถกาหนดได้คือ W_ARRAY DW 1000, 40, 29887, 329 จะมีข้อมูลในหน่วยความจาที่ Offset ที่ 0300 ดังนี้ การอ้างอิง Address contents W_ARRAY 0300h 1000d W_ARRAY + 1 0301h 40d W_ARRAY + 2 0302h 2988d W_ARRAY + 3 0303h 329d High and Low Bytes and Word บางครั้งเราจาเป็นที่จะต้องมีการอ้างอิงการใช้งานจากตาแหน่งในหน่วยความจาในรูปแบบ High และ Low Bytes ใน ตัวแปรแบบ Word จะพิจารณาจากตัวอย่างต่อไปนี้ WORD1 DW 1234h 4 3 2 1
6.
6 ถ้ามีการอ้างอิงถึง low
byte ในตัวแปรนี้จะได้ข้อมูลคือ 12h สัญลักษณ์ที่ใช้อ้างอิงคือ WORD1 และถ้าอ้างอิงถึงค่าใน High byte จากตัวแปรนี้คือ 34h และสัญลักษณ์ที่ใช้อ้างอิงคือ WORD1 + 1 Character strings สาหรับ Array ที่มีการเก็บข้อมูลที่ใช้รหัส ASCII การกาหนดค่าชนิดข้อมูลและค่าเริ่มต้น สามารถกระทาได้ดังนี้ LETTERS DB ‘ABC’ ซึ่งมีค่าเท่ากับการกาหนดดังนี้ LETTERS DB 41h, 42h, 43h1 ส่วนค่าที่เป็นข้อความ (String) ก็สามารถกาหนดค่าเริ่มต้นได้ดังนี้ MSG DB ‘HELLO’, 0Ah, 0Dh, ‘$’ หรือ MSG DB 48h, 45h, 4Ch, 4Fh, 0Ah, 0Dh, 24h Named Constants ค่าคงที่มีความจาเป็นในการเขียนโปรแกรม และในภาษาแอสเซมบลี ก็มีการใช้ค่าคงที่ในการทางาน สาหรับการ กาหนดค่าจะใช้คาสั่ง EQU (Equates) เพื่อทาการกาหนดค่าคงที่ให้ตัวแปรที่จะนาไปใช้ในโปรแกรม โดยมีรูปแบบคือ name EQU2 constant ตัวอย่างเช่น LF EQU 0Ah จะมีการกาหนดค่า 0Ah ซึ่งเป็นรหัส ASCII ที่ใช้ในการเลื่อนหน้ากระดาษ (line feed) ให้แก่ตัวแปร LF แทนที่เราจะ เขียน 0Ah ในส่วนต่างๆของโปรแกรม และเมื่อมีการเปลี่ยนแปลงแก้ไขค่าข้อมูล ก็จะเสียเวลาในการที่ต้องมาเปลี่ยน ทุกๆที่ที่ใช้งาน ใน constant เราจะเปลี่ยนค่าเพียงที่เดียวเท่านั้น สาหรับคาสั่งข้างต้น ตัว Assembler จะมองการทางาน เป็นดังนี้ MOV DL,0Ah MOV LF,DL ขั้นตอนการแปลโปรแกรมภาษา Assembly 1. สร้าง Source Code โดยใช้โปรแกรม text Editor และให้บันทึกเป็นนามสกุล .asm 2. แปล Source ให้เป็นแฟ้มเป้าหมาย (Object file) ที่มีนามสกุลเป็น .OBJ โดยใช้โปรแกรม Assembler เช่น MASM (Microsoft Macro Assembler) หรือ TASM (Turbo Assembler) กรณีนี้เราจะใช้ MASM ซึ่งการ แปลทาได้โดยพิมพ์ชื่อโปรแกรม MASM ตามด้วยแฟ้มที่เก็บ source code ของโปรแกรมภาษา Assembly เช่น source program เก็บในไฟล์ชื่อ test.asm ก็สั่งทาการแปลโดยพิมพ์ A:>MASM test ถ้ามีข้อผิดพลาด Assembler จะแจ้งข้อผิดพลาดให้ ให้ทาการแก้ไข Source code แล้วทาการแปลใหม่ ถ้าเราแปล โปรแกรมภาษา Assembly สาเร็จ จะได้แฟ้มเป้าหมายที่มีนามสกุลเป็น .OBJ จากตัวอย่างคือ test.obj 1 41h, 42h, 43h เป็นรหัส ASCII ของตัวอักษร A, B, C ตามลาดับ 2 EQU name จะไม่มีการกาหนดตาแหน่งในหน่วยความจาไว้เหมือนกับตัวแปร
7.
7 3. ใช้โปรแกรม
LINK เพื่อทาการเชื่อมโยงแฟ้มเป้าหมาย (object file) เข้ากับ function ต่างๆ ใน library ซึ่ง ผลลัพธ์จะได้ไฟล์โปรแกรมภาษาเครื่องที่สามารถทางาน (execute) ได้ มีนามสกุลเป็น .EXE ซึ่งการ เชื่อมโยงโดยใช้โปรแกรม LINK ทาได้โดยการพิมพ์ชื่อโปรแกรม LINK ตามด้วยชื่อแฟ้มเป้าหมาย (.OBJ) A:>LINK test ซึ่งหลังจากขั้นตอนของการเชื่อมโยงเราจะได้แฟ้มโปรแกรมที่มีนามสกุลเป็น .EXE (Executable file) ที่สามารถเรียกใช้ได้จาก DOS prompt คาสั่งพื้นฐาน ภาษาแอสเซมบลีที่ทางานโดยอาศัยพื้นฐานของโพรเซสเซอร์ 8086นั้น จะประกอบด้วยคาสั่งเป็นร้อยคาสั่งที่ ต้องใช้งาน แต่คาสั่งที่เราต้องรู้จักกันในเบื้องต้น ซึ่งคาสั่งเหล่านี้จะทางานในด้านการโอนย้ายข้อมูล การ คานวณทางคณิตศาสตร์ โดยจะมีการใช้งาน Operand ทั้งในรูปแบบของ bytes และ word MOV and XCHG MOV(MOVE) เป็นคาสั่งที่ใช้ในการโอนถ่ายข้อมูลจาก register ไปยัง register, จาก register ไปยังหน่วยความจา หรือจากตัวเลขหรือตัวอักษรไปยัง register หรือหน่วยความจา โดยมีรูปแบบดังนี้ MOV destination, source ตัวอย่างเช่น MOV AX,BX MOV AX,WORD1 MOV AH,2 MOV AH,'A' จากตัวอย่าง MOV AX,WORD1 จะอ่านว่า "ย้ายค่าจากตัวแปร WORD1 ไปยัง register AX" ผลที่เกิดขึ้นคือจะมีการ นาเอาค่า content ที่อยู่ภายในตัวแปร WORD1 ไปใส่ไว้แทนที่ content ใน register AX ทาให้ content ของ AX เปลี่ยนแปลง ส่วนค่าของตัวแปร WORD1 จะคงเดิม รูปแสดงค่า content ของการ MOV XCHG (Exchange) เป็นคาสั่งที่เตรียมไว้สาหรับการแลกเปลี่ยน contents ระหว่าง register ไปยัง register หรือจาก register ไปยัง หน่วยความจา โดยมีรูปแบบดังนี้ XCHG destination,source 0006 0008 AX WORD1 ก่อนการ MOV 0008 0008 AX WORD1 หลังการ MOV
8.
8 ตัวอย่างเช่น XCHG
AH,BL XCHG AX,WORD1 รูปแสดงผลของการใช้คาสั่ง XCHG ข้อห้ามของการใช้คาสั่ง MOV Destination Operand Source Operand General register Segment register Variables Constant General register Segment register Variables Constant ข้อห้ามของการใช้คาสั่ง XCHG Destination Operand Source Operand General register Variables General register Variables ตัวอย่างของการใช้คาสั่งที่ไม่ถูกต้อง MOV WORD1,WORD2 ;WORD1 และ WORD2 เป็นตัวแปรทั้งคู่ ควรจะแก้ไขให้เป็น MOV AX, WORD1 MOV WORD2, AX 0006 0008 AX WORD1 ก่อนการ XCHG 0008 0006 AX WORD1 หลังการ XCHG
9.
9 ADD, SUB,
INC and DEC คาสั่งในการบวก(ADD : Addition) และลบ(SUB : Subtraction) จะเป็นการนาเอา contents ระหว่าง register 2 ตัว หรือระหว่าง register กับ ตัวแปร หรือระหว่างตัวเลขกับ register หรือ กับตัวแปร โดยมีรูปแบบคือ ADD destination, source SUB destination, source ตัวอย่างเช่น ADD WORD1,AX จะอ่านว่า "ให้บวกค่า content ใน register AX เข้ากับค่า content ในตัวแปร WORD1 แล้วนาเอาผลลัพธ์ไปเก็บไว้ที่ตัว แปร WORD1" SUB AX,DX จะอ่านว่า "ให้เอา register DX ไปลบออกจาก register AX แล้วนาเอาผลลัพธ์ไปเก็บไว้ที่ register AX" รูปแสดงผลของการใช้คาสั่ง ADD WORD1, AX รูปแสดงผลของการใช้คาสั่ง SUB AX,DX ข้อห้ามของการใช้คาสั่ง ADD, SUB Destination Operand Source Operand General register Variables General register Variables Constant 0006 0008 AX WORD1 ก่อนการ ADD 0008 0006 AX WORD1 01BCh 0523h 01BCh 06DFh หลังการ ADD 0006 0008 AX DX ก่อนการ SUB 0008 0006 AX DX 0000h 0001h FFFFh 0001h หลังการ SUB
10.
10 Shift Instructions
คาสั่ง shift เป็นคาสั่งที่ทาให้มีการเลื่อนข้อมูลใน bit โดยจะมีการเลื่อนไป 1 bit หรือมากกว่าก็ได้ คาสั่งใน การ shift จะทาให้ ตัวที่ถูกเลื่อนออกไปสูญหายไป ซึ่งไม่เหมือนกับคาสั่ง rotate ซึ่งเมื่อค่า bit ถูกเลื่อนออกไปก็จะมี การนากลับเข้ามาในกลุ่มของ bit อีก โดยจะมีลักษณะคาสั่งคือ Opcode destination,1 หรือ Opcode destination,CL Left shift Instructions คาสั่งคือ SHL (Shift Left) คาสั่งนี้จะทาให้เกิดการเลื่อนค่า bit ใน destination ไปยังด้านซ้ายโดยมีรูปแบบ คาสั่งคือ SHL destination,1 ค่า 0 จะถูกใส่เข้ามาทาง bit ขวาสุดของ destination ทาให้ค่าใน msb ถูกเลื่อนออกไปเก็บที่ CFซCarry Flag(ตามรูปที่ 7.2 ) แต่ถ้าต้องการให้มีการเลื่อนออกไปจานวน N bits ก็จะมีรูปแบบคือ SHL destination,CL เมื่อค่า CL ใช้เก็บค่าจานวน bit ที่ต้องการให้มีการเลื่อน คาสั่ง SHL จะกระทบ กับ Flags SF, PF, ZF จะขึ้นอยู่กับผลลัพธ์ AF ไม่มีการกาหนด CF จะขึ้นอยู่กับค่าที่ถูกเลื่อนออกมา OF จะถูกเซต (1) ถ้าผลลัพธ์ทาให้เกิดการเปลี่ยนแปลงเครื่องหมาย แสดงภาพของคาสั่ง SHL,SAL (Word, Byte) ตัวอย่าง สมมุติให้ DH เก็บข้อมูล 8Ah และมีค่า CL คือ 3 ค่าของ DH และ CF จะเป็นอย่างไรเมื่อเราใช้คาสั่ง SHL DH,CL DH จะเก็บค่า 8Ah = 1000 1010 b gเมื่อมีการเลื่อน 3 ครั้งดังนี้ ครั้งที่ 1 0 00010100 CF 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 CF 0 7 6 5 4 3 2 1 0
11.
11 ครั้งที่ 2
0 00101000 ครั้งที่ 3 0 0101 0000 ซึ่ง 0101 0000 มีค่าเท่ากับ 50h จะถูกเก็บอยู่ใน DH Multiplication by Left Shift ถ้าเราพิจารณา ตัวเลขในระบบฐานสิบคือ 543 ถ้าแต่หลัก มีการเลื่อนไปทางด้านซ้าย 1 ตาแหน่ง โดยมีการใช้ ค่าตัวเลข 0 เข้ามาทางด้านขวา จะได้ 5430 ซึ่งก็เหมือนกับการเอาค่า 543 คูณด้วยเลข 10 นั่นเอง ในทานองเดียวกัน การทา left shift กับตัวเลขในระบบเลขฐานสอง ก็เหมือนกับการเอาเลขฐานสองนั้นมาคูณด้วยเลข 2 ตัวอย่างเช่น ให้ AL มีค่าเท่ากับ 5d = 0000 0101b ถ้ามีการ Shift left ไป 1 ครั้ง ผลที่ได้คือ 00001010 ซึ่งมีค่าเท่ากับ 10d ถ้าเราเอาค่า เดิมมา shift left อีกก็ย่อมได้ผลลัพธ์คือ 20d อย่างแน่นอน SAL Instructions ดังที่กล่าวมาว่าคาสั่ง SHLสามารถใช้ในการคูณได้ แต่อย่างไรก็ตามถ้าต้องการเน้น ให้เป็นการคาสั่งในเชิง คณิตศาสตร์โดยตรงก็สามารถใช้คาสั่ง SAL (Shift Arithmetic Left) ซึ่งจะถูกนามาใช้บ่อยๆ เมื่อมีการคูณแบบนี้ เกิดขึ้น ซึ่งอย่างไรก็ตามคาสั่ง SHL และ SAL ก็ จะถูกสร้างให้เป็น machine code ตัวเดียวกัน สาหรับตัวเลขที่ติดลบ สามารถที่จะนามาใช้ในการคูณได้โดยจะมีการยกกาลังตามการ left ship ตัวอย่างเช่น AX = FFFFh(-1d) ถ้ามีการ shift ไป 3 ครั้งจะได้ผลลัพธ์คือ FFF8h (-8d) Right Shift Instructions คาสั่ง SHR(Shift Right) จะทาให้เกิดการเลื่อนbit ไปทางด้านขวาของ destination โดยมีรูปแบบคือ SHR destination,1 จะมีการนาเอาค่า 0 ใส่เข้ามาทาง msb ทาให้เลื่อน bit จานวน 1 bit ออกไปทางด้านขวา และเลื่อนค่าของ bit ขวาสุดออกไปไว้ที่ CF (รูปที่ 7.3) หรือถ้ามีการเลื่อนมากกว่า 1 bit ก็จะใช้ คาสั่งคล้ายๆกับคาสั่ง SHL คือ SHR destination,CL ตัวอย่าง สมมุติให้ DH มีค่าเท่ากับ 8Ah และค่า CL = 2 ถ้าใช้คาสั่ง SHR DH,CL จะทาให้ผลลัพธ์ที่ได้ใน DH และค่า ของ CF คืออะไร ค่าใน DH = 8Ah = 1000 1010 b ครั้งที่ 1 0100 0101 0 ครั้งที่ 2 0010 0010 1 ดังนั้น DH = 0010 0010 = 22h และค่าใน CF คือ 1 แสดงคาสั่ง SHR (Word, Byte) CF 0 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CF 0 7 6 5 4 3 2 1 0
12.
12 The SAR
instruction คาสั่ง SAR (Shift Arithmetic Right) ก็จะทางานคล้ายๆกับคาสั่ง SHR แต่จะมีความแตกต่าง คือค่าใน msb ยังคงตัวเดิมไม่มีการเปลี่ยนแปลง (รูปที่ 7.4) โดยมีรูปแบบคือ SAR destination,1 และ SAR destination,CL ผลต่อ Flags ก็เหมือนกับคาสั่ง SHL ผังแสดงคาสั่ง SAR (Word, Byte) การหารโดยการใช้ Right Shift เป็นเพราะว่า left shift ทาให้ค่าใน destination มีค่าเพิ่มจากเดิมเป็น 2 เท่า ก็พอจะเป็นการเดาเหตุผลง่ายๆได้ ว่า right shift ก็ย่อมทาให้ค่าใน destination ลดลง ครึ่งหนึ่งได้ เหมือนกับการหารด้วย 2 นั่นเอง แต่จะถูกต้องเฉพาะ ค่าที่เป็นเลขจานวนคู่ แต่ถ้าสาหรับเลขจานวนคี่แล้วคาสั่งในการทาแบบ right shift จะมีการปัดค่าทิ้ง ตัวอย่างเช่น BL = 5= 0000 0101b เมื่อใช้คาสั่ง SAL BL,1 จะได้ 0000 0010 = 2 Signed and unsigned division ในการหารโดย right shift เราจาเป็นที่จะต้องแสดงให้เห็นความแตกต่างระหว่างตัวเลขแบบ Signed และ unsigned ใน กรณีที่มีการทางานกับ unsigned ก็จะเลือกใช้คาสั่ง SHR แต่ถ้าเป็น signed จะเลือกใช้ SAR เป็นเพราะรูปแบบของ SAR ยังคงรักษา msb ไว้ซึ่งเป็น bit สาหรับเก็บเครื่องหมายอยู่แล้วทาให้เครื่องหมายไม่เปลี่ยนแปลง ตัวอย่าง ให้ใช้ right shift หารตัวเลขที่เป็น unsigned ระหว่าง 65143 ถูกหารโดย 4 แล้วเก็บผลลัพธ์ไว้ที่ AX ในการหารด้วย 4 นั้นจะต้องเป็นการทา right shift 2 ครั้งเพราะการทา right shift แต่ละครั้งก็คือการด้วย 2 นั่นเอง และ ก็เป็นการหารตัวเลขแบบ unsigned จึงเลือกใช้คาสั่ง SHR จะได้ MOV AX,65143 MOV CL,2 SHR AX,CL ตัวอย่าง ถ้า AL = -15 ถ้ามีการใช้คาสั่ง SAR AL,1 จะได้ผลลัพธ์ที่เก็บใน AL คืออะไร คาสั่ง SAR AL,1 ทาให้เกิดการหารค่า -15 ด้วยเลข 2 ได้ผลลัพธ์เป็น - 7.5 แต่จะมีการปัดค่าทศนิยม จะได้ -8 -15 => 1111 0001 b หลังการ SAR => 1111 1000 b = -8 CF 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CF 7 6 5 4 3 2 1 0
13.
13 Rotate Instructions
คาสั่ง ROL (Rotate Left) จะทาให้มีการเลื่อน bit ไปทั้งด้านซ้าย และค่าใน msb จะถูกเลื่อนออกไปเก็บที่ bit ด้านขวา สุด และ CF ยังคงเก็บค่าที่มีการเลื่อนออกจาก msb ดังนั้นลักษณะของการเลื่อนจะเป็นแบบวงกลม จากค่าใน lsb กับ msb (รูปที่ 7.5) โดยมีรูปแบบคาสั่งคือ ROL destination,1 และ ROL destination,CL คาสั่ง ROR (Rotate Right) จะทางานคล้ายๆกับคาสั่ง ROL แตกต่างกันเพียงการเลื่อนของ bit จะดาเนินไปทางด้านขวา bit ทางด้านขวาสุดจะถูกเลื่อนออกไปที่ msb และ CF (รูปที่ 7.6) โดยมีรูปแบบคือ ROR destination,1 และ ROR destination,CL สาหรับคาสั่ง ROL และ ROR ค่าใน CF จะขึ้นอยู่กับ ค่าของ bit ที่ถูกเลื่อนออกไป ตัวอย่างต่อไปนี้จะแสดงให้เห็น ว่า เราจะสามารถตรวจสอบ bit ในชุดข้อมูลขนาด byte หรือ word โดยไม่มีการเปลี่ยนแปลงค่าข้อมูลเลย ตัวอย่าง จะใช้คาสั่ง ROL เพื่อทาการนับจานวนของ bit ที่มีค่าเป็น 1 ใน BX โดยไม่มีการเปลี่ยนแปลงค่า BX เลย และให้นามาเก็บไว้ที่ AX XOR AX,AX ;AX count bit MOV CX,16 ;assign loop counter TOP: ROL BX,1 ;CF = bit that rotate out JNC NEXT INC AX ;increment total if 1 bit was found NEXT: LOOP TOP ;loop until done จากตัวอย่าง เราจะใช้คาสั่ง JNC(Jump if Not carry) เพราะจะให้มีการกระโดดไปยังส่วนของ NEXT นั่นคือให้มีการ วนรอบใหม่ ถ้าค่าใน CF ยังคงเป็น 0 อยู่ และถ้าค่าใน CF = 1 ก็จะมีการเพิ่มค่าการนับให้แก่ AX CF 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CF 7 6 5 4 3 2 1 0 CF 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CF 7 6 5 4 3 2 1 0
14.
14 Rotate Carry
Left คาสั่ง RCL (Rotate through Carry Left) จะเป็นการเลื่อน bit ของ destination ไปด้านซ้าย โดยค่า bit ใน msb จะถูกเลื่อนออกอยู่ที่ CF และค่าที่อยู่ใน CF (ซึ่งเป็นค่าก่อนที่จะเกิดการเลื่อน) จะถูกเลื่อนออกไปเข้าที่ bit ด้านขวาสุด ของชุดข้อมูล หรืออาจจะกล่าวได้ว่า คาสั่ง RCL ทางานคล้ายกับคาสั่ง ROL แต่มีความแตกต่างคือ CF ถูกนาเข้ามา เป็นส่วนหนึ่งของวงรอบการเลื่อนครั้งนี้ (รูปที่ 7.7) โดยมีรูปแบบคาสั่งคือ RCL destination,1 และ RCL destination,CL Rotate Carry Right คาสั่ง RCR (Rotate through Carry Right) ทางานคล้ายกับคาสั่ง RCL ยกเว้นว่า bit ที่มีการเลื่อนจะถูกเลื่อน ไปทางด้านขวา(รูปที่ 7.8) โดยมีรูปแบบคือ RCR destination,1 และ RCR destination, CL ตัวอย่าง ให้ DH = 8Ah , CF = 1 และ CL = 3 ถ้าใช้คาสั่ง RCR DH,CL หลังการทางานของคาสั่งนี้จะทาให้ค่า DH และ CL เป็นอย่างไร CF DH เริ่มต้น 1 1000 1010 ครั้งที่ 1 0 1100 0101 ครั้งที่ 2 1 0110 0010 ครั้งที่ 3 0 1011 0001 ดังนั้น DH = 1011 0001 = B1h และ CF = 1 JMP Instruction คาสั่ง JMP(Jump) จะสั่งให้ CPU กระโดดไปทาคาสั่งตามที่กาหนดไว้ โดยตาแหน่งที่จะกระโดดไปนั้นจะถูกกาหนด ด้วยป้ายชื่อ(label ) ซึ่งจะถูกแปลโดยแอสเซมเบอร์ ให้กลายเป็นที่อยู่(Address) คาสั่ง JMP จะเป็นการกระโดดไปทา คาสั่งอื่นแบบไม่มีเงื่อนไข โดยมีรูปแบบดังนี้ JMP destination ตาแหน่งที่ destination อยู่นั้นมักจะอยู่ในเซกเมนต์เดียวกันกับคาสั่ง JMP แต่เราสามารถสั่งให้มีการกระโดดไปทางาน ในตาแหน่งต่างได้โดยใช้ คาว่า NEAR ,FAR ,SHORT ประกอบกับคาสั่ง คาสั่งการกระโดดแบบไม่มีเงื่อนไขนี้จะมี 2 รูปแบบคือ แบบทางตรง(Direct jump) และแบบทางอ้อม(Indirect jump) แบบทางตรง จะแบ่งออกเป็น 3 แบบคือ 1.1 SHORT การกระโดดแบบสั้นนี้จะใช้จานวนไบต์จานวน 1 ไบต์มาเป็นระยะที่จะนาเอามาบวกเข้า กับค่าใน IP ซึ่งอยู่ในช่วงค่าตัวเลขตั้งแต่ -128 ถึง +127 ก็หมายความว่า จะกระโดดไปข้างหน้าไม่ เกิน 127 ไบต์ และกระโดดไปด้านหลังได้ไม่เกิน 128 ไบต์ CF 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CF 7 6 5 4 3 2 1 0
15.
15 1.2 NEAR
การกระโดดแบบนี้จะแตกต่างจาก SHORT ตรงที่จะมีการใช้จานวนไบต์ 2 ไบต์มาบวก เขากับ IP ดังนั้นจะทาให้สามารถกระโดไปได้ในช่วงขนาด 32 KB(Kilobyte) ก็หมายความว่า สามารถกระโดดไปยังตาแหน่งใดๆก็ได้ที่อยู่ภายใน Segment เดียวกัน เพราะใน 1 Segment จะมี ขนาด 64 KB 1.3 FAR จะใช้ในการกระโดดไปยังตาแหน่งใน Segment ใดๆ ก็ได้ เพราะการกระโดดแบบนี้มีการใช้ จานวนไบต์ ถึง 4 ไบต์ โดยแบ่งออกเป็น 2 ไบต์สาหรับค่า Offset และอีก 2 ไบต์สาหรับค่า Segment เพื่อนาไปใส่ใน IP และ CS ตามลาดับ เราสามารถอ้างอิงไปที่ตาแหน่งใดๆใน หน่วยความจา 1 MB ได้ทันที คาสั่ง JMP สามารถใช้ร่วมกับคาสั่งที่มีการกระโดดแบบมีเงื่อนไขได้ ดังตัวอย่างต่อไปนี้จะสมมุติให้เราต้องการ เรียกใช้คาสั่งใน Loopต่อไปนี้ TOP : ;body of the loop DEC CX ; decrement counter JNZ TOP ; jump to top ,if a result of CX is not 0 MOV AX,BX และใน loop นี้บรรจุเอาคาสั่งไว้หลายคาสั่งดังนั้นทาให้ label TOP อยู่นอกขอบเขต สาหรับคาสั่ง JNZ (ขนาดมี มากกว่า 126 ไบต์ ) ซึ่งเราจะแก้ไขโดยใช้คาสั่ง JMP เข้มาช่วยได้ดังนี้ TOP : ; body of the loop DEC CX JNZ BOTTOM JMP EXIT BOTTOM : JMP TOP EXIT : MOV AX,BX การรับและแสดงข้อมูลโดยใช้ DOS Interrupt ชุดคาสั่งสาหรับ Input และ Output จะถูกเก็บไว้ใน ROM BIOS (Basic Input Output System) และเก็บไว้ในดิสก์ นั่น คือโปรแกรมระบบปฏิบัติการ (Operation System) ซึ่งเป็นโปรแกรมที่มีหน้าที่ควบคุมการทางานของระบบ คอมพิวเตอร์ หรือเป็นตัวกลางระหว่าง ROM BIOS กับ Applications ในการรับและแสดงข้อมูล สามารถเรียกใช้ ชุดคาสั่งที่อยู่ใน ROM BIOS มาใช้ได้ โดยอยู่ในลักษณะการขอใช้ Interrupt โดยจะระบุหมายเลขของ ฟังก์ชัน และ สาหรับรีจิสเตอร์ที่ถูกนามาใช้รับค่าฟังก์ชันคือ AH ร่วมกับ Interrupt หมายเลข 21 Memory Input Devices. Output Devices
16.
16 การอ่านตัวอักษรจากแป้นพิมพ์ ใช้ฟังก์ชันหมายเลข
10 ร่วมกัน Interrupt หมายเลข 21 เช่น MOV AH,10h INT 21h การแสดงตัวอักษรออกทางจอภาพ ใช้ฟังก์ชันหมายเลข 02 ร่วมกัน Interrupt หมายเลข 21 เช่น MOV AH,02h INT 21h การแสดงข้อความออกทางจอภาพ ใช้ฟังก์ชันหมายเลข 09 ร่วมกัน Interrupt หมายเลข 21 เช่น MOV AH,09h INT 21h การหยุดโปรแกรมและกลับสู่ DOS ใช้ฟังก์ชันหมายเลข 4C ร่วมกัน Interrupt หมายเลข 21 เช่น MOV AH,4Ch INT 21h หรือเรียกใช้ INT 20 เพียงอย่างเดียว ตัวอย่างบริการต่างๆ ของ DOS ที่สาคัญ หมายเลข หน้าที่ พารามิเตอร์ 01h รับค่าจากแป้นพิมพ์ Input : AH = 01h Output: AL = รหัส ASCII ของปุ่มที่กด 02h แสดงตัวอักษร Input : AH = 02h DL = รหัส ASCII ของอักษรที่จะแสดง 05h พิมพ์ตัวอักษรทางเครื่องพิมพ์ Input: AH = 05h DL= รหัส ASCII ของอักษรที่จะพิมพ์ 07h อ่านตัวอักษรจากแป้นพิมพ์ แต่ไม่แสดงผล และไม่ตรวจสอบการกด Ctrl-Break Input: AH = 07h Output: AL = รหัส ASCII ของอักษรที่อ่านได้ 08h อ่านตัวอักษรจากแป้นพิมพ์ แต่ไม่แสดงผล และมีการตรวจสอบการกด Ctrl-Break Input: AH = 08h Output: AL = รหัส ASCII ของอักษรที่อ่านได้ 09h พิมพ์ข้อความ(string) Input: AH = 09h DS:DX = ตาแหน่งข้อความที่ต้องการพิมพ์ และข้อความต้องปิดท้ายด้วย $ 0Ah อ่านข้อความ (string) Input: AH = 0Ah
17.
17 DS:DX =
ตาแหน่งของ buffer ที่เก็บข้อมูล ที่อ่านเข้ามา 4Ch จบโปรแกรม Input: AH = 4Ch AL = รหัสที่จะส่งคืนสู่ระบบ
Descargar ahora