Introduction to Computer organization & Assembly Language

Download Report

Transcript Introduction to Computer organization & Assembly Language

Introduction to
Computer organization
& Assembly Language
คอมพิวเตอร์
Hardware
Software
ความสั มพันธ์ ของ Hardware และ Software
USER
ซอฟต์แวร์ประยุกต์ ซอฟต์แวร์ประยุกต์
System Library System Library
ซอฟต์แวร์ระบบ
เครื่ องคอมพิวเตอร์
Computer Components
Secondary
Memory
Main
Memory
HD
CPU
Input Devices
Output Devices
การทางานของเครื่องคอมพิวเตอร์




ชุดคำสัง่ และข้อมูลจะถูกเก็บอยูใ่ นหน่วยควำมจำ
CPU (microprocessor)ดึงข้อมูลและชุดคำสัง่ มำจำก
• หน่วยควำมจำ
• อุปกรณ์อินพุต (Keyboard , Mouse , etc.)
CPU ประมวลผลข้อมูล
CPU นำข้อมูลผลลัพธ์ที่ถูกประมวลผลแล้วไปยัง
• หน่วยควำมจำ
• อุปกรณ์เอำท์พตุ (Monitor , Printer , etc.)
โปรแกรมคอมพิวเตอร์



เรำไม่สำมำรถทำงำนต่ำงๆได้ โดยอำศัยเพียงแต่เครื่ องคอมพิวเตอร์ อย่ำงเดียว
เครื่ องคอมพิวเตอร์ สำมำรถทำงำนได้รวดเร็ ว แต่ไม่สำมำรถที่จะตัดสิ นใจ
หรื อแก้ปัญหำใดๆได้ดว้ ยลำพัง
มนุษย์จะต้องเป็ นผูก้ ำหนดและสั่งกำรคอมพิวเตอร์ ให้ทำงำนให้ได้อย่ำงที่
มนุษย์ตอ้ งกำร
•
•
โปรแกรมคอมพิวเตอร์ หมำยถึง ชุดลำดับของคำสัง่ ที่กำหนดให้คอมพิวเตอร์
ทำกำรประมวลผลข้อมูลเพื่อให้แก้ปัญหำ และทำงำนได้อย่ำงที่ตอ้ งกำร
Programming = Designing and writing a computer program.
ชนิดของภาษาในการเขียนโปรแกรม

There are 3 kind of programming
languages
• Machine language (0’s and 1’s)
• Assembly language (mov, and, or, etc…)
• High-level language (nearly like human word)

Computer itself understands only Machine
language.
The translation Process
Source Program
Compiler
/Interpreter
Executable
Program
Language translator
Interpreter
/ Compiler
Program hello;
Begin
writeln(“Hello world!”);
End.
High-level language
……
main:
pushl
movl
subl
andl
movl
subl
subl
pushl
……..
Assembler
%ebp
%esp, %ebp
$8, %esp
$-16, %esp
$0, %eax
%eax, %esp
$8, %esp
$.LC0
Assembly language
Hello World!
_
….
00011000110001110
00110001110101111
00011111111110001
11011100001011011
……
Machine
Machine language
Compiler


Read all program at a time.
Translate into executable file (machine
language)
library
….
writeln(‘a’);
writeln(‘b’);
writeln(‘c’);
….
Compiler
Source
a
b
c
Linker
object
file
….
0100100
0100101
0100101
.....
Exe file
Interpreter

Read high-level language , translate , and then
execute one command at a time.
….
writeln(‘a’);
writeln(‘b’);
writeln(‘c’);
….
Source
Interpreter
0100100
0100101
0100110
a
b
c
Assembler


…
mov
add
sub
push
…
Turns assembly symbols into machine
instructions
Process this step in microprocessor
A, B
B,A
A, B
A
Assembler
….
0100100
0100101
0100101
.....
a
b
c
ข้ อดีและข้ อเสี ยของภาษาแอสเซมบลี

ข้ อดี

ข้ อเสี ย
• สำมำรถเขียนโปรแกรมให้มีขนำดเล็กที่สุด
• โปรแกรมที่ได้สำมำรถทำงำนด้วยควำมเร็วสูง
• สำมำรถเขียนโปรแกรมจัดกำรกับฮำร์ดแวร์ได้โดยตรง
• เขียนโปรแกรมได้ยำก
• แก้ไขโปรแกรมลำบำก
• ไม่มีโครงสร้ำงข้อมูลระดับสูง เช่น Array
• ไม่สำมำรถนำโปรแกรมที่สร้ำงขึ้นไปใช้กบั เครื่ องต่ำง CPU ได้
ขั้นตอนในการเขียนโปรแกรม



วิเคราะห์ ปัญหา (Analysis)
•
•
•
ระบุปัญหำที่ตอ้ งกำรจะแก้ไข
แบ่งปัญหำนั้นออกเป็ นปัญหำย่อยๆ
ค้นหำแนวคิดและวิธีกำรที่จะแก้ปัญหำนั้นๆ
พัฒนาโปรแกรม (Implementation)
•
•
เขียนโปรแกรมด้วยภำษำคอมพิวเตอร์ โดยอำศัยแนวคิดกำรแก้ปัญหำที่คิดไว้ก่อนหน้ำ
Compile โปรแกรมที่เขียนขึ้นให้เป็ นภำษำที่เครื่ องอ่ำนได้
ตรวจสอบและแก้ ไขจุดผิดพลาด (Testing & Debugging)
•
•
•
ทดลองรันโปรแกรมและตรวจสอบกำรทำงำน
หำกโปรแกรมทำงำนไม่ถูกต้อง หำจุดผิดให้พบ
แก้ไขจุดผิดพลำดและทดลองใหม่ จนกว่ำโปรแกรมจะทำงำนได้ถูกต้อง
พัฒนาการของ Microprocessor








Intel
4004
8080
8086,8088
80286
i386
i486
Pentium
Zilog
Motorolla
Z80
Z8000
Z80000
Z80180
68040
6800
68000
6802
68030
สถาปัตยกรรมคอมพิวเตอร์ เบื้องต้ น
โครงสร้ำงของระบบคอมพิวเตอร์
Secondary
Memory
CPU
HD
Memory
Output Devices
Input Devices
โครงสร้ำงของระบบคอมพิวเตอร์
Memory Unit
Input Unit
Central Processing
Unit
Register
Control Unit
ALU
Output Unit
กำรทำงำนของ CPU



ขั้นตอนกำรทำงำนของ CPU
•
•
•
อ่ำนคำสัง่ (Fetch)
ตีควำม (Decode)
ประมวลผล (Excute)
Fetch
Excute
Decode
CPU จะทำงำนตำมชุดคำสัง่ ที่อ่านขึน้ มาจากหน่ วยความจาหลัก
เท่ านั้น เรี ยก Stored Program Architecture หรื อ Von Neumann
Architecture
คำสัง่ ของ CPU ประกอบด้วย Opcode และ Operand
• Opcode : ระบุประเภทของกำรประมวลผล
• Operand : ระบุขอ้ มูลที่นำมำประมวลผล
หน่วยควำมจำ






บิต : หน่วยที่เล็กที่สุดในกำรเก็บข้อมูล
ไบต์ : 8 บิต เป็ นหน่วยที่ใช้ในกำรอ้ำงถึงข้อมูลในหน่วยควำมจำ
•
ทุกหน่วยควำมจำย่อยจะมีหมำยเลขเฉพำะตัว แอดเดรส [Address]
เวิร์ด : 2 ไบต์ หรื อ 16 บิต
ดับเบิ้ลเวิร์ด : 4 ไบต์ หรื อ 32 บิต
นิมเบิ้ล : 4 บิต หรื อ 1/2 ไบต์
กำรอ้ำงถึงข้อมูลในหน่วยควำมจำ
•
หน่วยประมวลผลจะต้องสำมำรถระบุ แอดเดรสของข้อมูลที่ตอ้ งกำรใช้งำนได้
กำรเชื่อมต่อภำยในระบบคอมพิวเตอร์
บัสระบบ
ส่ วนเชื่อมต่ อ
หน่ วยความจํา
ส่ วนเชื่อมต่ อ
อุปกรณ์ อืน่
ซีพียู
หน่ วยรับส่ง
ข้อมูล
หน่ วยประมวลผล
หน่ วยความจํา
บัสระบบ
บัส
บัส
บัส
ข้อมูล ควบคุม ที่อยู่
ตัวควบคุม DMA
บัสและกำรเชื่อมต่อ
• อุปกรณ์ต่ำงๆจะเชื่อมต่อกันโดยผ่ำนทำงกลุ่มของสำยสัญญำณที่เรี ยกว่ำ บัส
CPU
Memory
Data bus
Address bus
Control bus
I/O
• เรำสำมำรถแบ่งกลุ่มของบัสออกเป็ น 3 กลุ่ม
- บัสข้อมูล
- บัสตำแหน่ง หรื อ แอดเดรสบัส
- บัสควบคุม
I/O
I/O
สถำปัตยกรรมของระบบ
ไมโครโปรเซสเซอร์ตระกูล 80x86
•
•
•
•
•
•
•
4040
8080
8086
8088
80186
80286
•
•
•
80386SX
80486
Pentium
80386
4 บิต
8 บิต
16 บิต อ้ำงหน่วยควำมจำได้ 1 MB
ภำยใน 16 บิต แต่ติดต่อภำยนอก 8 บิต เพื่อแข่งกับ Z80
ไมโครโปรเซสเซอร์สำหรับระบบควำมคุมอุปกรณ์รอบข้ำง
16 บิต อ้ำงหน่วยควำมจำได้ 16 MB เริ่ มมีควำมสำมำรถในกำรจัดกำร
หน่วยควำมจำ มี Virtual Memory
32 บิต อ้ำงหน่วยควำมจำได้ 4 GB มีควำมสำมำรถในกำรจัดกำร
หน่วยควำมจำ ชุดคาสั่งและโครงสร้ างทางซอฟต์ แวร์ ยงั คงเป็ น
มาตรฐานอยู่ในปัจจุบนั
ภำยในเป็ น 32 บิต แต่บสั เป็ น 16 บิต
เพิ่มหน่วยประมวลผลทำงคณิ ตศำสตร์
พัฒนำกำรประมวลผลให้เร็วยิงขึ้น
สถำปัตยกรรมของ 8086

8086 มีแอดเดรสบัสขนำด 20 บิต
อ้ำงแอดเดรสได้ 220 แบบแตกต่ำงกัน ( อ้ำงแอดเดรสได้ 1 MB )
แอดเดรสขนาด 20 บิตนี้ คือแอดเดรสที่แท้ จริง (physical address) ที่หน่ วยประมวลผล
อ้ างจากหน่ วยความจา จึงอ้ างหน่ วยความจาได้ 220 หน่ วย

8086 มีรีจิสขนำด 16 บิต
ไม่พอเพียงในกำรอ้ำงแอดเดรส (แอดเดรสมีขนำด 20 บิต)
ต้องใช้รีจิสเตอร์ 2 ตัวในกำรอ้ำงแอดเดรส

อ้ำงแอดเดรสแบบ เซกเมนต์ : ออฟเซ็ต
•แบ่งหน่วยควำมจำทั้งหมดออกเป็ นส่วนย่อย ๆ ที่เริ่ มต้นแตกต่ำงกัน [segment]
ระยะจำกจุดเริ่ มต้นนั้น [offset]
แล้วระบุ
กำรอ้ำงหน่วยควำมจำ
2010:0005
แอดเดรสขนำด 20 บิต เช่น 20105h
2
รี จิสเตอร์ 1 ตัวขนำด 16 บิต : segment
รี จิสเตอร์ 1 ตัวขนำด 16 บิต : offset
2
0
0
0
0
1
0
2000:0105
2
5
0
0
1
0
0 F 5
2001:00F5
2
0
1
0
0
1
0
0
0
0
5
5
1 F F F
0
1
1
1FFF:0115
5
กำรอ้ำงแอดเดรสแบบ เซกเมนต์ : ออฟเซ็ต

segment
0000h
segment
0001h
segment
0002h
segment
0003h


กำรแปลงจำกกำรอ้ำงแบบ เซกเมนต์ : ออฟเซ็ต เป็ น
physical address
• เลื่อนบิตของเซกเมนต์ ไปทำงซ้ำย 4 บิต (-> มีขนำด 20 บิต)
• นำค่ำของออฟเซ็ตมำบวก
เซกเมนต์หนึ่งมีขอบเขตตั้งแต่ offset ที่ 0000h จนถึง FFFFh [16 บิต]
• เซกเมนต์มีขนำด = 64 KB [65536 bytes]
จุดเริ่ มต้นของเซกเมนต์ต่ำง ๆ
•
•
•
เซกเมนต์ที่ 0000h เริ่ มต้นที่ physical address 00000h สิ้ นสุ ดที่ 0FFFFh
เซกเมนต์ที่ 0001h เริ่ มต้นที่ physical address 00010h สิ้ นสุ ดที่ 1FF0Fh
เซกเมนต์ที่ 0002h เริ่ มต้นที่ physical address 00020h สิ้ นสุ ดที่ 1FF1Fh
เซกเมนต์รีจิสเตอร์
Code segment
Data segment

CS : Code segment

DS : Data segment
ชี้ไปยัง
หน่วยควำมจำที่เก็บโปรแกรม
หน่วยควำมจำที่เก็บข้อมูล

ES : Extra segment

SS : Stack segment
Stack segment
Extra segment
ชี้ไปยัง
ชี้ไปยัง
หน่วยควำมจำที่เก็บข้อมูลอื่น ๆ
ชี้ไปยัง
หน่วยควำมจำที่เป็ น stack
คู่รีจิสเตอร์ 16 บิต และ 8 บิต
AX (Accumulator Register)
BX (Base Register)
AX
AH
BX
AL
CX (Counter Register)
BH
DX (Data Register)
CX
CH
BL
DX
CL
DH
DL
ส่ วนประกอบภำยในไมโครโปรเซสเซอร์ 8086

ALU : มีขนำด 16 บิต ทำให้เรี ยก 8086 ว่ำเป็ น CPU 16 บิต

รี จิสเตอร์
• รี จิสเตอร์ทวั่ ไป (General-Purpose Registers)
• 16 บิต : AX BX CX และ DX
• 8 บิต : AH AL BH BL CH
CL DH และ DL
• เซกเมนต์รีจิสเตอร์ (Segment Registers)
• มีขนำด 16 บิต : CS
DS ES และ SS
• รี จิสเตอร์สำหรับอ้ำงอิง (Index Registers)
• มีขนำด 16 บิต :
SI และ DI
ส่ วนประกอบภำยในไมโครโปรเซสเซอร์ 8086

รี จิสเตอร์
• รี จิสเตอร์สำรับกำรชี้ (Pointer Registers)
• มีขนำด 16 บิต : BP และ SP
• แฟล็ก (Flags)
• สถำนะของผลลัพธ์จำกกำรคำนวณ
• รี จิสเตอร์อื่น ๆ ที่ผใู้ ช้ไม่สำมำรถใช้ได้โดยตรง
• IP (Instruction Pointer) : เก็บตำแหน่งของคำสัง่ ถัดไป
• IR (Instrcution Register) : เก็บคำสัง่ ปัจจุบนั
• etc.
รี จิสเตอร์
กำรอ่ำนคำสัง่
หน่ วยความจา
CS
2000H

IP
2 1 1 AF H
1 1 AF H
CS
IP
2000 
11AF
20000
11AF

211AF
แฟล็กรี จิสเตอร์
Sign (S)
੾ÒÐ 80286
Zero (Z)
Nested task
Auxiliary (A)
Parity (P)
Carry (C)
I/O Privilege level
15 14 13 12 11 10
Overflow (O)
Direction (D)
Interrupt (I)
Trap (T)
9
8
7
6
5
4
3
2
1
0
แฟล็กรี จิสเตอร์









แฟล็กทด (Carry flag) จะมีค่ำ 1 หำกมีกำรทดบิตหรื อขอยืมค่ำ
แฟล็กพาริ ตี้ (Parity flag) จะมีค่ำ 1 ถ้ำผลลัพธ์ที่ได้จำกคำสัง่ คำนวณมีจำนวนบิตที่เท่ำกับ 1 เป็ นเลขคู่
แฟล็กช่ วย (Auxiliary flag) จะมีค่ำ 1 หำก 4 บิตขวำมือของผลลัพธ์มีกำรทดหรื อขอยืมค่ำ
แฟล็กศูนย์ (Zero flag) จะมีค่ำ 1 หำกผลลัพธ์กำรคำนวณมีค่ำเท่ำกับศูนย์
แฟล็กเครื่ องหมาย (Sign flag) จะมีค่ำ 1 หำกผลลัพธ์กำรคำนวณเป็ นเลขลบ
แฟล็กกับดัก (Trap flag) หำกมีค่ำเป็ น 1 จะบังคับให้ไมโครโปรเซสเซอร์ปฏิบตั ิงำนใน ภาวะ
คาสั่ งขัน้ เดียว (single step) ซึ่ งใช้ในกำรดีบกั โปรแกรม
แฟล็กอินเตอร์ รัพต์ (Interrupt Enable flag) หำกมีค่ำเป็ น 1 จะทำให้ซีพียรู ับกำรอินเตอร์ รัพต์แบบ
มำส์ก
แฟล็กทิ ศทาง (Direction flag) หำกมีค่ำเป็ น 1 จะบังคับให้คำสั่งถ่ำยโอนข้อมูลเป็ นกลุ่มทำงำนจำก
แอดเดรสค่ำน้อยไปหำค่ำมำก หำกมีค่ำเป็ น 0 จะบังคับมีกำรถ่ำยโอนจำกแอดเดรสค่ำมำกไปหำค่ำน้อย
แฟล็กค่ าล้ นหลัก (Overflow flag) ใช้สำหรับเลขแบบคิดเครื่ องหมำย หำกมีค่ำเป็ น 1 หมำยถึงผลลัพธ์
ของกำรคำนวณเป็ นเลขที่มีค่ำมำกหรื อน้อยกว่ำขอบเขตที่กำหนด
โหมดกำรอ้ำงแอดเดรส

โหมดกำรอ้ำงแอดเดรส (Addressing Mode) คือรู ปแบบที่
CPU อ้ำงถึงข้อมูล แบ่งเป็ น 3 กลุ่ม
• อ้ำงถึงข้อมูลใน รี จิสเตอร์
• อ้ำงถึงข้อมูลในหน่วยควำมจำ
• อ้ำงถึงข้อมูลจำกที่ระบุในคำสัง่
กำรขัดจังหวะ

กำรสัง่ ให้หน่วยประมวลผลหยุดทำงำนปั จจุบนั ชัว่ ครำว แล้วกระโดด
ไปตอบสนองกำรขัดจังหวะนั้น เมื่อตอบสนองเสร็ จแล้ว CPU จะ
กลับมำประมวลผลงำนเดิมที่คำ้ งไว้
•

ตัวอย่ำง เช่น ขณะที่อุปกรณ์บำงชิ้นได้รับข้อมูล ได้มีกำรกดปุ่ มบนแป้ นพิมพ์ เป็ นต้น
กำรขัดจังหวะสำมำรถสร้ำงได้จำก
•
•
ฮำร์ดแวร์ : ฮำร์ดแวร์อินเตอร์รัพท์
•
ใช้ในกำรแจ้งกำรเปลี่ยนสถำนะของอุปกรณ์รอบข้ำงต่ำงๆ และต้องกำรกำรจัดกำรจำก
CPU
ซอฟต์แวร์ : ซอฟต์แวร์อินเตอร์รัพท์
•
ใช้ในกำรเรี ยกใช้บริ กำรของระบบ (system library)
สถำปัตยกรรมของระบบคอมพิวเตอร์สมัยใหม่


เทคโนโลยีของหน่วยประมวลผลกลำง
•
•
•
หน่วยประมวลผลแบบ RISC
กำรประมวลผลแบบ ไปป์ ไลน์
กำรประมวลผลแบบซูเปอร์สเกลำร์
ระบบบัสสมัยใหม่
•
หน่วยควำมจำแคช
Memory
CPU
cache
การโอนย้ ายข้ อมลู
คำสัง่ กำรโอนย้ำยข้อมูล


คำสัง่ MOV
•
•
•
กำรโอนย้ำยข้อมูลระหว่ำงรี จิสเตอร์กบั รี จิสเตอร์
กำรโอนย้ำยข้อมูลกับหน่วยควำมจำ
กำรกำหนดค่ำคงที่ให้กบั หน่วยควำมจำ
รู ปแบบ MOV
MOV
MOV
MOV
MOV
MOV
ปลายทาง , ต้ นทาง
reg,reg
reg,mem
mem,reg
reg,imm
mem,imm
reg : รี จิสเตอร์
mem : ตำแหน่งหน่วยควำมจำ
imm : immediate (ค่ำคงที่)
ข้อจำกัดของคำสัง่ MOV
โอเปอร์แรนด์ท้ งั สองตัวต้องมีขนำดเท่ำกัน
 สิ่ งไม่สำมำรถคัดลอก
• ข้อมูลจำกหน่วยควำมจำไปยังหน่วยควำมจำโดยตรง
• ค่ำคงที่ (immediate) ไปยังเซกเมนต์รีจิสเตอร์โดยตรง
 ในกำรคัดลอกค่ำคงที่ไปยังหน่วยควำมจำต้องระบุขนำดของ
หน่วยควำมจำด้วย

ตัวอย่ำงกำรใช้คำสัง่ MOV
MOV
MOV
MOV
AX,100h
BX,AX
DX,BX
กำหนดค่ำ 100h ให้กบั AX จำกนั้นคัดลอก
ไปให้ BX และ DX
MOV
MOV
MOV
MOV
AX,1234h
DX,5678h
AL,DL
BH,DH
กำหนดค่ำ 1234h ให้กบั AX และค่ำ
5678h ให้กบั DX จำกนั้นคัดลอกค่ำใน
DLไปให้ AL และ DH ไปให้ BH
MOV
MOV
MOV
AX,1000h
[100h],AX
BX,[100h]
กำหนดค่ำ 1000h ให้กบั AX จำกนั้นคัดลอกข้อมูล
จำก AX ไปยังหน่วยควำมจำตำแหน่งที่ DS:100h
และคัดลอกข้อมูลกลับมำยัง BX
ตัวอย่ำงกำรใช้คำสัง่ MOV
MOV
MOV
BYTE PTR [200h],10h
WORD PTR [300h],10h
MOV
MOV
AX,2300h
DS,AX
กำหนดค่ำ 10h แบบไบต์ให้กบั
หน่วยควำมจำที่ DS:200h และแบบ
เวิร์ดที่ DS:300h
กำหนดค่ำ 2300h ให้กบั DS โดย
ผ่ำนทำง AX
กำรโอนย้ำยข้อมูลระหว่ำงรี จิสเตอร์


กำรโอนย้ำยข้อมูลระหว่ำงรี จิสเตอร์สำมำรถทำได้ถำ้ ขนำดของ
รี จิสเตอร์ท้ งั คู่เท่ำกัน
คู่รีจิสเตอร์ 16 บิต กับ 8 บิต
MOV AX,1000h
MOV AL,3Ah
MOV AH,AL
MOV AX,234h
AX
AH
AL
1000h
10h
00h
AX
AH
AL
103Ah
10h
3Ah
AX
AH
AL
3A3Ah
3Ah
3Ah
AX
AH
AL
234h
02h
34h
กำรโอนย้ำยข้อมูลกับหน่วยควำมจำ


กำรระบุตำแหน่งในหน่วยควำมจำ
•
โดยทัว่ ไป ในกำรระบุตำแหน่งในหน่วยควำมจำเรำจะระบุเฉพำะออฟเซ็ตเท่ำนั้น โดยออฟ
เซ็ตที่ระบุจะถูกนำไปประกอบกับค่ำในเซ็กเมนต์ รี จิสเตอร์ที่เหมำะสม เช่นในกำรอ้ำงถึง
ข้อมูลออฟเซ็ตจะถูกนำไปประกอบกับ DS เป็ นต้น
ตัวอย่ าง
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
AX,6789h
DX,1234h
[100h],AX
[102h],DX
[104h],AH
[105h],DL
BX,[104h]
CX,[103h]
[106h],CL
DS:100h
DS:101h
DS:102h
MOV
[100h],AX
67
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
AX,6789h
DX,1234h
[100h],AX
[102h],DX
[104h],AH
[105h],DL
BX,[104h]
CX,[103h]
[106h],CL
89h
67h
34h
[102h],DX
12
MOV
89
34
12h
67h
34h
[104h],AH
67
MOV
[105h],DL
34
MOV
BX,[104h]
34
67
MOV
CX,[103h]
67
12
DS:100h
DS:101h
DS:102h
กำรโอนย้ำยข้อมูลกับหน่วยควำมจำ

ข้อสังเกตในกำรจัดเรี ยงลำดับไบต์ของข้อมูล
•
•
•
สังเกตว่ำในกำรเก็บค่ำในหน่วยควำมจำเมื่อเรำเก็บค่ำเป็ น 16 บิต กำรเรี ยงไบต์
ในหน่วยควำมจำจะเก็บค่ำในไบต์ที่มีนยั สำคัญสูงไว้ในไบต์ที่มีแอดเดรสสูง
กว่ำ และไบต์ที่มีนยั สำคัญต่ำไว้ในแอดเดรสที่มีแอดเดรสต่ำกว่ำ
เรำเรี ยกว่ำเป็ นกำรเรี ยงแบบ little endian กำรเรี ยงข้อมูลแบบนี้ใช้ในหน่วย
ประมวลผลตระกูล Intel
ในหน่วยประมวลผลตระกูลอื่นเช่น SPARC หรื อ MIPS จะเรี ยงไบต์กลับกัน
กำรเรี ยงอีกแบบนี้เรำเรี ยกว่ำกำรเรี ยงแบบ big endian
กำรโอนย้ำยข้อมูลกับหน่วยควำมจำ

เรำสำมำรถระบุออฟเซ็ตของหน่วยควำมจำทำงอ้อมได้โดยผ่ำนทำง
รี จิสเตอร์ BX
AX = ?
MOV AX,102h
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
BX,100h
CX,4004h
DX,1201h
[BX],AX
[BX+2],CX
[BX+3],DX
[BX+4],BX
BX,[102h]
AX,[BX]
BX
AX
01
01
04
00
02h
01h
DS:100h
04h
40h
01h
DS:102h
12h
00h
10h
DS:101h
กำรกำหนดค่ำให้กบั หน่วยควำมจำ

ลองสังเกตคำสัง่ ต่อไปนี้
MOV


กำรคัดลอกค่ำไปยังหน่วยควำมจำจะเป็ นแบบ
•
•
16 บิต (คัดลอก 0010h) หรื อ
8 บิต (คัดลอก 10h)
ในกำรเขียนค่ำคงที่ลงในหน่วยควำมจำเรำจะต้องระบุขนำดของหน่วยควำมจำ
ด้วย
MOV
MOV

[100h],10h
WORD PTR [100h],10h
BYTE PTR [100h],10h
สังเกตว่ำควำมกำกวมนี้ไม่เกิดในกรณี ของ
MOV
[100h],AX
DEBUG
คำสัง่ ทัว่ ไปของโปรแกรม DEBUG
คำสัง่ ?
: แสดงรำยกำรคำสัง่
 คำสัง่ R (register) : จัดกำรกับรี จิสเตอร์
 คำสัง่ D (dump)
: แสดงค่ำในหน่วยควำมจำ
 คำสัง่ A (assemble) : สัง่ ให้โปรแกรม DEBUG แปล
โปรแกรมลงในแอดเดรสที่ระบุ
 คำสัง่ U (unassemble) : สัง่ ให้โปรแกรม DEBUG แสดง
โปรแกรมที่อยูใ่ นแอดเดรสที่ระบุ

คำสัง่ ทัว่ ไปของโปรแกรม DEBUG

คำสัง่ T (trace) : คำสัง่ ตำมรอยกำรทำงำนครั้งละ 1 คำสัง่
คำสัง่ P (proceed) : คำสัง่ ให้ทำงำนจนถึงบรรทัดถัดไป

คำสัง่ G (go) : คำสัง่ เริ่ มกำรทำงำนและทำงำนจนจบ

• ใช้ในกรณีมีกำรเรี ยกโปรแกรมย่อยหรื อมีกำรเรี ยกใช้บริ กำรของระบบ
สิ่ งควรรู ้ก่อนกำรใช้โปรแกรม DEBUG





โปรแกรม DEBUG เป็ นโปรแกรมหนึ่งที่อยูใ่ นชุดคำสัง่ ของ windows
ตัวเลขต่ำง ๆ ในโปรแกรม DEBUG จะเป็ นเลขฐำน 16 ทั้งหมด ไม่ตอ้ ง
พิมพ์ h ระบุหลังตัวเลข
โปรแกรมจะเริ่ มทำงำนที่หน่วยควำมจำตำแหน่ง CS:IP เสมอ กำรกำหนดค่ำ
ให้กบั รี จิสเตอร์ ท้ งั สองใช้คำสั่ง RCS และ RIP
กำรระบุคำสั่ง (a) , กำรแสดงคำสั่ง (u) และกำรแสดงหน่วยควำมจำ (d) จะ
เริ่ มต้นที่ตำแหน่งต่อจำกกำรทำงำนครั้งสุ ดท้ำยของคำสั่งนั้นๆ ไม่ข้ ึนกับค่ำ IP
หำกต้องกำรเปลี่ยนแปลงตำแหน่งให้ใส่ offset ตำมหลังทันที เช่น a 100 เป็ น
ต้น
กำรใช้งำนหน่วยควำมจำทุกครั้งจะต้องอ้ำงในรู ปแบบ segment:offset เสมอ
แต่กำรอ้ำงถึงข้อมูลส่ วนใหญ่ในโปรแกรมจะใช้เพียงรี จิสเตอร์ เดียว
แฟล็กและคาสั่งคณิตศาสตร์
หัวข้อกำรเรี ยน
แฟล็ก
 คำสัง่ คณิ ตศำสตร์

• คำสัง่ เกี่ยวกับกำรบวกและลบ
• คำสัง่ เกี่ยวกับกำรคูณและหำร
ผลของคำสัง่ คณิ ตศำสตร์ต่อกำรเปลี่ยนแปลงของแฟล็ก
 กำรคำนวณสมกำรคณิ ตศำสตร์ อย่ำงง่ำย

แฟล็กรี จิสเตอร์



แฟล็ก คือรี จิสเตอร์ที่ใช้เก็บสถำนะของระบบ
แฟล็กของ 8086 มีขนำด 16 บิต โดยแต่ละบิตจะแทนสถำนะต่ำงๆ ของระบบ
แฟล็กจะเปลี่ยนแปลงตำมผลลัพธ์ของคำสัง่ ทำงคณิ ตศำสตร์ กำรคัดลอกข้อมูลจะ
ไม่ทำให้แฟล็กเปลี่ยนแปลงค่ำ
15 14 13 12 11 10
-
-
-
9
8
7
6
5
- O D I T S Z -
4
3
2
1
0
- A P - C
Carry
Parity
Auxiliary
Zero
Sign
Trap
Interrupt
Direction
Overflow
แฟล็กรี จิสเตอร์









แฟล็กทด (Carry flag) จะมีค่ำ 1 หำกมีกำรทดบิตหรื อขอยืมค่ำ
แฟล็กพาริ ตี้ (Parity flag) จะมีค่ำ 1 ถ้ำผลลัพธ์ที่ได้จำกคำสัง่ คำนวณมีจำนวนบิตที่เท่ำกับ 1 เป็ นเลขคู่
แฟล็กช่ วย (Auxiliary flag) จะมีค่ำ 1 หำก 4 บิตขวำมือของผลลัพธ์มีกำรทดหรื อขอยืมค่ำ
แฟล็กศูนย์ (Zero flag) จะมีค่ำ 1 หำกผลลัพธ์กำรคำนวณมีค่ำเท่ำกับศูนย์
แฟล็กเครื่ องหมาย (Sign flag) จะมีค่ำ 1 หำกผลลัพธ์กำรคำนวณเป็ นเลขลบ
แฟล็กกับดัก (Trap flag) หำกมีค่ำเป็ น 1 จะบังคับให้ไมโครโปรเซสเซอร์ปฏิบตั ิงำนใน ภาวะ
คาสั่ งขัน้ เดียว (single step) ซึ่ งใช้ในกำรดีบกั โปรแกรม
แฟล็กอินเตอร์ รัพต์ (Interrupt Enable flag) หำกมีค่ำเป็ น 1 จะทำให้ซีพียรู ับกำรอินเตอร์ รัพต์แบบ
มำส์ก
แฟล็กทิ ศทาง (Direction flag) หำกมีค่ำเป็ น 1 จะบังคับให้คำสั่งถ่ำยโอนข้อมูลเป็ นกลุ่มทำงำนจำก
แอดเดรสค่ำน้อยไปหำค่ำมำก หำกมีค่ำเป็ น 0 จะบังคับมีกำรถ่ำยโอนจำกแอดเดรสค่ำมำกไปหำค่ำน้อย
แฟล็กค่ าล้ นหลัก (Overflow flag) ใช้สำหรับเลขแบบคิดเครื่ องหมำย หำกมีค่ำเป็ น 1 หมำยถึงผลลัพธ์
ของกำรคำนวณเป็ นเลขที่มีค่ำมำกหรื อน้อยกว่ำขอบเขตที่กำหนด
แฟล็กศูนย์ (Zero-flag)


จะมีค่ำเป็ น 1 เมื่อผลลัพธ์มีค่ำเท่ำกับศูนย์
นอกจำกกรณี น้ ีจะมีค่ำเป็ น 0
MOV
ADD
ADD
SUB
SUB
AL,10h
AL,E0h
AL,20h
AL,10h
AL,10h
Z=?
Z=1
Z=0
Z=0
Z=1
AL=0
AL=20h
AL=10h
AL=0
พาริตแี้ ฟล็ก (Parity-flag)

จะมีค่ำเป็ น 1 เมื่อผลลัพธ์มีจำนวนบิตที่มีค่ำเป็ นหนึ่งเป็ นเลขคู่
MOV
ADD
ADD
SUB
SUB
AL,14h
AL,20h
AL,10h
AL,8h
AL,10h
P=?
P=0
P=1
P=1
P=0
AL=34h
AL=44h
AL=3Ch
AL=2Ch
แฟล็กทด (Carry-flag)


จะมีค่ำเป็ น 1 เมื่อมีการทดหรือการยืมในกำรคำนวณ
พิจำรณำตัวเลขแบบไม่ คดิ เครื่องหมาย
MOV
ADD
ADD
SUB
ADD
AL,77h
AL,50h
AL,50h
AL,A0h
AL,27h
C=?
C=0
C=1
C=1
C=0
AL=C7h
AL=17h
AL=77h
AL=9Eh
แฟล็กเครื่องหมาย (Sign-flag)


จะมีค่ำเป็ น 1 เมื่อผลลัพธ์ มีค่าลบ
พิจำรณำตัวเลขแบบคิดเครื่ องหมำย
MOV
ADD
ADD
SUB
ADD
AL,77h
AL,50h
AL,50h
AL,A0h
AL,27h
S=?
S=1
S=0
S=0
S=1
AL=C7h
AL=17h
AL=77h
AL=9Eh
โอเวอร์ โฟล์ แฟล็ก (Overflow-flag)



จะมีค่ำเป็ น 1 เมื่อผลลัพธ์มีควำมผิดพลำดเนื่องจำกเลขล้ นหลัก
พิจำรณำตัวเลขแบบคิดเครื่ องหมำย
กำรล้นหลักจะเกิดขึ้นเฉพำะจำนวนบวกรวมกันหรื อจำนวนลบ
รวมกันเท่ำนั้น จะไม่เกิดกำรล้นหลักสำหรับจำนวนบวกรวมกับ
จำนวนลบ
MOV
ADD
ADD
SUB
ADD
AL,77h
AL,50h
AL,50h
AL,A0h
AL,27h
O=?
O=1
O=0
O=0
O=1
AL=C7h
AL=17h
AL=77h
AL=9Eh
แฟล็กอื่น ๆ




แฟล็กเสริม (Auxiliary-flag)
•
จะมีค่ำเป็ น 1 เมื่อผลลัพธ์ตอ้ งมีกำรปรับค่ำของกำรเก็บตัวเลขแบบ BCD
แฟล็กทิศทาง (Direction-flag)
•
ใช้สำหรับกำหนดทิศทำงของกำรปรับค่ำในคำสั่งเกี่ยวกับสำยข้อมูล.
แทรปแฟล็ก (Trap-flag)
•
ใช้สำหรับกำรตรวจสอบกำรทำงำนของโปรแกรม โดยจะทำให้เกิดกำรขัดจังหวะทุกครั้งหลัง
กำรทำงำนของคำสั่งต่ำงๆ
อินเตอร์ รัพท์ แฟล็ก (Interrupt-flag)
•
ใช้สำหรับกำหนดว่ำหน่วยประมวลผลจะตอบสนองกำรขัดจังหวะจำกฮำร์ดแวร์บำงประเภท
หรื อไม่
คำสัง่ สำหรับกำหนดค่ำของแฟล็ก



แฟล็กบำงแฟล็กสำมำรถกำหนดค่ำได้ เนื่องจำกมีหน้ำที่ในกำรระบุ
สถำนะบำงประกำร
เรำจะเรี ยกแฟล็กที่มีค่ำเป็ น 1 ว่ำแฟล็กนั้นเซ็ต (flag set) และเรี ยก
แฟล็กที่มีค่ำเป็ น 0 ว่ำ แฟล็กนั้นเคลียร์ (flag cleared)
แฟล็กที่สำมำรถกำหนดค่ำได้ และคำสัง่ ในกำรกำหนดค่ำ
Flag
Clear
Set
Carry-flag
Direction-flag
Interrupt-flag
CLC
CLD
CLI
STC
STD
STI
คำสัง่ คณิ ตศำสตร์








คำสัง่ เพิ่มและลดค่ำ :
คำสัง่ บวก :
คำสัง่ ลบ :
คำสัง่ เปรี ยบเทียบ :
คำสัง่ กลับเครื่ องหมำย :
คำสัง่ คูณ :
คำสัง่ หำร :
คำสัง่ ปรับขนำดข้อมูล :
INC และ DEC
ADD และ ADC
SUB และ SBB
CMP
NEG
MUL และ IMUL
DIV และ IDIV
CBW และ CWD
คำสัง่ เพิม่ ค่ำ INC และคำสัง่ ลดค่ำ DEC
INC
INC


register
memory
DEC
DEC
register
memory
กำรเพิ่มและลดค่ำในหน่วยควำมจำจะต้องระบุขนำดของข้อมูลด้วย
มีผลกระทบกับแฟล็กทำงคณิ ตศำสตร์ท้ งั หมด ยกเว้ น แฟล็กทด
MOV
DEC
DEC
MOV
MOV
INC
AL,1
AL
AL
BX,200h
[BX],AL
BYTE PTR [BX]
ไม่เปลี่ยน C-flag
AL=0h
AL=FFh
[200h]=FFh
[200h]=00h
คำสัง่ กำรบวก ADD และ ADC (add with carry)
ADD
ADD
ADD
ADD
ADD



regs,regs
regs,mem
mem,regs
regs,imm
mem,imm
ADC
ADC
ADC
ADC
ADC
regs,regs
regs,mem
mem,regs
regs,imm
mem,imm
ผลลัพธ์ของกำรบวกจะเก็บไว้ในโอเปอร์ แลนด์ตวั หน้ำเสมอ
คำสัง่ ADD และ ADC มีผลกระทบถึงแฟล็กทำงคณิ ตศำสตร์ทุกตัว
เรำนิยมใช้คำสัง่ ADC ในกำรบวกเลขที่ตอ้ งกำรรวมตัวทดจำกกำรคำนวณที่ผำ่ น
มำ ยกตัวอย่ำงเช่น กำรบวกเลขที่อยูใ่ นรี จิสเตอร์ หลำยตัวต่อเนื่องกัน
คำสัง่ กำรลบ SUB และ SBB (sub with borrow)
SUB
SUB
SUB
SUB
SUB



regs,regs
regs,mem
mem,regs
regs,imm
mem,imm
SBB
SBB
SBB
SBB
SBB
regs,regs
regs,mem
mem,regs
regs,imm
mem,imm
คำสัง่ SUB จะลบค่ำในโอเปอร์แรนด์ตวั หลังออกจำกตัวหน้ำ และ
นำไปเก็บในโอเปอร์แรนด์ตวั หน้ำ
คำสัง่ SBB ก็จะทำเช่นเดียวกัน แต่จะมีกำรรวมตัวยืมซึ่ งเก็บอยูใ่ น
Carry-flag ด้วย (คล้ำย ADC)
คำสัง่ SUB และ SBB มีผลกระทบถึงแฟล็กทำงคณิ ตศำสตร์ทุกตัว
ตัวอย่ำงกำรใช้คำสัง่ บวกและลบ
กำรบวกเลข 32 บิต 34DA 1115h เข้ำกับตัวเลข 32 บิตที่เก็บใน
คู่รีจิสเตอร์ CX,BX
MOV
MOV
ADD
ADC
AX,1115h
DX,34DAh
AX,BX
DX,CX
นำ 34DA 115h เก็บใน DX,AX
บวก 16 บิตล่ำง
บวก 16 บิตบนพร้อมตัวทด
กำรลบเลข 16 บิต ในรี จิสเตอร์ AX ด้วยเลข 8 บิตในรี จิสเตอร์ BL
SUB
SBB
AL,BL
AH,0
ลบ 8 บิตล่ำง
ลบ 8 บิตบนพร้อมตัวยืม
คำสัง่ เปรี ยบเทียบ CMP



คำสัง่ CMP จะทำงำนเหมือนคำสัง่ SUB แต่จะไม่มีกำรเปลี่ยนแปลง
ค่ำในโอเปอร์แรนด์ท้ งั สอง แต่จะมีกำรเปลี่ยนแปลงค่ำใน Flag
กำรเปลี่ยนแปลง flag ของคำสัง่ CMP จะเหมือนกับคำสัง่ SUB
โดยปกติเรำจะใช้คำสัง่ CMP ในกำรเปรี ยบเทียบ และตัดสิ นใจ
MOV
CMP
AX,10h
AX,100h
MOV
CMP
BL,10h
AL,BL
Z-flag = 0, C-flag = 1,
O-flag = 0, S-flag = 1.
Z-flag = 1, C-flag = 0,
O-flag = 0, S-flag = 0.
คำสัง่ กลับเครื่ องหมำย NEG
NEG



regs
NEG mem
คำสัง่ NEG จะกลับค่ำของโอเปอร์แรนด์ให้เป็ นค่ำลบ
กำรแปลงเป็ นค่ำลบใช้วธิ ี แบบ 2’s complement
คำสัง่ NEG จะมีผลกระทบกับแฟล็กทำงคณิ ตศำสตร์ ท้ งั หมด แต่
สำหรับ แฟล็กทดจะมีค่าเป็ นหนึ่งเสมอหลังกำรทำงำนของคำสัง่ นี้
ตัวอย่ำงกำรเปลี่ยนค่ำแฟล็ก
Instruction
MOV AL,70h
ADD AL,20h
ADD AL,70h
DEC AL
ADD AL,5
ADD AL,30h
SUB AL,40h
SUB AL,7F
NEG AL
ADC AL,20h
Z-Flag C-Flag P-Flag S-Flag O-Flag
Result
AL=70h
?
?
?
?
?
AL=90h
0
0
1
1
1
AL=00h
1
1
1
0
0
AL=FFh
1
0
1*
1
0
AL=04h
0
1
0
0
0
AL=34h
0
0
0
0
0
1
AL=F4h
0
1
0
0
0
AL=75h
0
0
0
1
AL=8Bh
0
1**
1
1
0
AL=ABh
0
0
0
1
0
คำสัง่ คูณ MUL และ IMUL
MUL
MUL






regs
mem
IMUL regs
IMUL mem
ในกำรใช้คำสัง่ คูณ เรำจะระบุเฉพำะตัวคูณเท่ำนั้น สำหรับตัวตั้งและผลลัพธ์จะ
อยูใ่ นรี จิสเตอร์ที่กำหนดไว้แล้ว โดยจะขึ้นกับขนำดของกำรคูณ
กำรคูณ 8 บิต
ตัวตั้ง : AL ผลลัพธ์ : AX
กำรคูณ 16 บิต
ตัวตั้ง : AX ผลลัพธ์ : DX,AX
คำสัง่ MUL จะคูณแบบไม่คิดเครื่ องหมำย
คำสัง่ IMUL จะคูณแบบคิดเครื่องหมาย
คำสัง่ ทั้งสองจะมีผลกระทบกับ แฟล็กทดและโอเวอร์โฟล์แฟล็กเท่ำนั้น
ตัวอย่ำงกำรใช้คำสัง่ คูณ

กำรคูณค่ำ 12h ด้วย ค่ำใน BL
MOV
MUL

AL,12h
BL
ตั้งค่ำให้กบั ตัวตั้ง
คูณด้วย BL ผลลัพธ์อยูใ่ น AX
กำรคูณค่ำในหน่วยควำมจำขนำด 16 บิตที่offset 200h ด้วย ค่ำใน AX
จำกนั้นนำผลลัพธ์ที่ได้มำบวกด้วยค่ำใน BX
MUL
ADD
ADC
WORD PTR[200h]
AX,BX
DX,0
คูณ AX กับค่ำใน [200h]
จำกนั้นนำ BX มำรวมกับผลลัพธ์
คำสัง่ คูณ DIV และ IDIV
DIV
DIV






regs
mem
IDIV regs
IDIV mem
เช่นเดียวกับกำรใช้คำสัง่ คูณ เรำจะระบุเฉพำะตัวหำรเท่ำนั้น ตัวตั้งและผลลัพธ์
จะอยูใ่ นรี จิสเตอร์ที่กำหนดไว้แล้ว โดยจะขึ้นกับขนำดของกำรหำร
กำรหำร 8 บิต
ตัวตั้ง : AX ผลลัพธ์ : AL เศษ : AH
กำรหำร 16 บิต
ตัวตั้ง : DX, AX ผลลัพธ์ : AX เศษ : DX
คำสัง่ DIV จะหำรแบบไม่คิดเครื่ องหมำย
คำสัง่ IDIV จะหำรแบบคิดเครื่องหมาย
คำสัง่ ทั้งสองจะไม่ มผี ลกระทบกับแฟล็กทางคณิตศาสตร์ .
คำสัง่ ปรับขนำดข้อมูล




ข้อมูลแบบไม่คิดเครื่ องหมำย เรำสำมำรถที่จะกำหนดค่ำ 0 ให้กบั ข้อมูล
นัยสำคัญสู งที่ขยำยเพิ่มขึ้นมำได้ เพื่อให้ขนำดใหญ่ข้ ึนและมีค่ำคงเดิม
แต่ถำ้ ข้อมูลเป็ นตัวเลขคิดเครื่ องหมำยเรำจะต้องใช้กำรปรับค่ำแบบอื่น มิ
เช่นนั้นค่ำอำจผิดเพี้ยนไปได้
คำสั่ง CBW จะขยำยขนำดข้อมูลแบบคิดเครื่ องหมำยใน AL ให้มีขนำด 16
บิตใน AX
คำสั่ง CWD จะขยำยขนำดข้อมูลแบบคิดเครื่ องหมำยใน AX ให้มีขนำด 32
บิตใน DX,AX
ตัวอย่าง
ขยำย AL -> AX.
CBW
IDIV BL หำรด้วย BL ผลลัพธ์อยูใ่ น AL
กำรหำรค่ำใน AL ด้วย BL
ตัวอย่ำงกำรแก้สมกำรทำงคณิ ตศำสตร์
1. คำนวณค่ำ AL2 + BL2 คิดตัวเลขแบบไม่คิดเครื่ องหมำยโดยให้
ผลลัพธ์เป็ นเลข 16 บิต เก็บที่ รี จิสเตอร์ AX
MUL
MOV
MOV
MUL
ADD
AL
CX, AX
AL, BL
BL
AX, CX
หำค่ำ AL*AL
นำไปเก็บไว้ที่ CX เนื่องจำก AL ต้องใช้ในกำรคำนวณ
คูณ BL กับ BL แล้วเก็บผลลัพธ์ไว้ที่ AX
ได้ผลลัพธ์แล้วนำค่ำ AL*AL ที่เก็บใน CX มำบวก
2. คำนวณค่ำ (CL*BL+DX)/SI โดยคิดเป็ นเลขคิดเครื่ องหมำย
ตัวอย่ำงกำรแก้สมกำรทำงคณิ ตศำสตร์
2. คำนวณค่ำ (CL*BL+DX)/SI โดยคิดเป็ นเลขคิดเครื่ องหมำย
MOV
MUL
ADD
CWD
IDIV
AL,CL
BL
AX,DX
SI
หำค่ำ CL*BL
บวกกับ DX.
ขยำยขนำดเป็ น 32 บิต
หำรด้วย SI ผลอยูท่ ี่ AX เศษที่ DX