311
CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________ ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร 2546 CopyRight ©2003 by Faculty of Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต 1 1. บทนํา การศึกษาเกี่ยวกับระบบคอมพิวเตอรอาจแบงออกเปนระดับชั้นไดตามรูปที1.0 ระดับ เกี่ยวของกับ มุมมอง 1 Packages, jobs, caned routines A back box that solves problems 2 Programs, statements,loops, A collection of conditions problem-solving primitives in a high- level language 3 Memory, processors, I/O devices, A collection of major registers hareware subsystems Computer science 4 Gates, circuits, chips, boards A collection of discrete Electrical engineering electrical components 5 Electrons, atoms, magnetism A physical system Physics composed of elemental particles รูปที1.0 ระดับชั้นของการศึกษาเกี่ยวกับระบบคอมพิวเตอร (ที่มา: G. Michael Scheider, “The Principles of Computer Organization) วิชานี้เราจะศึกษาในระดับที3 และ 2 เพื่อเขียนโปรแกรมภาษาแอสเซมบลีซึ่งเปน low-level language Operating systems level Programming language level Functional operation level Hardware design level The laws of physics level

องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

1

1. บทนํา การศึกษาเกี่ยวกับระบบคอมพิวเตอรอาจแบงออกเปนระดับช้ันไดตามรูปที่ 1.0

ระดับ เกี่ยวของกับ มุมมอง 1 Packages, jobs, caned routines A back box that

solves problems

2 Programs, statements,loops, A collection of

conditions problem-solving

primitives in a high-

level language

3 Memory, processors, I/O devices, A collection of major

registers hareware subsystems

Computer science

4 Gates, circuits, chips, boards A collection of discrete

Electrical engineering electrical components

5 Electrons, atoms, magnetism A physical system

Physics composed of

elemental particles

รูปที่ 1.0 ระดับช้ันของการศึกษาเกี่ยวกับระบบคอมพิวเตอร

(ที่มา: G. Michael Scheider, “The Principles of Computer Organization”)

วิชานี้เราจะศึกษาในระดับที่ 3 และ 2 เพื่อเขียนโปรแกรมภาษาแอสเซมบลีซึ่งเปน low-level language

Operating

systems

level

Programming

language

level

Functional

operation

level

Hardware

design

level

The laws

of physics

level

Page 2: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

2

1.1 องคประกอบพื้นฐานของคอมพิวเตอร องคประกอบพื้นฐานของคอมพิวเตอรตามรูปแบบของ Von Neumann ประกอบดวย 3 สวนหลัก

คือ หนวยรับเขา/สงออก (input/output unit), หนวยประมวลผลกลาง (Central Processor Unit) หรือ ซีพียู (CPU)

และหนวยความจํา (memory unit) ดังแสดงในรูปที่ 1.1

รูปที่ 1.1 องคประกอบพื้นฐานของคอมพิวเตอร

หนวยประมวลผลกลาง ประกอบดวย หนวยคํานวณและตรรกะ (arithmetic and logic unit) ทําหนาที่

คํานวณทางคณิตศาสตรและทดสอบทางตรรกะ กับหนวยควบคุม (control unit) ทําหนาที่ควบคุณสวนอื่น ๆ หนวย

ประมวลผลกลางมีสวนประกอบที่สําคัญซึ่งใชประมวลผล คือ เรจิสเตอร (registers) ใชเพื่อเก็บขอมูลตาง ๆ แบง

ออกเปน 2 ประเภท คือ

- เรจิสเตอรอเนกประสงค (general purpose registers) ผูเขียนโปรแกรมสามารถอางถึงเรจิสเตอร

อเนกประสงค เพื่ออานหรือเขียนขอมูลได - เรจิสเตอรเฉพาะกิจ (special purpose registers) เปนเรจิสเตอรที่นํามาใชทํางานเฉพาะกิจ เชน PC

(Program Counter) ทําหนาที่เก็บตําแหนงของคําสั่งถัดไปที่จะนํามาประมวลผล, IR (Instruction

Register) บรรจุคําสั่งปจจุบันที่จะประมวลผล, MAR (Memory Address Register) เก็บตําแหนงของ

หนวยความจําที่จะไปอานหรือเขียนขอมูลในหนวยความจํา, MBR (Memory Buffer Register) เก็บ

ขอมูลที่อานไดจากหนวยความจํา หรือเก็บขอมูลที่จะเขียนไปยังหนวยความจํา, PSW (Program

Status Word Register) เก็บสถานะตาง ๆ ในขณะที่ประมวลผล เปนตน

Control Unit

Arithmetic/logic Unit

CPU

Memory Input device

Output device

Page 3: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

3

หนวยรับเขา/สงออก เปนอุปกรณที่รับขอมูลเขา เชน แปนพิมพ, ไมโครโฟน, เมาส เปนตน หรือเปนอุปกรณ

ที่นําขอมูลออก เชน เครื่องพิมพ, จอภาพ, ลําโพง เปนตน อุปกรณบางอยางสามารถรับขอมูลเขาและนําขอมูลออกได

เชน เทปแมเหล็ก, จานแมเหล็กทั้งแบบออน (floppy disk) และแบบแข็ง (hard disk) เปนตน

หนวยความจํา ทําหนาที่เก็บคําสั่งและขอมูลที่ซีพียูจะนําไปประมวล เรียกวา หนวยความจําหลัก (main

memory หรือ primary memory) ซึ่งอาจจะเปน RAM (Random Access Memory) ที่สามารถอานหรือเขียนขอมูล

ได หรือมีบางสวนเปน ROM (Read Only Memory) ที่สามารถอานไดอยางเดียว

• บัส ในการทํางานของระบบคอมพิวเตอร จําเปนตองมีการสงสัญญาณไฟฟาที่เปนขอมูลระหวางหนวยตาง ๆ ผานทางเสนสัญญาณ ที่เรียกวา บัส (bus) ซึ่งมี 3 ประเภท คือ

- address bus ทําหนาที่รับสงตําแหนงสําหรับอางอิงขอมูลในหนวยความจําหรืออุปกรณ I/O

- data bus ทําหนาที่รับสงขอมูล

- control bus ทําหนาที่รับสงสัญญาณควบคุม

รูปที่ 1.2 ระบบบัส

• ขั้นตอนการประมวลผลดวยซีพีย ู การประมวลผลดวยซีพียู มีขั้นตอน ดังนี้

repeat {

fetch คําสั่งมาจากหนวยความจําหลัก; (fetch phase)

execute ตามคําสั่งนั้น; (execution phase) } until halt or fatal error;

Page 4: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

4

(ที่มา: G. Michael Scheider, “The Principles of Computer Organization”)

ภาพขางบน สมมุติวา คําส่ังเปน one address instruction และ แตละคําส่ังยาว 1 (บวก PC ดวย 1) จริง ๆ

แลวคําส่ังมีหลายรูปแบบ และความยาวอาจไมเทากัน (ตองบวก PC ดวยความยาวของคําส่ัง)

Page 5: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

5

Fetch Phase

ทําดังนี้ 1. MAR <- PC { Move the PC to the MAR. }

2. READ { Fetch the instruction.}

3. IR <- MBR { Move into the IR.}

4. PC <- PC + length of instruction { Increment PC with length of instruction.}

Execution Phase

ทําตามคําสั่งใน IR เชน

ก. คําสั่ง mov R0,10 ทําดังนี้ R0 <- 10 { Move 10 to R0. }

ข. คําสั่ง mov R0,X ทําดังนี้ 1. MAR <- IRaddress of X { Move address of X in IR to MAR. }

2. READ { Fetch data at address X. }

3. R0 <- MBR { Move data to R0.}

ค. คําสั่ง add R0,X ทําดังนี้ 1. MAR <- IRaddress of X { Move address of X in IR to MAR. }

2. READ { Fetch data at address X. }

3. adder <- MBR { Move first operand to adder. }

4. adder <- R0 { Move second operand to adder. }

5. ADD { Add two operands. }

6. R0 <- adder { Move result to R0. }

ง. คําสั่ง jmp L0 ทําดังนี้ PC <- IRaddress of L0

Page 6: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

6

1.2 ระบบเลขจํานวน

คอมพิวเตอรแทนขอมูลในรูประบบตัวเลขฐานสอง (binary number system) ซึ่งประกอบดวย 0 กับ 1

ตัวเลขหนึ่งตัวเรียกวา หน่ึงบิต (bit ยอมาจาก Binary digiT) ระบบอื่น ๆ ไดแก ระบบตัวเลขฐานสิบ (decimal

number system) ซึ่งประกอบดวย 0 ถึง 9 ระบบตัวเลขฐานแปด (octal number system) ซึ่งประกอบดวย 0 ถึง 7

ระบบตัวเลขฐานสิบหก (hexadecimal number system) ซึ่งประกอบดวย 0 ถึง 9 และ A ถึง F

การเปลี่ยนตัวเลขจากระบบหนึ่งไปยังอีกระบบหนึ่ง หรือเรียกวา การเปลี่ยนฐาน ทําได ดังนี้

• การเปลี่ยนจากเลขฐานสองใหเปนเลขฐานสิบ ใชสูตร

(bnb n-1 … b2b1b0.b-1b-2 …b-m)2=(bn2n+b n-1 2

n-1 + … + b222 + b12

1+b0 + b-12-1 +b-2 2

-2 + … + b-m2-m)10

เชน (101101.1011)2 = (25 + 0 + 1*23 +22 + 0 + 1 + 2-1 + 0 + 2-3 + 2-4)10 = (45.6875)10

หมายเหตุ การเปลี่ยนจากเลขฐานแปดหรือสิบหกใหเปนเลขฐานสิบ ใชสูตรเหมือนกัน แตเปลี่ยนจาก 2 เปน 8 และ

16 ตามลําดับ โดยแทน A, B, C, D, E, F ดวย 10, 11, 12, 13, 14, 15 ตามลําดับ

• การเปลี่ยนตัวเลขหนาจุด จากเลขฐานสิบใหเปนเลขฐานสอง ใหใช 2 หาร ไปเรื่อย จนไดผลลัพธเปน 0 ขณะที่หาร

ใหจดจําเศษที่ได นําเศษที่ไดจากการหารมาเรียงตามลําดับ เริ่มจากเศษที่ไดครั้งสุดทายเรียงไปยังเศษที่ไดจากการหารครั้งแรก

เชน 2 ) 123

61 เศษ 1

30 เศษ 1

15 เศษ 0

7 เศษ 1

3 เศษ 1

1 เศษ 1

0 เศษ 1

(123)10 = (1111011)2

Page 7: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

7

หมายเหตุ การเปลี่ยนตัวเลขหนาจุด จากเลขฐานสิบใหเปนเลขฐานแปดหรือสิบหก ใชสูตรเหมือนกัน แตเปลี่ยนจากการหารดวย 2 เปนการหารดวย 8 และ 16 ตามลําดับ โดยแทนเศษ 10, 11, 12, 13, 14, 15 ดวย A, B, C, D, E, F

ตามลําดับ

• การเปลี่ยนตัวเลขหลังจุด จากเลขฐานสิบใหเปนเลขฐานสอง ใหคูณตัวเลขที่อยูหลังจุดทั้งหมดดวย 2 ไปเรื่อย ๆ

จนกวาจะไดผลลัพธเปนศูนย หรือไดจํานวนตัวเลขหลังจุดทศนิยมตามที่ตองการ แลวนําเลขหนาจุดที่ไดจากการคูณแตละครั้ง มาเรียงกัน

เชน (0.6875)10 = (0. 1 0 1 1)2

.6875

* 2

1.3750

.3750

* 2

0.7500

.7500

* 2

1.5000

.5000

* 2

1.0000

.0000

หมายเหตุ การเปลี่ยนตัวเลขหลังจุด จากเลขฐานสิบใหเปนเลขฐานแปดหรือสิบหก ใชสูตรเหมือนกัน แตเปลี่ยนจากการคูณดวย 2 เปนการคูณดวย 8 และ 16 ตามลําดับ โดยแทนตัวเลขที่อยูหนาจุดซึ่งเปน 10, 11, 12, 13, 14, 15 ดวย

A, B, C, D, E, F ตามลําดับ

• เลขฐานสิบหก เพื่อใหมนุษยเขาใจไดงาย และใชจํานวนตัวเลขที่แทนขอมูลนอยลง จึงใชตัวเลขฐานสิบหกแทน โดยที่ตัวเลขฐานสอง 4 ตัว สามารถเขียนแทนดวยตัวเลขฐานสิบหกหนึ่งตัว ดังนี้

Page 8: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

8

ฐานสอง ฐานสิบหก 0000 0

0001 1

0010 2

0011 3

0100 4

0101 5

0110 6

0111 7

1000 8

1001 9

1010 A

1011 B

1100 C

1101 D

1110 E

1111 F

เชน 0000 0011 1100 0011 ฐานสอง

เทากับ 0 3 C 3 ฐานสิบหก

เคล็ดลับ (TIPS)

เลขฐาน สอง, แปด, และ สิบหก สามารถแปลงไปมาได โดยพิจารณา เลขฐานสอง 3 ตัวแทนเลขฐานแปด หนึ่งตัว

และเลขฐานสอง 4 ตัวแทนเลขฐานสิบหกหนึ่งตัว เชน

(5AF.1E)16 = ( 0101 1010 1111 . 0001 1110 )2 = 010 110 101 111 . 000 111 100 = (2657.074 )8 เปนตน

1.3 การแทนขอมูลแบบตาง ๆ ในเครื่องคอมพิวเตอร 1.3.1 อักขระ

ใชรหัสแทนอักขระ

- แบบ ASCII ใช 7 บิต แทนรหัส และ parity 1 บิตใชตรวจสอบ

Page 9: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

9

ASCII Code 7 0 0 0 0 1 1 1 1

Bit 6 0 0 1 1 0 0 1 1

positions 5 0 1 0 1 0 1 0 1

4 3 2 1

0 0 0 0 NUL DLE SP 0 @ P \ p

0 0 0 1 SOH DC1 ! 1 A Q a q

0 0 1 0 STX DC2 “ 2 B R b R

0 0 1 1 ETX DC3 # 3 C S c s

0 1 0 0 EOT DC4 $ 4 D T d t

0 1 0 1 ENQ NAK % 5 E U e u

0 1 1 0 ACK SYN & 6 F V f v

0 1 1 1 BEL ETB ‘ 7 G W g w

1 0 0 0 BS CAN ( 8 H X h x

1 0 0 1 HT EM ) 9 I Y i y

1 0 1 0 LF SUB * : J Z j z

1 0 1 1 VT ESC + ; K [ k {

1 1 0 0 FF FS , < L \ l |

1 1 0 1 CR GS - = M ] m }

1 1 1 0 SO RS . > N ^ n ~

1 1 1 1 SI US / ? O _ o DEL

ตารางขางบนแทนอักขระรหัสต้ังแต 00000000 ถึง 01111111 ถาตองการใชทั้ง 8 บิต รหัสต้ังแต

10000000 ถึง 11111111 จะแทนอักขระพิเศษ เชน ใชแทนอักขระภาษาไทย เปนตน

อักขระที่เปน printable character ไดแกอักขระ ต้ังแต SP (00100000) ถึง ~ (0111110) นอกนั้นจะเปน

อักขระที่ใชควบคุม เชน CR ใชแทนการสิ้นสุดบรรทัด ของระบบปฏิบัติการ Unix หรือ CR กับ LF แทนการสิ้นสุด

บรรทัด ของระบบปฏิบัติการ DOS เปนตน

- แบบ EBCDIC ใชทั้ง 8 บิต แทนรหัส ดูที่ 0http://www.dynamoo.com/technical/ebcdic.htm

- แบบ UNICODE ใช 16 บิตแทนรหัส เพื่อใหสามารถแทนภาษาทั้งหมดในโลกได ดูที่

1 Hhttp://www.unicode.org

Page 10: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

10

1.3.2 จํานวนเต็ม

แทนเลขจํานวนเต็มทั้งแบบที่มีเครื่องหมาย และแบบที่ไมมีเครื่องหมาย

- กรณีไมมีเครื่องหมาย ถาใชจํานวนบิต n บิต จะแทนเลขจํานวนเต็มไมมีเครื่องหมายได ต้ังแต 0 ถึง 2n-1

เชน n = 16 จะแทนเลขจํานวนเต็มไดต้ังแต 0 ถึง 65535 เปนตน

- กรณีมีเครื่องหมาย สามารถแทนไดในสามรูปแบบ คือ

• sign magnitude ใชบิตซายสุด (most significant bit) แทนเครื่องหมาย 0 แทน บวก และ 1 แทน

ลบ บิตที่เหลือใชแทนขนาดของตัวเลข most significant bit least significant bit

n-1 n-2 … 2 1 0

sign magnitude

เชน สมมุติวาใช จํานวนบิต 8 บิต แทนเลขจํานวน +5 และ –5 ไดเปน 00000101 และ 10000101 เปนตน

ถาใชจํานวน n บิต จะแทนเลขจํานวนเต็มแบบมีเครื่องหมาย ไดต้ังแต – (2n-1 – 1) ถึง +(2n-1- 1)

เชน n = 16 จะแทนเลขจํานวนเต็มมีเครื่องหมายไดต้ังแต –32767 ถึง +32767 เปนตน โดยที่ 0 แทนได

ทั้ง +0 และ –0

กรณีที่ตองการขยายจํานวนบิตเพิ่มขึ้นแตตองการใหมีคาเทาเดิม ทําไดโดยการกําหนดใหบิตเครื่องหมายใหมมีคาเทาเดิม จากนั้นเปลี่ยนบิตเครื่องหมายเดิมและบิตใหมที่เหลือ ใหมีคาเปน 0 เชน

คาเดิม 5 เก็บแบบ 8 บิต คือ 00000101 ขยายเปน 16 บิต ไดเปน 0000000000000101

คาเดิม -5 เก็บแบบ 8 บิต คือ 10000101 ขยายเปน 16 บิต ไดเปน 1000000000000101

การเปลี่ยนเลขจํานวนเต็มบวกฐานสองที่เก็บแบบ sign magnitude เปนเลขฐานสิบ ทําไดตามปรกติ เชน

00000101 เทากับ 5 ฐานสิบ

การเปลี่ยนเลขจํานวนเต็มลบฐานสองที่เก็บแบบ sign magnitude เปนเลขฐานสิบ ทําดังนี้

ก. นําเฉพะ magnitude มาเปลี่ยนเปนเลขฐานสิบ

ค. ใสเครื่องหมายเปนลบ

เชน 10000101 (ดู บิต ซายสุด เปน 1 แสดงวาเปนเลขลบ)

Page 11: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

11

ก. นํา magnitude คือ 0000101 มาเปลี่ยนเปนฐานสิบจะได 5

ค. ใสเครื่องหมายเปนลบ จะได -5

• one complement ใชบิตซายสุด (most significant bit) แทนเครื่องหมาย 0 แทน บวก และ 1 แทน

ลบ เชนกัน การแทนเลขบวก จะเหมือนกับแบบ sign magnitude แตการแทนตัวเลขลบ จะตางกัน แบบ one

complement จะแทนตัวเลขลบโดยการ ทํา complement (เปลี่ยนจากเลข 0 เปน 1 และ เปลี่ยนจากเลข 1 เปน 0) กับ

magnitude เชน สมมุติวาใช จํานวนบิต 8 บิต แทนเลขจํานวน +5 และ –5 ไดเปน 00000101 และ 11111010 เปน

ตน

ถาใชจํานวน n บิต จะแทนเลขจํานวนเต็มแบบมีเครื่องหมาย ไดต้ังแต – (2n-1 – 1) ถึง +(2n-1- 1)

เชน n = 16 จะแทนเลขจํานวนเต็มมีเครื่องหมายไดต้ังแต –32767 ถึง +32767 เปนตน โดยที่ 0 แทนไดทั้ง +0

และ –0

กรณีที่ตองการขยายจํานวนบิตเพิ่มขึ้นแตตองการใหมีคาเทาเดิม ทําไดโดยการสําเนาบิตเครื่องหมายใหกับบิตใหม เชน

คาเดิม 5 เก็บแบบ 8 บิต คือ 00000101 ขยายเปน 16 บิต ไดเปน 0000000000000101

คาเดิม -5 เก็บแบบ 8 บิต คือ 11111010 ขยายเปน 16 บิต ไดเปน 1111111111111010

การเปลี่ยนเลขจํานวนเต็มบวกฐานสองที่เก็บแบบ one complement เปนเลขฐานสิบ ทําไดตามปรกติ เชน

00000110 เทากับ 5 ฐานสิบ

การเปลี่ยนเลขจํานวนเต็มลบฐานสองที่เก็บแบบ one complement เปนเลขฐานสิบ ทําดังนี้

ก. ทํา one complement

ข. เปลี่ยนเปนเลขฐานสิบ

ค. ใสเครื่องหมายเปนลบ

เชน 1111010 (ดู บิต ซายสุด เปน 1 แสดงวาเปนเลขลบ)

ก. ทํา one complement ของ 1111010 จะได 0000101

ข. เปลี่ยน 0000101 เปนฐานสิบจะได 5

ค. เครื่องหมายเปนลบ จะได -5

• two complement ใชบิตซายสุด (most significant bit) แทนเครื่องหมาย 0 แทน บวก และ 1 แทน

ลบ เชนกัน การแทนเลขบวก จะเหมือนกับแบบ sign magnitude แตการแทนตัวเลขลบ จะตางกัน แบบ two

complement จะแทนตัวเลขลบโดยการ ทํา complement (เปลี่ยนจากเลข 0 เปน 1 และ เปลี่ยนจากเลข 1 เปน 0) กับ

Page 12: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

12

magnitude แลวบวกดวยหนึ่ง เชน สมมุติวาใช จํานวนบิต 8 บิต แทนเลขจํานวน +5 และ –5 ไดเปน 00000101

และ 11111011 เปนตน

ถาใชจํานวน n บิต จะแทนเลขจํานวนเต็มแบบมีเครื่องหมาย ไดต้ังแต – (2n-1) ถึง +(2n-1- 1)

เชน n = 16 จะแทนเลขจํานวนเต็มมีเครื่องหมายไดต้ังแต –32768 ถึง +32767 เปนตน โดยที่ 0 แทนดวย +0

เทานั้น

กรณีที่ตองการขยายจํานวนบิตเพิ่มขึ้นแตตองการใหมีคาเทาเดิม ทําไดโดยการสําเนาบิตเครื่องหมายใหกับบิตใหม เชน

คาเดิม 5 เก็บแบบ 8 บิต คือ 00000101 ขยายเปน 16 บิต ไดเปน 0000000000000101

คาเดิม -5 เก็บแบบ 8 บิต คือ 11111011 ขยายเปน 16 บิต ไดเปน 1111111111111011

การเปลี่ยนเลขจํานวนเต็มบวกฐานสองที่เก็บแบบ two complement เปนเลขฐานสิบ ทําไดตามปรกติ เชน

00000101 เทากับ 5 ฐานสิบ

การเปลี่ยนเลขจํานวนเต็มลบฐานสองที่เก็บแบบ two complement เปนเลขฐานสิบ ทําดังนี้

ก. ลบดวย 1

ข. ทํา one complement

ค. เปลี่ยนเปนเลขฐานสิบ

ง. ใสเครื่องหมายเปนลบ

เชน 1111011 (ดู บิต ซายสุด เปน 1 แสดงวาเปนเลขลบ)

ก. 1111011 – 1 = 1111010

ข. ทํา one complement ของ 1111010 จะได 0000101

ค. เปลี่ยน 0000101 เปนฐานสิบจะได 5

ง. เครื่องหมายเปนลบ จะได -5

1.3.2.1 การบวกลบเลขจํานวนเต็มไมมีเครือ่งหมาย

การบวก 0 + 0 =0

0 + 1 =1

1 + 0 =1

1 + 1 = 0 ทด 1

เนื่องจากจํานวนบิตที่ใชเก็บมีจํานวนจํากัด การบวกเลขจํานวนเต็มไมมีเครื่องหมาย แลวเก็บผลลัพธโดยใชจํานวนบิตเทาเดิม จึงอาจทําใหเกิดการลน (overflow) โดยดูไดจากบิตที่มีการทดซึ่งเรียกวา carry bit ถาผลลัพธมีการ

Page 13: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

13

ทดดวย 1 เกินออกไปจากจํานวนบิตที่สามารถเก็บได แสดงวามีการลน ในกรณีนี้ carry bit จะเปน 1 และคําตอบที่

เก็บเทากับจํานวนบิตเดิมจะไมถูกตอง แตถาไมมีการลน carry bit จะเปน 0 คําตอบจะถูกตอง เชน

ก. ฐานสิบ ฐานสอง (8 บิต)

250 11111010

+ +

50 00110010

คําตอบที่ถูก คือ 300 carry bit =1 00101100 คําตอบ 8 บิต คือ 00101100 = (64)10 ซึ่งไมถูกตอง

หมายเหตุ จํานวนบิต 8 บิต สามารถเก็บเลขจํานวนเต็มไมมีเครื่องหมายได 0 ถึง 255 ไมสามารถเก็บเลข 300 ได

ข. ฐานสิบ ฐานสอง (8 บิต)

200 11001000

+ +

50 00110010

คําตอบที่ถูก คือ 250 carry bit =0 11111010 คําตอบ 8 บิต คือ 11111010 = (250)10 ซึง่ถูกตอง

การลบ

0 - 0 = 0

0 - 1 = 1 ยืมมาจากหลักหนา 1

1 - 0 = 1

1 – 1 = 0

ในทํานองเดียวกัน การลบเลขจํานวนเต็มไมมีเครื่องหมาย แลวเก็บผลลัพธโดยใชจํานวนบิตเทาเดิม จึงอาจทําใหเกิดการลน (overflow) โดยดูไดจากบิตที่มีการยืมซึ่งเรียกวา carry bit เชนกัน ถาตัวต้ังมีคานอยกวาตัวลบ จะมี

การยืมดวย 1 แสดงวามีการลน ในกรณีนี้ carry bit จะเปน 1 และคําตอบที่เก็บเทากับจํานวนบิตเดิมจะไมถูกตอง แต

ถาไมมีการลน carry bit จะเปน 0 คําตอบจะถูกตอง เชน

ก. ฐานสิบ ฐานสอง (8 บิต)

50 00110010

- -

250 11111010

Page 14: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

14

คําตอบที่ถูก คือ -200 carry bit =1 00111000 คําตอบ 8 บิต คือ 00111000 = (56)10 ซึ่งไมถูกตอง

หมายเหตุ จํานวนบิต 8 บิต สามารถเก็บเลขจํานวนเต็มไมมีเครื่องหมายได 0 ถึง 255 ไมสามารถเก็บเลขลบได

ข. ฐานสิบ ฐานสอง (8 บิต)

200 11001000

- -

50 00110010

คําตอบที่ถูก คือ 150 carry bit =0 10010010 คําตอบ 8 บิต คือ 10010010 = (150)10 ซึง่ถูกตอง 1.3.2.2 การบวกลบเลขจํานวนเต็มมีเครื่องหมายแบบ two complement

การบวก

เหมือนการบวกเลขจํานวนเต็มไมมีเครื่องหมาย แต carry bit ไมมีความหมายใด ๆ และไมสามารถนํามา

พิจารณาวาคําตอบถูกหรือผิด แสดงได ดังตัวอยางตอไปน้ี

ก. ฐานสิบ ฐานสอง (8 บิต)

-4 11111100

+ +

5 00000101

คําตอบที่ถูก คือ +1 carry bit =1 00000001 คําตอบ 8 บิต คือ 00000001 = (+1)10 ซึ่งถูกตอง

หมายเหตุ แม carry bit จะเทากับ 1 แตคําตอบถูกตอง

ข.

ฐานสิบ ฐานสอง (8 บิต)

121 01111001

+ +

11 00001011

คําตอบที่ถูก คือ 132 carry bit =0 10000100 คําตอบ 8 บิต คือ 10000100 = (-124)10 ซึ่งไมถูกตอง

หมายเหตุ แม carry bit จะเทากับ 0 แตคําตอบไมถูกตอง จํานวนบิต 8 บิต สามารถเก็บเลขจํานวนเต็มมีเครื่องหมาย

แบบ two complement ได -128 ถึง +127 ไมสามารถเก็บเลข 132 ได

Page 15: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

15

การตรวจสอบคําตอบของการบวกเลขจํานวนเต็มมีเครื่องหมายแบบ two complement จํานวน n บิต แทน

ดวย bn-1bn-2…b1b0 ตองดูที่ overflow bit ซึ่งมีคาเทากับ cin XOR cout เมื่อ มีการบวกเลขจากหลักที่ 0 และมีการทด

(carry bit) ไปยังหลักที่ 1 จนกระทั้งถึง cin เปน carry bit ของการบวกเลขหลักที่ n-2 ซึ่งจะทดไปหลักที่ n-1 และ

cout เปน carry bit ของการบวกเลขหลักที่ n-1 ซึ่งจะทดไปยังหลักถัดไป เชน

ก. ฐานสิบ ฐานสอง (8 บิต)

-4 11111100

+ +

5 00000101

คําตอบที่ถูก คือ +1 00000001 คําตอบ 8 บิต คือ 00000001 = (+1)10 ซึ่งถูกตอง cin = 1

cout = 1

overflow bit = 1 XOR 1 = 0

หมายเหตุ 0 XOR 0 = 0 , 0 XOR 1 = 1, 1 XOR 0 = 1 , 1 XOR 1 =0

ข. ฐานสิบ ฐานสอง (8 บิต)

121 01111001

+ +

11 00001011

คําตอบที่ถูก คือ 132 10000100 คําตอบ 8 บิต คือ 10000100 = (-124)10 ซึง่ไมถูกตอง cin = 1 cout = 0

overflow bit = 1 XOR 0 = 1

สรุปวา การบวกเลขจํานวนเต็มมีเครื่องหมายแบบ two complement จะไดคําตอบที่ผิดถา overflow bit = 1

มิฉะนั้น จะไดคําตอบที่ถูกตอง (overflow bit = 0)

การลบ

เนื่องจาก A-B = A+(-B) ดังนั้นการลบทําไดดังนี้ ตัวต้ัง + one complement ของตัวลบ +1 และการ

ตรวจสอบวาผลลัพธถูกตองหรือไม ดูที่ overflow bit เหมือนการบวก เชน

ตัวทดของการบวกเลขหลักที่ 0 ซึ่งเกิดจาก 1+1 คือ 1 เพราะ

1+1 = 0 ทด 1

Page 16: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

16

ก. (121-11)10 = (121 + one complement ของ 11 +1)10

ฐานสิบ ฐานสอง (8 บิต)

121 01111001

+ +

one complement ของ 11 11110100

+ +

1 00000001

คําตอบที่ถูก คือ 110 01101110 คําตอบ 8 บิต คือ 10000100 = (110)10 ซึ่งถูกตอง cin = 1 cout = 1

overflow bit = 1 XOR 1 = 0

ข. (-1-128)10 = (-1 + one complement ของ 128 +1)10

ฐานสิบ ฐานสอง (8 บิต)

-1 11111111

+ +

one complement ของ 128 10000000

+ +

1 00000001

คําตอบที่ถูก คือ -129 10000000 คําตอบ 8 บติ คือ 10000000 = (-128)10 ซึง่ไมถูกตอง cin = 1 cout = 0

overflow bit = 1 XOR 0 = 1

1.3.3 จํานวนจริง เลขจํานวนจริงสามารถแทนตัวเลขที่มีขนาดใหญ เชน 1.234x1085 หรือขนาดเล็กเชน 1.234x10 –85 ได เลข

จํานวนจริงประกอบดวย สวน mantissa หรือ fractional part กับ สวน exponent ในกรณีนี้ ฐานยกกําลัง (base

exponent) คือ 10 เชน 1.234X1035 มี 1.234 เปนสวน mantissa และ 35 เปนสวน exponent มีฐานยกกําลัง 10

ในการแทนเลขจํานวนจริงสามารถเก็บเฉพาะ mantissa และ exponent โดยไมจําเปนตองเก็บเลขฐานยกกําลัง

เนื่องจากสามารถกําหนดตายตัวไดวาเลขฐานยกกําลังเปนอะไร สําหรับคอมพิวเตอรซึ่งเก็บขอมูลในรูปเลขฐานสอง ปรกติแลว จะใชฐานยกกําลัง เปน 2, 4, 8, หรือ 16 จะไมใชฐานยกกําลังเปน 10 และเพื่อใหมีความแมยําสูงสุด

Page 17: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

17

คอมพิวเตอรสวนใหญจะเก็บ mantissa แบบ normalized คือ ใหจุดไปอยูหนา เลขนัยสําคัญตัวแรกของ mantissa

(ในกรณีเลข 0 จะแทนในรูปแบบพิเศษ เชน mantissa และ exponent เปน 0 ทั้งคู) นั่นคือ

1/เลขฐานยกกําลัง <= | mantissa | < 1

เชน (0.00173)10 สามารถแทนไดเปน 0.000173x101 , 0.001730x100, 0.017300x10-1, หรือ 0.173000x10-2

แบบหลังสุดจะเปนแบบ normalized

(103.5)10 เก็บแบบ normalized คือ 0.1035x103

(0.000011101)2 เก็บแบบ normalized คือ 0.11101x2-4

• Institute of Electrical and Electronic Engineers (IEEE) standard

เลขจํานวนจริงเก็บตามมาตรฐาน IEEE ดังนี้

short real S biased exponent mantissa

31 23 1. กรณี normalized 0

0. กรณี denormalized

long real S biased exponent mantissa

63 52 1. กรณี nomalized 0

0. กรณี denomalized

S เปนเครื่องหมายของ mantissa โดยที่ 1 แทน – และ 0 แทน +

biased exponent เก็บทั้งคาและเครื่องหมายของ exponent ดังนี้

กรณี short real

exponent biased exponent (8 บิต)

-127 0

-126 1

. . .

-1 126

0 127

1 128

. . .

126 253

127 254

หมายเหตุ เก็บเลขนัยสําคัญฐานสิบได 7 หลัก และยกกําลังฐานสิบไดประมาณ 10-38 ถึง 1038

Page 18: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

18

กรณี long real

exponent biased exponent (11 บิต)

-1023 0

-1023 1

. . .

-1 1022

0 1023

1 1024

. . .

1022 2045

1023 2046

หมายเหตุ เก็บเลขนัยสําคัญฐานสิบได 15 หลัก และยกกําลังฐานสิบไดประมาณ 10-308 ถึง 10308

mantissa ทํา normalized แลวคูณดวย 2 เพื่อให 1 อยูหนาจุด และลบสวน biased exponent ดวยหน่ึง

เพื่อใหคาเทาเดิม ตัวเลขหลังจุดเก็บเปนสวน mantissa (เลข 1 หนาจุดไมจําเปนตองเก็บ)

กรณีพิเศษ biased exponent mantissa special meaning

all 0 all 0 floating point zero

all 0 nonzero denormalized

all 1 all 0 infinity

all 1 nonzero NaN (Not a Number)

สูตรที่ใชคํานวณเลขจํานวนจริงที่เก็บตามมาตรฐาน IEEE

สมมุติวา คาที่เก็บคือ SEM เมื่อ S แทนบิตซายสุด (0 แทน บวก และ 1 แทนลบ) E แทนเลขฐานสองในสวน

bias exponent และ M แทนเลขฐานสองในสวน mantissa

ก. กรณี normalized

สําหรับ short real จะมีคาฐานสิบ เปน (-1)**S * 1.M*2**(E-127)

สําหรับ long real จะมีคาฐานสิบ เปน (-1)**S * 1.M*2**(E-1023)

Page 19: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

19

ข. กรณี denomalized จะทําใหเลขนัยสําคัญลดลง แตคาเขาใกล 0 มากขึ้น

สําหรับ short real จะมีคาฐานสิบ เปน (-1)**S * 0.M*2**-126

สําหรับ long real จะมีคาฐานสิบ เปน (-1)**S * 0.M*2**-1022

ตัวอยาง short floating point (41200000)16 หรือ

(0100 0001 0010 0000 0000 0000 0000 0000)2

⇒ s = 0 หรือ +

biased exponent = (10000010)2 หรือ (130)10 ดังนั้น exponent จริง = 130 – 127 = 3 หรือ (11)2

และ mantissa = (01000000000000000000000)2 ดังนั้น mantissa ที่ถูกตอง = (1.01)2

ดังนั้นคาที่แทนคือ (1.01)2 x (10)2(11)2 หรือ (1010)2 (หมายเหตุ เลื่อนจุดไปทางขวา 3 ตําแหนง) ซึ่งมีคา

เทากับ 10 เลขฐานสิบนั่นเอง 1.3.4 Binary Coded Decimal (BCD) โปรแกรมประยุกตบางโปรแกรมเปนแบบ io bound คือ มีการคํานวณนอย แตสวนใหญเปนการนําขอมูลเขาหรือแสดงผลลัพธ การแทนขอมูลแบบที่กลาวมาจึงอาจไมเหมาะสม เพราะจะตองเสียเวลาแปลงขอมูล

จากขอมูลเขาเปนเลขฐานสองและแปลงขอมูลจากเลขฐานสองเปนขอมูลออก จึงมีการแทนขอมูลอีกแบบหนึ่งที่

เรียกวา BCD เพื่อใหการนําขอมูลเขาและแสดงผลลัพธทําไดเร็วขึ้น เราสามารถใชเลขฐานสอง 4 ตัว แทนเลขฐานสิบหนึ่งตัว ดังนี้

เลขฐานสิบ BCD 0 0000

1 0001

2 0010

3 0011

4 0100

5 0101

6 0110

7 0111

8 1000

9 1001

Page 20: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

20

เราสามารถเก็บเลข BCD แบบ unpacked หรือ packed

• Unpacked BCD

ประกอบดวยสี่บิตซายซึ่งเปน 0000 และสี่บิตขวาซึ่งเปน BCD หนึ่งตัว เชน (1234)10 แทนแบบ Unpacked

BCD ดังนี้ 0000 0001 0000 0010 0000 0011 0000 0100

• Packed BCD

ประกอบดวยสี่บิตซายซึ่งเปน BCD หนึ่งตัว และสี่บิตขวาซึ่งเปน BCD อีกหนึ่งตัว เชน (1234)10 แทนแบบ

Packed BCD ดังนี้ 0001 0010 0011 0100 กรณีที่ไมครบไบต จะเติมศูนยขางหนา เชน (123)10 แทนแบบ

Packed BCD ดังนี้ 0000 0010 0011 0100

1.4 Big Endian v.s. Little Endian ในกรณีที่มีการอางอิงตําแหนงของขอมูลไดเปนไบต (byte addressable) ขอมูลที่ใชเนื้อที่มากกวาหนึ่งไบต คือ เปนคํา (word) เชน จํานวนจริงหรือจํานวนเต็ม เปนตน มีการเก็บขอมูลไดสองลักษณะ คือ แบบ big

endian กับ แบบ little endian

• แบบ big endian ขอมูลไบตที่มีนัยสําคัญต่ําเก็บที่ไบตเลขที่สูง ดังภาพ most significant least significant

byte byte

7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0

เลขที่ x 0000 0001

x+1 1111 0010

ตัวอยาง เชน MIPS

0 0 0 0 0 0 0 1 1 1 1 1 0 0 1 0

Page 21: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

21

• little endian ขอมูลไบตที่มีนัยสําคัญต่ําเก็บที่ไบตเลขที่ตํ่า ดังภาพ

most significant least significant

byte byte

7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0

เลขที่ x 1111 0010

x+1 0000 0001

ตัวอยาง เชน Intel 80x86

2.1 รูปแบบคาํสั่งภาษาเครื่อง ซีพียูสามารถประมวลผลไดเฉพาะคําสั่งภาษาเครื่อง (machine language) เทานั้น คําสั่งภาษาเครื่องมีรหัส

เปนเลขฐานสอง ประกอบดวยสวนที่สําคัญสองสวน คือ รหัสดําเนินการ (operation code) ซึ่งตองมี และ ตัวถูก

ดําเนินการ (operands) ซึ่งอาจจะไมมี หรือมีหนึ่งถึงสามตัว

รหัสดําเนินการ เชน บวก, ลบ, คูณ, หรือ หาร เปนตน บอกใหรูวา จะทําอะไร สวนตัวถูกดําเนินการ เปน

ขอมูลที่จะนํามาดําเนินการ ซึ่งอาจจะเปนขอมูลที่อยูในคําสั่ง เรียกวา immediate operand เชน คาคงที่ตาง ๆ หรือ

อาจเปนขอมูลในเรจิสเตอร เรียกวา register operand หรือ อาจเปนการอางถึงตําแหนงของหนวยความจําหลักที่เก็บ

ขอมูล หรืออางถึงตําแหนงของ I/O

จะเห็นไดวา การเขียนโปรแกรมเพื่อดําเนินการกับขอมูล แบบ immediate หรือ แบบ register จะทําไดเร็ว

กวา การดําเนินการกับขอมูลในหนวยความจําหรืออุปกรณ I/O

ซีพียู fetch คําสั่งภาษาเครื่องมาจากหนวยความจําหลัก ทีละคําสั่ง แลว execute ทีละคําสั่ง ซีพียูสามารถ

คํานวณทางคณิตศาสตร ทดสอบทางตรรกะ และทํางานขั้นพื้นฐานอื่น ๆ ดังนั้น การคํานวณมาก ๆ เชน คําสั่งของภาษาระดับสูง X := ((A*B)+(C/D))-10; จําเปนตองแปลเปนคําสั่งพื้นฐาน หลายคําสั่ง คือ T1:=A*B

T2:=C/D

T3:=T1+T2

X:=T3-10

0 0 0 0 0 0 0 1 1 1 1 1 0 0 1 0

Page 22: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

22

แตละคําสั่ง จะทํางานขั้นพื้นฐาน คือ บวก, ลบ, คูณ และหาร เปนตน ในตัวอยางนี้ แตละคําสั่งมีตัวถูกดําเนินการ สาม

ตัว

คําสั่งภาษาเครื่องอาจแบงกลุมออกได ตามชนิดของการดําเนินการ เชน การคํานวณทางคณิตศาสตร, การ

ทดสอบทางตรรกะ, การเคลื่อนยายขอมูล เปนตน หรือ อาจแบงตามจํานวนตัวถูกดําเนินการ (อาจเปน immediate,

register, หรือ memory address) ดังนี้

• Three-address instructions เปนคําสั่งที่มีตัวถูกดําเนินการ 3 ตัว มีตัวถูกดําเนินการตัวหนึ่งไวสําหรับเก็บผลลัพธ เชน

คําส่ัง ความหมาย ADD X,Y,T T:=X+Y SUB X,Y,T T:=X-Y MUL X,Y,T T:=X*Y DIV X,Y,T T:=X/Y

ต.ย. X := ((A*B)+(C/D))-10;

ความหมาย: กรณีใช 3 ตัวแปร (T1,T2,T3) หรือ กรณีใช 2 ตัวแปร (T1,T2)

T1:=A*B T1:=A*B หมายถึง T1 <- A*B

T2:=C/D T2:=C/D หมายถึง T2 <- C/D

T3:=T1+T2 T1:=T1+T2 หมายถึง T1 <- T1+T2 = (A*B)+(C/D)

X:=T3-10 X:=T1-10 หมายถึง X <- T1-10 = ((A*B)+(C/D))-10

หมายเหตุ ตัวแปร <- นิพจน และ ตัวแปร := นิพจน หมายถึง คํานวณนิพจนและนําคาที่ไดมาใสในตัวแปรทางซาย

เขียนดวย three-address instructions ได ดังนี้

หมายเหตุ หรือ หมายเหตุ MUL A,B,T1 ; T1 <- A*B MUL A,B,T1 ; T1 <- A*B

DIV C,D,T2 ; T2 <- C/D DIV C,D,T2 ; T2 <- C/D

ADD T1,T2,T3 ; T1 <- T2+T3 = (A*B)+(C/D) ADD T1,T2,T1 ; T1 <- T1+T2 = (A*B)+(C/D)

SUB T3,10,X ; X <- T3-10 = ((A*B)+(C/D))-10 SUB T1,10,X ; X <- T1-10 = ((A*B)+(C/D))-10

Page 23: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

23

• Two-address instructions เปนคําสั่งที่มีตัวถูกดําเนินการ 2 ตัว หลังจากดําเนินการแลว ตัวถูกดําเนินการตัวหนึ่งไวเก็บผลลัพธ เชน คําส่ัง ความหมาย ADD X,Y X:=X+Y SUB X,Y X:=X-Y MUL X,Y X:=X*Y DIV X,Y X:=X/Y MOV X,Y X:=Y (หมายเหตุ Y ยังคงมคีาเทาเดิม) CMP X,Y เปรียบเทียบ X กับ Y และกาํหนดให FLAG เปน EQ, GT, หรอื LT JE X กระโดดไปทีต่ําแหนง X ถา FLAG เปน EQ มิฉะน้ัน ทาํคําส่ังถดัไป JNE X กระโดดไปทีต่ําแหนง X ถา FLAG เปน GT หรอื LT มิฉะน้ัน ทาํคาํส่ังถัดไป JL X กระโดดไปทีตํ่าแหนง X ถา FLAG เปน LT มิฉะน้ัน ทาํคําส่ังถดัไป JLE X กระโดดไปทีต่ําแหนง X ถา FLAG เปน LT หรอื EQ มิฉะน้ัน ทาํคาํส่ังถัดไป JG X กระโดดไปทีต่ําแหนง X ถา FLAG เปน GT มิฉะน้ัน ทาํคําส่ังถดัไป JGE X กระโดดไปทีต่ําแหนง X ถา FLAG เปน GT หรอื EQ มิฉะน้ัน ทาํคาํส่ังถัดไป JMP X กระโดดไปทีต่ําแหนง X โดยไมมีเงื่อนไข หมายเหตุ คําสั่ง CMP มีตัวถกูดําเนินการสองตัว และจําเปนตองมีคําสั่ง เพ่ือกระโดดไปที่ตําแหนงที่ตองการ ตามเงื่อนไข หรือโดยไมมีเง่ือนไข ซึ่งเปนคําสั่งทีม่ีตัวถูกดําเนินการเพียงตัวเดียว

ต.ย. X := ((A*B)+(C/D))-10;

ความหมาย: T1:=A*B

T2:=C/D

T1:=T1+T2

X:=T1-10

เขียนดวย two-address instructions ได หลายแบบ ดังนี้

หมายเหตุ หรือ หมายเหตุ MOV T1,A ; T1 <- A MOV T1,A ; T1 <- A

MUL T1,B ; T1 <- T1*B = A*B MUL T1,B ; T1 <- T1*B = A*B

MOV T2,C ; T2 <- C MOV T2,C ; T2 <- C

DIV T2,D ; T2 <- T2/D = C/D DIV T2,D ; T2 <- T2/D = C/D

ADD T1,T2 ; T1 <- T1+T2 = (A*B)+(C/D) ADD T1,T2 ; T1 <- T1+T2 = (A*B)+(C/D)

SUB T1,10 ; T1 <- T1-10 = (A*B)+(C/D)-10 MOV X,T1 ; X <- T1 = (A*B)+(C/D)

MOV X,T1 ; X <- T1 = (A*B)+(C/D)-10 SUB X,10 ; X <- X-10 = ((A*B)+(C/D))-10

Page 24: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

24

• One-address instructions เปนคําสั่งที่มีตัวถูกดําเนินการ 1 ตัว และซีพียูจะตองมีเรจิสเตอรที่เรียกวา accumulator (AC) เพื่อใชในการ

ดําเนินการ เชน คําส่ัง ความหมาย LOAD X AC:=X STORE X X:=AC (หมายเหตุ AC ยังคงมีคาเทาเดมิ) ADD X AC:=AC+X SUB X AC:=AC-X MUL X AC:=AC*X DIV X AC:=AC/X

ต.ย. X := ((A*B)+(C/D))-10;

ความหมาย: T1:=A*B

T2:=C/D

T1:=T1+T2

X:=T1-10

เขียนดวย one-address instructions ได ดังนี้

หมายเหตุ LOAD A ; AC <- A

MUL B ; AC <- AC*B = A*B T1:=A*B

STORE T1 ; T1 <- AC = A*B และ AC = A*B

LOAD C ; AC <- C

DIV D ; AC <- AC/D = C/D T2:=C/D

STORE T2 ; T2 <- AC = C/D และ AC = C/D

LOAD T1 ; AC <- T1 = A*B

ADD T2 ; AC <- AC+T2 = (A*B)+(C/D) T1:=T1+T2

STORE T1 ; T1 <- AC = (A*B)+(C/D)

LOAD T1 ; AC <- T1 = (A*B)+(C/D) หมายเหตุ เสียเวลาไมตองมีก็ได SUB 10 ; AC <- AC-10 = ((A*B)+(C/D))-10

STORE X ; X <- AC = ((A*B)+(C/D))-10

Page 25: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

25

หรือ หมายเหตุ LOAD A ; AC <- A

MUL B ; AC <- AC*B = A*B

STORE T1 ; T1 <- A*B และ AC = A*B

LOAD C ; AC <- C

DIV D ; AC <- AC/D = C/D

ADD T1 ; AC <- AC+T1 = (C/D)+(A*B) = (A*B)+(C/D)

SUB 10 ; AC <- AC-10 = ((A*B)+(C/D))-10

STORE X ; X <- ((A*B)+(C/D))-10

Page 26: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

26

• Zero-address (stack) instructions เปนคําสั่งที่ไมมีตัวถูกดําเนินการ แตมี stack เพื่อใชในการดําเนินการ อยางไรก็ตามจําเปนตองมีคําสั่ง เพื่อ

บรรจุขอมูลของตัวถูกดําเนินการ ลง stack และนําขอมูลออกจาก stack ใสในตัวถูกดําเนินการ เชน คําส่ัง ความหมาย PUSH X ใสคา X ลงบน stack POP X นําคาบนสุดออกจาก stack ใสใน X ADD ใชคาบนสุดของ stack เปนตัวบวก ใชคาที่อยูขางลางคาบนสุด

เปนตัวตัง้ นําคาทั้งสองบวกกัน เอาคาบนสุดและคาทีอ่ยูขางลางคาบนสุดออกจาก stack แลวใสผลบวกลงบน stack

SUB เหมือน ADD แตเปนการลบ MUL เหมือน ADD แตเปนการคณู DIV เหมือน ADD แตเปนการหาร

การทํางานแบบ stack แสดงได ดังนี้

stack empty

push 5 top

push 10 top

add

top

pop X

X <- 15 stack empty

5

10

5

15

Page 27: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

27

ต.ย. X := ((A*B)+(C/D))-10;

ความหมาย: T1:=A*B

T2:=C/D

T1:=T1+T2

X:=T1-10

เขียนดวย zero-address instructions ได ดังนี้

วิธีท่ี 1 PUSH A top

PUSH B top

; T1:=A*B

MUL top

POP T1 ; T1 <- A*B stack empty

PUSH C

PUSH D

DIV ; T2:=C/D

POP T2

PUSH T1

PUSH T2

ADD ; T1:=T1+T2

POP T1

PUSH T1

PUSH 10

SUB ; X:=T1-10

POP X

A

B

A

A*B

Page 28: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

28

วิธีท่ี 2 แปลง ((A*B)+(C/D))-10 ซึ่งเขียนในรูป infix form เปน postfix form ไดเปน AB*CD/+10-

หมายเหตุ infix form (A binary operator B) ตรงกับ postfix form (A B binary operator) เชน

infix form (A+B) ตรงกับ postfix form (AB+)

กรณีที่เปน operand ให push operand กรณีที่เปน operator ใหดําเนินการตาม operator นั้น

เขียนดวย zero-address instructions ได ดังนี้

PUSH A top

PUSH B top

MUL

top

PUSH C top

PUSH D top

DIV

top

A

B

A

A*B

C

A*B

D

C

A*B

C/D

A*B

Page 29: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

29

ADD top

PUSH 10 top

SUB top

POP X X <- ((A*B)+(C/D))-10 stack empty

(A*B)+(C/D)

10

(A*B)+(C/D)

((A*B)+(C/D))-10

Page 30: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

30

ขอแนะนําในการเขียนโปรแกรม

คิดกอน

เขียนขั้นตอนวิธี (algorithm)

เขียนโปรแกม

ยากกวา

งายกวา

งายกวา

งายกวา

Page 31: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

31

Page 32: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

32

Page 33: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

33

Page 34: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

34

Page 35: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

35

Page 36: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

36

Page 37: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

37

Page 38: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

38

Page 39: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

39

Page 40: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

40

Page 41: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

41

Condition

Condition เปนนิพจนตรรกะ (logical expression) ที่ใหคา จริง หรือ เท็จ อยางใดอยางหนึ่ง เกิดจากการนํา

นิพจนคณิตศาสตร (arithmetic expression) มาดําเนินการดวย ตัวดําเนินการสัมพันธ (relational operator) หรือนํา

นิพจนตรรกะมาดําเนินการดวย ตัวดําเนิการตรรกะ (logical operator)

ตัวดําเนิการคณิตศาสตร ไดแก + บวก

- ลบ

* คูณ

/ หาร

เชน x, 10, (x+y)-5

ตัวดําเนินการสัมพันธ ไดแก = เทากับ

≠ ไมเทากับ < นอยกวา

≤ นอยกวาหรือเทากับ

> มากกวา

≥ มากกวาหรือเทากับ เชน X = Y, X < Y*5

ตัวดําเนิการตรรกะ ไดแก not, and, or

มีตารางความจริง ดังนี้ not T F and T F or T F

F T T T F T T T

F F F F T F

เชน X < Y and Y < Z

Page 42: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

42

ดูภาคผนวก ข. ประกอบ

ต.ย. ก. รหัสเทียม (pseudo code)

IF (A=B)

THEN A:=A+1;

ELSE B:=B-1;

END_IF;

ผังงาน (flowchart): true false ความหมาย: ถา A เทากับ B จริง ทํา A:=A+1 มิฉะนั้น ทํา B:=B-1

เขียนดวย two-address instructions ได หลายแบบ ดังนี้

หรือ CMP A,B CMP A,B

JE $THEN JNE $ELSE

SUB B,1 ADD A,1

JMP $ENDIF JMP $ENDIF

$THEN: ADD A,1 $ELSE: SUB B,1

$ENDIF: $ENDIF:

หมายเหตุ ในที่นี้ จะตั้งช่ือตําแหนงโดยเขียนขึ้นตนดวย $ และลงทายดวย : และไมจําเปนตองมีช่ือเปน $THEN,

$ELSE หรือ $ENDIF จะใชช่ือื่นก็ได

A=B

A:=A+1 B:=B-1

Page 43: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

43

ข. รหัสเทียม: SUM:=0;

I := 1;

WHILE I ≤ 100

SUM := SUM + I;

I := I + 1; loop body

END_WHILE; ผังงาน: true false ความหมาย: ตองการบวกเลข 1 ถึง 100 เก็บที่ตัวแปร SUM

ตรง WHILE I ≤ 100 …<loop body>…

END_WHILE;

หมายถึง ใหทําใน loop body ซ้าํ ถา I มีคามากกวาหรือเทากับ 100 แตถา I มากกวา 100 เลิกทํา

SUM:=0

I:=1

I≤100

SUM:=SUM+I

I:=I+1

Page 44: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

44

เขียนดวย two-address instructions ได หลายแบบ ดังนี้

หรือ MOV SUM,0 MOV SUM,0

MOV I,1 MOV I,1

$WHILE: CMP I,100 $WHILE: CMP I,100

JLE $LOOP JG $ENDWHILE

JMP $ENDWHILE

$LOOP: ADD SUM,I ADD SUM,I ADD I,1 ADD I,1

JMP $WHILE JMP $WHILE

$ENDWHILE: $ENDWHILE:

Page 45: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

45

รหัสเทียมอ่ืน ๆ เชน

ก. CASE I OF

1: …case1…

BREAK;

2: …case2…

BREAK;

3: …case3…

BREAK;

DEFAULT: …casedefault.. ;

END_CASE;

มีความหมายเหมือน

IF I = 1 THEN …case1…

ELSE IF I = 2 THEN …case2…

ELSE IF I=3 THEN …case3…

ELSE …casedefault…

END_IF;

ข. FOR I = initvalue TO finalvalue

END_FOR;

มีความหมายเหมือน

I:=initvalue;

WHILE I ≤ finalvalue

I := I+1;

END_WHILE;

Page 46: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

46

แบบฝกหัด

1. จงแปลรหัสเทียมตอไปนี้ โดยใชคําสั่งแบบ two-address instructions

หมายเหตุ เขียนไดหลายวิธี ก. A := B+1;

คําตอบ หรือ หรือ MOV A,B ADD B,1 MOV T,B

ADD A,1 MOV A,B ADD T,1

MOV A,T

ข. C := (A/5)*(E-F);

คําตอบ หรือ หรือ DIV A,5 MOV C,A MOV T1,A

SUB E,F DIV C,5 DIV T1,5

MUL A,E MOV T,E MOV T2,E

MOV C,A SUB T,F SUB T2,F

MUL C,T MUL T1,T2

MOV C,T1

ค. IF A < 0

THEN E:=F*G;

ELSE E:=F/G

END_IF;

คําตอบ หรือ หรือ CMP A,0 CMP A,0 CMP A,0

JL $TRUE JL $TRUE JGE $FALSE

DIV F,G DIV F,G MUL F,G

MOV E,F JMP $L2 JMP $L2

JMP $ENDIF $TRUE: MUL F,G $FALSE: DIV F,G

$TRUE: MUL F,G $L2: MOV E,F $L2: MOV E,F

MOV E,F $ENDIF: $ENDIF:

$ENDIF:

Page 47: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

47

ง. A:=0;

SUM:=0;

WHILE A<10

A:=A+1;

SUM:=SUM+A;

END_WHILE;

คําตอบ หรือ MOV A,0 MOV A,0

MOV SUM,0 MOV SUM,0

$WHILE: CMP A,10 $WHILE: CMP A,10

JL $BODY JGE $ENDWHILE

JMP $ENDWHILE

$BODY: ADD A,1 ADD A,1

ADD SUM,A ADD SUM,A

JMP $WHILE JMP $WHILE

$ENDWHILE: $ENDWHILE:

Page 48: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

48

จ. IF (A>100) AND (B>50) AND (C>20)

THEN D:=0;

ELSE D := 1;

END_IF;

คําตอบ หรือ CMP A,100 CMP A,100

JG L1

JMP $ELSE JLE $ELSE

L1: CMP A,50 CMP A,50

JG L2

JMP $ELSE JLE $ELSE

L2: CMP C,20 CMP C,20

JG $THEN

JMP $ELSE JLE $ELSE

$THEN: MOV D,0 MOV D,0

JMP $ENDIF JMP $ENDIF

$ELSE: MOV D,1 $ELSE: MOV D,1

$ENDIF: $ENDIF:

Page 49: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

49

ฉ. CASE I OF

1: D:=A; BREAK;

2:D:=B;BREAK;

3:D:=C;BREAK;

DEFAULT:D:=0;

END_CASE;

คําตอบ CMP I,1

JE L1

CMP I,2

JE L2

CMP I,3

JE L3

MOV D,0

JMP L4

L1: MOV D,A

JMP L4

L2: MOV D,B

JMP L4

L3: MOV D,C

L4:

Page 50: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

50

ช. SUM:=0;

FOR I:=1 TO 200

SUM:=SUM+(I*I);

END_FOR;

คําตอบ MOV SUM,0

FORI: MOV I,1

LOOPI: CMP I,200

JG ENDLOOPI

MOV T,I ระวัง MUL I,I ไมได เพราะ I จะเปลี่ยนคา ทําให loop ผิด MUL T,T

ADD SUM,T

ADD I,1

JMP LOOPI

ENDLOOPI:

Page 51: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

51

2. กําหนดคําสั่งเพิ่มเติมจากขอ 1. ตอไปนี้

คําสั่ง ความหมาย

READ X อานคาจากอุปกรณนําขอมูลเขามาเก็บที่ X

WRITE X แสดงผลลัพธของ X ไปยังอุปกรณนําขอมูลออก

ก. เขียนโปรแกรม เพื่ออานเลขจํานวนเต็มบวก (N) และพิมพคา Factorial ของเลขดังกลาว (N!)

คําตอบ มีหลายวิธี ในที่นี้เปนเพียงคําตอบหนึ่งเทานั้น

ขั้นตอนที่ 1 ใหคิดกอน ดังนี้ เนื่องจาก N! = N*(N-1)*(N-2)* …*2*1 หรือ = 1* N*(N-1)*(N-2)* …*2

ดังนั้น

อานขอมูลมาเก็บที่ N

เริ่มตนให FAC <- 1 FAC <- FAC*N FAC <- 1*N

N <- N-1 N <- N-1

FAC <- FAC*N FAC <- 1*N*(N-1)

N <- N-1 N <- N-2 …

FAC <- FAC*N FAC <- 1*N*(N-1)*…*2

N <- N-1 N มีคานอยกวา 2

แสดงผลลัพธของ FAC

หมายเหตุ ทํา ซ้ําจนกวา N มีคานอยกวา 2

ขั้นตอนที่ 2 เขียนรหัสเทียมได ดังนี้ READ N;

FAC := 1;

WHILE N ≥ 2

FAC := FAC*N;

N := N-1;

END_WHILE;

WRITE FAC

ใหทดลองใสขอมูลเมื่อ N เปน 0, 1, 2, 3 แลวทําตามขั้นตอนที่เขียน ตรวจสอบวาคําตอบถูกหรือไม

Page 52: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

52

เม่ือ N = 0 READ N; N

FAC := 1; FAC

WHILE N ≥ 2 FAC := FAC*N;

N := N-1;

END_WHILE;

WRITE FAC

READ N; N

FAC := 1; FAC

WHILE N ≥ 2 FAC := FAC*N;

N := N-1;

END_WHILE;

WRITE FAC

READ N; N

FAC := 1; FAC

WHILE N ≥ 2 เท็จ FAC := FAC*N;

N := N-1;

END_WHILE;

WRITE FAC

READ N; N

FAC := 1; FAC

WHILE N ≥ 2 FAC := FAC*N;

N := N-1;

END_WHILE;

WRITE FAC 0! = 1 ถูกตอง

0

?

1

0

1

0

1

0

Page 53: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

53

เม่ือ N = 1 READ N; N

FAC := 1; FAC

WHILE N ≥ 2 FAC := FAC*N;

N := N-1;

END_WHILE;

WRITE FAC

READ N; N

FAC := 1; FAC

WHILE N ≥ 2 FAC := FAC*N;

N := N-1;

END_WHILE;

WRITE FAC

READ N; N

FAC := 1; FAC

WHILE N ≥ 2 เท็จ FAC := FAC*N;

N := N-1;

END_WHILE;

WRITE FAC

READ N; N

FAC := 1; FAC

WHILE N ≥ 2 FAC := FAC*N;

N := N-1;

END_WHILE;

WRITE FAC 1! = 1 ถูกตอง

1

?

1

1

1

1

1

1

Page 54: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

54

เม่ือ N = 2 READ N; N

FAC := 1; FAC

WHILE N ≥ 2 FAC := FAC*N;

N := N-1;

END_WHILE;

WRITE FAC

READ N; N

FAC := 1; FAC

WHILE N ≥ 2 FAC := FAC*N;

N := N-1;

END_WHILE;

WRITE FAC

READ N; N

FAC := 1; FAC

WHILE N ≥ 2 จริง FAC := FAC*N;

N := N-1;

END_WHILE;

WRITE FAC

READ N; N

FAC := 1; FAC

WHILE N ≥ 2 FAC := FAC*N;

N := N-1;

END_WHILE;

WRITE FAC

2

?

1

2

1

2

1*2 = 2

2

Page 55: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

55

READ N; N

FAC := 1; FAC

WHILE N ≥ 2 FAC := FAC*N;

N := N-1;

END_WHILE;

WRITE FAC

READ N; N

FAC := 1; FAC

WHILE N ≥ 2 เท็จ FAC := FAC*N;

N := N-1;

END_WHILE;

WRITE FAC

READ N; N

FAC := 1; FAC

WHILE N ≥ 2 เท็จ FAC := FAC*N;

N := N-1;

END_WHILE;

WRITE FAC 2! = 2 ถูกตอง

กรณี N = 3 ทําในลักษณะเดียวกัน

2

1

2

2-1=1

2

1

Page 56: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

56

ขั้นตอนที่ 3 เขียนเปนคําสั่งได ดังนี้

READ N

MOV FAC,1

L1: CMP N,2

JL L2

MUL FAC,N

SUB N,1

JMP L1

L2: WRITE FAC

Page 57: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

57

ข. เขียนโปรแกรม เพื่อพิมพเลข Fibonacci จํานวน 20 ตัวแรก เมื่อ เลข Fibonacci มีนิยาม ดังนี้ F1 := 1, F2:=1

Fi = Fi-1 + Fi-2 i = 3, 4, 5, . . .

คําตอบ มีหลายวิธี ในที่นี้เปนเพียงคําตอบหนึ่งเทานั้น

ขั้นตอนที่ 1 ใหคิดกอน ดังนี้ F1 <- 1

พิมพ F1

F2 <- 1

พิมพ F2

F3 <- F1+F2 = 1+1=2 F3 <- F1+F2 = 1+2=3 …

พิมพ F3 พิมพ F3

F1 <- F2 = 1 F1 <- F2 = 2

F2 <- F3 = 2 F2 <- F3 = 3 …

ทําซา 18 ครั้ง 1 1 2 3 …

ขั้นตอนที่ 2 เขียนรหัสเทียมได ดังนี้ F1:=1;

WRITE F1;

F2 := 1;

WRITE F2;

FOR I:=1 TO 18

F3 := F1+F2;

WRITE F3;

F1:=F2;

F2:=F3;

END_FOR;

Page 58: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

58

ตรวจสอบวาคําตอบถูกหรือไม

F1:=1; F1

WRITE F1;

F2 := 1;

WRITE F2;

FOR I:=1 TO 18

F3 := F1+F2;

WRITE F3;

F1:=F2;

F2:=F3;

END_FOR;

F1:=1; F1

WRITE F1; ได Fibonacci ตัวแรก คือ 1

F2 := 1;

WRITE F2;

FOR I:=1 TO 18

F3 := F1+F2;

WRITE F3;

F1:=F2;

F2:=F3;

END_FOR;

1

1

Page 59: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

59

F1:=1; F1

WRITE F1;

F2 := 1; F2

WRITE F2;

FOR I:=1 TO 18

F3 := F1+F2;

WRITE F3;

F1:=F2;

F2:=F3;

END_FOR;

F1:=1; F1

WRITE F1;

F2 := 1; F2

WRITE F2; ได Fibonacci ตัวที่ 2 คือ 1

FOR I:=1 TO 18

F3 := F1+F2;

WRITE F3;

F1:=F2;

F2:=F3;

END_FOR;

1

1

1

1

Page 60: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

60

F1:=1; F1

WRITE F1;

F2 := 1; F2

WRITE F2;

FOR I:=1 TO 18 I

F3 := F1+F2;

WRITE F3;

F1:=F2;

F2:=F3;

END_FOR;

F1:=1; F1

WRITE F1;

F2 := 1; F2

WRITE F2;

FOR I:=1 TO 18 I

F3 := F1+F2;

WRITE F3; F3

F1:=F2;

F2:=F3;

END_FOR;

1

1

1

1

1

1

1+1 =2

Page 61: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

61

F1:=1; F1

WRITE F1;

F2 := 1; F2

WRITE F2;

FOR I:=1 TO 18 I

F3 := F1+F2;

WRITE F3; ได Fibonacci ตัวที่ 3 คือ 2 F3

F1:=F2;

F2:=F3;

END_FOR; F1:=1; F1

WRITE F1;

F2 := 1; F2

WRITE F2;

FOR I:=1 TO 18 I

F3 := F1+F2;

WRITE F3; F3

F1:=F2;

F2:=F3;

END_FOR;

1

1

1

1+1 =2

1

1

2

1

Page 62: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

62

F1:=1; F1

WRITE F1;

F2 := 1; F2

WRITE F2;

FOR I:=1 TO 18 I

F3 := F1+F2;

WRITE F3; F3

F1:=F2;

F2:=F3;

END_FOR; F1:=1; F1

WRITE F1;

F2 := 1; F2

WRITE F2;

FOR I:=1 TO 18 I

F3 := F1+F2;

WRITE F3; F3

F1:=F2;

F2:=F3;

END_FOR;

2

1

2

1

2

2

2

1

Page 63: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

63

F1:=1; F1

WRITE F1;

F2 := 1; F2

WRITE F2;

FOR I:=1 TO 18 I

F3 := F1+F2;

WRITE F3; F3

F1:=F2;

F2:=F3;

END_FOR;

F1:=1; F1

WRITE F1;

F2 := 1; F2

WRITE F2;

FOR I:=1 TO 18 I

F3 := F1+F2;

WRITE F3; ได Fibonacci ตัวที่ 4 คือ 3 F3

F1:=F2;

F2:=F3;

END_FOR;

ทําเชนนี้จนครบ I > 18 จะได Fibonacci 20 ตัว

2

2

1+2 =3

1

1

2

2

1+2 =3

Page 64: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

64

ขั้นตอนที่ 3 เขียนเปนคําสั่งได ดังนี้

MOV F1,1

WRITE F1

MOV F2,1

WRITE F2

FORI: MOV I,1

LOOPI: CMP I,18

JG ENDLOOPI

MOV F3,F1

ADD F3,F2

WRITE F3

MOV F1,F2

MOV F2,F3

ADD I,1

JMP LOOPI

ENDLOOPI:

Page 65: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

65

ค. เขียนโปรแกรม เพื่อหาคําตอบของสมการ

X + 3Y +9Z = 126 X≥0, Y≥0, Z≥0

คําตอบ มีหลายวิธี ในที่นี้เปนเพียงคําตอบหนึ่งเทานั้น

ขั้นตอนที่ 1 ใหคิดกอน ดังนี้ X Y Z X+3Y+9Z

0 0 0 0 ≠ 126

0 0 1 9 ≠ 126

0 0 2 18 ≠ 126

0 0 14 126 = 126 เปนคําตอบหนึ่ง

0 1 0 3 ≠ 126

0 1 1 12 ≠ 126

0 1 2 21 ≠ 126

0 1 14 129 ≠ 126

0 2 0 6 ≠ 126

0 2 1 15 ≠ 126

0 2 14 132 ≠ 126

0 42 0 126 = 126 เปนคําตอบหนึ่ง …

0 42 14 252 ≠ 126

126 0 0 126 = 126 เปนคําตอบหนึ่ง …

126 42 14 378 ≠ 126

Page 66: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

66

ขั้นตอนที่ 2 เขียนรหัสเทียมได ดังนี้ FOR X:=0 TO 126

FOR Y:=0 TO 42

FOR Z:=0 TO 14

IF (X + 3Y +9Z = 126)

THEN WRITE (X,Y,Z);

END_IF;

END_FOR;

END_FOR;

END_FOR;

ขั้นตอนที่ 3 เขียนเปนคําสั่งได ดังนี้

Page 67: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

67

FORX: MOV X,0

LOOPX: CMP X,126

JG ENDLOOPX

FORY: MOV Y,0

LOOPY: CMP Y,42

JG ENDLOOPY

FORZ: MOV Z,0

$LOOPZ:CMP Z,14

JG ENDLOOPZ

MOV SUM,X

MOV T,Y

MUL T,3

ADD SUM,T

MOV T,Z

MUL T,9

ADD SUM,T ; IF (X+3Y+9Z = 126 )

CMP SUM,126

JNE $ENDIF

WRITE X ; THEN WRITE (X,Y,Z);

WRITE Y

WRITE Z

$ENDIF:

ADD Z,1

JMP $LOOPZ

ENDLOOPZ:

ADD Y,1

JMP LOOPY

ENDLOOPY:

ADD X,1

JMP LOOPX

ENDLOOPX:

Page 68: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

68

3. จากคําสั่งแบบ one-address instruction จงเขียน คําสั่ง เพื่อคํานวณ ((A*(B+C))-D)/E)

คําตอบ LOAD B ; AC:=B

ADD C ; AC:=B+C

MUL A ; AC:=A*(B+C)

SUB D ; AC:=(A*(B+C)-D)

DIV E ; AC:=((A*(B+C))-D)/E)

4. ใชคําส่ังแบบ zero-address instructions เพื่อหาคาของ assignment statement ตอไปนี้

A := (B*C)+((A/D)-C)

ไมอนุญาตใหใชคําส่ัง ADD,SUB,MUL และ DIV มากกวา 1 ครั้ง และจํานวนคําส่ังทั้งหมดตองไมเกิน 10 คําส่ัง

คําตอบ

PUSH B

PUSH C

MUL

PUSH A

PUSH D

DIV

PUSH C

SUB

ADD

POP A

Page 69: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

69

2.2 เปรียบเทียบรูปแบบคําสั่งภาษาเครื่อง สําหรับสถาปตยกรรมแบบ RISC กับ CISC ซีพียูแตละตัวจะมีชุดคําส่ังและรูปแบบที่แตกตางกันออกไป ซีพียูที่มีสถาปตยกรรมแบบ RISC (Reduce

Instruction Set Computer) จะมีจํานวนเรจิสเตอรอเนกประสงคคอนขางมาก, มีขนาดของคําส่ังเทากัน, และการคํานวณจะกระทําระหวาง เรจิสเตอรเปนสวนใหญ เพราะจะเร็วกวาการคํานวณระหวางเรจิสเตอรกับหนวยความจํา การติดตอกับหนวยความจํา มีเพียงคําส่ังบรรจุ (load instruction) เพื่อนําขอมูลจากหนวยความจําเขามายังเรจิสเตอรในซีพียู และคําส่ังเก็บ (store instruction) เพื่อนําขอมูลในเรจิสเตอรไปเก็บในหนวยความจํา เทานั้น ไมมีคําส่ังที่คํานวณระหวางขอมูลในเรจิสเตอรกับในหนวยความจํา บางครั้งจึงเรียกสถาปตยกรรมแบบนี้วา ”บรรจุ-เก็บ” ตางกับสถาปตยกรรมแบบ CISC (Complex Instruction Set Computer) ซึ่งมีคําส่ังที่ใชคํานวณระหวางขอมูลในเรจิสเตอรกับในหนวยความจํา ทําใหมีวิธีการอางถึงตําแหนงในหนวยความจําไดหลายรูปแบบ

สถาปตยกรรมแบบ RISC มองวาคอมไพเลอรสวนใหญผลิตคําส่ังภาษาเครื่องไมกี่รูปแบบ และเชื่อถือความสามารถของคอมไพเลอร ในการทําคําส่ังภาษาเครื่องใหไดผลดีที่สุด (optimization) สวนสถาปตยกรรมแบบ CISC คิดถึงการประหยัดเนื้อที่ และความสามารถของคําส่ังแตละคําส่ัง หนึ่งคําส่ังของสถาปตยกรรมแบบ CISC อาจทํางานไดเทียบเทากับหลายๆ คําส่ังของสถาปตยกรรมแบบ RISC ขอโตเถียงจึงมีวา การทํางานโดยใชคําสั่งจํานวนมาก แตละคําส่ังทํางานนอยแตเร็ว กับใชคําส่ังจํานวนนอย แตละคําส่ังทํางานไดมากกวา แตใชเวลามากกวา อันไหนจะเร็วกวากัน ยังไมมีคําตอบที่ชัดเจน แตแนวโนมของสถาปตยกรรมแบบ RISC เริ่มมีมากขึ้น • ตัวอยาง สถาปตยกรรมแบบ CISC เชน Intel 80x86

สถาปตยกรรมแบบ RISC เชน SPARC, MIPS, PowerPC, PA_RISC

• รูปแบบ คําสั่งของสถาปตยกรรม Intel 80x86 (IA-32 instruction set encoding)

1 or 2 bytes 1 byte 1 byte Address Immediate

(if required) (if required) displacement data

of 1, 2, or 4 of 1, 2, or 4

bytes or none bytes or none

7 6 5 3 2 0 7 6 5 3 2 0

Opcode ModR/M SIB displacement immediate

Mod Reg/opcode R/M Scale Index Base

Page 70: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

70

นอกจากนี้ในคําสั่งยังอาจมี field ยอย ๆ ซึ่งมีความหมาย ดังนี้

• reg เปนเรจิสเตอรอเนกประสงค ใชจํานวนบิต 3 บิต เพื่อกําหนดเรจิสเตอรดังนี้

สําหรับการดําเนินการแบบ 16-bit สําหรับการดําเนินการแบบ 32-bit

reg เมื่อ w = 0 เมื่อ w = 1 reg เมื่อ w = 0 เมื่อ w = 1

000 AL AX 000 AL EAX

001 CL CX 001 CL ECX

010 DL DX 010 DL EDX

011 BL BX 011 BL EBX

100 AH SP 100 AH ESP

101 CH BP 101 CH EBP

110 DH SI 110 DH ESI

111 BH DI 111 BH EDI

• w

w สําหรับการดําเนินการแบบ 16-bit สําหรับการดําเนินการแบบ 32-bit

0 8-bits 8-bits

1 16-bits 32-bits

• s (sign extend(s) bit)

s มีผลกับ 8-bit immediate data มีผลกับ 16-bit หรือ 32-bit immediate data

0 ไมมี ไมมี

1 sign-extend to fill 16-bit or 32-bit ไมมี

• sreg2 or sreg3 (segment register )

2-bit segment register 3-bit segment register

00 ES 000 ES

01 CS 001 CS

10 SS 010 SS

11 DS 011 DS

100 FS

101 GS

110 reserved

111 reserved

• eee (special-purpose register)

Page 71: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

71

eee control register debug register

000 CR0 DR0

001 reserved DR1

010 CR2 DR2

011 CR3 DR3

100 CR4 reserved

101 reserved reserved

110 reserved DR6

111 reserved DR7

• tttn (condition test field)

tttn mnemonic condition

0000 O Overflow

0001 NO No Overflow

0010 B, NAE Below, Not above or equal

0011 NB, AE Not below, Above or equal

0100 E, Z Equal, Zero

0101 NE, NZ Not equal, Not zero

0110 BE, NA Below or equal, Not above

0111 NBE, A Not below or equal, Above

1000 S Sign

1001 NS Not sign

1010 P, PE Parity, Parity Even

1011 NP, PO Not parity, Parity Odd

1100 L, NGE Less than, Not greater than or equal to

1101 NL, GE Not less than, Greater than or equal to

1110 LE, NG Less than or equal to, Not greater than

1111 NLE, G Not less than or equal to, Greater than

• d (direction bit)

Page 72: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

72

d source destination

0 reg field ModR/M or SIB Byte

1 ModR/M or SIB Byte reg field

คําสั่งของสถาปตยกรรม Intel 80x86 มีขนาดไมคงที่ โดยมีขนาดตั้งแต 1 ถึง 6 ไบต และอาจมีตัวถูก

ดําเนินการ ต้ังแต 0 ถึง 2 ตัว โดยที่ตัวดําเนินการสองตัวจะเปนตําแหนงของหนวยความจําทั้งคูไมได

• รูปแบบ คําสั่งของสถาปตยกรรม SPARC

load/store memory at [Rs1]+[Rs2]

(Op=11) 31 29 24 18 13 12 4 0

load/store memory at [Rs1]+const

(Op=11) 31 29 24 18 13 12 0

register-register

(Op=10) 31 29 24 18 13 12 4 0

register-immediate

(Op=10) 31 29 24 18 13 12 0

branch

(Op=00) 31 29 24 18 0

jump/call

(Op=01) 31 29 0

เมื่อ Op = the main opcode Opx = an opcode extension

Rd = the destination regidter Rs1 = source register 1 Rs2 = source register 2

const = a constant (used as and immediate or as an address)

Op Rd Opx Rs1 0 Opx Rs2

Op Rd Opx Rs1 1 const

Op Opx const

Op const

Op Rd Opx Rs1 0 Opx Rs2

Op Rd Opx Rs1 1 const

Page 73: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

73

คําสั่งของสถาปตยกรรม SPARC มีขนาดคงที่ คือ 4 ไบต มีตัวถูกดําเนินการ 1 ถึง 3 ตัว ตัวถูกดําเนินการที่

เปนการอางถึงตําแหนงในหนวยความจํา มีในคําสั่ง load (ldub, ldsb, lduh, ldsh, ld, ldd) และ store (stb, sth, st,

std, swap) สวนคําสั่งอื่น ๆ จะเปนตัวถูกดําเนินการแบบ immediate หรือ register

3. SPARC ARCHITECTURE ในที่นี้จะกลาวถึง SPARC V8 และจะกลาวถึงเฉพาะบางสวนเทานั้น รายละเอียดอื่น ๆ ทั้งหมดใหดูในคูมือ

ของบริษัท SUN

3.1 SPARC Data Formats ขอมูลที่จะนํามาประมวลผลกับสถาปตยกรรม SPARC มีสามแบบ

- Signed Integer – 8, 16, 32 และ 64 บิต เก็บแบบ two’s complement

- Unsigned Integer – 8, 16, 32 และ 64 บิต

- Floating-Point – 32, 64 และ 128 บิต เก็บตามมาตรฐาน ANSI/IEEE Standard 754-1985

ขนาดของขอมูลเรียก ดังนี้ - Byte – 8 บิต

- Halfword – 16 บิต

- Word/Singlerord – 32 บิต

- Tagged Word – 32 บิต (30 บิต บวกกับ 2 tag บิต)

- Doubleword – 64 บิต

- Quadword – 128 บิต

รูปแบบขอมูลมี ดังนี้ 7 6 0

Signed Integer Byte S

15 14 0

Signed Integer Halfword S

Page 74: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

74

31 30 0

Signed Integer Word S

Signed Integer Double

31 30 0

SD-0 S signed integer [62:32]

31 30 0

SD-1 S signed integer [31:0]

7 0

Unsigned Integer Byte

15 0

Unsigned Integer Halfword

31 0

Unsigned Integer Word

Unsigned Integer Double

31 0

UD-0 signed integer [63:32]

31 0

UD-1 signed integer [31:0]

31 30 23 22 0

Floating-point Single S exp[7:0] mantissa [22:0]

(single-precision)

Page 75: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

75

Floating-point Double

(double-precision) 31 30 20 19 0

FD-0 S exp[10:0] mantissa [51:32]

31 0

FD-1 mantissa [31:0]

Floating-point Quad (extended-precision)

31 30 16 15 0

FQ-0 S exp[14:0] mantissa [51:32]

31 0

FQ-1 mantissa [95:64]

31 0

FQ-2 mantissa [63:32]

31 0

FQ-3 mantissa [31:0]

3.2 SPARC Registers ซีพียู SPARC ประกอบดวย integer unit (IU), floating-point unit (FPU) และ coprocessor (CP) ซึ่งจะมี

หรือไมก็ได ซีพียู SPARC มีเรจิสเตอรสองประเภท คือ general-purpose หรือ “working” data registers และ control/status registers

• general-purpose registers ใน IU เรียก r register มี 32 ตัว แตละตัวมีขนาด 32 บิต (V9 มีขนาด 64

บิต) เรจิสเตอรเหลานี้อาจแบงออกเปนสี่กลุม คือ global, in, local และ out

- global registers ใชสําหรับ global data เพื่อเก็บขอมูลที่สามารถเรียกใชไดจากทุก ๆ ฟงกชัน

- in registers บรรจุอากิวเมนตของการเรียกใชฟงกชัน

- local registers ใชสําหรับเก็บตัวแปรทองถิ่นของฟงกชัน

- out registers ใชสําหรับเปนที่เก็บช่ัวคราว ผานอากิวเมนตไปยังฟงกชัน และเก็บคาสงกลับของฟงกชัน

Page 76: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

76

ในภาษาแอสเซมบลี เราสามารถอางถึงเรจิสเตอรเหลานี้ ดังนี้ %g0-%g7, %l0-%l7, %o0-%o7 และ %i0-%i7 หรือ

%r0-%r31 เรจสิเตอรตาง ๆ ใชเพื่อจุดประสงคตาง ๆ ดังนี้ register synonyms usage %g0 %r0 always discards writes and returns zero

%g1 %r1 first of seven registers for data with global context

%g2 %r2

%g3 %r3

%g4 %r4

%g5 %r5

%g6 %r6

%g7 %r7

%o0 %r8 first of six registers for local data and arguments to called subroutines

%o1 %r9

%o2 %r10

%o3 %r11

%o4 %r12

%o5 %r13

%sp %r14 %o6 stack pointer

%o7 %r15 called subroutine return address

%l0 %r16 first of eight registers for local variables

%l1 %r17

%l2 %r18

%i3 %r19

%l4 %r20

%l5 %r21

%l6 %r22

%l7 %r23

%i0 %r24 first of six registers for incoming subroutine arguments

%i1 %r25

%i2 %r26

%i3 %r27

Page 77: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

77

%i4 %r28

%i5 %r29

%fp %r30 %i6 frame pointer

%i7 %r31 subroutine return address

• general-purpose registers ใน FPU เรียก f register มี 32 ตัว แตละตัวมีขนาด 32 บิต มีช่ือเรียกใน

ภาษาแอสเซมบลีวา %f0-%f31

• IU control/status register ประกอบดวย - Processor State Register (PSR) มีขนาด 32 บิต ดังนี้

31 28 27 24 23 20 19 14 13 12 11 8 7 6 5 4 0

impl ver icc reserved EC EF PIL S PS ET CWP

ในที่นี้ จะกลาวถึง เฉพาะ icc ซึ่งมีขนาด 4 บิต ดังนี้ 23 22 21 20

n z v c

เมื่อ n เปน 1 ถาผลลัพธจากการคํานวณ เปน ลบ และเปน 0 ถาผลลัพธเปนบวก

z เปน 1 ถาผลลัพธจากการคํานวณ เปน ศูนย และเปน 0 ถาผลลัพธไมเปนศูนย

v เปน 1 ถาผลลัพธoverflow และเปน 0 ถาผลลัพธไม overflor

c เปน 1 ถาการคํานวณมีการยืมหรือทด มิฉะนั้นเปน 0

- Window Invalid Mask (WIM) มีขนาด 32 บิต ใชเพื่อกําหนด register window วา overflow หรือไม

- Trap Base Register (TBR) ใชเพื่อกําหนดตําแหนงที่จะกระโดดไป เมื่อเกิด trap

- Multiply/Divide Register (Y) ใชเก็บ most significant word of double-precision ของผลลัพธ

สําหรับคําสั่งคูณ และ ใชเก็บ most significant word of double-precision ของตัวต้ัง สําหรับคําสั่ง

หาร เรจิสเตอร Y สามารถอานและเขียนไดดวยคําสั่ง RDY และ WRY ตามลําดับ (หมายเหตุ V9 ไมได

ใช Y อีกแลว)

- Program Counters (PC and nPC) PC เก็บตําแหนงของคําสั่งที่กําลัง execute และ nPC เก็บ

ตําแหนงของคําสั่งถัดไปที่จะ execute ถาไมเกิด trap

Page 78: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

78

- Implementation-dependent Ancillary State Register (ASRs)

- Implementation-dependent IU Deferred-Trap Queue

• FPU control/status register ประกอบดวย - Floating-Point Status Register (FSR) มีขนาด 32 บิต ดังนี้ 31 30 27 23 16 14 11 10 4 0

RD TEM ftt fcc cexc

เมื่อ RD Round Toward

0 Nearest number (even, if equally close)

1 0

2 +∞

3 -∞

fcc Relation

0 fs1 = fs2

1 fs1 < fs2

2 fs1 > fs2

3 fs1 ? fs2, unordered

cexe Condition

0x10 Invalid operation such as ∞ - ∞ or 0 / 0

0x08 Floating overflow

0x04 Floating underflow, number not zero and too small to represent as a normalized

0x02 Division by zero

0x01 Result inexact

- Implementation-dependent Floating-Point Deferred-Trap Queue (FQ)

• Coprocessor (CP) control/status register ถามี ประกอบดวย - Implementation-dependent Coprocessor State Register (CSR)

Page 79: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

79

- Implementation-dependent Coprocessor Deferred-Trap Queue (CQ)

3.3 คําสั่ง

3.3.1 Load/Store Instructions Mnemonic Operation ldsb Load signed byte, propagate sign left in register

ldub Load unsigned byte, clear high 24 bits of register

ldsh Load signed halfword, propagate sign left in register

lduh Load unsigned halfword, clear high 16 bits of register

ld Load word

ldd Load double, register number even, first four bytes into register n, next four

into register n+1

stb Store low byte of register, bits 0-7 into memory

sth Store low two bytes of register, bits 0-15 into memory

st Store register

std Store double, register number even, first four bytes from register n, next four

from register n+1

3.3.2 Arithmetic instructions Mnemonic Operation add perform integer addition

addcc perform integer addition, set condition codes

addx perform extended precision integer addition

addxcc perform extended precision integer addition, set condition codes

taddcc perform tagged integer addition, set condition codes

taddcctv perform tagged integer addition, trap if either source operands’ low-order

two bits are not zero

sub perform integer two’s complement subtraction

subcc perform integer subtraction and set condition codes

subx perform extended precision integer subtraction

Page 80: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

80

subxcc perform extended precision integer subtraction, set condition codes

tsubcc perform tagged integer subtraction, set condition codes

tsubcctv perform tagged integer subtraction, trap if either source operands’ low-order

two bits are not zero

mulscc perform one step of a multiply algorithm

3.3.3 Logical and shift Instructions Mnemonic Operation and perform bit-wise and operation

andcc perform bit-wise and operation, set conditions

andn perform bit-wise and operation with complement pf op2

andncc perform bit-wise and operation with complement of op2, set condition codes

or perform bit-wise or operation

orcc perform bit-wise or operation, set conditions

orn perform bit-wise or operation with complement pf op2

orncc perform bit-wise or operation with complement of op2, set condition codes

xor perform bit-wise xor operation

xorcc perform bit-wise xor operation, set conditions

xnor perform bit-wise xor operation with complement pf op2

xnorcc perform bit-wise xor operation with complement of op2, set condition codes

sll perform logical left-shift

srl perform logical right shift

sra perform logical right arithmetic

3.3.4 Control instructions Mnemonic Operation ba branch always

bn nranch never

be branch on equal

bne brance on not equal

bl branch on less

Page 81: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

81

ble branch on less or equal

bge branch on greayher or equal

bg branch on greater than

blu branch on less, unsigned

bleu branch on less than or equal, unsigned

bgeu branch on greater than or equal, unsigned

bgu branch on greater than, unsigned

bpos branch on positive

bneq branch on negative

bcs branch on C set

bcc branch on C clear

bvs branch on signed overflow

bvc branch on no signed overflow

call function call

jmpl unconditional, register-indirect control transfer

rett return from trap and a register-indirect control transfer

3.3.5 Floating-point instructions Mnemonic Operation ldf load floating-point register with word from memory

lddf load two floating-point registers with a doubleword from memory

stf store floating-point register into memory

stdf store two floating-point registers into memory

fitos convert from integer to single precision floating-point

fitod convert from integer to double-precision floating-point

fitoq convert from integer to extended-precision floating-point

fstoi convert from single-precision floating-point to integer and round

fdtoi convert from double-precision floating-point to integer and round

fqtoi convert from extended-precision floating-point to integer and round

fstod convert from single-precision floating-point to double-precision floating-point

fstoq convert from single-precision floating-point to extended-precision floating-point

Page 82: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

82

fdtoq convert from double-precision floating-point to extended-precision floating-point

fdtos convert from double-precision floating-point to single-precision floating-point and round

fqtod convert from extended-precision floating-point to double-precision floating-point and

round

fqtos convert from extended-precision floating-point to single-precision floating-point and

round

fmovs move a word from f[rs2] to f[rd]

fnegs negate a word from f[rs2] to f[rd]

fabss copy absolute value from f[rs2] to f[rd]

fadds single-precision floating-point add

faddd double-precision floating-point add

faddq extended-precision floating-point add

fsubs single-precision floating-point subtraction

fsubd double-precision floating-point subtract

fsubq extended-precision floating-point subtract

fmuls single-precision floating-point multiply

fmuld double-precision floating-point multiply

fmulq extended-precision floating-point multiply

fsmuld single-precision to double-precision floating-point multiply

fdivs single-precision floating-point division

fdivd double-precision floating-point division

fdivq extended-precision floating-point division

fsqrts single-precision square root

fsqrtd double-precision square root

fsqrtq extended-precision square root

fcmps single-precision compare, set floating condition codes

fcmpd double-precision compare, set floating condition codes

fcmpq extended-precision compare, set floating condition codes

fcmpes single-precision compare, set floating condition codes, exception if unordered

fcmped double-precision compare, set floating condition codes, exception if unordered

fcmpeq extended-precision compare, set floating condition codes, exception if unordered

Page 83: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

83

fba floating branch always

fbn floating branch never

fbu branch on unordered

fbo floating branch on ordered

fbe floating branch on equal

fbue floating branch on unordered or equal

fbne floating branch on not equal

fblg floating branch on less or equal

fbl floating branch on less

fbul branch on unordered or less

fble floating branch on less or equal

fbule floating branch on unordered, less or equal

fbge branch on greater than or equal

fbuge floating branch on unordered, greater or equal

fbg floating branch on greater

fbug floating branch on unordered or greater

Page 84: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

84

4. Intel Architecture (IA) ในที่นี้จะกลาวถึงเฉพาะบางสวนเทานั้น รายละเอียดอื่น ๆ ทั้งหมด ใหดูในคูมือของบริษัท Intel

ตารางแสดงขนาดของ bus และ หนวยความจํา

Year micro processor data bus width address bus width memory size

1978 8086 16 20 1M

1979 8088 8 20 1M

1982 80286 16 24 16M

1985 80386SX 16 24 16M

80386DX 32 32 4G

1989 80486 32 32 4G

1993 Pentium 64 32 4G

1995 P6 Family (micro-architecture)

Pentium Pro 64 36 64G

(+MMX) -> Pentium II, Pentium II Xeon, Celeron,

(+MMX+Streaming SIMD Extension (SSE)) -> Pentium III, Pentium III Xeon

2000 Pentium 4 (NetBurst micro-architecture, Extend MMX , SSE2, [+Hyper-Threading])

Xeon

Pentium M

หมายเหตุ 8086 ถึง 80386SX ไมมี math coprocessor ตองซื้อ 8087, 80287 หรือ 80387 สวน 80386DX, 80486,

/Pentium, Pentium Pro มี math coprocessor หรือ floating point unit ดวย

protected mode เริ่มมีต้ังแต 80286 แตซีพียูที่มี data bus และ address bus ขนาด 32 บิต ซึ่งสามารถ

อาง memory address ไดถึง 4G ไดแก 80386DX (นิยมเรียกวา Intel386 หรือ 80386) เปนตนไป เปน processor ที่

อยูในตระกูลของ IA-32 (Intel Architecture 32) Processor

Modes of Operation

IA-32 processor จะมี 3 mode คือ protected mode, real-address mode และ system management

mode สวน virtual-8086 mode เปน mode พิเศษของ protected mode

Page 85: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

85

Memory Management

ก. Real-address Mode เมื่อเริ่มตนเปดเครื่อง จะอยูใน mode นี้ เพื่อใหมองเหมือนกับ 8086/8088 เดิม ซึ่งใช address bus 20 บิต

ดังนั้นจึงสามารถอางถึง memory address ไดตั้งแต (00000)16 ถึง (FFFFF)16 ซึ่งมีขนาด 1M ตําแหนงของ

หนวยความจําใช segment ขนาด 16 บิต และ offset ขนาด 16 บิต และมีวิธีการคํานวณเพื่อใหได 20 บิต ดังนี้

memory address (20 บิต) = segment *16 + offset

หมายเหตุ การคูณดวย 16 เทากับ เปนการเติม 0 ดานขวามือจํานวน 4 บิต หรือเทากับเลข 0 ฐานสิบหกหนึ่งตัว

เชน segment = (901F)16 และ offset = (0100)16 จะได memory address = (901F0)16 + (0100)16 = (902F0)16

ข. Protected Mode ใน mode นี้ ใช address bus ขนาด 32 บิต สามารถอางไดถึง 4GB ตั้งแต address (00000000)16 ถึง

(FFFFFFFF)16 ใน mode นี้ อาจมอง memory แบบ flat segmentation model หรือ มองแบบ multi-segment

model

หมายเหตุ สําหรับ protected mode สามารถกําหนดให บิตที่ 17 ของ EFLAGS ซึ่งเรียกวา VM (Virtual Mode) ให

มีคาเปน 1 เพื่อใหเปน virtual-8086 mode ทําใหเสมือนหนึ่งมีหนวยความจํา 1M ไดหลาย ๆ สวน จึงสามารถวิ่ง

DOS มากกวาหนึ่งตัวบน Window ไดพรอม ๆ กัน

The boot process

เมื่อเริ่มเปดเครื่อง จะอยูใน real-address mode และเกิดขบวนการ "cold boot" ดังนี้ ซีพียูเขาสูสถานะ

reset จากนั้นเริ่มลางหนวยความจําใหมีคาเปน 0 ตรวจสอบความถูกตองของหนวยความจํา (parity check) แลว

กําหนดให เรจิสเตอร CS มีคาเทากับ (FFFF)16 และเรจิสเตอร IP มีคาเทากับ 0 ซึ่งเปนตําแหนงของคําส่ังแรกที่จะ

กระทําการ ตําแหนงนี้จะอยูใน ROM BIOS จากนั้น BIOS จะตรวจสอบอุปกรณตาง ๆ และ initialize อุปกรณที่ติดตั้ง

เหลานั้น จากนั้นจะสราง ตาราง BIOS interrupt service ที่บริเวณ interrupt vector และ BIOS data เริ่มตั้งแต

ตําแหนง 400H จากนั้นไปตรวจสอบวาจานแมเหล็กมีระบบปฏิบัติการ (Operating System) หรือไม ถามีจะอาน

ขอมูลใน boot sector เขามายังหนวยความจํา ขอมูลดังกลาว คือ bootstrap loader ซึ่งทําหนาที่บรรจุ

ระบบปฏิบัติการ สําหรับ DOS ประกอบดวยแฟมขอมูล 3 แฟม คือ IBMBIO.COM (หรือ IO.SYS), IBMDOS.COM

(หรือ MSDOS.SYS), และ COMMAND.COM จะถูกบรรจุลงหนวยความจํา จากนั้นระบบปฏิบัติการ DOS จะอาน

config.sys เพื่อติดตั้ง driver เพิ่ม และอานแฟม autoexec.bat และปฏิบัติตามคําส่ังในนั้น จากนั้นขึ้น prompt เพื่อ

รอรับคําส่ัง สําหรับระบบปฏิบัติการอื่น ๆ ก็ทําในลักษณะคลาย ๆ กัน สําหรับ WINDOWS จะเปลี่ยนจาก real-

address mode เปน protected mode

Page 86: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

86

4.1 Data Formats ขอมูลที่จะนํามาประมวลผล มีสามแบบ

- Signed Integer – 8, 16, 32 และ 64 บิต เก็บแบบ two’s complement

- Unsigned Integer – 8, 16, 32 และ 64 บิต

- Floating-Point – 32, 64 และ 80 บิต เก็บตามมาตรฐาน ANSI/IEEE Standard 754-1985

ขนาดของขอมูลเรียก ดังนี้ - Byte – 8 บิต

- Word – 16 บิต

- Double Word – 32 บิต

- Quadword – 64 บิต

รูปแบบขอมูลมี ดังนี้ 7 6 0

Signed Integer Byte S

15 14 0

Signed Integer Word S

31 30 0

Signed Integer Doubleword S

63 62 0

Signed Integer Quadword S

7 0

Unsigned Integer Byte

15 0

Unsigned Integer Word

Page 87: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

87

31 0

Unsigned Integer Doubleword

63 0

Unsigned Integer Quadword

packed decimal S d17 d16 d15 d14 d13 d12 d11 d10 d9 d8 d7 d6 d5 d4 d3 d2 d1 d0

79 72 71 0

short real S biased exponent significand (mantissa)

31 23 1. 0

long real S biased exponent significand (mantissa)

63 52 1. 0

temporary real S biased exponent significand (mantissa)

79 64 63 0

หมายเหตุ การเก็บขอมูลเปนแบบ little endian เชน

1234H เก็บแบบ word 12345678H เก็บแบบ doubleword

memory address value memory address value

0000 0001 12 0000 0011 12 (MSB)

0000 0000 34 0000 0010 34

0000 0001 56

0000 0000 78 (LSB)

Page 88: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

88

4.2 REGISTERS 8086/8088 16-bit names 8-bit names

15 8 7 0 15 0

AX AH AL Accumulator CS Code Segment

BX BH BL Base DS Data Segment

CX CH CL Count SS Stack Segment

DX DH DL Data ES Extra Segment

15 0

BP Base Pointer

SP Stack Pointer

SI Source Index

DI Destination Index

15 0

IP Instruction pointer

FLAGS Flags

Page 89: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

89

IA-32 registers 32-bit names 16-bit names 8-bit names

31 15 8 7 0 15 0

EAX AX AH AL Accumulator CS Code Segment

EBX BX BH BL Base DS Data Segment

ECX CX CH CL Count SS Stack Segment

EDX DX DH DL Data ES Extra Segment

31 15 0 FS

EBP BP Base Pointer GS

ESP SP Stack Pointer

ESI SI Source Index

EDI DI Destination Index

31 15 0

EIP IP Instruction pointer

EFLAGS FLAGS Flags

เมื่อ EFLAGS คือ

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

0 NT IOPL OF DF IF TF SF ZF 0 AF 0 PF 1 CF

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16

ID VIP VIF AC VM RF

- CF (Carry Flag)

- PF (Parity Flag)

- AF (Auxiliary carry Flag)

- ZF (Zero Flag)

- SF (Sign Flag)

Page 90: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

90

- TF (Trap Flag)

- IF (Interrupt Flag)

- DF (Direction Flag)

- OF (Overflow Flag)

- IOPL (I/O Privilege Level)

- NT (Nested Task Flag)

- RF (Resume Flag)

- VM (Virtual-8086 Mode)

- AC (Alignment Check)

- VIF (Virtual Interrupt Flag)

- VIP (Virtual Interrupt Pending)

- ID (Identification Flag)

เรจิสเตอรอื่น ๆ Control Registers CR(0-3) Paging, caching, and protection (386+)

Debug Registers DR(0-7) Data and instruction breakpoints (386+)

Test Registers TR(3-7) Testing the TLB and cache (386+)

Global Descriptor GDTR Address and limit of GDT (286+)

Local Descriptor LDTR Address, limit, and selector of

LDT (286+)

Interrupt Descriptor IDTR Address and limit of IDT (286+)

Task Register TR Address, limit, selector, and attributes of current task

Page 91: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

91

Floating-Point Register Stack DATA FIELD TAG FIELD

79 78 64 63 0 1 0

sign exponent significant (mantissa)

ST(0)

ST(1)

ST(2)

ST(3)

ST(4)

ST(5)

ST(6)

ST(7)

15 0

control register

status register

Page 92: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

92

Control Register

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

IC RC PC IEM PMUM OM ZM DM IM

invalid operation

denormalized operand

zero divide

overflow

underflow

precision

reserved

interrupt enable mask (1)

precision control (2)

rounding control (3)

infinity control (4)

reserved

(1) Interrupt-Enable Mask

0 = Interrupts Enabled

1 = Interrupt Disabled (masked)

(2) Precision Control

00 = 24 bits

01 = (reserved)

10 = 53 bits

11 = 64 bits

(3) Rounding Control

00 = Round to Nearest or Even

01 = Round Down (toward -∞)

10 = Round Up (toward +∞)

11 = Chop (Truncate Toward Zero)

(4) Infinity Control

0 = Projective (∞) 1 = Affine (+∞,-∞)

Page 93: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

93

Status Register

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

B C3 ST C2 C1C0 IR PE UE OE ZE DE IE

invalid operation

denormalized operand

zero divide

overflow

underflow

precision

reserved

interrupt request

condition code (1)

stack top pointer (2)

busy

(1) See descriptions of compare, test, examine and remainder instruction

(2) ST values:

000 = register 0 is stack top

001 = register 1 is stack top

111 = register 7 is stack top

Page 94: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

94

4.3 เทคนิคการอางอิงขอมูล สถาปตยกรรม Intel 80x86 มี memory addressing mode เพื่ออางถึงเลขที่อยูของหนวยความจําไดหลาย

รูปแบบ ในที่นี้จะพูดถึงเฉพาะ การอางอิงขอมูลในหนวยความจําแบบ 32-bit memory addressing modes

4.3.1 displacement-only or direct addressing modes มีรูปแบบ ดังนี้ VarName+/-constant หรือ VarName[+/-constant] หรือ [VarName+/-constant]

ตําแหนงของหนวยความจํา (effective address) คือ คา (32 บิต) จะอยูที่ตําแหนงซึ่งกําหนดดวยตัวแปร

(VarName) บวกหรือลบกับคาคงที่ (constant) (ถามี) เชน .data

mydata DD 15 mydata eax

DD 20 mydata+4 ebx

.code

mov eax,mydata หรือ move ax,[mydata]

mov ebx,mydata+4 ; หรือ เหมือนกับ mov ebx,mydata[4] หรือ mov ebx,[mydata+4]

4.3.2 register indirect addressing modes มีรูปแบบ ดังนี้ [eax+/-constant]

[ebx+/-constant]

[ecx+/-constant]

[edx+/-constant]

[edi+/-constant]

[esi+/-constant]

[ebp+/-constant]

[esp+/-constant]

ตําแหนงของหนวยความจํา (effective address) คือ คา (32 บิต) จะอยูที่ตําแหนงซึ่งกําหนดดวยคาในเรจิ

สเตอรที่กําหนดบวกหรือลบกับคาคงที่ (ถามี) เชน

15

20

15

20

Page 95: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

95

lea ebx,mydata

mov eax,[ebx] ebx

eax

mydata 4.3.3 indexed addressing modes มีรูปแบบ ดังนี้ VarName+/-constant[eax+/-constant]

VarName+/-constant[ebx+/-constant]

VarName+/-constant[ecx+/-constant]

VarName+/-constant[edx+/-constant]

VarName+/-constant[edi+/-constant]

VarName+/-constant[esi+/-constant]

VarName+/-constant[ebp+/-constant]

VarName+/-constant[esp+/-constant]

ตําแหนงของหนวยความจํา (effective address) คือ คา (32 บิต) จะอยูที่ตําแหนงซึ่งกําหนดดวย VarName

บวกหรือลบกับคาคงที่ (ถามี) บวกกับคาในเรจิสเตอรที่กําหนด บวกหรือลบกับคาคงที่ (ถามี) เชน

mov ebx,8 ebx eax

mov eax,mydata[ebx]

mydata+8

mydata

8

+

15

15

Page 96: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

96

4.3.4 scaled indexed addressing modes มีรูปแบบ ดังนี้ VarName+/-constant[IndexReg32*scale]

VarName+/-constant[IndexReg32*scale +/- constant ]

[ BaseReg32 + IndexReg32*scale ]

[ BaseReg32 + IndexReg32*scale +/- constant ]

VarName+/-constant[ BaseReg32 + IndexReg32*scale ]

VarName+/-constant[ BaseReg32 + IndexReg32*scale +/- constant ]

เมื่อ BaseReg32 อาจเปน EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP

IndexReg32 อาจเปน EAX, EBX, ECX, EDX, ESI, EDI, EBP (ยกเวน ESP)

scale อาจเปน 1, 2, 4 หรือ 8

ตําแหนงของหนวยความจํา (effective address) คือ คา (32 บิต) จะอยูที่ตําแหนงซึ่งกําหนดดวย

VarName+/-constant (ถามี) บวกคาใน BaseReg32 (ถามี) บวกกับคาใน IndexReg32 (ถามี) คูณกับ scale (ถามี)

และบวกหรือลบกับคาคงที่ (ถามี) เชน

eax

mov eax,mydata[ebx+esi*4+4]

4

esi +

* 4+

ebx

+

mydata

Page 97: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

97

4.4 Data Transfer Instructions

mnemonic assembler format flags

VM RF NT PLI OF DF IF TF SF ZF AF PF CF General Purpose

mov mov destination,source - - - - - - - - - - - - -

movzx mov destination,source - - - - - - - - - - - - -

movsx mov destination,source - - - - - - - - - - - - -

xchg xchg destination,source - - - - - - - - - - - - -

push push source - - - - - - - - - - - - -

pop pop destination - - - - - - - - - - - - -

pushfd pushfd - - - - - - - - - - - - -

popfd popfd * * * * * * * * * * * * * Address Transfer lea lea reg,mem - - - - - - - - - - - - - Flag Transfer lahf lahf - - - - - - - - - - - - -

sahf sahf - - - - - - - - * * * * *

Note! * means changed and – means unchanged

4.4.1 General Purpose MOV : Move Data

mov reg,imm

mov reg,reg

mov reg,mem

mov mem,imm

mov mem,reg

หมายเหตุ - destination จะเปน immediate operand ไมได เชน mov 5,ax ผิด

- operand ทั้งคูเปนหนวยความจําไมได เชน mov X,Y ผิด แต mov X,eax ถูก (เมื่อ X เก็บขอมูลขนาด 32 บิต)

Page 98: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

98

มีขอกําหนด ดังนี้ ก. ขนาดของขอมูลตองเทากัน เชน mov eax,bl ผิด แต mov eax,ebx ถูก

ข. ไมสามารถก็อปปขอมูลคาคงที่ (immediate operand ไปยัง segment register) เชน mov ds,100 ผิด ให

ใช mov ax,100 และ mov ds,ax แทน

ค. destination เปน CS, EIP และ IP ไมได เชน mov cs,ax ผิด

ตัวอยาง mov ax,bx

mov bl,cl

mov esi,eax

mov eax,mydata

mov ax,mydata+4

mov cl,[ebx]

mov al,5

mov ax,5

mov eax,5

mov mydata[ebx],5

mov mydata[ebx+esi*4+4,5

MOVZX : Move with zero-extend movzx r32,r/m8

movzx r32,r/m16

movzx r16,r/m8

ต.ย. mov al,5 ; al = 00000101

movzx eax,al ; eax = 00000000 00000000 00000000 00000101

MOVSX : Move with sign-extend movsx r32,r/m8

movsx r32,r/m16

movsx r16,r/m8

Page 99: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

99

ต.ย. mov al,-5 ; al = 11111011

movzx eax,al ; eax = 11111111 11111111 11111111 11111011

XCHG : Exchange xchg reg,reg

xchg reg,mem

xchg mem,reg

ตัวอยาง xchg ax,bx

xchg al,bh

xchg tempw,dx

xchg dl,tempb

xchg eax,ebx

PUSH : Push onto Stack push r/m16

push r/m32

push imm32

ถา push คา 16 (หรือ 32) บิต จะลบ ESP ดวย 2 (หรือ 4) แลว mov คาแบบ little endian ไปยัง stack

ตัวอยาง push esi

push counter

push table[eax+4]

push 5

POP : Pop from the Stack pop r/m16

pop r/m32

Page 100: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

100

ถา pop คา 16 (หรือ 32) บิต จะ mov คาแบบ little endian จาก stack ไปยัง r/m แลวบวก ESP ดวย 2

(หรือ 4)

ตัวอยาง pop table[ebp+8]

pop counter

pop eax

PUSHFD : Push EFLAGS register on the stack pushfd

หมายเหตุ read-address mode ใช pushf สําหรับ push FLAGS register

POPFD : Pop the stack into EFLAGS register popfd

หมายเหตุ read-address mode ใช popf สําหรับ pop FLAGS register

ตัวอยาง การดําเนินการกับขอมูลใน stack กอน push

ESP = 1008

1007

1006

1005

1004

1003

push eax ; eax = 11111111000000001010101011110000

1008

1007 11111111

1006 00000000

1005 10101010

ESP = 1004 11110000

1003

Page 101: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

101

pop ebx ; ebx = 11111111000000001010101011110000

ESP = 1008

1007 11111111

1006 00000000 แมจะมีคาคางอยูแตไมถือวาเปนขอมูลใน stack

1005 10101010

1004 11110000

1003 4.4.2 Address Transfer LEA : Load effective address lea reg,mem

การทํางาน จะนํา memory address ที่กําหนดตรง mem ใสใน reg

ตัวอยาง lea eax,mydata

ความแตกตางระหวาง mov กับ lea มีดังนี้

สมมุติวา ตัวแปร X อยูที่ memory address 1000 และเก็บคา 15 คําสั่ง mov eax,X จะไดวา eax มีคาเทากับ 15

แต lea eax,X จะไดวา X มีคาเทากับ 1000

4.4.3 Flag Transfer LAHF : Load Flags into AH Register lahf SAHF : Store AH into Flags sahf

Page 102: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

102

4.5 Arithmetic instructions 4.5.1 Processing unsigned and signed data

ตัวอยาง a) no carry or overflow unsigned signed binary decimal decimal OF CF 11111001 249 -7

+ 00000010 2 +2

11111011 251 -5 0 0

b) arithmetic carry unsigned signed binary decimal decimal OF CF 11111100 252 -4

+ 00000101 5 +5

(1)00000001 1 +1 0 1

(invalid) (valid)

c) overflow unsigned signed binary decimal decimal OF CF 01111001 121 +121

+ 00001011 11 +11

10000100 132 -124 1 0

(valid) (invalid)

d) carry and overflow unsigned signed binary decimal decimal OF CF 11110110 246 -10

+ 10001001 137 -119

(1)01111111 127 +127 1 1

(invalid) (invalid)

Page 103: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

103

4.5.2 Data in decimal format

มีสองรูปแบบ

• Unpacked BCD หรือ ASCII

• Packed BCD

เชน 1,527 Format Contents Length

ASCII 31h 35h 32h 37 h 4 bytes

Unpacked BCD 01h 05h 02h 07h 4 bytes

Packed BCD 15h 27h 2 bytes

หมายเหตุ - สําหรับ ASCII และ unpacked BCD ดูคําสั่ง AAA สําหรับการบวก และ AAS สําหรับการลบ

- สําหรับ unpacked BCD ดูคําสั่ง AAM สําหรับการคูณ และ AAD สําหรับการหาร

- สําหรับ packed BCD ดูคําสั่ง DAA สําหรับการบวก และ DAS สําหรับการลบ

Page 104: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

104

Arithmetic Instructions

mnemonic assembler format flags

VM RF NT PLI OF DF IF TF SF ZF AF PF CF Addition

add add destination,source - - - - * - - - * * * * *

adc adc destination,source - - - - * - - - * * * * *

aaa aaa - - - - ? - - - ? ? * ? *

daa daa - - - - ? - - - * * * * *

inc inc destination - - - - * - - - * * * * -

Subtraction sub sub destination,source - - - - * - - - * * * * *

sbb sbb destination,source - - - - * - - - * * * * *

aas aas - - - - ? - - - ? ? * ? *

das das - - - - ? - - - * * * * *

dec dec destination - - - - * - - - * * * * -

neg neg destination - - - - * - - - * * * * *

cmp cmp destination,source - - - - * - - - * * * * *

Multiplication mul mul source - - - - * - - - ? ? ? ? *

imul imul source - - - - * - - - ? ? ? ? *

aam aam - - - - ? - - - * * ? * ?

Division div div source - - - - ? - - - ? ? ? ? ?

idiv idiv source - - - - ? - - - ? ? ? ? ?

aad aad - - - - ? - - - * * ? * ?

Sign-Extension cbw cbw - - - - - - - - - - - - -

Page 105: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

105

cwd cwd - - - - - - - - - - - - -

cdq cdq - - - - - - - - - - - - -

Note! * means changed, – means unchanged, and ? means undefined

4.5.3 Addition ADD : Add Binary Numbers

add destination,source หมายเหตุ มีขอกําหนดตาง ๆ เหมือนคําสั่ง mov

มีผลกับคา flags ดังนี้

- CF มีคา 0 ถาผลลัพธไมมีการทดคา มีคา 1 ถาผลลัพธมีการทดคา

- PF มีคา 0 ถาผลลัพธมีจํานวนบิตที่มีคา 1 เปนคี่ มีคา 1 ถาผลลัพธมีจํานวนบิตที่มีคา 1 เปนคู

- AF มีคา 0 ถาผลการบวกเลขฐานสิบไมตองปรับคา (พิจารณาเฉพาะการทดคาจากบิต 3 ไป 4 ของ AL)

มีคา 1 ถาผลการบวกเลขฐานสิบตองปรับคา (พิจารณาเฉพาะการทดคาจากบิต 3 ไป 4 ของ AL)

- ZF มีคา 0 ถาผลลัพธไมใช 0 มีคา 1 ถาผลลัพธเปน 0

- SF มีคา 0 ถาผลลัพธมีคาบวก มีคา 1 ถาผลลัพธมีคาลบ

- OF มีคา 1 ถาเปนการบวกเลขที่ sign bit เหมือนกัน แตใหผลลัพธที่มี sign bit เปลี่ยนไป มิฉะนั้นจะมีคาเปน 0

ตัวอยาง พิจารณาการบวกเลขฐาน 2 ตอไปน้ี

; AL = 01110011 = 115 decimal BL = 00010010 = 18 decimal

add al,bl ; al เก็บผลลัพธ = 10000101 , bl unchanged

;CF = 0, AF = 0, ZF = 0, SF = 1, OF = 1, PF = 0

sign bit ; unsigned addition valid signed addition invalid

bit 7654 3210

AL 0111 0011 operands have the same sign (i.e. 0)

BL 0001 0010 sign bit changed (from 0 to 1) OF = 1

AL 1000 0101 # of 1 is odd PF = 0, bit 7 is 1 so SF =1, result ≠ 0 so ZF = 0

0 0

CF AF

คําสั่ง ADD จะบวกเลขฐาน 2 ดังกลาวขางตนเสมอ ทานผูซึ่งเปนคนเขียนโปรแกรมตองตีความเองวา ทาน

กําลังบวกเลขที่มีเครื่องหมายหรือไมมีเครื่องหมาย ถาทานบวกเลขที่มีเครื่องหมาย ทานจะตรวจสอบวาผลลัพธ overflow ไดโดยตรวจสอบจาก OF = 1 ได เชน ตัวอยางขางตน (+115) + (+18) = +133 ซึ่งมีคาเกิน +127 ซึ่งถาดู

Page 106: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

106

จากผลลัพธแลว 1000 0101 มีคาเทากับ –123 ซึง่ไมถูกตอง แตถาทานบวกเลขที่ไมมีเครื่องหมาย ทานจะตรวจสอบวา

ผลลัพธ overflow ไดโดยตรวจสอบจาก OF = 1 ไมได เพราะถาดูจากตัวอยางขางตน 115 + 18 = 133 ซึ่งมีคาไมเกิน

255 ซึ่งถาดูจากผลลัพธแลว 1000 0101 มีคาเทากับ 133 ซึ่งถูกตอง การตรวจสอบวาการบวกเลขที่ไมมีเครื่องหมาย

เกิด overflow หรือไมใหดูที่ CF = 1 หรือไม เชน

; AL = 11111111 , unsigned = 255 decimal, signed = -1

; BL = 00000001 , unsigned = 1 decimal , signed = +1 decimal

add al,bl ; al เก็บผลลัพธ = 00000000 , bl unchanged

;CF = 1, AF = 1, ZF = 1, SF = 0, OF = 0, PF = 1

; unsigned addition invalid signed addition valid

sign bit

bit 7654 3210

AL 1111 1111 operands have the different sign OF = 0

BL 0000 0001

AL 0000 0000 # of 1 is even PF = 1, bit 7 is 0 so SF =0, result = 0 so ZF = 1

1 1

CF AF

ADC : Add with Carry adc destination,source

หมายเหตุ เหมือน ADD แตบวก carry flag(CF) ดวย คือ destination = destination + carry + source

ตัวอยาง add eax,ecx

adc ebx,edx

Page 107: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

107

ADC EBX,EDX ADD EAX,ECX

CF

EBX EAX

EDX ECX

EBX EAX AAA : ASCII Adjust for Addition

สมมุติวาเราตองการบวกตัวเลข ASCII 8 (38H) และ 4 (34H)

0011 1000 (ASCII 38H)

+ (ใชคําสั่ง ADD)

0011 0100 (ASCII 34H)

0110 1100 (6CH)

จะเห็นไดวาผลลัพธที่ไดไมเปนไปตามที่เราคาดหวัง เราคาดหวังวาจะได ASCII 1 (31H) ASCII 2 (32H)

หรือ 12 (3132H) คําสั่ง AAA และ OR (จะกลาวในบทถัดไป) จะชวยเราในเรื่องนี้

คําสั่ง AAA ไมมี operand ใชเพื่อปรับคาในเรจิสเตอร AX หรือ EAX เทานั้น โดยการพิจารณาคา 4 บิตลาง

ของ AL ถามีคาระหวาง 0-9 ก็จะทําให 4 บิตบนของ AL มีคาเปน 0 และกําหนดให AF กับ CF มีคาเปน 0 แตถา 4 บิต

ลางของ AL มีคามากกวา 9 หรือ AF มีคา 1 จะมีวิธีการปรับคา ดังนี้

- บวก 6 กับเรจิสเตอร AL เลข 6 มาจาก 16 (hexadecimal) – 10 (decimal)

- บวก 1 กับเรจิสเตอร AH

- กําหนดให AF = 1 และ CF = 1

- 4 บิตบนของเรจิสเตอร AL มีคา 0

หมายเหตุ ถาตองการเก็บตัวทดใน AH กอนใชคําสั่ง AAA ทํา AH ใหเปน 0 แลวใชคําสั่งบวกที่มี AL เปน destination

กอน

Page 108: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

108

ตัวอยาง ก.

; AH = 0 AL = 34H (ASCII 4)

; BL = 38H (ASCII 8)

MOV AX,0034H ; AH = 0, AL = 34H

MOV BL,38H

ADD AL,BL ; add 34H with 38H, AX equals 006CH

AAA ; เนื่องจาก 4 บิตลางของ AL มีคามากกวา 9 บวก 6 กับ AL บวก 1 กับ AH

; กําหนดให CF = 1 และ AF = 1 แลวทําให 4 บิตบนของ AL มีคาเทากับ 0

; ผลสุดทาย AX = 0102H

ข. ; AL = 39H (ASCII 9)

MOV AX,0039H ; AH = 0, AL = 39H

ADD AL,AL ; add 39H with 39H, AX equals 0072H, AF = 1

AAA ; เนื่อง AF = 1 แมคาจาก 4 บิตลางของ AL มีคานอยกวา 9 บวก 6 กับ AL

; บวก 1 กับ AH

; กําหนดให CF = 1 และ AF = 1 แลวทําให 4 บิตบนของ AL มีคาเทากับ 0

; ผลสุดทาย AX = 0108H

จะเห็นไดวาทั้งสองตัวอยางขางตน ยังไมไดคา 3132H หรือ 3138H ตามที่เราตองการ จะตองใชคําสั่ง

OR AX,3030H จึงจะไดคาตามที่ตองการ ดังนั้นช่ือของ AAA (ASCII Adjust for Addition) ที่ใช อาจจะทําให

เขาใจผิดไดงาย จริง ๆ แลวคําสั่ง AAA เปนแคการปรับคาของการบวก Unpacked BCD เทานั้น นาจะมีช่ือเปน Unpacked BCD Adjust for Addition

สรุปแลว AAA ใชไดทั้งการปรับคาของการบวก ASCII และ Unpacked BCD แตถาเปนการบวกของ

ASCII และตองการใหผลลัพธเก็บอยูในรูป ASCII ตองใชคําสั่ง OR AX,3030H เพิ่มอีกคําสั่งหนึ่ง

Page 109: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

109

DAA : Decimal Adjust for Addition

ใชสําหรับปรับคาของการบวก packed BCD วิธีการปรับคาของคําสั่ง DAA ทําดังนี้

- ถา 4 บิตลางของเรจิสเตอร AL มีคามากกวา 9 หรือ AF = 1 จะบวกคา 6 กับเรจิสเตอร AL และ

กําหนดให AF = 1

- ถา 4 บิตบนของเรจิสเตอร AL มีคามากกวา 9 หรือ CF = 1 จะบวกคา 60h กับเรจิสเตอร AL

และกําหนดให CF = 1

ตัวอยาง

ก. ผลลัพธเก็บใน AL พอ

; AL = 0101 1001 = 59 BCD

; BL = 0011 0101 = 35 BCD

ADD AL,BL ; AL =1000 1110 = 8EH incorrect

DAA ; AL = 1001 0100 = 94 BCD

AL 0101 1001 59H

BL 0011 0101 35H

ADD AL,BL

AL 1000 1110 8EH

CF = 0 AF = 0

DAA

AL 1000 1110

0000 0110 6H because AH > 9 add 6 to AL and set AF = 1

AL 1001 0100 94H

Page 110: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

110

ข. ผลลัพธเก็บใน AL ไมพอ (หลังจากทําคําสั่ง DAA ดู CF =1)

; AL = 1000 1000 = 88 BCD

; BL = 0100 1001 = 49 BCD

MOV AX,88H

MOV BL,49H

ADD AL,BL ; AL =1101 0001 , AF = 1

DAA ; add 0110 because AF = 1

; AL = 1101 0111 = D7H

; 1101 > 9 add 0110 0000

; CF = 1 and AL = 0011 0111 = 37

ADC AH,0 ; AX = 0000 0001 0011 0111 = 0137 BCD INC : Increment by 1 inc destination

Page 111: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

111

4.5.4 Subtraction SUB : Subtract Binary Numbers sub destination,source

มีผลกับคา flags ดังนี้

- CF มีคา 0 ถาผลลัพธไมมีการขอยืมคา

มีคา 1 ถาผลลัพธมีการขอยืมคา

- PF มีคา 0 ถาผลลัพธมีจํานวนบิตที่มีคา 1 เปนคี่

มีคา 1 ถาผลลัพธมีจํานวนบิตที่มีคา 1 เปนคู

- AF มีคา 0 ถาผลการบวกเลขฐานสิบไมตองปรับคา (พิจารณาเฉพาะการยืมคาจากบิต 4 ของ AL)

มีคา 1 ถาผลการบวกเลขฐานสิบตองปรับคา (พิจารณาเฉพาะการยืมคาจากบิต 4 ของ AL)

- ZF มีคา 0 ถาผลลัพธไมใช 0

มีคา 1 ถาผลลัพธเปน 0

- SF มีคา 0 ถาผลลัพธมีคาบวก

มีคา 1 ถาผลลัพธมีคาลบ

- OF มีคา 1 ถาการลบเลขที่มีเครื่องหมายตางกันใหผลลัพธที่ใหญหรือเล็กกวาที่จะเก็บได เชน ลบเลขขนาด 8 บิต

ไดผลลัพธนอยกวา –128 หรือมากกวา 127 เปนตน

ตัวอยาง ; AL = 01110011 = signed +115 decimal = unsigned 115 decimal

; BL = 11101110 = signed -18 decimal = unsigned 238 decimal

sub al,bl ; al เก็บผลลัพธ = 10000101 , bl unchanged

;CF = 1, AF = 1, ZF = 0, SF = 1, OF = 1, PF = 0

sign bit ; unsigned subtraction invalid signed subtraction invalid

bit 7654 3210

AL 0111 0011 operands have the different sign

BL 1110 1110 for signed result can not fit so OF = 1

AL 1000 0101 # of 1 is odd PF = 0, bit 7 is 1 so SF =1, result ≠ 0 so ZF = 0

1 1

CF AF

Page 112: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

112

คําสั่ง SUB ก็เหมือนกับคําสั่ง ADD จะลบเลขฐาน 2 ดังกลาวขางตนเสมอ ทานผูซึ่งเปนคนเขียนโปรแกรมตอง

ตีความเองวา ทานกําลังลบเลขที่มีเครื่องหมายหรือไมมีเครื่องหมาย ถาทานลบเลขที่มีเครื่องหมาย ทานจะตรวจสอบวาผลลัพธ overflow ไดโดยตรวจสอบจาก OF = 1 ได เชน ตัวอยางขางตน (+115) - (-18) = +133 ซึ่งมีคาเกิน +127

ซึ่งถาดูจากผลลัพธแลว 1000 0101 มีคาเทากับ –123 ซึ่งไมถูกตอง แตถาทานลบเลขที่ไมมีเครื่องหมาย ทานจะ

ตรวจสอบวาผลลัพธ overflow ไดโดยตรวจสอบจาก OF = 1 ไมได เพราะถาดูจากตัวอยางขางตน 115 - 238 = -123

ซึ่งไมถูกตอง (เพราะผลลัพธ 1000 0101 = 133) การตรวจสอบวาการลบเลขที่ไมมีเครื่องหมายใหผลลัพธที่ถูกตอง

หรือไมใหดูที่ CF = 1 หรือไม SBB : Subtract with Borrow sbb destination,source

หมายเหตุ เหมือน SUB แตรวม carry flag(CF) ดวย คือ destination = destination – carry - source

ตัวอยาง sub eax,ecx

sbb ebx,edx

SBB EBX,EDX SUB EAX,ECX

EBX

CF EAX

ECX

EDX

EBX EAX

Page 113: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

113

AAS : ASCII Adjust for Subtraction

ใชสําหรับการปรับคาการลบเลข ASCII หรือ Unpacked BCD เหมือนกับที่มีการปรับคาของคําสั่ง AAA

คําสั่ง AAS จะปรับคา โดยการพิจารณาคา 4 บิตลางของ AL ถามีคาระหวาง 0-9 ก็จะทําให 4 บิตบนของ AL

มีคาเปน 0 และกําหนดให AF กับ CF มีคาเปน 0 แตถา 4 บิตลางของ AL มีคามากกวา 9 หรือ AF มีคา 1 จะมีวิธีการ

ปรับคา ดังนี้ - ลบ 6 จากเรจิสเตอร AL

- ลบ 1 จากเรจิสเตอร AH

- AF = 1 และ CF = 1

- 4 บิตบนของเรจิสเตอร AL มีคา 0

ตัวอยาง ก.

; AL = 0011 0111 = 37H ASCII 7

; BL = 0011 0100 = 34H ASCII 4

MOV AL,37H

MOV BL,34H

SUB AL,BL ; (7-4)

AAS ; CL = 0000 0011 = unpacked BCD 03

ข.

; AL = 0011 0100 = 34H ASCII 4

; CL = 0011 0111 = 37H ASCII 7

MOV AL,34H

MOV CL,37H

SUB AL,CL ; (4-7) = borrow 1 and result 14 – 7 = 7

; AL = 1111 1101, AF = 1, CF = 1

AAS ; AL = 0000 0111 = unpacked BCD 07

; CF = 1 borrow needed

Page 114: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

114

DAS : Decimal Adjust for Subtraction

ใชสําหรับการปรับคาการลบเลข packed BCD เหมือนกับที่มีการปรับคาของคําสั่ง DAA

คําสั่ง DAS มีวิธีการปรับคา ดังนี้

- ถา 4 บิตลางของเรจิสเตอร AL มีคามากกวา 9 หรือ AF = 1 จะลบคา 6 จากเรจิสเตอร AL และ

กําหนดให AF = 1

- ถา 4 บิตบนของเรจิสเตอร AL มีคามากกวา 9 หรือ CF = 1 จะลบคา 60h จากเรจิสเตอร AL

และกําหนดให CF = 1

ตัวอยาง ก.

; AL = 1000 0110 = 86 packed BCD

; BH = 0101 0111 = 57 packed BCD

SUB AL,BH ; AL =0010 1111 = 2FH

DAS ; subtract 0000 0110

; because 1111 in low nibbles > 9

; AL = 0010 1001 = 29 packed BCD

ข.

; AL = 0100 0101 = 45 packed BCD

; BH = 0110 0011 = 63 packed BCD

SUB AL,BH ; AL = 1110 0010, CF = 1

DAS ; subtract 0110 0000

; because 1010 in upper nibbles > 9

; AL = 1000 0010 = 82 packed BCD, CF = 1

; CF = 1 means borrow was needed

DEC : Decrement by 1 dec destination

Page 115: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

115

NEG : Negate neg destination

มีผลกับคา flags ดังนี้

- CF มีคา 0 ถาผลลัพธเปนบวก

มีคา 1 ถาผลลัพธเปนลบ

- PF มีคา 0 ถาผลลัพธมีจํานวนบิตที่มีคา 1 เปนคี่

มีคา 1 ถาผลลัพธมีจํานวนบิตที่มีคา 1 เปนคู

- AF มีคา 0 ถาผลการบวกเลขฐานสิบไมตองปรับคา

มีคา 1 ถาผลการบวกเลขฐานสิบตองปรับคา

- ZF มีคา 0 ถาผลลัพธไมใช 0

มีคา 1 ถาผลลัพธเปน 0

- SF มีคา 0 ถาผลลัพธมีคาบวก

มีคา 1 ถาผลลัพธมีคาลบ

- OF มีคา 1 ถาผลลัพธใหญหรือเล็กกวาที่จะเก็บได และมีคาเปน 0 ในกรณีอื่น CMP : Compare cmp destination,source

คําสั่ง CMP มีการทํางานคลายคําสั่ง SUB คือ CMP จะลบ source จาก destination แตไมไดเก็บคาผลลัพธ

ดังนั้นคาใน source และ destination จึงไมมีการเปลี่ยนแปลงจากการลบ ทําใหไดผลลับ flags ดังนี้ condition OF SF ZF CF Unsigned Operands source < destination x x 0 0

source = destination x x 1 0

source > destination x x 0 1 Signed Operands source < destination 0/1 0 0 x

source = destination 0 0 1 x

source > destination 0/1 1 0 x Note! x means don’t care 0 is clear 1 is set

Page 116: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

116

4.5.5 Multiplication MUL : Unsigned Multiplication mul source

Multiplicand Multiplier

(operand1) (operand 2) Product Example

8-bit AL 8-bit register/memory AX MUL BL

16-bit AX 16-bit register/memory DX:AX MUL BX

32-bit EAX 32-bit register/memory EDX:EAX MUL EBX

หมายเหตุ ถาไม overflow แลว CF และ OF จะมีคาเปน 0 มิฉะนั้นจะมีคาเปน 1

การคูณขอมูลขนาด doubleword

EAX

EBX

ECX

EDX

EAX EDX EAX

*

ESI

EDI

EBP

ESP

doubleword memory

ตัวอยาง Z = X*Y เขียนไดเปน MOV EAX,X

MUL Y

MOV Z,EAX

Page 117: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

117

การคูณขอมูลขนาด word

AX

BX

CX

DX

AX DX AX

*

SI

DI

BP

SP

word memory

ตัวอยาง Z = X*10 เขียนไดเปน MOV AX,X

MOV BX,10

MUL BX

MOV Z,AX

Page 118: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

118

การคูณขอมูลขนาดไบต AH

AL

BH

BL

CH

CL

DH

DL

AL AH AL

*

byte memory

ตัวอยาง MOV AL,5

MOV BL,10

MUL BL ; 5 * 10 , AX = 50 IMUL : Signed (Integer) Multiplication

imul source หรือ imul destination,source หรือ imul product,op1,op2

เหมือน MUL แตเปนการคูณเลขจํานวนเต็มมีเครื่องหมาย ยกเวน กรณีที่มี operand 3 ตัว เชน

imul dx,wdata,0ffaah

imul edx,dwdata,12345678h

จะหมายถึง operand ตัวที่สองคูณกับ operand ตัวที่ 3 ผลลัพธเก็บที่ operand ตัวแรก และกรณีที่มี operand 2 ตัว

เชน imul cx,0cd12h

imul ecx,011112222h

จะหมายถึง operand ตัวแรก คูณกับ operand ตัวที่สอง ผลลัพธเก็บที่ operand ตัวแรก

Page 119: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

119

AAM : ASCII Adjust for Multiplication

คําสั่ง AAM จะเปลี่ยนคาของผลลัพธของการคูณเลขขนาดไบต เปนคา unpacked BCD 2 คา เก็บใน AH

และ AL โดยที่ตัวต้ังและตัวคูณตองเปน unpacked BCD ดวย

ในการปรับคาผลลัพธ คําสั่ง AAM จะหารเรจิสเตอร AL ดวย 10 และเก็บคาสวนใน AH คาเศษใน AL เชน

สมมุติวา AL มีคา 9 (00001001B) และ BL มีคา 7 (0000111B) เมื่อใชคําสั่ง MUL BL ผลลัพธของการคูณ AL กับ

BL ไดผลลัพธ 00000000B เก็บใน AH และ 00111111B เก็บใน AL เมื่อใชคําสั่ง AAM เรจิสเตอร AL จะถูกหารดวย

10 แลวเก็บสวน คือ 00000110B ไวใน AH และเก็บเศษ คือ 00000011B ไวใน AL

ตัวอยาง ; AL = 00000101 = unpacked BCD 5

; BH = 00001001 = unpacked BCD 9

mul bh ;al * bh result in ax

;ax = 00000000 00101101 = 002dh

aam ;ax = 00000100 00000101

; = unpacked BCD 45 4.5.6 Division DIV : Unsigned Division div source

Dividend Divisor

(operand1) (operand 2) Quotient Remainder Example

16-bit AX 8-bit register/memory AL AH DIV BH

32-bit DX:AX 16-bit register/memory AX DX DIV CX

64-bit EDX:EAX 32-bit register/memory EAX EDX DIV ECX

กรณีที่ผลหาร (quotient) ไมสามารถเก็บไดพอใน AL, AX หรือ EAX จะเกิด divide by zero interrupt

การหารจะคลายกับการคูณ แตทํากลับกัน ดังนี้

Page 120: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

120

การหารขอมูลขนาด doubleword

EAX

EBX

ECX

EDX

EDX EAX EDX EAX

/

เศษ จํานวนเต็ม ESI

EDI

EBP

ESP

doubleword memory

ตัวอยาง Z = X/Y และ M = X%Y เมื่อ % หมายถึง modulo และ X,Y,Z,M เปนเลขจํานวนเต็มไมมีเครื่องหมาย ขนาด

32 บิต เขียนไดเปน MOV EAX,X

MOV EDX,0

DIV Y

MOV Z,EAX

MOV M,EDX

Page 121: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

121

การหารขอมูลขนาด word

AX

BX

CX

DX

DX AX DX AX

/

เศษ จํานวนเต็ม SI

DI

BP

SP

word memory

ตัวอยาง Z = X/10 และ M = X%10 เมื่อ % หมายถึง modulo และ X,Z,M เปนเลขจํานวนเต็มไมมีเครื่องหมาย ขนาด

16 บิต เขียนไดเปน MOV AX,X

MOV DX,0

MOV BX,10

DIV BX

MOV Z,AX

MOV M,DX

Page 122: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

122

การหารขอมูลขนาดไบต AH

AL

BH

BL

CH

CL

DH

DL

AX AH AL

/

เศษ จํานวนเต็ม byte memory

ตัวอยาง MOV AX,13

MOV BL,5

DIV BL ; 13 / 5 , AH = 3, AL = 2 IDIV : Signed (Integer) Division idiv source

เหมือน DIV แตเปนการคูณเลขจํานวนเต็มมีเครื่องหมาย

ตัวอยาง Dividend(AX) Divisor Quotient (AL) Remainder(AH)

7 2 3 1

7 -2 -3 1

-7 2 -3 -1

-7 -2 3 -1

หมายเหตุ เครื่องหมายของเศษ (remainder) จะเหมือนกับตัวต้ัง (dividend) เสมอ

สวนเครื่องหมายของผลลัพธเปนไปตามกฎที่วา บวกหารบวกหรือลบหารลบผลลัพธเปนบวก มิฉะนั้นเปนลบ

Page 123: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

123

ตัวอยาง Z = X/Y และ M = X%Y เมื่อ % หมายถึง modulo และ X,Y,Z,M เปนเลขจํานวนเต็มมีเครื่องหมาย ขนาด 32

บิตเขียนไดเปน MOV EAX,X

CDQ

IDIV Y

MOV Z,EAX

MOV M,EDX

ตัวอยาง Z = X/10 และ M = X%10 เมื่อ % หมายถึง modulo และ X,Z,M เปนเลขจํานวนเต็มมีเครื่องหมายขนาด 16

บิต เขียนไดเปน MOV AX,X

CWD

MOV BX,10

IDIV BX

MOV Z,AX

MOV M,DX

ตัวอยาง Z = X/Y และ M = X%Y เมื่อ % หมายถึง modulo และ X,Y,Z,M เปนเลขจํานวนเต็มมีเครื่องหมายขนาด 8

บิต เขียนไดเปน MOV AL,X

CBW

IDIV Y

MOV Z,AL

MOV M,AH

Page 124: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

124

AAD : ASCII Adjust for Division

คําสั่ง AAD จะปรับคาของตัวต้ังในการหารใหเปนเลขฐานสอง ในเรจิสเตอร AL ซึ่งทําการโดยการคูณ

สวนบนของตัวต้ังหรือคาในเรจิสเตอร AH ดวย 10 และบวกผลลัพธกับสวนลางของตัวต้ังหรือคาในเรจิสเตอร AL

และจะทําใหคาใน AH เปน 0 คําสั่ง AAD จะตองถูกเรียกใชกอนการหาร

ตัวอยาง ; AX = 0000 0011 0000 0111 unpacked BCD for 37 decimal

; CL = 0000 0101 unpacked BCD for 5 decimal

aad ; adjust to binary before division

; ax = 0025h = 37

div cl ; divide ax by cl

; al = quotient = 07 unpacked BCD

; ah = remainder = 02 unpacked BCD 4.5.7 Sign-Extension CBW : Convert Byte to Word

คําสั่ง CBW เปนคําสั่งที่ลอกคาของบิต 7 ในเรจิสเตอร AL ไปใสในเรจิสเตอร AH

7 0 7 0

AH AL

Note! CWDE : Convert Word to Doubleword เปนคําสั่งที่ลอกคาของบิต 15 ในเรจิสเตอร AX ไปใสในเรจิสเตอร EAX CWD : Convert Word to Doubleword

คําสั่ง CWD เปนคําสั่งที่ลอกคาของบิต 15 ในเรจิสเตอร AX ไปใสในเรจิสเตอร DX

15 0 15 0

DX AX CDQ : Convert Doubleword to Qword

คําสั่ง CDQ เปนคําสั่งที่ลอกคาของบิต 31 ในเรจิสเตอร EAX ไปใสในเรจิสเตอร EDX

31 0 31 0

EDX EAX

Page 125: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

125

4.6 Logical, shift and rotate Instructions

mnemonic assembler format flags

VM RF NT PLI OF DF IF TF SF ZF AF PF CF LOGICAL

and and destination,source - - - - 0 - - - * * ? * 0

or or destination,source - - - - 0 - - - * * ? * 0

xor xor destination,source - - - - 0 - - - * * ? * 0

not not destination - - - - - - - - - - - - -

test test destination,source - - - - 0 - - - * * ? * 0

Shift sal/shl sal destination,count - - - - * - - - * * ? * *

sar sar destination,count - - - - * - - - * * ? * *

shr shr destination,count - - - - * - - - 0 * ? * *

Rotate rol rol destination,count - - - - * - - - - - - - *

ror ror destination,count - - - - * - - - - - - - *

rcl rcl destination,count - - - - * - - - - - - - *

rcr rcr destination,count - - - - * - - - - - - - *

Note! * means changed, – means unchanged, and ? means undefined

Page 126: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

126

4.6.1 Logical AND : Logical AND and destination,source

ตัวอยาง and eax,ebx

and dwdata,eax

and ecx,0ffh

and [ebp+4],0ffffffh OR : Logical OR or destination,source

ตัวอยาง or eax,ebx

or ecx,0ffh XOR : Logical XOR xor destination,source

ตัวอยาง xor ax,bx

xor eax,0ffffffffh NOT : Logical NOT not destination

ตัวอยาง not eax

TEST : Test Bits test destination,source

เหมือนคําสั่ง and แต destination ไมเปลี่ยนคา

ตัวอยาง test eax,ebx

test dwdata,eax

Page 127: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

127

4.6.2 Shift SAL/SHL : Shift Left sal destination,count SAR : Shift Arithmetic Right sar destination,count

SHR : Shift Right shr destination,count

สรุป CF

SAL/SHL 0

CF

SAR

CF

SHR 0

หมายเหตุ การทํา sal/shl หนึ่งบิต ของเลขจํานวนเต็มไมมีเครื่องหมาย จะไดผลลัพธ เหมือนผลลัพธของ การคูณดวย

สอง และการทํา sar หนึ่งบิต ของเลขจํานวนเต็มมีเครื่องหมาย จะไดผลลัพธ เหมือนผลลัพธของ การหารดวยสอง

สวนการทํา shr หนึ่งบิต ของเลขจํานวนเต็มมีไมเครื่องหมาย จะไดผลลัพธ เหมือนผลลัพธของ การหารดวยสอง

การคูณหรือหารดวยสองจึงควรใชวิธีนี้มากกวา เพราะทําไดเร็วกวาคําสั่งคูณหรือหาร

ตัวอยาง AL CF

SAL AL,1 AL: 01101000 CF : 1

SAR AL,1 AL: 11011010 CF: 0

SHL AL,1 AL: 01101000 CF : 1

SHR AL,1 AL: 01011010 CF: 0

1011 0100 1

Page 128: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

128

4.6.3 Rotate ROL: Rotate Left rol destination,count ROR: Rotate Right ror destination,count RCL: Rotate Left Through Carry rcl destination,count RCR: Rotate Right Through Carry rcr destination,count

สรุป CF

ROL

CF

ROR

CF

RCL

CF

RCR

ตัวอยาง AL CF

ROL AL,1 AL: 01101001 CF : 1

ROR AL,1 AL: 01011010 CF: 0

RCL AL,1 AL: 01101001 CF : 1

RCR AL,1 AL: 11011010 CF: 0

1011 0100 1

Page 129: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

129

4.7 Control instructions mnemonic assembler format flags

VM RF NT PLI OF DF IF TF SF ZF AF PF CF Unconditional Transfers

call call target - - - - - - - - - - - - -

ret ret [popvalue] - - - - - - - - - - - - -

jmp jmp target - - - - - - - - - - - - - Conditional Transfers ja/jnbe ja label - - - - - - - - - - - - -

jae/jnb jae label - - - - - - - - - - - - -

jb/jnae/jc jb label - - - - - - - - - - - - -

jcxz jcxz label - - - - - - - - - - - - -

je/jz je label - - - - - - - - - - - - -

jg/jnle jg label - - - - - - - - - - - - -

jge/jnl jge label - - - - - - - - - - - - -

jl/jnge jl label - - - - - - - - - - - - -

jle/jng jle label - - - - - - - - - - - - -

jnc jnc label - - - - - - - - - - - - -

jne/jnz jne label - - - - - - - - - - - - -

jno jno label - - - - - - - - - - - - -

jnp/jpo jnp label - - - - - - - - - - - - -

jns jns label - - - - - - - - - - - - -

jo jo label - - - - - - - - - - - - -

jp/jpe jp label - - - - - - - - - - - - -

js js label - - - - - - - - - - - - -

Note! – means unchanged

Page 130: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

130

4.7.1 Unconditional Transfers CALL : Call a Procedure call target

การทํางาน จะ push address ของ คําสั่งถัดไป (ซึ่งเก็บใน EIP) ลง stack แลว jmp ไปบัง target

RET Return from a Procedure

ret หรือ ret value

การทํางาน จะ pop คาจาก stack ใสใน EIP ถามี value จะบวก ESP ดวย value

JMP : Unconditional Jump jmp target 4.7.2 Conditional Transfers Jcondition : Jump on Condition format encoding full displacement 0000 1111 1000 tttn full displacement mnemonic tttn checked used after comparison JA 0111 CF = 0, ZF = 0 Unsigned data, above (higher)

JAE 0011 CF = 0 Unsigned data, above/equal

JB 0010 CF = 1 Unsigned data, below (lower)

JBE 0110 CF = 1 or ZF = 1 Unsigned data, below/equal

JE 0100 ZF = 1 Signed/unsigned data, equal

JG 1111 ZF = 0, SF = OF Signed data, greater

JGE 1101 SF = OF Signed data, greater/equal

JL 1100 SF not = OF Signed data, lower

JLE 1110 ZF = 1 or SF not = OF Signed data, lower/equal

JNA 0110 CF = 1 or ZF = 1 Unsigned data, not above

JNAE 0010 CF = 1 Unsigned data, not above/equal

JNB 0011 CF = 0 Unsigned data, not below

JNBE 0111 CF = 0, ZF = 0 Unsigned data, not below/equal

JNE 0101 ZF = 0 Signed/unsigned, not equal

JNG 1110 ZF = 1 or SF not = OF Signed data, not greater

Page 131: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

131

JNGE 1100 SF = not = OF Signed data, not greater/equal

JNL 1101 SF = OF Signed data, not lower

JNLE 1111 ZF = 0, SF = OF Signed data, not lower/equal

JC 0010 CF = 1 If CF set (same as JB/JNAE)

JNC 0011 CF = 0 If CF off (same as JAE/JNB)

JNO 0001 OF = 0 If OF off

JNP 1011 PF = 0 If odd parity

JNS 1001 SF = 0 If sign is positive

JNZ 0101 ZF = 0 If signed/unsigned data not zero

JO 0000 OF = 1 If OF set

JP 1010 PF = 1 If even parity

JPE 1010 PF = 1 Same as JP

JPO 1011 PF = 0 Same as JNP

JS 1000 SF = 1 If sign is negative

JZ 0100 ZF = 1 If signed/unsigned data is zero

Page 132: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

132

String Instructions mnemonic assembler format flags

OF DF IF TF SF ZF AF PF CF Repeat Prefixes

rep rep - - - - - - - - -

repe/repz repe - - - - - - - - -

repne/repnz repne - - - - - - - - -

Move String movs movs destination,source - - - - - - - - -

movsb movsb - - - - - - - - -

movsw movsw - - - - - - - - -

Compare String cmps cmps destination,source * - - - * * * * *

cmpsb cmpsb * - - - * * * * *

cmpsw cmpsw * - - - * * * * *

Scan String scas scas destination * - - - * * * * *

scasb scasb * - - - * * * * *

scasw scasw * - - - * * * * *

Load and Store String lods lods source - - - - - - - - -

lodsb lodsb - - - - - - - - -

lodsw lodsw - - - - - - - - -

stos stos destination - - - - - - - - -

stosb stosb - - - - - - - - -

Page 133: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

133

stosw stosw - - - - - - - - -

Note! – means unchanged, and * means changed

8.1 Repeat Prefixes REP : Repeat String

Operation. Repeats a string operation a specified number of times. REP is an operational repeat prefix

coded before the string instructions MOVS and STOS. Load the ECX with a count prior to execution. For

each execution of the string instruction, REP decrements ECX by 1 and repeats the operation until the

ECX is 0, at which point processing continues with the next instruction.

Source Code. REP string_instruction

Object Code. 11110010

REPE/REPZ/REPNE/REPNZ : Repeat String Conditionally

Operation. Repeats a string operation a specified number of times or until a condition is met. REPE,

REPZ, REPNE, and REPNZ are operational repeat prefix coded before the string instructions SCAS and

CMPS, which change the ZF. Load the ECX with a count prior to execution. For REPE/REPZ (repeat while

equal/zero), the operation repeats while the ZF is 1 (equal/zero condition) and ECX is not zero. For

REPNE/REPNZ (repeat while not equal/zero), the operation repeats while the ZF is 0 (unequal/nonzero

condition) and the ECX is not zero. While the conditions are true, the operation decrements the ECX by 1

and executes the string instruction.

Source Code. REPE/REPZ/REPNE/REPNZ string_instruction

Object Code. REPNE/REPNZ: 11110010

REPE/REPZ : 11110011

Page 134: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

134

8.2 Move String MOVS/MOVSB/MOVSW : Move String

Operation. Moves data between memory locations. Normally used with the REP prefix and a length in the

ECX, MOVSB moves bytes, MOVSW moves word. The first operand is addressed by the ESI and the

second by the DSI. If the DF is 0, the operation moves data from left to right into the first operand’s

destination and increments the EDI and ESI by 1 or 2. If the DF is 1, the operation moves data from right

to left and decrements the EDI and ESI. REP decrements the ECX by 1 for each repetition. The operation

ends when the ECX is decremented to 0; the EDI and ESI are advanced past the last byte moved.

Source Code. [REP] MOVSB/MOVSW

Note! For the generalized form of MOVS, how do you specify whether an 8- or 16-bit transfer is to be

performed? This will depend on your assembler e.g. example movs byte or movs word.

Object Code. 1010010w 8.3 Compare String CMPS/CMPSB/CMPSW : Compare String

Operation. Compares strings of any length in memory. A REPnn prefix normally precedes these

instructions, along with a maximum value in the ECX. CMPSB compares byte, CMPSW compares words.

The EDI address the first operand and the ESI address the second. If the DF is 0, the operation

compares from left to right and increments the ESI and EDI by 1 for byte or 2 for word; if the DF is 1, it

compares from right to left and decrements the ESI and EDI. REPnn decrements the ECX by 1 for each

repetition. REPNE ends when the first match is found, REPE ends when the first nonmatch is found, or

both end when the ECX is decrements to 0; the EDI and ESI are advanced past the byte that caused

termination. The last compare sets/clears the flags.

Source Code. [REPnn] CMPSB/MOVSW

Object Code. 1010011w

Page 135: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

135

8.4 Scan String SCAS/SCASB/SCASW : Scan String

Operation. Scans a string in memory for a specified value. For SCASB load the value in the AL, for

SCASW load it in the AX. The ESI references the string in memory that is to be scaned. The operations

are normally used with a REPE/REPNE prefix, along with a count in the ECX; use REPE to find the first

nonmatch and REPNE to find the first match. If the DF is 0, the operation scans memory from left to right

and increments the EDI. If the DF is 1, the operation scans memory from right to left and decrements the

EDI. REPnn decrements the ECX for each repetition. The operation ends on an equal (REPNE) or an

unequal (REPE) condition or when the ECX is decremented to 0. The last compare clears/sets the flags. If

the specified condition is not found, REP has decremented the ECX to 0; otherwise, the EDI and ESI

contain the address of the following item.

Source Code. [REPnn] SCASB/SCASW

Object Code. 1010111w 8.5 Load and Store String LODS/LODSB/LODSW : Load String

Operation. Loads the accumulator register with a value from memory. Although LODS is a string

operation, it does not require a REP prefix. The EDI registers address a byte (if LOADB), word(if LODSW)

and load if from memory into the AL, or AX respectively. If the DF is 0, the operation adds 1 (if byte), or 2

(if word) to ESI; otherwise it subtracts 1, or 2.

Source Code. LODSB/LODSW

Object Code. 1010110w

Page 136: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

136

STOS/STOSB/STOSW : Store String

Operation. Stores the contents of the accumulator in memory. When used with a REP prefix along with a

count in the ECX, the operation duplicates a string value a specified number of times; this is suitable for

such actions as clearing an area of memory. For STOSB load the value in the AL, for STOSW load the

value in the AX. The EDI pair references a location in memory where the value is to be stored. If the DF is

0, the operation stores in memory from left to right and increments the EDI. If the DF is 1, the operation

stores from right to left and decrements the EDI. REP decrements the ECX for each repetition and ends

when it becomes 0.

Source Code. [REP] STOSB/STOSW

Object Code. 1010101w

ตัวอยาง Str_compare PROC USES eax edx esi edi

string1: DWORD,

string2: DWORD

mov esi,string1

move edi,string2

L1: mov al,[esi]

mov dl,[edi]

cmp al,0

jne L2

cmp dl,0

jne L2

Page 137: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

137

jmp L3

L2: inc esi

inc edi

cmp al,dl

je L1

L3: ret

Str_compare ENDP

Str_length PROC USES edi,

pString: DWORD

mov edi,pString

mov eax,0

L1: cmp byte ptr [edi],0

je L2

inc edi

inc eax

jmp L1

L2: ret

Str_length ENDP

Str_copy PROC USES eax ecx esi edi

source:DWORD,

target:DWORD

invoke Str_length,source

Page 138: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

138

mov ecx,eax

inc ecx

mov esi,source

mov edi,target

cld

rep movsb

ret

Str_copy ENDP 4.8 ตัวอยางการเขียนโปรแกรมโดยใชคําส่ังของ IA-32

จากแบบฝกหัดในหัวขอ 2.1 สามารถเขียนใหมดวยคําส่ังของ IA-32 ได ดังนี้

ก. เขียนโปรแกรม เพื่ออานเลขจํานวนเต็มบวก และพิมพคา Factorial ของเลขดังกลาว

เดิม ใหมใชคําส่ังของ IA-32

L1: READ X L1: ; ไมมีคําส่ัง READ จะกลาวถึงในภายหลัง

CMP X,1 CMP X,1

JL L1 JL L1

MOV FAC,1 MOv FAC,1

L2: CMP X,2 L2: CMP X,2

JL L3 JL L3

MUL FAC,X MOV EAX,FAC

IMUL X

MOV FAX,EAX

SUB X,1 DEC X

JMP L2 JMP L2

L3: WRITE FAC L3: ; ไมมีคําส่ัง WRITE จะกลาวถึงในภายหลัง

Page 139: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

139

ข. เขียนโปรแกรม เพื่อพิมพเลข Fibonacci จํานวน 20 ตัวแรก เมื่อ เลข Fibonacci มีนิยาม ดังนี้ F1 := 1, F2:=1

Fi = Fi-1 + Fi-2 i = 3, 4, 5, . . .

เดิม ใหมใชคําส่ังของ IA-32

MOV F1,1 MOV F1,1

WRITE F1 ; ไมมีคําส่ัง WRITE จะกลาวถึงในภายหลัง

MOV F2,1 MOV F2,1

WRITE F2 ; ไมมีคําส่ัง WRITE จะกลาวถึงในภายหลัง

FORI: MOV I,1 FORI: MOV I,1

LOOPI: CMP I,18 LOOPI: CMP I,18

JG ENDLOOPI JG ENDLOOPI

MOV F3,F1 MOV EAX,F1

MOV F3,EAX

ADD F3,F2 MOV EAX,F2

ADD F3,EAX

WRITE F3 ; ไมมีคําส่ัง WRITE จะกลาวถึงในภายหลัง

MOV F1,F2 MOV EAX,F2

MOV F1,EAX

MOV F2,F3 MOV EAX,F3

MOV F2,EAX

ADD I,1 INC I

JMP LOOPI JMP LOOPI

ENDLOOPI: ENDLOOPI:

Page 140: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

140

ค. เขียนโปรแกรม เพื่อหาคําตอบของสมการ

X + 3Y +9Z = 126 X≥0, Y≥0, Z≥0

เดิม ใหมใชคําส่ังของ IA-32 FORX: MOV X,0 FORX: MOV X,0 LOOPX: CMP X,126 LOOPX: CMP X,126 JG ENDLOOPX JG ENDLOOPX FORY: MOV Y,0 FORY: MOV Y,0 LOOPY: CMP Y,42 LOOPY: CMP Y,42 JG ENDLOOPY JG ENDLOOPY FORZ: MOV Z,0 FORZ: MOV Z,0 LOOPZ: CMP Z,14 LOOPZ: CMP Z,14 JG ENDLOOPZ JG ENDLOOPZ MOV SUM,X MOV EAX,X MOV SUM,EAX MOV T,Y MOV EAX,Y MUL T,3 MOV EBX,3 IMUL EBX ADD SUM,T ADD SUM,EAX MOV T,Z MOV EAX,Z MUL T,9 MOV EBX,9 IMUL EBX ADD SUM,T ADD SUM,EAX CMP SUM,126 CMP SUM,126 JNE $ENDIF JNE $ENDIF WRITE X ; ไมมีคําสั่ง WRITE จะกลาวถึงในภายหลัง WRITE Y ; ไมมีคําสั่ง WRITE จะกลาวถึงในภายหลัง WRITE Z ; ไมมีคําสั่ง WRITE จะกลาวถึงในภายหลัง $ENDIF: $ENDIF:

ADD Z,1 INC Z JMP LOOPZ JMP LOOPZ ENDLOOPZ: ENDLOOPZ: ADD Y,1 INC Y JMP LOOPY JMP LOOPY ENDLOOPY: ENDLOOPY: ADD X,1 INC X JMP LOOPX JMP LOOPX ENDLOOPX: ENDLOOPX:

Page 141: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

141

5.1 ภาษาแอสเซมบลี ภาษาเครื่องเปนตัวเลขฐานสอง และมีรูปแบบคอนขางยุงยาก ไมเหมาะที่จะนํามาเขียนโปรแกรม จึงไดมีการพัฒนาภาษาสัญลักษณขึ้นมา เรียกวา ภาษาแอสเซมบลี เนื่องจากซีพียูไมสามารถดําเนินการโดยตรงกับภาษาสัญลักษณดังกลาวได จึงตองมีตัวแปล ซึ่งทําหนาที่แปลภาษาแอสเซมบลีเปนภาษาเครื่อง ตัวแปลดังกลาว เรียกวา แอสเซมเบลอร ภาษาแอสเซมบลีประกอบดวยคําสั่ง สองประเภท คือ

- pseudo instruction หรือ directive ใชเพื่อกําหนด ตําแหนง, ขนาด และ/หรือ คาของขอมูล หรือใชสั่ง

แอสเซมเบลอรเพื่อดําเนินการอยางใดอยางหนึ่ง แอสเซมเบลอรไมไดแปลคําสั่งเหลานี้เปนภาษาเครื่อง เชน

X dd 1234

Y db ‘hello’

คําสั่ง dd และ db เปน pseudo instruction โดยที่ X เปนตําแหนงของขอมูล ขนาด 4 ไบต มีคา 1234

และ Y เปนขอมูลจํานวน 5 ไบต มีคา hello

- machine instruction เปนคําสั่งภาษาเครื่อง แตเขียนในรูปของสัญลักษณ คือ แทนรหัสดําเนินการดวย

สัญลักษณ เรียกวา mnemonic และตัวดําเนินการ อาจเปน ช่ือของเรจิสเตอร, เปนคาคงที่ (immediate)

หรือ เปนช่ือของตําแหนงในหนวยความจํา คําสั่งเหลานี้ แอสเซมเบลอรจะแปลเปนภาษาเครื่อง เชน ADD EAX,5

MOV X,EAX

คําสั่งแรก มี ADD เปน mnemonic แทน รหัสดําเนินการบวก และมีตัวถูกดําเนินการสองตัว คือ EAX

ซึ่งเปนช่ือของเรจิสเตอร และ 5 เปนคาคงที่ หมายถึง นําคา 5 ใสในเรจิสเตอร EAX สวนคําสั่งที่สอง มี

MOV เปน mnemonic แทน รหัสดําเนินการเคลื่อนยาย และมีตัวถูกดําเนินการสองตัว คือ X เปน

ตําแหนงขอมูลในหนวยความจํา และ EAX หมายถึง ทําสําเนาคาในเรจิสเตอร EAX ใสใน

หนวยความจําที่ตําแหนง X

5.2 ASSEMBLERS แอสเซมเบลอรเปนโปรแกรมที่ทําหนาที่แปลภาษาแอสเซมบลีใหเปนโปรแกรมภาษาเครื่อง ขอมูลเขา คือ โปรแกรมภาษาแอสเซมบลี ขอมูลออก คือ โปรแกรมภาษาเครื่องและขาวสารสําหรับ linker เรียกวา object module

และ program listing

ขั้นตอนจากการแปลโปรแกรมภาษาแอสเซมบลีจนได executable program แสดงดวยภาพได ดังนี้

Page 142: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

142

library routines

. . .

and other modules

การทํางานของแอสเซมเบลอร แบงออกเปน 2 pass ในที่นี้จะกลาวถึงโดยยอเทานั้น

• pass แรก ทําหนาที่สราง symbol table

หนาที่หลักของ pass แรก คือ กําหนดคาใหกับ symbol ที่ใชในโปรแกรม คาของ symbol ระหวางการแปล

คือ คา ของ location counter (LC) ซึ่งเริ่มตนมีคาเปน 0 แลวบวกเพิ่มดวยความยาวของคําสั่งหรือขอมูล เชน

.DATA

SUM DD 0

X DD 1

.CODE

L1: CMP X,100

JG L2

MOV EAX,X

ADD X,EAX

ADD X,1

JMP L1

L2: END

assembly language

(source program)

assembler

object module

linker

executable program

หรือ load module

Page 143: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

143

สมมุติวา ทุกคําสั่งกินเนื้อที่ 2 ไบต และ ขอมูลขนาด DD กินเนื้อที่ 4 ไบต คาของ LC จะมีคา ดังนี้ LC

.DATA

0 SUM DD 0

4 X DD 1

.CODE

8 L1: CMP X,100

10 JG L2

12 MOV EAX,X

14 ADD X,EAX

16 ADD X,1

18 JMP L1

20 L2: END

(หมายเหตุ ในที่นี้ .CODE, .DATA และ END เปน directive ไมกินเนื้อที่)

symbol table จะเปน ดังนี้ name value

SUM 0

X 4

L1 8

L2 20

เปนตน

• pass ท่ีสอง ทําหนาที่ผลิตภาษาเครื่อง การทํางานจะใช LC เหมือนใน pass แรก แตเมื่อพบคําสั่งที่เปน machine instruction จะผลิตภาษาเครื่อง

ของคําสั่งนั้น ถาในคําสั่งมีการอางถึง symbol จะใชคาของ symbol ใน symbol table มาคํานวณ แตถาเปนขอมูล จะ

ผลิตขอมูลตามรูปแบบของขอมูลนั้น เชน เปน two’s complement เปนตน สําหรับ directive เชน PUBLIC,

EXTERN เปนตน จะผลิตขาวสารสําหรับ linker

Page 144: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

144

5.3 LINKERS โปรแกรมมักจะเขียนแยกออกเปน module ยอย ๆ หรือมักจะเรียกใช subroutine เชน sine เปนตน

subroutine อาจมองไดวาเปน module ยอย module หนึ่ง เปนหนาที่ของ linker ที่จะตองนํา module ยอย ๆ มารวม

เปนโปรแกรมเดียวกัน เชนเดียวกันกับ loader การรวมอาจทําในชวงการเขียนโปรแกรม ในกรณีนี้ ผูเขียนโปรแกรม

ตองนํา source code ของทุก ๆ module มารวมกันเอง หรืออาจทําในชวงการแปล ในกรณีนี้ แอสเซมเบลอรจะนํา

source code ของทุก ๆ module มารวมกันทั้งหมดในชวงการแปล วิธีการรวมที่กลาวมาขางตน ไมมีประสิทธิภาพ

เพราะตองเสียเวลาในการแปล source code ของ module ที่เรียกใชใหมทุกครั้ง วิธีการที่เปนที่นิยมและดีกวา คือ

การแปล source code ของ module ใหเปน object module เพื่อใหโปรแกรมอื่น ๆ เรียกใช โดยไมตองแปล

source code ใหมทุกครั้ง object module อาจนํามาเก็บไวในคลัง (library) เพื่อใชรวมกับ object module อื่น ๆ ใน

ภายหลังก็ได การรวมจึงนาจะทําหลังการแปลและกอนการบรรจุ ในกรณีนี้ source code จึงไมจําเปนตองเขียนดวย

ภาษาเดียวกัน ดังภาพ

การรวม object module ที่ไดจากการแปลซึ่งมีจุดเริ่มตนที่ relative address 0 มารวมเปน module

เดียวกัน เรียกวา relocatable load module ขณะที่รวมกันจะมีการปรับ relative address ของ object module ที่

นํามารวมกันใหมใหสอดคลองกับ relative address ของ module ใหม ซึ่งมี relative address เริ่มตนเปน 0 เชนกัน

เราเรียก linker ที่ผลิต relocatable load module สําหรับ loader วา linkage editor

LINKER

C source code assembly source code

C Compiler Assembler

Object Module Object Module

Library

Executable Program

Page 145: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

145

ในการเขียนโปรแกรมแยกออกเปน module สัญลักษณ (symbol) ที่อยูใน module อื่น แตนํามาอางถึงใน

module เรียกวา external symbol และเรียกการอางถึงวา external reference สวนสัญลักษณใน module ที่ตองการ

ให module อื่น อางถึงได เรียกวา global symbol หรือ public symbol และในการกระโดดไปทํางานใน module ไม

จําเปนตองเริ่มที่คําสั่งแรกของ module สามารถกําหนด entry points ที่ตําแหนงไหนใน module ก็ได เชน pseudo

code ตอไปนี้ - module A

PUBLIC A,RETURN

EXTERN TEST,B

START: MOV B,0

JMP TEST

RETURN: ADD B,5

A DD 15

END START

- module B

PUBLIC TEST,B

EXTERN RETURN,A

TEST: ADD A,10

JMP RETURN

B DD 10

END

เปนตน เปนหนาที่ของ linker ที่จะตองปรับ address ของ external reference เมื่อมีการรวม module เขาดวยกัน

เชนเดียวกันกับ loader การรวมกันของ module อาจทําในชวง execution time ในกรณีนี้ จะยังไมมีการ

ปรับ address ของ external reference จนกวาจะมีการ execute ถึงคําสั่งที่มีการอางถึง module ที่ถูกอางถึงจึงจะ

นํามาบรรจุลงหนวยความจํา แลวจึงมีการปรับ address ของ external reference แลว execute ตอไป เราเรียก

linker ประเภทนี้วา dynamic linker

Page 146: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

146

5.4 LODERS loader ทําหนาที่นําโปรแกรมภาษาเครื่องที่พรอมจะ execute (executable program) ซึ่งเก็บอยู

secondary storage เชน จานแมเหล็ก เปนตน มาบรรจุในหนวยความจําหลัก ดังภาพ

หนวยความจําหลัก

loading

นอกจากบรรจุโปรแกรมลงหนวยความจําแลว loader อาจตองทํา address binding คือ ตองเปลี่ยน

logical address ในโปรแกรม เปน physical address ของหนวยความจํา การทํา address binding อาจทําที่สถานะ

ใดสถานะหนึ่ง ในสี่สถานะตอไปนี้ - ทําในชวงการเขียนโปรแกรม (programming time) ในกรณีนี้ ผูเขียนโปรแกรมตองกําหนดตําแหนง

physical address โดยตรง เชน

physical address instruction

250 0

. . .

300 mov @250,12

. . .

หมายถึง กําหนดให physical address 250 เปนขอมูลมีคา 12 เปนตน

- ทําในชวงการแปล (assembly time) ในกรณีนี้ผูเขียนโปรแกรมไมตองกําหนดตําแหนง physical

address โดยตรง เชน

X DW 0

. . .

mov X,12

. . .

ในชวงการเขียนโปรแกรม เราไมจําเปนตองรูวาตําแหนง X อยูที่ physical address เทาใด

executable

program

Page 147: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

147

- ทําในชวงการบรรจุ (load time) ในกรณีนี้ ตําแหนง physical address ไมจําเปนตองรูในชวงการ

เขียนโปรแกรมและการแปล ตําแหนงของสัญลักษณตาง ๆ ที่ไดจากการแปล เปน relative address

- ทําในชวงการ execute (execution time) ตําแหนงที่บรรจุในหนวยความจํายังไมไดทํา address

binding กับ physical address จนกวาจะมีการ execute คําสั่งที่อางถึงตําแหนงในหนวยความจํา จึง

จะมีการทํา address binding เพื่อใหได physical address

• Absolute Loaders loader ที่งายที่สุด คือ absolute loader หนาที่ของมัน คือ บรรจุ executable program ลงหนวยความจํา

ตามตําแหนงที่เปน physical address ซึ่งไดจากการแปล เชน bootstrap loader เปนตน

นอกจากคําสั่งและขอมูลของ executable program แลว แฟมที่เก็บ executable program จะตองบรรจุ

ขาวสารให absolute loader รู คือ

- ความยาวของโปรแกรม

- ตําแหนง physical address แรก ของหนวยความจํา ที่จะบรรจุโปรแกรม

- ตําแหนง execution address (คําสั่งแรกที่จะ execute) ของโปรแกรม

• Relocatable Loaders โปรแกรมที่ไมมีการทํา address binding ในชวงการแปล จะมี address เปน relative address (ปรกติ

แลว relative address แรกของโปรแกรมจะเปน 0 ) จึงสามารถบรรจุโปรแกรมเริ่มตนที่ physical address ใดก็ได

โดยการปรับคา relative address ใหเปน physical เชน ถา relative address เริ่มตนของโปรแกรมเปน 0 และบรรจุ

โปรแกรมในหนวยความจํา เริ่มตนที่ physical address 300 ดังนั้น relocatable loader จะบวกทุก ๆ relative

address ในโปรแกรมดวย 300 เปนตน ในกรณีนี้ แฟมที่เก็บโปรแกรมจะตองบรรจุขาวสารบอกใหรูวา ตําแหนงใด

เปน relative address เพื่อที่ relocatable loader จะไดปรับคาใหถูกตองเมื่อมีการบรรจุลงหนวยความจํา เชน

Page 148: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

148

physical address

0

. . .

300

Loading at 300 500

505

• Dynamic Loaders ขอเสียของ relocatable loader คือ เมื่อบรรจุโปรแกรมลงหนวยความจําแลว physical address จะถูก

กําหนดตายตัว ในกรณีของการทํางานหลาย ๆ งานพรอมกัน หรือกรณีของ virtual memory (จะเรียนในวิชา

Operating Systems) โปรแกรมอาจจะถูกยายจากหนวยความจําหลักไปเก็บใน disk และยายจาก disk มายัง

หนวยความจําหลักใหมแตไมจําเปนตองอยูที่เดิม ดังนั้นการ binding address จึงทําไมไดในชวงการแปล ตองทํา

ในชวงการ execute เทานั้น รายละเอียดตาง ๆ จะกลาวถึงในวิชา Operating Systems

Relative address instruction

0-3 0000

. . .

200-204 mov @0,12

200-205 . . .

000

. . .

mov @300,12

. . .

Page 149: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

149

6. การโปรแกรมภาษาแอสเซมบลีดวย MASM32

6.1 Install MASM32 สามารถ download MASM32 ไดที่ 2Hhttp://www.movsd.com/ ทําการ unzip แลว run install ตามลําดับ

ใหจํา drive ที่ install เชน c: หรือ d: เปนตน จากนั้นสราง batch file ใน drive และ directory ที่จะเขียนโปรแกรม

ชื่อ buildc.bat ดังนี้

@echo off

REM The following three lines can be customized for your system:

REM ********************************************BEGIN customize

SET PATH=C:\MASM32\BIN;%PATH%

SET INCLUDE=C:\MASM32\INCLUDE

SET LIB=C:\MASM32\LIB

REM ********************************************END customize

ML /c /Fl /coff %1.asm

if errorlevel 1 goto terminate

LINK /MAP /SUBSYSTEM:CONSOLE %1.obj user32.lib kernel32.lib

if errorlevel 1 goto terminate

dir %1.*

:terminate

หมายเหตุ - ใหเปลี่ยนช่ือ drive ตรง customize ใหตรงกับที่ install

- ถาใช masm32 version ตํ่ากวา 8.2 ตรง ML /c /Fl /coff %1.asm ใหแกเปน ML /c /coff %1.asm

- สําหรับผูที่ใช MASM615 ในหนังสือ Assembly Language for Intel-Based Computers, 4th ของ

Kip R. Irvine ใหใช make32.bat ดังนี้ (อยาลืมเปลี่ยนช่ือ drive ตามที่ install)

Page 150: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

150

@echo off

REM The following three lines can be customized for your system:

REM ********************************************BEGIN customize

SET PATH=C:\MASM615;%PATH%

SET INCLUDE=C:\MASM615\INCLUDE

SET LIB=C:\MASM615\LIB

REM ********************************************END customize

ML /c /Fl /coff %1.asm

if errorlevel 1 goto terminate

LINK32 /MAP /SUBSYSTEM:CONSOLE %1.obj user32.lib kernel32.lib

if errorLevel 1 goto terminate

dir %1.*

:terminate

คําอธิบาย

@echo off หมายถึงไมตองแสดงคําสั่งออกจอภาพ

REM เปนหมายเหตุ ไมมีความหมายใด ๆ ใชเพื่อเปนหมายเหตุเทานั้น

SET PATH=C:\MASM615;%PATH% หมายถึง กําหนดเสนทางที่จะไปคนหาคําสั่ง %PATH% หมายถึง

เสนทางเดิมที่เคยกําหนด ในที่นี้ใหคนหาใน C:\MASM32 กอน ถาไมพบจึงไปคนในเสนทางเดิมที่เคยกําหนด

SET INCLUDE=C:\MASM615\INCLUDE หมายถึง เสนทางที่จะไปคนแฟม ตรงคําสั่ง INCLUDE

SET LIB=C:\MASM615\LIB หมายถึงเสนทางที่จะไปคนแฟมที่เปน library (.lib)

ML /c /Fl /coff %1.asm คําสั่งของ assembler เพื่อแปล source code ที่เก็บในแฟม %1.asm เมื่อ %1

เปน argument ตัวที่ 1 เชน make32 example1 ในที่นี้ %0 คือ make32 และ %1 คือ example1 เปนตน สวน /c

หมายถึง แปลอยางเดียว /Fl หมายถึง ใหแสดง listing ดวย และ /coff หมายถึง ให object file มีรูปแบบของ coff

if errorlevel 1 goto terminate หมายถึง ถา ML มี exit code เปน 1 (แสดงวา มีความผิดพลาดใน source

code หรือ แปลไมผาน) ใหกระโดดไปที่ตําแหนง terminate

LINK32 /MAP /SUBSYSTEM:CONSOLE %1.obj user32.lib kernel32.lib คําสั่งของ linker เพื่อเช่ือมโยง

object file (.obj) หรือ library file (.lib) สําหรับ /MAP หมายถึงใหแสดง map file และ /SUBSYSTEM:CONSOLE

ใหเช่ือมโยงโปรแกรมแบบ console

dir %1.* คําสั่งแสดงแฟมที่มีช่ือตรงตาม %1 โดยมี extension เปนอะไรก็ได

Page 151: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

151

:terminate เปนตําแหนงที่มีการกระโดดมายังตําแหนงนี้

6.2 WIN32 API Windows32 API (Application Program Interface) มีฟงกชันจํานวนมากไวใหเรียกใช โดยฟงกชันเหลานี้

เก็บอยูในแฟม .dll (dynamic link library) ตาง ๆ เชน kernel32.dll (ฟงกชันเกี่ยวกับ memory และ process

management), user32.dll (ฟงกชันทางดาน user interface) หรือ gdi32.dll (ฟงกชันทางดาน graphics) เปนตน

เมื่อเราเขียนโปรแกรมและเรียกใชฟงกชันเหลานั้น ฟงกชันเหลานี้จะไมไดนํามารวมกับโปรแกรมของเราใน excecutable program แต linker จะเขียนขาวสารที่เกี่ยวของกับการเรียกใชฟงกชันเหลานั้น และเมื่อ loader บรรจุ

โปรแกรมลงหนวยความจํา เมื่อมีการ execute ถึงคําสั่งที่เรียกฟงกชันเหลานั้น จึงจะมีการ load ฟงกชันนั้น แตถาเคย

มีการ load ฟงกชันนั้นแลว จะไมมีการ load ซ้ําอีก นั่นคือ การ link และ load ทําในขณะในชวง execution time

สําหรับฟงกชันตาง ๆ ที่มีใหใช ดูไดใน win32.hlp สามารถ download ไดที่ 3 Hhttp://www.cs.psu.ac.th/iew/cs344-

222/win32api.zip ตัวอยาง ในภาษาแอสเซมบลี MASM32 การเรียกใช ทําดังนี้ Invoke ExitProcess,0

6.3 การเขียนโปรแกรม โปรแกรมที่จะเขียนเปนโปรแกรม Win32 ซึ่งว่ิงบนระบบปฏิบัติการวินโดว ใน protected mode และใช

สถาปตยกรรม IA-32 วินโดวว่ิงโปรแกรม Win32 แตละโปรแกรมใน virtual space แตละโปรแกรมสามารถมี

virtual space ไดถึง 4GB แม physical memory จะมีหนวยความจําหลักไมถึง 4GB ก็ตาม โปรแกรมแตละ

โปรแกรมมี virtual space แยกจากกันไมสามารถอางถึงกันได ซึ่งตางกับ Win16 ที่สามารถมองเห็นซึ่งกันและกัน

memory model ของโปรแกรม Win32 เปนแบบ flat แตกตางจาก memory model ของ Win16 และ DOS

ที่ตองคํานึงถึง segments แต memory model แบบ flat ไมตองคํานึงถึง segments อีกตอไป (Windows จะจัดการ

ใหเอง) ตําแหนงของ virtual address space สามารถอางถึงไดต้ังแต 0 ถึง 232-1 หรือสามารถอางถึงไดถึง 4GB

การเขียนโปรแกรมภายใต WINDOWS 32 บิต มีสองแบบ คือ

Page 152: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

152

ก. แบบ console

โปรแกรมแบบ console มีลักษณะเหมือนโปรแกรมที่ว่ิงภายใตระบบปฏิบัติการ DOS ดังแสดงดวยภาพ

ขางลาง

หมายเหตุ สําหรับ WINDOWS 95, 98, ME ใหคลิกสองครั้งที่ MS-DOS prompt สวน WINDOWS 2000, XP ใหไป

ที่ start -> ALL programs -> Accessories -> command prompt

Page 153: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

153

ข. แบบ GUI (Graphic User Interface)

มีลักษณะเปนหนาตาง ดังแสดงดวยภาพขางลาง

ในที่นี้จะพูดถึงเฉพาะการเขียนโปรแกรมแบบ console เทานั้น การเขียนโปรแกรมแบบ GUI ควรใช

ภาษาระดับสูง เชน BASIC หรือ C จะงายกวา

สําหรับ source program จะเขียนดวย editor ตัวใดก็ได เชน Notepad, Editplus เปนตน แตให save เปน

file ที่มี extension เปน .asm

Page 154: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

154

6.3.1 คําสั่ง คําสั่งภาษาแอสเซมบลีมีสองประเภท คือ คําสั่ง directive (หรือ pseodo instruction) กับ machine

instruction ซึ่งเปนคําสั่งที่ CPU รูจัก

machine instruction เขียนในหนึ่งบรรทัด ดังนี้ [ label: ] [ mnemonic [ operand(s) ] ] [ ; comment ]

เมื่อ [ ] หมายถึงจะมีหรือไมก็ได เชน

ก. main: มีเฉพาะ label:

ข. lahf มีแต mnemonic

ค. inc x มี mnemonic คือ inc และ operand 1 ตัว คือ x

mov eax,5 มี mnemonic คือ mov และ operands สองตัว คือ eax และ 5

ง. L1: cmp x,100

จ. L2: ret ; return

6.3.2 ตัวอยาง skeleton ของโปรแกรม .386 .MODEL Flat, STDCALL MEMORY high address .STACK size in byte(s) .DATA? <Your uninitialized data> ...... .DATA <Your initialized data> ...... .CONST <Your constants> ...... .CODE <label> <Your code> ..... low address end <label>

.STACK

.DATA?

ขอมูลไมมีคาเริ่มตน .DATA

ขอมูลมีคาเริ่มตน .CONST

ขอมูลมีคาคงที่

.CODE

คําสั่ง

Page 155: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

155

6.4 หลักการตั้งชื่อ name ประกอบดวย ตัวอักษร a-z หรือ A-Z ตัวเลข 0-9 และสัญลักษณพิเศษ ? @ . _ $ อักขระ . ใชไดเฉพาะเปน

อักขระตัวแรกเทานั้น อักขระตัวแรกตองไมเปนตัวเลข ช่ือตองไมซ้ํากับคําสงวน อันไดแก เรจิสเตอร, mnemonic,

directive, operation-code หรือ operator เปนตน

name ใชสําหรับกําหนด label, variable หรือ symbol กรณีที่เปน label ตองมี : ตอทายดวย แต label ที่

เปนช่ือ subroutine หรือ variable ไมตองมี : ตอทายก็ได

คําแนะนํา : เพื่อไมใหช่ือซ้ํากับคําสงวน อาจใช $ เปนอักขระแรก เชน $L , $EVEN เปนตน EVEN เปนคําสงวนใช

เปนช่ือไมได 6.5 Directive 6.5.1 .386 บอกใหแอสเซมเบลอรรูวาใชชุดคําสั่งของ intel 80386 หรืออาจใช .486 หรือ .586 สําหรับ intel 80486

หรือ Pentium ตามลําดับ

6.5.2 .MODEL Flat, STDCALL ใชกําหนด memory model สําหรับโปรแกรม Win32 ใหใช Flat สําหรับ STDCALL เปนขอตกลงในการ

ผาน parameters (ใหดูหัวขอ subroutine ประกอบ) เมื่อมีการ call subroutine สําหรับโปรแกรม Win32 ใหใชแบบ STDCALL

6.5.3 .STACK, .DATA, .DATA?, .CONST และ .CODE .STACK ใชเพื่อกําหนดสวนที่เปนstack

.DATA ใชเพื่อกําหนดสวนที่เปนขอมูล

.DATA? ใชเพื่อกําหนดขอมูลที่ไมมีการกําหนดคาเริ่มตน

.CONST ใชเพื่อกําหนดขอมูลที่เปนคาคงที่

หมายเหตุ สามารถใช .DATA สาํหรับขอมูลที่กําหนดและไมกําหนดคาเริ่มตนและคาคงที่ แตถาใช .DATA? จะไมกิน

เนื้อที่ในแฟมที่บรรจุ executable program (แตจะกินเนื้อที่ในหนวยความจําเมื่อ loader บรรจลุงหนวยความจํา)

.CODE ใชกําหนดสวนที่เปนคําสั่ง

ในโปรแกรมสามารถเขียนสวนใดก็ได และสามารถเขียนแตละสวนไดหลาย ๆ ครั้ง

Page 156: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

156

6.5.4 END ใชเพื่อกําหนดใหแอสเซมเบลอรหยุดการแปล หรือจบโปรแกรม ถาไมมี label หลัง END แสดงวาไมมี

จุดเริ่มตนของการ execute เชน กรณีที่เขียนเปน subroutine เปนตน ถามี แสดงวาเปนจุดเริ่มตนของการ execute

6.5.5 COMMENT การเขียนหมายเหตุ ทําไดโดยใช ; (semicolon) ต้ังแต semicolon ถึงสิ้นสุดบรรทัด (end of line) จะเปน

หมายเหตุ

6.5.6 Data types ใชเพื่อกําหนดเนื้อที่และคาของขอมูล

รูปแบบ [name] operation-code initval[,initval]…

เมื่อ

operation-code อาจจะเปนคาใดคาหนึ่ง ตอไปน้ี

operation-code description bytes attribute

DB Define byte 1 byte

DW Define word 2 word

DD Define doubleword 4 doubleword

DQ Define quadword 8 quadword

DT Define tenbytes 10 tenbyte

สําหรับ initval อาจจะเปน numeric values, character หรือ string, constant expression, หรือ ?

• Numeric Values อาจเปน integer หรือ floating point

Integer ประกอบดวยตัวเลขที่เปนไปไดของแตละเลขฐาน และสามารถตามดวย radix (d = decimal, h =

hexadecimal, q หรือ o = octal, b = binary) ได ถาไมมี radix จะหมายถึงเลขฐานสิบ กรณีที่เปนเลขฐานสิบหก

ตัวเลขตัวแรกตองไมเปน A,B,C,D,E,F ถาเปนตองใสเลข 0 นําหนาเสมอ

Page 157: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

157

เชน 11110000b binary

200 decimal

300d decimal

0ffh hexadecimal

4a6h hexadecimal

324q octal

10o octal

1.76E32 floating point

• Character หรือ String สามารถเขียนไดสองแบบ คือ เขียนอักขระใด ๆ ที่ไมใช ‘ ภายในเครื่องหมาย ‘ ‘ ถาตองการ

เขียน ‘ ตองเขียนสองตัวติดกัน เพื่อแทน ‘ หนึ่งตัว หรือ เขียนอักขระใด ๆ ที่ไมใช “ ภายในเครื่องหมาย “ “ ถา

ตองการเขียน “ ตองเขียนสองตัวติดกัน เพื่อแทน “ หนึ่งตัว เชน

“a“

‘B‘

“I‘m“

‘I“m‘

‘H“E‘

‘12#@%$‘

หมายเหตุ อักขระหนึ่งตัวกินเนื้อที่ 1 ไบต และมีคาตามรหัสของอักขระนั้น ๆ

Page 158: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

158

• Constant expression สามารถนํา integer, character, location counter ($), และ ตัวแปร (location counter

ของตัวแปร) มาคํานวณทางคณิตศาสตร ดวยตัวดําเนินการเรียงจาก precedence สูงไปต่ํา ดังนี้

ตัวดําเนินการ ความหมาย associative

() parentheses

+ , - unary plus, minus right

* , / , mod multiply, divide, modulo left

+ , - binary plus, minus left

เชน constant expression value

20*5 100

-4+-2 -6

31 mod 6 1

6/4 1

‘2’-30h 2

3+2*5 13

• ? ใชเมื่อไมตองการกําหนดคา ระวัง! ตางกับ ‘?‘ หรือ “?“ ซึ่งหมายถึง การกําหนดคาใหเทากับรหัสของ ?

• operator DUP ในกรณีที่ตองการกําหนดคาเรียงกันซ้ํา ๆ เทากับจํานวนที่ตองการ เชน db 20 dup(0) หมายถึง

ตองการจองเนื้อที่ 20 ไบต แตละไบตมีคา 0 หรือ dd 100h dup(?) หมายถึง ตองการจองเนื้อที่ขนาด 1024 ไบต

(256 double word) โดยไมตองกําหนดคาเริ่มตน

Page 159: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

159

ตัวอยาง

.data

char db ‘A‘ ; ASCII character 41h = 65 = 01000001b = 101q

signed1 db -128 ; smallest signed value

signed2 db +127 ; largest signed value

unsigned1 db 0 ; smallest unsigned value

unsigned2 db 255 ; largest unsigned value

list1 db 10, 30q, 40h, 00100010b,”B”

ages db ?,?,? ; uninitilized 3 bytes

rowsize db 10*20

dw 0,65535 ; lowest and highest unsigned values

dw -32768,+32767 ; lowest and highest signed values

dd 0ABCDEFh,-3

dd 256*2

mixed dw 1000h,4096, ‘AB‘,”C”

db 2 dup(‘ABC‘)

astring db “Hello“

astring_length db $-astring ; $ is location counter

มีความหมายเหมือนกับ

.data MEMORY ฐาน 16

char db ‘A‘ ตําแหนง char + 0 0100 0001 41

signed1 db -128 +1 1000 0000 80

signed2 db +127 +2 0111 1111 7F

unsigned1 db 0 +3 0000 0000 00

unsigned2 db 255 +4 1111 1111 FF

list1 db 10 +5 0000 1010 0A

db 30q +6 0001 1000 30

db 40h +7 0100 0000 40

db 00100010b +8 0010 0010 22

Page 160: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

160

db ”B” +9 0100 0010 42

ages db ? +10 อะไรก็ได อะไรก็ได

db ? +11 อะไรก็ได อะไรก็ได

db ? +12 อะไรก็ได อะไรก็ได rowsize db 200 +13 1100 1000 C8

dw 0 +14 0000 0000 00

+15 0000 0000 00

dw 65535 +16 1111 1111 FF

+17 1111 1111 FF

dw -32768 +18 0000 0000 00

+19 1000 0000 80

dw +32767 +20 0111 1111 7F

+21 1111 1111 FF

dd 0ABCDEF9h, +22 1111 1001 F9

+23 1101 1110 DE

+24 1011 1100 BC

+25 0000 1010 0A

dd -3 +26 1111 1101 FD

+27 1111 1111 FF

+28 1111 1111 FF

+29 1111 1111 FF

dd 512 +30 0000 0000 00

+31 0000 0010 02

+32 0000 0000 00

+33 0000 0000 00

mixed dw 1000h +34 0000 1000 01

+35 0000 0000 00

dw 4096 +36 0000 0000 00

+37 0001 0000 10

dw ‘AB‘ +38 0100 0010 42

+39 0100 0001 41

Page 161: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

161

dw ”C” +40 0100 0011 43

+41 0000 0000 00

db ‘A’ +42 0100 0001 41

db ‘B’ +43 0100 0010 42

db ‘C’ +44 0100 0011 43

db ‘A’ +45 0100 0001 41

db ‘B’ +46 0100 0010 42

db ‘C’ +47 0100 0011 43

astring db “H” +48 0100 1000 48

db “e” +49 0110 0101 65

db “l” +50 0110 1100 6C

db “l” +51 0100 1100 6C

db “o“ +52 0110 1111 6F

astring_length db 5 ; = 53-48 +53 0000 0101 05

หมายเหตุ dw ‘ABC’ ผิด เพราะ มีคาเกิน 16 บิต แต db ‘ABC’ ถูก เพราะหมายถึง db ‘A’,’B’,’C’

Page 162: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

162

6.5.7 PROTO ใชเพื่อกําหนด prototype ของ subroutine ใชบอกจํานวน dummy argument และขนาดของ dummy

argument แตละตัว สําหรับ WIN32 ใหมีขนาด 32 บิต คือ DWORD หรือ BYTE PTR

รูปแบบ label PROTO [distance] [langtype] [, [parameter]:tag]...

เมื่อ

label เปนช่ือของ subroutine มีช่ือเดียวกันกับ label ของคําสั่ง PROC และ ENDP

distance เปน NEAR, FAR, NEAR16, NEAR32, FAR16 หรือ FAR32

ถาไมกําหนด จะกําหนดตาม memory model สําหรับ Flat จะหมายถึง NEAR

langtype กําหนดขอตกลงในการผาน parameter เชน C, PASCAL, SYSCALL หรือ STDCALL เปนตน

parameter เปนช่ือของ dummy parameter ไมตองมีก็ได

tag เปนขนาดของ parameter เชน WORD, DWORD, BYTE PTR เปนตน

หรือ เปน VARARG ซึ่งเขียนไดเฉพาะ parameter ตัวสุดทาย และใชไดกับ langtype แบบ

C, SYSCALL หรือ STDCALL เทานั้น ต.ย. ก. ในภาษา C

int foo (int i, char * j);

ภาษาอแสเซมบลีเขียนไดเปน foo PROTO :DWORD,:DWORD

หรือ foo PROTO :DWORD,:PTR BYTE

หมายเหตุ PTR BYTE มีขนาด 32 บิต เหมือนกับ DWORD แตสื่อความหมายวาเปน address ไดดีกวา DWORD

ข. int bar (int i, …);

ภาษาอแสเซมบลีเขียนไดเปน bar PROTO :DWORD,:VARARG

ในการแปลคําสั่ง PROTO จะกําหนดชื่อ subroutine เหมือนกับของคําสั่ง invoke เชน _foo@8

Page 163: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

163

6.5.8 INVOKE ใชเพื่อเรียก subroutine ซึ่งจะมีการผาน parameter ตามที่กลาวแลวใน .MODEL สําหรับฟงกชันตาง ๆ ใน

API ของ Win32 การเรียกช่ือฟงกชัน จะตองกําหนดใหอักษรตัวเล็กและตัวใหญตางกัน ดวย คําสั่ง option casemap :none ; case sensitive

รูปแบบ INVOKE expression [,arguments] เมื่อ expression เปนนิพจนเพื่อบอกตําแหนงของ subroutine ที่เรียกใช

arguments เปนรายการของ parameters ที่จะผานไปยัง subroutines ซึ่งอาจจะเปน

register::register (สําหรับ register pair), นิพจน หรือ ADDR label หมายเหตุ

subroutine ที่จะเรียกใชดวย invoke ตองเขียนดวย PROC และ ENDP หรือ กําหนด prototype ดวยคําส่ัง

PROTO มากอน

ในการแปล ชื่อของ subroutine จะมีการใส _ ไวขางหนาเหมือนของภาษา C และลงทายดวย @จํานวนเนื้อ

ที่ของพารามิเตอรทั้งหมด เชน int foo(int i, int j) เมื่อเรียกใชดวย invoke foo,5,10 จะแปลเปน

push 10

push 5

call _foo@8

Page 164: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

164

6.5.9 PROC และ ENDP ใชเพื่อเขียน subroutine แอสเซมเบลอรจะผลิต PROLOGUE code เพื่อผาน parameters ทาง stack และ

EPILOGUE code เพื่อลบ parameters ทิ้งเมื่อออกจาก subroutine เองโดยอัตโนมัติ ถาทานตองการกําหนดเองให

ใช directive OPTION PROLOGUE: และ OPTION EPILOGUE: (หมายเหตุ subroutine สามารถเปน nested ได

ถาไมมี parameters, local variables หรือ USES และตองไมผลิต segment หรือ group ใหม)

รูปแบบ label PROC [distance] [langtype] [visibility]

[<prologuearg>]

[USES reglist] [,parameter [:tag]]...

[LOCAL varlist]

statements

label ENDP

เมื่อ

label, distance, langtype, parameter และ tag เหมือน directive PROTO

visibility เปน PRIVATE, PUBLIC หรือ EXPORT ถาไมกําหนดจะเปน PUBLIC สวน EXPORT

จะหมายถึง PUBLIC และ FAR

prologuearg เปน arguments ที่จะผานไปยัง prologue code

reglist เปนรายชื่อของเรจิสเตอร (ถามีมากกวาหนึ่งตัวใหคั่นดวย blank) ที่จะ save เก็บ

รักษาไวบน stack และจะ restore เมื่อออกจาก subroutine

statements เปนคําสั่งใด ๆ เมื่อตองการออกจาก subroutine ใชคําสั่ง ret ระวังอยาใช retf หรือ iretf

เพราะแอสเซมเบลอรจะไมผลิต epilogue code

สําหรับ local variables จะตองประกาศโดยใช directive LOCAL

หมายเหตุ ไมจําเปนตองเขียน prologue , epilogue, save/restore registers และ ret [total_parmsizes] เอง

ในการแปลคําสั่ง PROC จะกําหนดชื่อ subroutine เหมือนกับของคําสั่ง invoke และ PROTO เชน _foo@8

Page 165: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

165

ตัวอยาง เขียน subroutine fact เพื่อหา factorial โดยใช PROC และมีการ call แบบ stdcall ได ดังนี้

fact PROC USES edx n:DWORD

cmp n,1

jle ret_one

mov eax,n

dec eax

invoke fact,eax

imul n

jmp ret_fact

ret_one:

mov eax,1

ret_fact:

ret

fact ENDP

มีการเรียกใชเพื่อหา 3! ดังนี้

invoke fact,3

Page 166: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

166

5.5.10 LOCAL ใชเพื่อกําหนด local variable โดยที่แอสเซมเบลอรจะจองเนื้อที่บน stack ใหโดยอัตโนมัติ

รูปแบบ LOCAL name [[count]][:qualifiedtype] [, name [[count]]

[:qualifiedtype]]...

เมื่อ

name เปนช่ือของ local variable

[count] ถามีตองเขียนในวงเล็บใหญ เพื่อจํานวนครั้งที่จะกําหนดเนื้อที่

qualifiedtype กําหนดขนาด เชน WORD หรือ DWORD หรือระเบียน เปนตน

เชน LOCAL array[20]:BYTE

LOCAL temp:DWORD

LOCAL myrec:Person

ตัวอยาง ภาษา C

int f(int i, int j)

{

int m,n,k;

}

ภาษาแอสเซมบลี f PROC i:DWORD,j:DWORD

LOCAL M:DWORD,N:DWORD,K:DWORD

ret

f ENDP

Page 167: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

167

5.5.11 EQU ใชเพื่อกําหนด นิพจนหรือขอความซึ่งอยูภายใน < > ใหกับ symbol

รูปแบบ name EQU expression

หรือ name EQU <text> เชน

MASM EQU 5.1 + 0.9 ;Evaluates to 6.0

Msft EQU <”Microsoft”> ;String equate

M1 EQU 3*4

M2 EQU <3*4>

.data

version dd MASM ; version dd 6.0

db Msft ; db “Microsoft”

dw M1 ; dw 12

dw M2 ; dw 3*4

Page 168: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

168

INPUT/OUTPUT (I/O) IBM PC ออกแบบใหมี I/O สองประเภท คือ

- memory map I/O ไดแก จอภาพ ซึ่งจะใชหนวยความจําหลักสวนหนึ่งเปน VRAM (video buffer) การ

เขียนขอมูลไปยัง VRAM จะเกิดขอความหรือภาพบนจอภาพ

- port I/O มีขนาด 16 บิต มีหมายเลข 0 ถึง 65535 เชน keyboard, serial port, parallel port เปนตน

IA-32 จะมีคําสั่ง IN และ OUT เพื่อ อานหรือเขียนขอมูลไปยังหมายเลข port ตาง ๆ

การติดตอสื่อสารระหวาง CPU กับอุปกรณภายนอกใชวิธีการ interrupt

Interrupt Interrupt มีสองประเภท คือ software interrupt (หรือ trap) และ hardware interrupt ไมวาจะเปน

interrupt แบบใด จะมีขบวนการจัดการกับ interrupt เหลานั้นดวยการจดจําตําแหนงของคําสั่งที่จะ execute ถัดไป

ไวบนกองซอน แลวกระโดดไปยัง interrupt handler routine เพื่อบริการ interrupt ดังกลาว เมื่อบริการ interrupt

handler routine เสร็จ ก็จะกลับมาทํางานที่คําสั่งที่ตําแหนงซึ่งไดเคยจดจําไว แสดงดังภาพ

instruction 1

instruction 2 เกิด interrupt

จําตําแหนงคําสั่งที่จะกระทําตอไป

… กระโดดไปทํางานที่ interrupt handler routine

กลับไปกระทําคําสั่งที่เคยจดจําตําแหนงไว

1

2 3

4

Page 169: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

169

Hardware Interrupt

8086/8088 มี hardware interrupt ที่เปน input สองประเภท คือ non-maskable interrupt (NMI) และ

interrupt request (INTR) ดังภาพ 8259 8086/8088 port 20h (EOI) 20h = eoi

NMI

bit 15 9 0 INTR interrupt in port 21h IMR 1 = unmask 0 = mask

FLAGS IF

1 (sti) = enable ISR

0 (cli) = disable IRR

หมายเหตุ สําหรับ IA-32 ในสวนของ 8259 จะมีเพิ่มเติมเปน master interrupt controller กับ slave interrupt

controller (ดูคูมือของ IA-32)

NMI ปกติใชสําหรับ parity error หรือ เกิดความผิดพลาดของระบบ เชน ไฟดับ เปนตน interrupt ประเภทนี้

ไมสามารถบังคับไมใหเกิดได (คําสั่ง cli ไมมีผลกับ NMI) ถาเกิด NMI interrupt การบริการจะใช interrupt type 2

เปน interrupt handler routine ซึ่งการทํางานจะตองรีบเก็บขอมูลที่สําคัญลง CMOS ซึ่งเปนหนวยความจําที่มี

แบตเตอรี่สํารอง เปนตน

สําหรับ INTR , Intel 8086/8088 มี 8259 Interrupt Controller เปนตัวควบคุมการเกิด interrupt อุปกรณ

ตัวนี้มี Interrupt Mask Register (IMR) ขนาด 8 bits (b7b6b5b4b3b2b1b0) และมีเลขที่ port หมายเลข 21h บิตที่ 7 จะ

เกี่ยวของกับ interrupt หมายเลข 7 บิตที่ 6 จะเกี่ยวของกับ interrupt หมายเลข 6 ตามลําดับ ถากําหนดใหบิตใดมีคา

เปน 1 (unmask) เมื่อเกิด interrupt จากอุปกรณที่เกี่ยวของกับบิตนั้น 8259 จะไมสงสัญญาณให 8086/8088 ทราบ

นั้นคือ interrupt นั้นจะถูกละเลย ถาตองการให 8259 สงสัญญาณให 8086/8066 ทราบเพื่อให interrupt นั้นมีผล

ตองกําหนดใหบิตที่เกี่ยวของมีคาเปน 0 (mask) อยางไรก็ตาม interrupt จะมีผลถา IF (Interrupt Flag) มีคาเปน 1

(enable) ไมใช 0 (disable) ดูคําสั่ง cli และ sti ในบทที่ 9

อุปกรณ 8259 กําหนด priority หรือ level ใหกับแตละบิตที่กลาวมา ผูใชไมสามารถเปลี่ยนแปลง priority

ดังกลาว interrupt บิต 0 จะมี priority สูงสุด และ interrupt บิต 7 จะมี priority ตํ่าสุด

Page 170: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

170

Level Device Priority

0 Timer channel 0 highest

1 Keyboard

2 -

3 Asynchronous communications

4 Alternate asynchronous communications

5 Fixed disk

6 Diskette

7 Printer lowest

ในบางชวงเวลาอาจจะมี interrupt มากกวาหนึ่ง level เกิดขึ้นพรอมกัน (ขณะที่กําลังบริการอุปกรณที่มี

priority ตํ่ากวา แลวเกิด interrupt จากอุปกรณที่มี priority สูงกวา) อุปกรณที่มี priority สูงกวาจะไดรับการบริการ

กอน สวนอุปกรณที่มี priority ตํ่ากวาจะตองรอ เมื่อบริการ interrupt เสร็จผูเขียนโปรแกรมจะตองบอกการสิ้นสุดของ

การบริการ interrupt ให 8259 รู ดวยการ ใสคา 20h ไปที่ port หมายเลข 20h (เรียกวา End Of Interrupt (EOI)

command) เขียนเปนภาษาแอสเซมบลีได ดังนี้ mov al,20h

out 20h,al

เพื่อที่อุปกรณที่มี priority ตํ่ากวาที่กําลังรออยูจะไดรับการบริการตอไป

ขณะที่กําลังบริการ interrupt อยู 8259 จะปองกันไมให interrupt จากอุปกรณที่มี priority ตํ่ากวาหรือ

เทากับ มีผล โดยไมสงสัญญาณไปบอกให 8086/8088 รู หรือละเลย interrupt ดังกลาวนั่นเอง

8259 จะใช Interrupt Mask Register (IMR) , Interrupt Request Register(IRR), และ Interrupt Service

Register (ISR) เพื่อจัดการกับเรื่องที่กลาวมาทั้งหมดขางตน ดังนี้

- ใช IMR เพื่อ mask และ unmask ผูเขียนโปรแกรมสามารถละเลย interrupt ได

- ใช ISR เพื่อบอกใหรูวา กําลังบริการ interrupt ใดอยู

- ใช IRR เพื่อบอกใหรูวา interrupt level ใดรองขอ

การปองกันไมให interrupt ที่มี priority ตํ่ากวา มีผล ทําไดโดยการตรวจสอบบิตใน IRR กับบิตใน ISR ถาบิตที่มี

priority สูงกวาใน ISR อยางนอยหน่ึงบิตเปน 1 แสดงวากําลังบริการ interrupt ที่มี priority สูงกวาอยู จะละเลย

interrupt ที่รองขอ อยางลืมวาเมื่อบริการ interrupt ใดเสร็จ เปนหนาที่ของผูเขียนโปรแกรมที่จะตองใช EOI

command เพื่อบอกให 8259 รู จะไดกําหนดใหบิตของ interrupt ที่บริการเสร็จใน ISR เปน 0 เพื่อที่จะให interrupt

ที่มี priority ตํ่ากวาสามารถรองขอได

Page 171: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

171

หมายเหตุ ในกรณีที่ลืม EOI command หลังจากสิ้นสุดการบริการ timer interrupt ซึ่งเปน priority สูงสุด เครื่องจะ

hang เพราะไมสามารถเกิด interrupt ที่มี priority ตํ่ากวาหรือเทากับไดอีก การสง EOI command สองครั้งก็อาจจะ

ทําใหการทํางานผิดพลาดได ระบบปฏิบัติการจะเปนตัวจัดการกับทรัพยากรที่เกี่ยวของกับอุปกรณเหลานี้ ทานจึงไมควรใช EOI command ในโปรแกรมของทาน เพราะ interrupt handler routine ของระบบปฏิบัติการจะทําหนาที่นี้

อยูแลว Software Interrupt

Intel 8086/8088 มีคําสั่ง int ใหผูใชสามารถทํา software interrupt ได หลังคําสั่ง int คือหมายเลข interrupt

ซึ่งมีคาไดต้ังแต 0 – 255 Keyboard

เมื่อผูใชกดปุมบน keyboard จะเกิด interrupt INTR บิต 1 ไปยัง 8259 ถา interrupt นี้มีผล interrupt handler

(9) ของ keyboard จะอานคา scan code จาก keyboard ที่ port 60h ซึ่งมีคาตาง ๆ ดังนี้

F1 F2 ESC 1 2 3 4 5 6 7 8 9 0 _ = ← Num lock Scroll Lock

59 60 1 2 3 4 5 6 7 8 9 10 11 12 13 14 69 70

F3 F4 ←→ Q W E R T Y U I O P [ ] ← Home ↑ PgUp -

61 62 15 16 17 18 19 20 21 22 23 24 25 26 27 71 72 73 74

28

F5 F6 Ctrl A S D F G H J K L ; ‘ ‘ ← → +

62 64 29 30 31 32 33 34 34 36 37 38 39 40 41 75 76 77

78

F7 F8 ⇑ \ Z X C V B N M , . / ⇑ * End ↓ PgDn

65 66 42 43 44 45 46 47 48 49 50 51 52 53 54 55 79 80 81

F9 F10 Alt Caps Lock Ins Del

67 68 56 57 58 82 83

ขอมูลจาก port 60h ไมใช ASCII code เปนหนาที่ของ interrupt handler ของ keyboard จะแปลงเปน ASCII

code ให และใสคาที่แปลงแลวไวใน queue เพื่อใหระบบปฏิบัติการนําไปใชได

Page 172: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

172

scan code ที่เกิดจากการกดปุม keyboard ครั้งแรกมีต้ังแต 1 – 83 เรียกวา “make” codes เมื่อผูใชปลอยปุม

keyboard จะสง scan code ครั้งที่สอง เรียกวา “break” code ดวยการบวก 128 ไปที่ “make” code ซึ่งจะมีคา

ต้ังแต 129 – 211 (กําหนดให bit 7 มีคา 1) ในกรณีที่ผูใชกดปุมแชไวเกิน ½ วินาที keyboard จะสง “make” code

ใหใหม จํานวน 10 ครั้งตอวินาที จนกวาจะปลอยจึงจะสง “break” code

การแปลง scan code เปนคาที่เก็บใน queue คอนขางยุงยากเพราะ ความหมายของการกดปุม เชน shift กับ

c จะหมายถึง C หรือ Ctrl-C จะมีความหมาย “break execution” เปนตน นอกจากนี้ยังมี toggle keys เชน Caps

Lock, Num Lock เปนตน สําหรับการกดปุมหลายปุมพรอมกัน เชน Ctr-Alt-Del จะมีผลอยางใดอยางหนึ่ง เขชน การ

reboot แทนที่จะเปนการใสคาใน queue เปนตน

ในการเขียนโปรแกรมประยุกต เราจะไมติดตอกับ I/O ทาง hardware โดยตรง แตจะเรียกใชบริการของ

ระบบปฏิบัติการแทน

FILE HANDLE ระบบปฏิบัติการ DOS รุนที่ 2 เปนตนไป และ WINDOWS รวมทั้ง UNIX และ LINUX จะใช file handle ใน

การติดตอกับแฟมขอมูล การติดตอกับแฟมขอมูลครั้งแรกตอง open file โดยการกําหนดชื่อของแฟมกอน ถา open

ได ระบบปฏิบัติการจะกําหนดหมายเลข handle ใหกับแฟมดังกลาว จํานวนแฟมที่จะ open ไดพรอม ๆ กันในแตละ

ครั้งขึ้นอยูกับระบบปฏิบัติการแตละตัว การอานเขียนขอมูลในแฟมจะใช file handle และเมื่อเลิกใชตอง close แฟม

ดังกลาว โดยใช file handle นอกจากนี้ยังมีอุปกรณมาตรฐานสามอันที่มีลักษณะการทํางานเหมือน file handle แต

ไมตองมีการ open และ close สามารถใชไดเลย ไดแก stdin, stdout และ stderr ซึ่งแทน keyboard ใชเพื่ออาน

ขอมูลจาก keyboard, จอภาพ ใชเพื่อเขียนขอมูลออกจอภาพ และจอภาพ ใชเพื่อเขียนขอความผิดพลาดออกจอภาพ

ตามลําดับ

สําหรับโปรแกรมแบบ console ฟงกชันของ WIN32 API ที่ใชสําหรับนําหมายเลข handle ของอุปกรณ

มาตรฐานทั้งสามมาใช ไดแก GetStdHandle ซึ่งมี prototype ดังนี้ GetStdHandle PROTO :DWORD

และเรียกใช ดังนี้ ก. stdin

invoke GetStdHandle,STD_INPUT_HANDLE

ข. stdout

invoke GetStdHandle,STD_OUTPUT_HANDLE

ค. stdout

invoke GetStdHandle, STD_ERROR_HANDLE

Page 173: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

173

เมื่อ STD_INPUT_HANDLE equ -10

STD_OUTPUT_HANDLE equ -11

STD_ERROR_HANDLE equ -12

ตัวเลขขางตนไมใชหมายเลข handle แตเปนตัวเลขที่ WINDOWS กําหนดขึ้น หมายเลข handle จริง ๆ ที่ไดจะ

สงกลับทาง eax

สําหรับการอานเขียน ใชฟงกชัน ReadFile และ WriteFile สามารถดูไดจาก WIN32 help และตัวอยาง

ขางลาง

ตัวอยางโปรแกรม อาน/เขียน จาก stdin และ stdout ; FILE:readwrite.asm

; How to use WIN32 API for reading and writting string from standard input and standard output

; How to Compile&link

; For masm32-> buildc readwrite

; For masm615->make32 readwrite

.386

.model flat, stdcall

option casemap :none ; case sensitive

STD_INPUT_HANDLE equ -10

STD_OUTPUT_HANDLE equ -11

STD_ERROR_HANDLE equ -12

NULL equ 0

GetStdHandle PROTO :DWORD

ReadFile PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD

WriteFile PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD

ExitProcess PROTO :DWORD

Page 174: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

174

.data

stdin_hFile dd ?

stdout_hFile dd ?

inbuff db 256 dup(?)

NumberOfBytesRead dd ?

NumberOfBytesWrite dd ?

.code

main:

; show how to get STD_INPUT_HANDLE

invoke GetStdHandle,STD_INPUT_HANDLE

mov stdin_hFile,eax

; show how to get STD_OUTPUT_HANDLE

invoke GetStdHandle,STD_OUTPUT_HANDLE

mov stdout_hFile, eax

; show how to ReadFile

invoke ReadFile,stdin_hFile,ADDR inbuff,256,ADDR NumberOfBytesRead,NULL

; show how to WriteFile

invoke WriteFile,stdout_hFile,ADDR inbuff,NumberOfBytesRead,ADDR

NumberOfBytesWrite,NULL

; exit process

invoke ExitProcess,0

end main

Page 175: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

175

ตัวอยางโปรแกรม เขียน string ; FILE:helloworld.asm

; How to write string

; How to Compile&link

; For masm32-> buildc helloworld

; For masm615->make32 helloworld

.386

.model flat, stdcall

option casemap :none ; case sensitive

STD_INPUT_HANDLE equ -10

STD_OUTPUT_HANDLE equ -11

STD_ERROR_HANDLE equ -12

NULL equ 0

GetStdHandle PROTO :DWORD

ReadFile PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD

WriteFile PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD

ExitProcess PROTO :DWORD

.data

stdout_hFile dd ?

NumberOfBytesWrite dd ?

prompt db 'Hello World'

newline db 0dh,0ah ; carriage return and linefeed

Page 176: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

176

.code

L0:

; get STD_OUTPUT_HANDLE

invoke GetStdHandle,STD_OUTPUT_HANDLE

mov stdout_hFile, eax

; show prompt

invoke WriteFile,stdout_hFile,ADDR prompt,11,ADDR NumberOfBytesWrite,NULL

; write newline

invoke WriteFile,stdout_hFile,ADDR newline,2,ADDR NumberOfBytesWrite,NULL

; exit process

invoke ExitProcess,0

end L0

Page 177: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

177

ตัวอยางโปรแกรม อาน/เขียน เลขจํานวนเต็มมีเครื่องหมาย 32 บิต ; FILE:readwriteint.asm

; How to read and write signed integer (N)

; How to Compile&link

; For masm32-> buildc readwriteint

; For masm615->make32 readwriteint

.386

.model flat, stdcall

option casemap :none ; case sensitive

STD_INPUT_HANDLE equ -10

STD_OUTPUT_HANDLE equ -11

STD_ERROR_HANDLE equ -12

NULL equ 0

GetStdHandle PROTO :DWORD

ReadFile PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD

WriteFile PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD

ExitProcess PROTO :DWORD

atoi PROTO :DWORD

itoa PROTO :DWORD,:DWORD

.data

stdin_hFile dd ?

stdout_hFile dd ?

inbuff db 256 dup(?)

NumberOfBytesRead dd ?

NumberOfBytesWrite dd ?

outbuff db 12 dup(?)

N dd ?

Page 178: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

178

.code

; int atoi(char *atoi_buff); --- Convert ASCII string to 32-bit signed integer.

blank equ 20h ; ASCII blank character

tab equ 09h ; ASCII tab character

atoi proc USES ebx ecx edx atoi_buff:DWORD

mov esi,atoi_buff

xor ebx,ebx ; initialize forming answer

xor ecx,ecx ; initialize sign flag

atoi1: mov al,[esi]

inc esi ; scan off whitespace

cmp al,blank ; ignore leading blanks

je atoi1

cmp al,tab ; ignore leading tabs

je atoi1

cmp al,'+' ; if + sign, proceed

je atoi2

cmp al,'-' ; is it - sign?

jne atoi3 ; no, test if numeric

dec ecx ; was - sign, set flag, for negative result

atoi2: mov al,[esi] ; get next character

inc esi

atoi3:cmp al,'0' ; is character valid?

jb atoi4 ; jump if not '0' to '9'

cmp al,'9'

ja atoi4 ; jump if not '0' to '9'

and eax,0fh ; isolate lower four bits

xchg ebx,eax ; previous answer x 10

mov edx,10

mul edx

add ebx,eax ; add this digit

jmp atoi2 ; convert next digit

Page 179: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

179

atoi4: mov eax,ebx ; put result into EAX

jecxz atoi5 ; jump if sign flag clear

neg eax ; make result negative

atoi5:

ret ; back to caller

atoi endp

; int itoa(int i, char *itoa_buff);

;--- Convert 32-bit signed integer to ASCII string

itoa proc USES ebx ecx edx esi i:DWORD, itoa_buff:DWORD

mov ecx,10 ; convert to base 10, change here for base 2, 8, 16

mov eax,i

mov esi,itoa_buff

add esi,11 ; advance to end of buffer

push esi ; and save that address.

or eax,eax ; test sign of 32-bit value,

pushfd ; and save sign on stack.

jns itoa1 ; jump if value was positive.

neg eax ; find absolute value.

itoa1: mov edx,0 ; divide value by base to extract

div ecx ; next digit for forming string

add dl,'0' ; convert remainder to ASCII digit

cmp dl,'9' ; in case converting to hex ASCII,

jle itoa2 ; jump if in range 0-9,

add dl,'A'-'9'-1 ; correct digit if in range A-F for base 16

itoa2: dec esi ; back up through buffer

mov [esi],dl ; store this character into string

or eax,eax

jnz itoa1 ; no, convert another digit

popfd ; was original value negative?

jns itoa3 ; no, jump

Page 180: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

180

dec esi ; yes, store sign into output

mov byte ptr [esi],'-'

itoa3:pop eax ; calculate length of string

sub eax,esi

mov ecx,eax ; keep length in ecx

; move string to the beginning of itoa_buff

mov edx,itoa_buff

itoa4: cmp eax,0

je exit_itoa

mov bl,[esi]

mov [edx],bl

inc edx

inc esi

dec eax

jmp itoa4

exit_itoa:

; fill zero of string

mov [edx],DWORD PTR 0

mov eax,ecx

ret ; back to caller

itoa endp

Page 181: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

181

start:

; First get STD_INPUT_HANDLE and STD_OUTPUT_HANDLE

invoke GetStdHandle,STD_INPUT_HANDLE

mov stdin_hFile,eax

invoke GetStdHandle,STD_OUTPUT_HANDLE

mov stdout_hFile, eax

; read N

; step1: read string

invoke ReadFile,stdin_hFile,ADDR inbuff,256,ADDR NumberOfBytesRead,NULL

; step 2: convert string to signed integer

invoke atoi,ADDR inbuff

; step 3: keep in N

mov N,eax

; write N

; step 1: convert signed integer (N) to string

invoke itoa,N,10,ADDR outbuff

; length of string is in eax

; step 2: write string

invoke WriteFile,stdout_hFile,ADDR outbuff,eax,ADDR NumberOfBytesWrite,NULL

; exit process

invoke ExitProcess,0

end start

Page 182: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

182

แถวลําดับ (array) แถวลําดับสามารถกําหนดเนื้อที่ใหติดกัน โดยมีขนาด s*n เมื่อ s เปนขนาดเปนไบตของสมาชิกแตละตัว

และ n เปนจํานวนสมาชิกทั้งหมด

ก. แถวลําดับ 1 มิติ

สมมุติวา a เปนแถวลําดับ 1 มิติ ขนาด 20 (มีสมาชิก 20 ตัว) สมาชิกแตละตัวกินเนื้อที่ 1 ไบต คาเริ่มตนเปน

อะไรก็ได สามารถกําหนดเนื้อที่ได ดังนี้ a db 20 dup(?)

สมาชิกแตละตัวมีตําแหนง ดังนี้

a+0 1 ไบต

a+1 1 ไบต

a+2 1 ไบต …

a+19 1 ไบต

แตถเ a เปนแถวลําดับ 1 มิติ ขนาด 20 (มีสมาชิก 20 ตัว) สมาชิกแตละตัวกินเนื้อที่ 2 ไบต คาเริ่มตนเปน

อะไรก็ได สามารถกําหนดเนื้อที่ได ดังนี้ a dw 20 dup(?)

สมาชิกแตละตัวมีตําแหนง ดังนี้ a+0 2 ไบต

a+2 2 ไบต

a+4 2 ไบต …

a+38 2 ไบต

Page 183: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

183

แตถเ a เปนแถวลําดับ 1 มิติ ขนาด 20 (มีสมาชิก 20 ตัว) สมาชิกแตละตัวกินเนื้อที่ 4 ไบต คาเริ่มตนเปน

อะไรก็ได สามารถกําหนดเนื้อที่ได ดังนี้ a dd 20 dup(?)

สมาชิกแตละตัวมีตําแหนง ดังนี้ a+0 4 ไบต

a+4 4 ไบต

a+8 4 ไบต …

a+76 4 ไบต

ตองการหาสูตรทั่วไป สําหรับหาตําแหนงของสมาชิกในแถวลําดับ 1 มิติ ขนาด n ที่สมาชิกแตละตัวกินเนื้อที่

s byte ได ดังนี้

ตําแหนง สมาชิกตัวที่ a+0 1

a+s*1 2

. . .

a+s*(n-1) n

สูตร สมาชิกตัวที่ i อยูที่ตําแหนง a+s*(i-1)

ข) แถวลําดับ 2 มิติ

สมมุติวา a เปนแถวลําดับ 2 มิติ ขนาด 3*4 (มีสมาชิก 12 ตัว) สมาชิกแตละตัวกินเนื้อที่ 1 คํา คาเริ่มตนกําหนดดังนี้ 11 12 13 14

21 22 23 24

31 32 33 34

ถาตองการเก็บแบบ row major order เขียนเปนภาษาแอสเซมบลีไดดังนี้

Page 184: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

184

a dw 11,12,13,14,21,22,23,24,31,32,33,34

ถาตองการเก็บแบบ column major order เขียนเปนภาษาแอสเซมบลีไดดังนี้ a dw 11,21,31,12,22,32,13,23,33,14,24,34

ตองการหาสูตรทั่วไป สําหรับหาตําแหนงของสมาชิกในแถวลําดับ 2 มิติ ขนาด m*n โดยที่สมาชิกแตละตัว

กินเนื้อที่ s byte แบบ row order major ได ดังนี้

ตําแหนง สมาชิกตัวที่ a+ s*(1-1) 1,1

a+ s*(2-1) 1,2

. . .

a+ s*(n-1) 1,n

a+s*n+ s*(1-1) 2,1

a+s*n+ s*(2-1) 2,2

. . .

a+s*n+ s*(n-1) 2,n

. . .

a+s*n*(i-1)+s*(1-1) i,1

a+s*n*(i-1)+s*(2-1) i,2

. . .

a+s*n*(i-1)+s*(j-1) i,j

. . .

a+s*n*(i-1)+s*(n-1) i,n

. . .

a+s*n*(m-1)+s*(1-1) m,1

a+s*n*(m-1)+s*(2-1) m,2

. . .

a+s*n*(m-1)+s*(n-1) m,n

สูตร สมาชิกตัวที่ i,j อยูที่ตําแหนง a+s*n*(i-1)+s*(j-1)

s*n

s*n

แถวที่ 1

แถวที่ 2

แถวที่ i s*n

s*n แถวที่ m

Page 185: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

185

ในทํานองเดียวกัน ตองการหาสูตรทั่วไป สําหรับหาตําแหนงของสมาชิกในแถวลําดับ 2 มิติ ขนาด m*n โดย

ที่สมาชิกแตละตัวกินเนื้อที่ s byte แบบ column order major ได ดังนี้

สูตร สมาชิกตัวที่ i,j อยูที่ตําแหนง a+s*m*(j-1)+s*(i-1)

ตัวอยาง ตองการเขียนโปรแกรมเพื่อบวกขอมูลในแถวลําดับ a ที่มีสมาชิก 100 ตัว เก็บไวที่ตัวแปร sum โดยที่สมาชิก

แตละตัวกินเนื้อที่ 4 ไบต

.data

a dd 100 dup (?)

sum dd 0

.code

mov ecx,1 ; use ecx as counter from 1 to 100

mov ebx,0 ; use ebx as index

L1: cmp ecx,100

jg L2

mov eax,a[ebx]

add sum,eax

inc ecx

add ebx,4

jmp L1

L2:

Page 186: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

186

ระเบียน (record)

สามารถกําหนดเหมือนแถวลําดับ คือ ต้ังช่ือของระเบียนเปนตําแหนงเริ่มตน สําหรับแตละ field ในแถว

ลําดับใชระยะหางจากตําแหนงเริ่มตนของระเบียน เชน .data

person_rec label byte

db 40 dup (?) ; name

birthdate label word

dw ? ; day

dw ? ; month

dw ? ; year

.code

lea ebx,person_rec

mov ax,WORD PTR[ebx+40] ; day

หรือ กําหนด type ใหเปนระเบียนได ดังนี้

name STRUCT [alignment] [, NONUNIQUE]

fielddeclarations

name ENDS

เมื่อ name เปนช่ือของระเบียน หรือ structname

alignment อาจเปน 1, 2 หรือ 4 เปน boundary alignment (เริ่มตนที่ตําแหนงซึ่งหารดวย 1, 2 หรือ 4

ลงตัว) ถาไมกําหนด จะเปน 1

NONUNIQUE การอางถึง field ตองเปน fully specifies name

fielddeclarations กําหนด filed ตาง ๆ

และเมื่อ ไดช่ือของระเบียนและโครงสรางแลว สามารถกําหนดตัวแปรใหมีชนิดเปนระเบียนได ดังนี้

[name] structname <[initializer [, initializer]...]>

หรือ

Page 187: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

187

[name] structname { \

[initializer] \

[, initializer]... \

}

หรือ [name] structname constant DUP ({[initializer[, initializer]...]})

ถาไมกําหนด initializer ตรง field ไหน จะใชคา default ในระเบียน เชน

BirthDate STRUCT

DAY dw 17 ; default value

MONTH dw 01 ;default value

YEAR dw 2003 ;default value

BirthDate ENDS

Person STRUCT

FirstName db "HatYai",0 ; default value

LastName db "Thailand",0 ;default value

mydate BirthDate <> ; use default value of BirthDate

Person ENDS

me Person <> ; use default value of Person

การอางถึงขอมูลใน field ไดดวย name.fieldname เชน

.code

mov ax,me.mydate.DAY

mov edx,offset me.FirstName

Page 188: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

188

6.5.12 LABEL Directive

LABEL directive นิยมใชเมื่อตองการใหขอมูลที่ตําแหนงเดียวกันสามารถอางถึงไดหลายขนาด เชน

.code

mov al,byte1 ; move 1 st byte

mov bx,word2 ; move third and fourth bytes

.data

byte1 label byte ; define first byte as byte1

word1 dw 2532h ; define first two bytes as word1

word2 label word ; define third and fourth bytes as word2

byte2 db 25h ; define third byte as byte2

db 32h ; define fourth byte

หมายเหตุ byte1 -> <- word1

byte2 -> <- word2

6.5.13 PTR operator

ใชเพื่อกําหนดขนาดของขอมูลที่ตองการ แทนขนาดของตัวแปรเดิมที่เคยกําหนดไว เชน .data

bytea db 22h ; bytea

db 35h ; bytea+1

worda dw 2672h ; worda

.code ; worda+1

mov ah,byte ptr worda ; ah = 72h

mov bl,byte ptr worda+1 ; bl = 26h

mov byte ptr worda,5 ; worda change from 72h to 5

mov ax,word ptr bytea ; ax = 3522h

32h

25h

25h

32h

22h

35h

72h

26h

Page 189: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

189

หรือใชเพื่อกําหนดขนาดของขอมูลที่ตองการใด ๆ เชน lea ebx,mytable

mov BYTE PTR [ebx+5],0 หรือ mov [ebx+5],BYTE PTR 0

หมายเหตุ ในกรณีที่รูขนาดของขอมูลก็ไมจําเปนตองใช เชน mov [ebx+5],al

เพราะรูวา al มีขนาด 8 บิต

6.5.14 Offset operator ใชเพื่อกําหนด offset (ตําแหนงของหนวยความจํา) เชน

.DATA

MYDATA DB “Hello”

.CODE

mov eax,offset MYDATA ; นําตําแหนงของ MYDATA ใสใน eax ไมใชขอมูลของ MYDATA

หมายเหตุ offset ที่ใชกับการกําหนดหนวยความจําแบบ direct addressing mode จะมีความหมายเหมือนคําสั่ง lea

เชน

mov eax,offset MYDATA จะเหมือนกับ lea eax,MYDATA

แต ในกรณีของการกําหนดหนวยความจําแบบอื่น จะไมเหมือนกัน เพราะ offset มีการคํานวณตําแหนงของ

หนวยความจําในชวงการแปล (compile time) แต lea เปนคําสั่งภาษาเครื่องที่จะทําในชวง execution time ดังนั้น

ตําแหนงที่คํานวณไดจาก offset จะยังไมรูคาในเรจิสเตอรที่กําหนด ในชวงการแปลจะกําหนดใหเรจิสเตอรเหลานั้น

เปน 0 เชน

mov ebx,offset mydata

mov eax,offset[ebx] จะไดวา eax มีคาเปน 0 เพราะไมทราบคา ebx ในชวงการแปล

จะตางกับ mov ebx,offset mydata

lea eax,[ebx] จะไดวา eax มีคาเปนตําแหนงของ mydata เพราะทราบคาของ ebx ในชวง execution time

Page 190: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

190

SUBROUTINES subroutine บางครั้งเรียกวา procedure, function หรือ subprogram เปนสวนยอยของโปรแกรมโดยมีการ

ต้ังช่ือ subroutine และ dummy argument หรือ dummy parameter (ถามี) เมื่อ เรียกใช ดวยคําสั่ง call หรือ

เรียกช่ือ จะมีการผาน actual argument หรือ actual parameter ไปยัง dummy argument หรือ actual parameter

และกระโดดไปทํางานใน subroutine และเมื่อทํางาน เสร็จ จะกลับมายังคําสั่งถัดจากคําสั่งที่เรียกใชตอไป

ตัวอยาง global variable dummy parameters

ช่ือ subroutine

Int m;

int foo(int i, int j)

{ local variable

int k;

สงคากลับ k = i+j;

return k;

}

main()

{ การเรียกใช actual parameters

m = foo(12,17);

}

ใน main() เมื่อมีการเรียกใช m = foo(12,17) จะมีการผาน actual parameter 12 ไปให dummy

parameter i และ 17 ไปให j ของ subroutine foo แลวกระโดดไปทํางานที่ subroutine foo ซึ่งจะกําหนดให k = i+j

ดังนั้น k = 29 และสงคากลับ มายัง main ซึ่งทําให m มีคา 29

หมายเหตุ สําหรับ IA-32 การสงคา 32 บิต กลับ จะใชเรจิสเตอร eax

Page 191: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

191

PARAMETER PASSING เมื่อมีการเรียกใช subroutine อาจมีการสงผาน parameter ทางหนวยความจํา (global variable) ,

เรจิสเตอร หรือกองซอน (หรือผสมกัน) การผานทางเรจิสเตอรจะเร็วกวา แตมีขอจํากัด เนื่องจากจํานวนเรจิสเตอรมี

นอย ถามี parameter จํานวนมากไมสามารถผานทางเรจิสเตอรไดหมด การผานพารามิเตอรทาง global data ทําได

ชากวา แตผานไดมากเทาที่หนวยความจํามีพอ การผานพารามิเตอรทาง global variable และเรจิสเตอร ไมสามารถ

ใชกับ recursive subroutine ได ตองผานพารามิเตอรทางกองซอนเทานั้น

ในที่นี้จะกลาวถึงเฉพาะการผาน parameter ทางกองซอน เนื่องจากการผาน parameter ทางเรจิสเตอร

หรือ global variable ตรงไปตรงมา

ตามขอตกลงของภาษาระดับสูง เมื่อมีการเรียกใช subroutine จะเกิดกรอบกองซอน (activation record

หรือ stack frame) ดังนี้

เลขที่สูง ช้ีไปยังตําแหนง dynamic link ของ stack

frame กอนหนานี้ parameter

parameter

… จัดการโดยผูเรียก

parameter

parameter

return address

dynamic link

local variable

stack local variable จัดการโดยผูถูกเรียก

growth …

เลขที่ตํ่า local variable

หมายเหตุ return address และ dynamic link อาจแตกตางกันออกไปตามความเหมาะสมของแตละสถาปตยกรรม

ตําแหนงของ dynamic link เรียกวา frame pointer หรือ base pointer เปนตําแหนงฐาน ที่จะใชคํานวณ

ตําแหนงของ parameter และ local variable โดย parameter จะมีระยะหางจาก base pointer เปนบวก สวน local

variable จะมีระยะหางเปนลบ เชน ถาทุก ๆ ชองในภาพขางตน มีขนาด 4 ไบต ตําแหนงตาง ๆ จะเปน ดังนี้

Page 192: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

192

เลขที่สูง ช้ีไปยังตําแหนง dynamic link ของ stack

frame กอนหนานี้ parameter

parameter

. . . … จัดการโดยผูเรียก

fp+12 parameter

fp+8 parameter

fp+4 return address

fp dynamic link

fp-4 local variable

fp-8 local variable จัดการโดยผูถูกเรียก

stack . . . …

growth local variable

เลขที่ตํ่า

• ผูเรียก

จะดําเนินการตอไปนี้ - ถามี parameter กดคาหรือเลขที่ของ parameter (ขึ้นอยูกับวาเปนการสง parameter แบบไหน) ลง

บนกองซอนในชวงกระทําการตามลําดับ จากตัวแรกถึงตัวสุดทาย ถาเปนภาษาปาสคาล ตัวสุดทายจะอยูบนสุด แตถาเปนภาษาซี จะทํากลับกัน

- เรียกใชชุดคําสั่งยอยหรือฟงกชันที่ตองการ IA-32 มีคําสั่ง call ซึ่งทําหนาที่นี้โดยตรง คําสั่ง call จะกด

เลขที่กลับ (return address : เลขที่ของคําสั่งถัดจากคําสั่ง call) ลงบนกองซอนในชวงกระทําการ แลว

กระโดดไปทํางานที่ subroutine ที่ตองการ (สถาปตยกรรมบางแบบไมมีคําสั่ง call โดยตรง ในกรณีนี้

ตองกดเลขที่กลับมาทํางานตอ ลงบนกองซอนในชวงกระทําการ แลวใชคําสั่งกระโดด เพื่อไปทํางานที่ subroutine ตองการเอง)

- สําหรับการ call แบบ C ผูเรียกจะตองเอา parameters ทั้งหมดบนกองซอนออกเอง สวนการ call แบบ

Pascal ผูถูกเรียกจะจัดการสวนนี้เอง

Page 193: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

193

ตัวอยาง สมมุติวา subroutine foo มี dummy parameters ดังนี้ foo(dpara1, dpara2, …, dparan)

และมีการเรียกใชดวย actual parameters ดังนี้ foo(apara1, apara2, …, aparan)

ก. การ call แบบ Pascal ผานพารามิเตอรจากซายไปขวา เขียนเปน ภาษาเอสเซมบลีของ IA-32 ได ดังนี้

push apara1

push apara2

push aparan

call foo

ข. การ call แบบ C ผานพารามิเตอรจากขวามาซาย เขียนเปน ภาษาเอสเซมบลีของ IA-32ได ดังนี้ push aparan

push apara1

call foo

add esp,total_parameters_sizes

• ผูถูกเรียก จะมีการดําเนินการ ดังตอไปน้ี

- กดคาโยงพลวัต (dynamic link) ลงบนกองซอนในชวงกระทําการ

- จองเนื้อที่ใหกับตัวแปรทองถิ่นบนกองซอนในชวงกระทําการ (หมายเหตุ สําหรับ IA-32 ถาเปน real

mode หรือ Intel 8086/8088 ควรทํา word boundary alignment โดยให จํานวนเนื้อที่ทั้งหมดตอง

หารดวย 2 ลงตัว และถาเปน Protected mode ควรทํา double boundary alignment โดยให จํานวน

เนื้อที่ทั้งหมดตองหารดวย 2 ลงตัว)

- สําหรับการ call แบบ Pascal จะตองเอา parameters ทั้งหมดบนกองซอนออก

เขียนเปนคําสั่งภาษาแอสเซมบลี IA-32 โดยใช ebp เปน base pointer และ esp เปน stack pointer ได

ดังนี้

Page 194: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

194

foo:

; prologue

push ebp

mov ebp,esp

; allocate local variable

sub esp,total_local_sizes

เมื่อ total_parm_sizes เปนเลขจํานวนเต็ม มีคาเทากับขนาดของ parameter รวมกันทั้งหมด

เมื่อผูถูกเรียกทํางานเสร็จ จะตองลบกรอบกองซอนทิ้ง วิธีการลบทําไดงาย ๆ โดยการใชคําสั่ง ตอไปนี้

ก. การ call แบบ Pascal

; epilogue

mov esp,ebp

pop ebp

ret total_parm_sizes

ข. การ call แบบ C

;epilogue

mov esp,ebp

pop ebp

ret

เมื่อ total_parm_sizes เปนเลขจํานวนเต็ม มีคาเทากับขนาดของ parameter รวมกันทั้งหมด คําสั่งแรก

เลื่อน esp ใหช้ีไปยังตําแหนงที่เก็บคาโยงพลวัต (ตําแหนงที่ช้ีโดย ebp) คําสั่งที่สองบรรจุคาโยงพลวัตไวใน ebp

เพื่อใหช้ีไปยังคาโยงพลวัตของกรอบกองซอนของตัวเรียกกอนหนานี้ แต esp ยังช้ีอยูที่ตําแหนงซึ่งเก็บเลขที่กลับของ

กรอบกองซอนที่กําลังลบอยู และคําสั่งที่สามกลับไปยังผูเรียก และลบ parameter ทั้งหมดทิ้ง เปนอันสิ้นสุดการ

ทํางานของผูถูกเรียก

สําหรับการ call แบบ STDCALL เปนลูกผสมระหวาง C กับ Pascal เปนการผาน parameters จากขวามา

ซาย

Page 195: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

195

ในกรณีที่ subroutine มีจํานวนพารามิเตอรคงที่ เชน int foo(int I, int j, int k) มีจํานวนพารามิเตอรคงที่ 3

ตัว ในกรณีนี้ ผูถูกเรียกจะเอา parameters ทั้งหมดออกจาก stack เอง ดวยคําสั่ง ret total_parm_sizes

foo:

ret total_parm_sizes

การเรียกใช foo(apara1,apara2,apara3) ตองทําดังนี้

push apara3

push apara2

push apara1

call foo

สําหรับ subroutine ที่มีจํานวนพารามิเตอรไมคงที่ เชน int foo(int i, int j, …) ผูถูกเรียกไมรูจํานวน

พารามิเตอรที่แนนอน จึงไมสามารถเอา parameters ทั้งหมดออกจาก stack จึงใชคําสั่ง ret

foo:

ret

เปนหนาที่ของผูเรียกที่จะตองเอา parameters ทั้งหมดออกจาก stack เชน

ก. การเรียกใช foo(apara1,apara2) ตองทําดังนี้

push apara2

push apara1

call foo

add esp,8

ข. การเรียกใช foo(apara1,apara2,apara3) ตองทําดังนี้

Page 196: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

196

push apara3

push apara2

push apara1

call foo

add esp,12 SAVE REGISTERS

การเขียน subroutine ที่ดี ตองไมทําลาย registers ที่ผูเรียก ใชอยู จึงควรมีการ save คาใน register และ

restore คาเหลานั้นกลับ กอนที่จะ return

การเขียน subroutine สําหรับ IA-32 โดยมีการผานพารามิเตอรทางกองซอน มีการ save/restore register

และมีการผานคากลับทาง register eax มี skeleton ดังนี้

foo: ; prologue

push ebp

mov ebp,esp

; allocate local variable

sub esp,total_local_sizes

; save registers

; เชน ; push ebx

; push ecx

… คําสั่ง ของ subr … (เชน ทําลายคาใน ebx และ ecx) ระวัง หามทําลายคาใน ebp

… ทําลายคาใน eax ได แตตองใสคาที่จะสงกลับทาง eax กอน ret …

; restore registers

; เชน ; pop ecx

; pop ebx

; epilogue

mov esp,ebp

pop ebp

ret สําหรับ call แบบ C และ ret total_parm_sizes สําหรับการ call แบบ Pascal

Page 197: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

197

RECURSIVE SUBROUTINE

subroutine ที่สามารถกลับมาเรียกตัวเองกอน return เรียกวา recursive subroutine จําเปนตองใชการผาน

parameter ในลักษณะกองซอน เชน ฟงกชัน fact เขียนดวยภาษา C ที่ใชคํานวณ factorial ในโปรแกรมตอไปนี้ #include <stdio.h>

int fact (int n)

{

if (n<=1) return 1;

return n*fact(n-1) /* return address 2*/;

}

main()

{

printf("%d\n",fact(3) /* return address 1 */);

}

สําหรับ fact เขียนเปน subroutine ตามขอตกลงของการ call แบบ C ดวยภาษาแอสเซมบลี IA-32 ได ดังนี้

Page 198: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

198

fact: ; prologue

push ebp

mov ebp,esp

; no local variable

; save register

push edx

cmp dword ptr [ebp+8],1 ; if (n<= 1)

jle ret_one ; return 1;

mov eax,[ebp+8] ; eax <- n

dec eax ; eax <- n-1

push eax ; fact(n-1)

call fact ;

mul dword ptr [ebp+8] ; return n*fact(n-1)

jmp ret_fact

ret_one:

mov eax,1 ; return 1

ret_fact:

; restore registers

pop edx

mov esp,ebp

pop ebp

ret

และมีการเรียกใช fact(3) ใน main() ดังนี้

push 3

call fact

add esp,4

เมื่อมีการเรียก fact(3) ใน main() จะเกิดกรอบกองซอน ดังนี้

Page 199: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

199

- เมื่อ n =3

3

return address 1

fp dynamic link

- เมื่อ n = 2

3

return address 1

dynamic link

2

return address 2

fp dynamic link

- เมื่อ n = 1

3

return address 1

dynamic link

2

return address 2

dynamic link

1

return address 2

fp dynamic link

- จากนั้นฟงกชัน fact จะ return 1 คาที่จะสงกลับไปคือ 1 และตําแหนงที่จะ return คือ return address 2 การ return

จะลบกรอบกองซอนทิ้ง และเลื่อน fp กลับ ตาม dynamic link ดังนี้

Page 200: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

200

3

return address 1

dynamic link

2

return address 2

fp dynamic link

ตรงตําแหนง return address 2 จะคํานวณคาที่ fact return คือ 1 กับคา n ในขณะนี้ คือ 2 จะได 2*1 = 2 แลว return

คาที่จะสงกลับไปคือ 2 และตําแหนงที่จะ return คือ return address 2 การ return จะลบกรอบกองซอนทิ้ง และ

เลื่อน fp กลับ ตาม dynamic link ดังนี้

3

return address 1

fp dynamic link

ตรงตําแหนง return address 2 จะคํานวณคาที่ fact return คือ 2 กับคา n ในขณะนี้ คือ 3 จะได 3*2 = 6 แลว return

คาที่จะสงกลับไปคือ 6 และตําแหนงที่จะ return คือ return address 1 การ return จะลบกรอบกองซอนทิ้ง และเลื่อน

fp กลับ ตาม dynamic link ซึ่งจะเปนอะไรก็ได เพราะไมมีกรอบกองซอนเหลืออยู จากนั้น main จะแสดงผลลัพธ

เปน 6

Page 201: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

201

MACROS

ในการเขียนโปแกรมภาษาแอสเซมบลี บอยครัง้ที่มีการเขียนบล็อกของคําสั่งซ้ํา ๆ กันหลายครั้ง จึงเกิดแนวความคิดที่จะมีคําสั่งยอเพื่อแทนบล็อกของคําสั่ง โดยการตั้งช่ือใหกับบล็อกของคําสั่ง และใชช่ือเปนคําสั่งยอ

การตั้งช่ือและการกําหนดคําสั่งในบล็อก เรียกวา macro definition สวนการเรียกใช เรียกวา macro call ทุกครั้งที่มีการเรียกใช โดยการอางชื่อของ macro คําสั่งในบล็อกของ macro ที่มีช่ือดังกลาว จะนํามาแทนที่ช่ือน้ัน

โปรแกรมที่ทําหนาที่จดจํา macro definition และการแทนที่ช่ือดวยบล็อกของคําสั่ง เรียกวา macro processor

ตัวอยาง - macro definition

xy macro

add x,5

add y,10

endm

เมื่อ macro บอกใหรูวาเปน macro definition ในตัวอยางนี้ มีช่ือเปน xy และ endm บอกใหรูวาสิ้นสุด

บล็อกของคําสั่ง สวนคําสั่งในบล็อกไดแก add x,5 กับ add y,10 เรียกวาสวน body

- macro call เรียกช่ือของ macro เชน

xy

xy

จะมีการแทนชื่อ xy ดวยคําสั่งในสวนของ body เรียกวา expanding ดังนี้ add x,5

add y,10

add x,5

add y,10

macro processor

โปรแกรมภาษาแอสเสมบลี +

macro

โปรแกรมภาษาแอสเสมบลี

Page 202: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

202

นอกเหนือจากการแทนที่ดวยคําสั่งในบล็อกแลว macro ยังมี facility อื่น ๆ เชน

• Macro Arguments

สามารถกําหนด dummy arguments ได เชน

- macro definition

add3 macro arg1,arg2,arg3

add x,arg1

add x,arg2

add x,arg3

endm

- macro call

add3 1,2,3

- expanding

add x,1

add x,2

add x,3

• Conditional Macro Expansion

อาจมีคําสั่งของ macro เพื่อตรวจสอบสภาวะในการ expanding เชน คําสั่ง AIF

- macro definition

vary macro arg0,count,arg1,arg2,arg3

arg0 add x,arg1

AIF (count EQ 1) .FINI

add x,arg2

AIF (count EQ 2) .FINI

add x,arg3

.FINI

endm

- macro call

vary loop1,3,a,b,c

vary loop2,2,a,b

Page 203: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

203

vary loop3,1,a

- expanding

loop1 add x,a

add x,b

add x,c

loop2 add x,a

add x,b

loop3 add x,a

• Macro Call Within Macro Definition

เชน - macro definition

add1 macro arg1

add x,arg1

add y,arg1

endm

add2 macro arg1,arg2,arg3

add1 arg1

add1 arg2

add1 arg3

endm

- macro call

add2 a,b,c

- expanding

add x,a

add y,a

add x,b

add y,b

add x,c

add y,c

Page 204: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

204

• Macro Definition Within Macro Definition

เชน - macro definition

add4 macro arg

add x,4

arg macro dummy

add x,5

add x,dummy

endm

add x,6

endm

- macro call

add4 add5

add5 a

- expanding

add x,4

add x,6

add x,5

add x,a

Macros V.S. Subroutines macro มีความแตกตางจาก subroutine คือ

- การ call macro กระทําในชวงการแปล (assemble หรือ compile time) โดยการ expanding ในขณะ

ที่ทํา expanding จะมีการแทน dummy parameter ดวย actual parameter (ถามี) สวน การ call

subroutine กระทําในชวงกระทําการ (execution time) เปนการจําตําแหนงของคําสั่งถัดไป และ

กระโดดไปยัง subroutine ที่ตองการ การสงผาน parameter ทําไดหลายแบบ เชน pass by value

หรือ pass by reference เปนตน

- ทุกครั้งที่มีการ call macro สวน body ของ macro definition จะถูก expand ทุกครั้งและกินเนื้อที่

เพิ่มขึ้นเทากับจํานวนครั้งที่มีการ call แตการ call subroutine จะกินเนื้อที่เทากับคําสั่ง call เทานั้น

subroutine ที่ถูก call ยังคงกินเนื้อที่เทาเดิม

Page 205: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

205

6.5.15 MACRO และ ENDM ใชกําหนด macro definition

รูปแบบ name MACRO [parameter[:tag]] [,parameter[:tag]]...]

[LOCAL varlist]

statements

[EXITM [textitem]]

ENDM

เมื่อ

name เปนช่ือ macro

parameter เปน argument

:tag อาจเปน :REQ, :=default หรือ :VARARG. :REQ อยางใดอยางหนึ่ง

statements เปนคําสั่งใด ๆ

6.5.16 INCLUDE ใชเพื่อกําหนดชื่อแฟมที่จะนํามา source code มาแทรก เชน คําสั่งเหลานี้ STD_INPUT_HANDLE equ -10

STD_OUTPUT_HANDLE equ -11

STD_ERROR_HANDLE equ -12

NULL equ 0

GetStdHandle PROTO :DWORD

ReadFile PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD

WriteFile PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD

ExitProcess PROTO :DWORD

มีเขียนไวแลวในแฟม (จะสรางแฟมใหมที่เก็บคําสั่งเหลานี้ก็ได) สําหรับ MASM32 มีอยูแลว ซึ่งอาจอยูใน

แฟม windows.inc, user32.inc, kernel32.inc จึงแทนไดดวยคําสั่ง include windows.inc

include user32.inc

include kernel32.inc

สําหรับ MASM615 มีอยูแลว ซึ่งอาจอยูในแฟม win.inc จึงแทนไดดวยคําสั่ง include win.inc

Page 206: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

206

7.1 Floating-point instructions คําสั่งของ floating-pointing มี 5 รูปแบบ ดังนี้ General Floating-Point Instruction Formats

Instruction

First Byte Second Byte Optional Fields

1 11011 OPA 1 mod 1 OPB r/m s-i-b disp

2 11011 MF OPA mod OPB r/m s-i-b disp

3 11011 d P OPA 1 1 OPB R ST(I)

4 11011 0 0 1 1 1 1 OP

5 11011 0 1 1 1 1 1 OP

15-11 10 9 8 7 6 5 4 3 2 1

เมื่อ MF = Memory Format

00 – 32-bit real

01 – 32-bit integer

10 – 64-bit real

11 – 16-bit integer

P = Pop

0 – Do not pop stack

1 – Pop stack after operation

d = Destination

0 – Destination is ST(0)

1 – Destination is ST(i)

R XOR d = 0 – Destination OP Source

1 – Source OP Destination

ST(i) = Register stack element I

000 – Stack Top

001 – Second stack element

. . .

111 – Eight stack element

Page 207: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

207

หมายเหตุ mod กับ r/m มีความหมายเหมือน integer instructions

instruction and format encoding F2XM1 – Compute 2ST(0) – 1 11011 001 1111 0000

FABS – Absolute Value 11011 001 1110 0001 FADD – Add ST(0) <- ST(0) + 32-bit memory 11011 000 mod 000 r/m

ST(0) <- ST(0) + 64-bit memory 11011 100 mod 000 r/m

ST(d) <- ST(0) + ST(i) 11011 d00 11 000 ST(i) FADDP –Add and Pop ST(0) <- ST(0) + ST(i) 11011 110 11 000 ST(i)

FBLD – Load Binary Coded Decimal 11011 111 mod 100 r/m

FBSTP – Store Binary Coded Decimal and Pop 11011 111 mod 110 r/m

FCHS – Change Sign 11011 001 1110 0000

FCLEX – Clear Exceptions 11011 011 1110 0010 FCMOVcc – Conditional Move on EFLAG Register Condition Codes mov if below (B) 11011 010 11 000 ST(i)

mov if equal (E) 11011 010 11 001 ST(i)

move if below or equal (BE) 11011 010 11 010 ST(i)

move if unordered (U) 11011 010 11 011 ST(i)

move if not below (NB) 11011 011 11 000 ST(i)

move if not equal (NE) 11011 011 11 001 ST(i)

move if not below or equal (NBE) 11011 011 11 010 ST(i)

move if not unordered (NU) 11011 011 11 011 ST(i) FCOM – Compare Real 32-bit memory 11011 000 mod 010 r/m

64-bit memory 11011 100 mod 010 r/m

ST(i) 11011 000 11 010 ST(i) FCOMP – Compare Real and Pop 32-bit memory 11011 000 mod 011 r/m

64-bit memory 11011 100 mod 011 r/m

Page 208: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

208

ST(I) 11011 000 11 010 ST(i)

FCOMPP – Compare Real and Pop Twice 11011 110 11 011 001

FCOMI – Compare Real and Set EFLAGS 11011 011 11 110 ST(i)

FCOMIP – Compare Real, Set EFLAGS, and Pop 11011 111 11 110 ST(I)i

FCOS – Cosine of ST(0) 11011 001 1111 1111

FDECSTP – Decrement Stack-Top Pointer 11011 001 1111 0110 FDIV – Divide ST(0) <- ST(0) / 32-bit memory 11011 000 mod 110 r/m

ST(0) <- ST(0) / 64-bit memory 11011 100 mod 110 r/m

ST(d) <- ST(0) / ST(i) 11011 d00 1111 R ST(i) FDIVP – Divide and Pop ST(0) <- ST(0) / ST(i) 11011 110 1111 1 ST(i) FDIVR – Reverse Divide ST(0) <- 32-bit memory / ST(0) 11011 000 mod 111 r/m

ST(0) <- 64-bit memory / ST(0) 11011 100 mod 111 r/m

ST(d) <- ST(i) / ST(0) 11011 d00 1111 R ST(i) FDIVRP – Reverse Divide and Pop ST(0) <- ST(i) / ST(0) 11011 110 1111 0 ST(i)

FFREE – Free ST(i) Register 11011 101 1100 0 ST(i) FIADD – Add Integer ST(0) <- ST(0) + 16-bit memory 11011 110 mod 000 r/m

ST(0) <- ST(0) + 32-bit memory 11011 010 mod 000 r/m FICOM – Compare Integer 16-bit memory 11011 110 mod 010 r/m

32-bit memory 11011 010 mod 010 r/m FICOMP – Compare Integer and Pop 16-bit memory 11011 110 mod 011 r/m

32-bit memory 11011 010 mod 011 r/m FIDIV ST(0) <- ST(0) + 16-bit memory 11011 110 mod 110 r/m

ST(0) <- ST(0) + 32-bit memory 11011 010 mod 110 r/m FIDIVR

Page 209: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

209

ST(0) <- ST(0) + 16-bit memory 11011 110 mod 111 r/m

ST(0) <- ST(0) + 32-bit memory 11011 010 mod 111 r/m FILD – Load Integer 16-bit memory 11011 111 mod 000 r/m

32-bit memory 11011 011 mod 000 r/m

64-bit memory 11011 111 mod 101 r/m FIMUL ST(0) <- ST(0) * 16-bit memory 11011 110 mod 001 r/m

ST(0) <- ST(0) * 32-bit memory 11011 010 mod 001 r/m

FINCSTP – Increment Stack Pointer 11011 001 1111 0111 FINIT – Initialize Floating-Point Unit FIST – Store Integer 16-bit memory 11011 111 mod 010 r/m

32-bit memory 11011 011 mod 010 r/m FISTP – Store Integer and Pop 16-bit memory 11011 111 mod 011 r/m

32-bit memory 11011 011 mod 011 r/m

64-bit memory 11011 111 mod 111 r/m FISUB ST(0) <- ST(0) – 16-bit memory 11011 110 mod 100 r/m

ST(0) <- ST(0) – 32-bit memory 11011 010 mod 100 r/m FISUBR ST(0) <- ST(0) – 16-bit memory 11011 110 mod 101 r/m

ST(0) <- ST(0) – 32-bit memory 11011 010 mod 101 r/m FLD – Load Real 32-bit memory 11011 001 mod 000 r/m

64-bit memory 11011 101 mod 000 r/m

80-bit memory 11011 011 mod 101 r/m

ST(i) 11011 001 11 000 ST(i)

FLD1 – Load + 1.0 into ST(i) 11011 001 1110 1000

FLDCW – Load Control World 11011 001 mod 101 r/m

FLDENV – Load FPU Environment 11011 001 mod 100 r/m

Page 210: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

210

FLD2E – Load log2 (e) into ST(0) 11011 001 1110 1010

FLDL2T – Load log2 (10) into ST(0) 11011 001 1110 1001

FLDLG2 – Load log10 (2) into ST(0) 11011 001 1110 1100

FLDLN2 – Load log e (2) into ST(0) 11011 001 1110 1101

FLDPI – Load pi into ST(0) 11011 001 1110 1011

FLDZ – Load +0.0 into ST(0) 11011 001 1110 1110 FMUL – Multiply ST(0) <- ST(0) * 32-bit memory 11011 000 mod 001 r/m

ST(0) <- ST(0) * 64-bit memory 11011 100 mod 001 r/m

ST(0) <- ST(0) * ST(i) 11011 d00 1100 1 ST(i) FMULP – Multiply and Pop ST(0) <- ST(0) * ST(i) 11011 d00 11000 1 ST(i)

FNOP – No Operation 11011 001 1101 0000

FPATAN – Partial Arctangent 11011 001 1111 0011

FPREM – Partial Remainder 11011 001 1111 1000

FPREM1 – Partial Remainder (IEEE) 11011 001 1111 0101

FPTAN – Partial Tangent 11011 001 1111 0010

FRNDINT – Round to Integer 11011 001 1111 1100

FRSTOR – Restore FPU State 11011 101 mod 100 r/m

FSAVE – Store FPU State 11011 101 mod 110 r/m

FSCALE – Scale 11011 001 1111 1101

FSIN – Sine 11011 001 1111 1110

DSINCOS – Sine and Cosine 11011 001 1111 1011

FSQRT – Square Root 11011 001 1111 1010 FST – Store Real 32-bit memory 11011 001 mod 010 r/m

64-bit memory 11011 101 mod 010 r/m

ST(i) 11011 101 11 010 ST(i)

FSTCW – Store Control Word 11011 001 mod 111 r/m

FSTENV – Store FPU Environment 11011 001 mod 110 r/m FSTP – Store Real and Pop 32-bit memory 11011 001 mod 011 r/m

Page 211: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

211

64-bit memory 11011 101 mod 011 r/m

80-bit memory 11011 011 mod 111 r/m

ST(i) 11011 101 11 011 ST(i)

FSTSW – Store Status Word into AX 11011 111 1110 0000

FSTSW – Store Status Word into Memory 11011 101 mod 111 r/m FSUB – Subtract ST(0) <- ST(0) – 32-bit memory 11011 000 mod 100 r/m

ST(0) <- ST(0) – 64-bit memory 11011 100 mod 100 r/m

ST(d) <- ST(0) – ST(i) 11011 d00 1110 R ST(i) FSUBP – Subtract and Pop ST(0) <- ST(0) – ST(i) 11011 110 1110 1 ST(i) FSUBR – Reverse Subtract ST(0) <- ST(0) – 32-bit memory 11011 000 mod 101 r/m

ST(0) <- ST(0) – 64-bit memory 11011 100 mod 101 r/m

ST(d) <- ST(0) – ST(i) 11011 d00 1110 R ST(i) FSUBRP – Reverse Subtract and Pop ST(I) <- ST(i) – ST(0) 11011 110 1110 0 ST(i)

FTST – Test 11011 001 1110 0100

FUCOM – Unordered Compare Real 11011 101 1110 0 ST(i)

FUCOMP – Unordered Compare Real and Pop 11011 010 1110 1001 FUCOMPP – Unordered Compare Real and Pop Twice 11011 010 1110 1001 FUCOMI – Unordered Compare Real and Set EFLAGS 11011 011 11 101 ST(i) FUCOMPI – Unordered Compare Real, Set EFLAGS, and Pop 11011 111 11 101 ST(i)

FXAM - Examine 11011 001 1110 0101

FXCH – Exchange ST(0) and ST(I) 11011 001 1100 1 ST(i)

FXTRACT – Extract Exponent and Significand 11011 001 1111 0100

FYL2X – ST(1) * log 2 (ST(0)) 11011 001 1111 00001

FYL2XP1 – ST(1) * log 2 (ST(0) + 1.0) 11011 001 1111 1001

FWAIT – Wait until FPU Ready 11011 1011

Page 212: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

212

IA-32 CPU Integer Unit Floating Point unit (math coprocessor) EAX st(0) EBX st(1) ECX st(2) EDX st(3) คําส่ัง fld, fst

St(4) จะมีผลตรงนี้ EBP st(5) ESP st(6) ESI st(7) EDI Control EIP status EFLAGS

high address MEMORY คําส่ัง push, pop, call, ret

ESP จะมีผลตรงนี้ low address

CS

DS

SS

ES

FS

GS

stack

.data

ขอมูล .code

คําสั่ง

Page 213: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

213

ในที่นี้จะเร ียนเฉพาะคําสัง่บางคําสั่งทีจ่ําเปนเทานัน้ I. Initialize FINIT

ต.ย. .code

finit ; st(0)

; st(7)

II. Data Movement 1. FLD mem_real

ต.ย. .data

x dd 1.5

y dd -2.3

z dd 7.5

.code

finit ; st(0)-st(7) empty

fld x

; st(0)

; st(1)-st(7) empty

fld y

; st(0)

; st(1)

; st(2)-st(7) empty

fld z

; st(0)

; st(1)

; st(2)

; st(3)-st(7) empty

1.5

-2.3

1.5

7.5

-2.3

1.5

empty

empty

Page 214: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

214

หมายเหตุ สําหรับ integer ใหใชคําสั่ง FILD mem_int

2. FST mem_real

ต.ย. .data

x dd ?

.code

finit

; st(0)

; st(1)

; st(2)

fst x ; x <- 7.5

; st(0)

; st(1)

; st(2)

หมายเหตุ สําหรับ integer ใหใชคําสั่ง FIST mem_int

3. FSTP mem_real

ต.ย. .data

x dd ?

.code

; st(0)

; st(1)

; st(2)

fstp x ; x <- 7.5

7.5

-2.3

1.5

7.5

-2.3

1.5

7.5

-2.3

1.5

Page 215: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

215

; st(0)

; st(1)

หมายเหตุ สําหรับ integer ใหใชคําสั่ง FISTP mem_int

III. Arithmetic instructions

บวก (ADD)

คําสั่ง ความหมาย FADD st(0) <- st(0) + st(1)

FADD st(i) st(0) <- st(0) + st(i)

FADD st(0),st(i) st(0) <- st(0) + st(i)

FADD st(i),st(0) st(i) <- st(i) + st(0)

FADD mem_real st(0) <- st(0) + mem_real

FIADD mem_int st(0) <- st(0) + mem_int

FADDP st(i),st(0) st(i) <- st(i) + st(0) , pop

destination <- destination + source

ลบ (SUB)

เหมือนบวก แทน ADD ดวย SUB แตมีคําสั่ง SUBR ซึ่งมีความหมาย destination <- source – destination

เชน FSUBRP st(i),st(0) หมายถึง st(i) <- st(0) – st(i) , pop

คูณ (MUL)

เหมือนบวก แทน ADD ดวย MUL

หาร (DIV)

เหมือนบวก แทน ADD ดวย DIV แตมีคําสั่ง DIVR ซึ่งมีความหมาย destination <- source / destination

เชน FDIVRP st(i),st(0) หมายถึง st(i) <- st(0) / st(i) , pop

-2.3

1.5

Page 216: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

216

IV. รอหรือไมรอ เนื่องจาก integer unit และ floating point unit (coprocessor) ของ IA-32 processor ทํางานขนานกัน

แตใชหนวยความจํารวมกัน ดังนั้น บางเวลาตองทํา synchronize ระหวางกัน โดยใชคําสั่ง FWAIT เมื่อใชคําสั่งนี้ ถา

floating point unit ไมวาง (busy) integer unit จะตองรอจนกวา floating point unit จะวาง

เพื่อไมใหผูใชตองกังวลเกี่ยวกับการ synchronize ระหวาง unit ทั้งสอง ทุกคําสั่งของ coprocessor จะมี

คําสั่ง fwait ไวขางหนาเสมอ เชน กรณีที่ทานเขียน ดังนี้ fld dword ptr [ebp]

fld dword ptr [ebp+4]

คําสั่งภาษาเครื่องที่ได จะมีลักษณะ ดังนี้ fwait

fld dword ptr [ebp]

fwait

fld dword ptr [ebp+4]

อยางไรก็ตามในบางสถานะการณ ทานตองระมัดระวัง เชน กรณีตอไปน้ี fld myvar

fwait

mov word ptr myvar,0

mov word ptr myvar+2,0

ถาไมมีคําสั่ง fwait หลัง fld ถา Coprocessor ไมพรอมที่จะ load คาที่ myvar แลวไมมีคําสั่ง fwait กรณีนี้

CPU จะใส คา 0 ไปที่ myvar ทําใหคาที่ Coprocessor เมื่อพรอมที่จะ load ไมถูกตอง เปนตน อีกตัวอยางหนึ่ง เชน

fistp myvar

fwait

mov ax,word ptr myvar

mov dx,word ptr myvar+2

Page 217: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

217

ตัวอยาง การคํานวณบวกลบคูณหาร ; X = (7.5*Y)+((Z-3.7)/2.0);

; POSTFIX FORM OF (7.5*Y)+((Z-3.7)/2.0); IS 7.5 Y * Z 3.7 - 2.0 / +

.data

x dd ?

y dd 2.4E1 ; y = 24.0

z dd 1.0E-1 ; z = 0.1

t1 dd 7.5

t2 dd 3.7

t3 dd 2.0

.code

start:

finit ; st(0)-st(7) empty

fld t1 ; 7.5

; st(0)

fld y

; st(0)

; st(1)

fmulp st(1),st(0)

; st(0)

fld z

; st(0)

; st(1)

7.5

24.0

7.5

7.5 * 24.0

0.1

7.5 * 24.0

Page 218: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

218

fld t2 ; 3.7

; st(0)

; st(1)

; st(2)

fsubp st(1),st(0)

; st(0)

; st(1)

fld t3 ; 2.0

; st(0)

; st(1)

; st(2)

fdivp st(1),st(0)

; st(0)

; st(1)

faddp st(1),st(0)

; st(0)

fstp x ; x <- (7.5 * 24.0) + ((0.1 – 3.7)/2.0) st(0)-st(7) empty

fwait

end start

3.7

0.1

7.5 * 24.0

0.1 – 3.7

7.5 * 24.0

2.0

0.1 - 3.7

7.5 * 24.0

(0.1 – 3.7)/2.0

7.5 * 24.0

(7.5 * 24.0) + ((0.1 – 3.7)/2.0)

Page 219: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

219

V. Comparing Numbers การเปรียบเทียบ

คําสั่ง ความหมาย FCOM เปรียบเทียบคาใน st(0) กับ source st(1)

FCOM st(i) เปรียบเทียบคาใน st(0) กับ source st(i)

FCOM mem_real เปรียบเทียบคาใน st(0) กับ source mem_real

FICOM mem_int เปรียบเทียบคาใน st(0) กับ source mem_int

FCOMP เปรียบเทียบคาใน st(0) กับ source st(1) , pop

FCOMP st(i) เปรียบเทียบคาใน st(0) กับ source st(i) , pop

FCOMP mem_real เปรียบเทียบคาใน st(0) กับ source mem_rea, popl

FICOMP mem_int เปรียบเทียบคาใน st(0) กับ source mem_int, pop

FCOMPP เปรียบเทียบคาใน st(0) กับ source st(1) , pop, pop

หลังเปรียบเทียบบิต c0 และ c3 ใน status register จะถูกกําหนด ดังนี้

C3 c0

0 0 st(0) > source

0 1 st(0) < source

1 0 st(0) = source

1 1 เปรียบเทียบกันไมได

จากนั้นใหนํา คาใน status register ของ floating point unit ไปใสใน register ax ของ integer unit แลวนํา

คาใน ah ใสใน flags register จากนั้นใชคําส่ัง conditional jump (เหมือนการเปรียบเทียบ unsigned integer: ja,

jb, je) ดังนี้

.data

status dw ?

.code

fcompp ; compares the value in ST(0) to the number in ST(1), discards both

fstsw status

fwait

mov ax,status

sahf ; Store AH into Flags

ja label1 ; if st(0) > st(1) jmp label2 ; if st(0) <= st(1)

Page 220: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

220

หมายเหตุ 80287 ขึ้นไป สามารถใชคําสั่ง fstsw ax ไดโดยตรง (แทน fstsw status, fwait และ mov ax,status ไม

ตองมีตัวแปร status)

ต.ย. .data

x dd 1.2

y dd -5.3

.code

finit ; st0-st7 empty

fld x ; st0

fld y ; st0

; st1

fcompp ; st0-st7 empty status register in floating unit

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

C3 C0

fstsw ax ; ax register in integer unit

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

sahf ; EFLAGS in integer unit

31 … 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

ZF CF

ja L1 ; false

jmp L2 ; true

L1:

L2:

1.2

-5.3

1.2

0 1

0 1

0 1

Page 221: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

221

VI. Transcendental Functions

1. LOGS : The log to the base n of any number x, where x is greater than 0, can be found as shown here:

log n(2)*log2(x)

หมายเหตุ logb(a) = logc(a) / logc(b)

เชน log10(x) = log2(x) / log2(10) = log2(x) * log10(2)

.data

x dd ?

.code

fldlg2

fld x

fyl2x ; st(1) <- st(1)*log2(st(0)); pop where 0 < x < infinity and -infinity < Y < infinity

fstp x

fwait

2. ANTILOGS : This is the general approach to finding the antilog to the base n of some number x:

nx = 2x*log2(n)

Thus, to find common and natural antilogs, you need the instructions FLD1 (load constant 1), FLDL2E

(load log2(e)), FLDL2T (load log2(10)), F2XM1 (2x – 1 where 0 <= x <= 0.5), and FSCALE (st0*2st1). Since

F2XM1 can compute when 0 <= x <= 0.5, so the argument must be decomposed into its integer portions

and fraction portions with FRNDINT and FSUB.

วิธีการ 1. คํานวณ x*log2(n)

2. จากนั้น แยกเปนสองสวน คือ สวนจํานวนเต็ม กับ สวนที่เปนเศษ

3. นําสวนที่เปนเศษมาหาร 2 เพื่อใหมีคาอยูในชวง 0 <= x <= 0.5

4. ใชคําสั่ง F2XM1 เพื่อหาคา 2x – 1 เมื่อ x เปนคาที่ได จากขอ 3

5. บวกคาในขอ 4 ดวย 1 จะได 2x

6. นําคาในขอ 5 คูณกัน จะได 2สวนที่เปนเศษ (หมายเหตุ 2สวนที่เปนเศษ/2 * 2สวนที่เปนเศษ/2 =2สวนที่เปนเศษ)

7. ใชคําสั่ง FSCALE เพื่อคํานวณ 2สวนที่เปนเศษ * 2สวนจํานวนเต็ม จะไดคาตามที่ตองการ เขียนเปนโปรแกรมได ดังนี้

Page 222: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

222

.386

.model flat,stdcall

falog10 PROTO

.data

@OLD_CW dw ?

@NEW_CW dw ?

.code

; find antilog10( x) where x is on top of stack , leave result on top of stack

falog10 proc uses eax

fldl2t ; calculate y = x*log2(10) note! use fldl2e for log2(e) find faloge

fmulp st(1),st(0)

fld st(0) ; duplicate y

fstcw @OLD_CW ; save old control word

fwait

mov ax,@OLD_CW ; change rounding mode to "truncate toward zero"

or ax,0c00h

mov @NEW_CW,ax

fldcw @NEW_CW ; set new control word

frndint ; get integer part, n

fldcw @OLD_CW ; restore old control word

fld st(0) ; duplicate n

fxch st(2) ; excahnge y to top

fsubrp st(1),st(0) ; find fraction part .z = y - n

fld1 ; load 1

fchs ; change to -1

fxch st(1) ; exchange .z to top

fscale ; find .z*2**(-1) or .z/2

fstp st(1) ; discard -1

f2xm1 ; find 2**(.z/2) - 1

fld1 ; load 1

faddp st(1),st(0) ; correct to 2**(.z/2)

Page 223: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

223

fmul st(0),st(0) ; square result get 2**(.z)

fscale ; find 2**(.z)*2**(n)

fstp st(1) ; discard n result on top

falog10 endp

end 3. SINE, COSINE, TANGENT

สําหรับ 80387 เปนตนไป สามารถคํานวณไดโดยตรงดวยคําสั่ง FSIN, FCOS, และ FTAN VII. INPUT and OUTPUT

1. ATOF: ฟงกชัน atof ทําหนาที่เปลี่ยน string ซึ่งมีรูปแบบ ดังนี้ [sign][digits][.[digits]][E|e[sign][exp]]

ใหเปน real สําหรับ coprocessor

วิธีการ 1. มองสวน mantissa เหมือนเลขจํานวนเต็ม โดยการคํานวณสวน mantissa แบบเดียวกับ atoi (ดูภาคผนวก ก) แต

คํานวณดวย real คือใช fimul (ดวย 10) และ fiadd (ดวยเลขที่ตําแหนงตาง ๆ) ใหจําตําแหนงของจุดทศนิยมดวย

2. คํานวณสวน exponent

3. ลบสวน exponent ดวย ตําแหนงจุดทศนิยม

4. คํานวณ 10exponent โดยใช antilog10(exponent)

5. นํา mantissa ในขอ 1. คูณกับ 10exponent ในขอ 4. จะไดคา real ตามตองการ

เชน 127.95E32

mantissa = 12795 ตําแหนงจุดทศนิยม = 2

exponent = 32

exponent = 32-2 = 30

หา antilog10(30)

ผลลัพธ = 12795 * antilog10(30)

Page 224: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

224

2. FTOA : ฟงกชัน ftoa ทําหนาที่เปลี่ยน real ใหเปน string ซึ่งมีรูปแบบ ดังนี้ +0.000000000000000000E+000

วิธีการ 1. ใช FXAM เพื่อตรวจสอบเลข real ถาไมปรกติ แสดง string ที่กําหนดไวแลว แลวเลิกทํา มิฉะนั้นปรกติทําขอตอไป

2. ใช FXTRACT เพื่อแยก real ที่ st(0) ใหเปน mantissa และ exponent จะได mantissa อยูที่ st(0) และ exponent

อยูที่ st(1)

3. เปลี่ยน exponent ในขอ 2. ซึง่เปน 2 ยกกําลัง ใหเปน 10 ยกกําลัง โดยใช antilog

4. ปรับ mantissa ใหเปน integer ดวยการปรับสวน exponent

5. นําสวน mantissa ในขอ 4 เปลี่ยนเปน 18-digit BCD โดยใชคําสั่ง fbstp mant เมื่อ mant เปนที่เก็บ 18-digit

BCD จากนั้นเปลี่ยนเปน ASCII

6. เปลี่ยน exponent(y) ใหเปน ASCII จะได string ตามตองการ

Page 225: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

225

ภาคผนวก ก.

Page 226: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

226

ฟงกชันที่ใชเขียนทุกฟงกชันที่มีการ return คา จะผานทาง eax

1. ฟงกชันของ WIN32 API (ใหดูที่ WIN32 help file) ที่ใชมีดังนี้ GetStdHandle, ReadFile, WriteFile, ExitProcess

2. ฟงกชันที่เขียนเอง มีดังนี้ ก. atoi ใชแปลง string ของตัวเลขใหเปน signed integer

มีวิธีการดังนี้ ตัด ‘ ‘ ทิ้ง จําเครื่องหมายถามี

กําหนดให คําตอบเทากับ 0

ทําซ้ํา ๆ ถายังเปนอักขระตัวเลข เปลี่ยน ASCII code ของตัวเลขเปน integer โดยการ and ดวย 0fh

คูณคําตอบดวย 10 และบวกดวย integer ขางตน

ถาเครื่องหมายเปนลบ ทําคําตอบใหเปน negative จะไดคําตอบเปน signed integer ตามตองการ

เชน ‘ ‘,’ ‘,‘-‘,’1’,’2’,’5’ เทากับ –(((((0*10)+1)*10+2)*10)+5)

ข. itoa ใชแปลง signed integer ใหเปน ASCIIZ (terminated with 0) string และสงความยาวของ

string กลับ

มีวิธีการดังนี้ ใหตัวเลขที่ตองกาเปลี่ยนเปนคําตอบ จําเครื่องหมาย ถาเปนเลขลบทําใหเปนเลขบวก ทําซ้ํา ๆ จนกวาคําตอบเปน 0

หารคําตอบดวยเลขฐาน เปลี่ยนเศษเปน อักขระ นํามาจัดเรียงจากขวามาซาย ถาเครื่องหมายที่จําเปนลบ ใสอักขระ ‘-‘ ไวขางหนา

เชน -125 ฐาน 10

125/10 = 12 เศษ 5 บวกดวย 30h เปลี่ยนเปน ‘5’ เก็บไวขวาสุด

12/10 = 1 เศษ 2 บวกดวย 30h เปลี่ยนเปน ‘2’ เก็บตอมาทางซาย

1/10 = 0 เศษ 1 บวกดวย 30h เปลี่ยนเปน ‘1’ เก็บตอมาทางซาย

เลขลบใส ‘-‘ ขางหนา จะได ‘-‘,’1’,’2’,’5’,0

คาที่สงกลับทาง eax = 4

Page 227: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

227

วิธีสราง library ของฟงกชันที่เขียนขึ้นเองทําดังนี้

mylib.asm

assembler ใชคําสั่ง ML /c /coff mylib.asm

mylib.obj

linker ใชคําสั่ง link –lib /SUBSYSTEM:CONSOLE mylib.obj /out:mylib.lib

หรือ link32 –lib /SUBSYSTEM:CONSOLE mylib.obj /out:mylib.lib

mylib.lib

Page 228: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

228

เมื่อ mylib.asm เขียน ดังนี้

.386

.model flat, stdcall

atoi PROTO :DWORD

itoa PROTO :DWORD,:DWORD,:DWORD

.code

; int atoi(char *atoi_buff); --- Convert ASCII string to 32-bit signed integer.

blank equ 20h ; ASCII blank character

tab equ 09h ; ASCII tab character

atoi proc USES ebx ecx edx atoi_buff:DWORD

mov esi,atoi_buff

xor ebx,ebx ; initialize forming answer

xor ecx,ecx ; initialize sign flag

atoi1: mov al,[esi]

inc esi ; scan off whitespace

cmp al,blank ; ignore leading blanks

je atoi1

cmp al,tab ; ignore leading tabs

je atoi1

cmp al,'+' ; if + sign, proceed

je atoi2

cmp al,'-' ; is it - sign?

jne atoi3 ; no, test if numeric

dec ecx ; was - sign, set flag, for negative result

atoi2: mov al,[esi] ; get next character

inc esi

atoi3:cmp al,'0' ; is character valid?

jb atoi4 ; jump if not '0' to '9'

Page 229: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

229

cmp al,'9'

ja atoi4 ; jump if not '0' to '9'

and eax,0fh ; isolate lower four bits

xchg ebx,eax ; previous answer x 10

mov edx,10

mul edx

add ebx,eax ; add this digit

jmp atoi2 ; convert next digit

atoi4: mov eax,ebx ; put result into EAX

jecxz atoi5 ; jump if sign flag clear

neg eax ; make result negative

atoi5:

ret ; back to caller

atoi endp

; void itoa(int i, int radix, char *itoa_buff); --- Convert 32-bit integer to ASCII string

itoa proc USES ebx edx esi i:DWORD, radix:DWORD, itoa_buff:PTR BYTE

mov eax,i

mov esi,itoa_buff

add esi,11 ; advance to end of buffer

push esi ; and save that address.

or eax,eax ; test sign of 32-bit value,

pushfd ; and save sign on stack.

jns itoa1 ; jump if value was positive.

neg eax ; find absolute value.

itoa1: mov edx,0 ; divide value by radix to extract

div radix ; next digit for forming string

add dl,'0' ; convert remainder to ASCII digit

cmp dl,'9' ; in case converting to hex ASCII,

jle itoa2 ; jump if in range 0-9,

add dl,'A'-'9'-1 ; correct digit if in range A-F

Page 230: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

230

itoa2: dec esi ; back up through buffer

mov [esi],dl ; store this character into string

or eax,eax

jnz itoa1 ; no, convert another digit

popfd ; was original value negative?

jns itoa3 ; no, jump

dec esi ; yes, store sign into output

mov byte ptr [esi],'-'

itoa3: pop eax ; calculate length of string

sub eax,esi

; move string to the beginning of itoa_buff

mov edx,itoa_buff

itoa4: cmp eax,0

je exit_itoa

mov bl,[esi]

mov [edx],bl

inc edx

inc esi

dec eax

jmp itoa4

exit_itoa:

; fill zero of string

mov [edx],DWORD PTR 0

ret ; back to caller

itoa endp

Page 231: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

231

และมีวิธีการเรียกใช ดังตัวอยาง ตอไปนี้

.386

.model flat, stdcall

option casemap :none ; case sensitive

STD_INPUT_HANDLE equ -10

STD_OUTPUT_HANDLE equ -11

STD_ERROR_HANDLE equ -12

NULL equ 0

GetStdHandle PROTO :DWORD

ReadFile PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD

WriteFile PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD

ExitProcess PROTO :DWORD

atoi PROTO :DWORD

itoa PROTO :DWORD,:DWORD,:DWORD

.data

stdin_hFile dd ?

stdout_hFile dd ?

inbuff db 256 dup(?)

NumberOfBytesRead dd ?

NumberOfBytesWrite dd ?

outbuff db 12 dup(?)

N dd ?

.code

Page 232: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

232

start:

; First get STD_INPUT_HANDLE and STD_OUTPUT_HANDLE

invoke GetStdHandle,STD_INPUT_HANDLE

mov stdin_hFile,eax

invoke GetStdHandle,STD_OUTPUT_HANDLE

mov stdout_hFile, eax

; read N

; step1: read string

invoke ReadFile,stdin_hFile,ADDR inbuff,256,ADDR NumberOfBytesRead,NULL

; step 2: convert string to signed integer

invoke atoi,ADDR inbuff

; step 3: keep in N

mov N,eax

; write N

; step 1: convert signed integer (N) to string

invoke itoa,N,10,ADDR outbuff

; length of string is in eax

; step 2: write string

invoke WriteFile,stdout_hFile,ADDR outbuff,eax,ADDR NumberOfBytesWrite,NULL

; exit process

invoke ExitProcess,0

end start

Page 233: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

233

ตองแกไข buildc.bat ดังนี้ @echo off

REM The following three lines can be customized for your system:

REM ********************************************BEGIN customize

SET PATH=C:\MASM32\BIN;%PATH%

SET INCLUDE=C:\MASM32\INCLUDE

SET LIB=C:\MASM32\LIB

REM ********************************************END customize

ML /c /Fl /coff %1.asm

if errorlevel 1 goto terminate

LINK /MAP /SUBSYSTEM:CONSOLE %1.obj user32.lib kernel32.lib mylib.lib

if errorlevel 1 goto terminate

dir %1.*

:terminate

และ make32.bat ดังนี้ @echo off

REM The following three lines can be customized for your system:

REM ********************************************BEGIN customize

SET PATH=C:\MASM615;%PATH%

SET INCLUDE=C:\MASM615\INCLUDE

SET LIB=C:\MASM615\LIB

REM ********************************************END customize

ML /c /Fl /coff %1.asm

if errorlevel 1 goto terminate

LINK32 /MAP /SUBSYSTEM:CONSOLE %1.obj user32.lib kernel32.lib mylib.lib

if errorLevel 1 goto terminate

dir %1.*

:terminate

Page 234: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

234

ภาคผนวก ข.

Page 235: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

235

Page 236: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

236

Page 237: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

237

Page 238: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

238

Page 239: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

239

Page 240: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

240

Page 241: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

241

Page 242: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

242

Page 243: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

243

Page 244: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

244

Page 245: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

245

Page 246: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

246

Page 247: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

247

Page 248: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

248

Page 249: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

249

Page 250: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

250

Page 251: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

251

Page 252: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

252

Page 253: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

253

Page 254: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

254

Page 255: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

255

Page 256: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

256

Page 257: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

257

Page 258: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

258

Page 259: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

259

Page 260: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

260

Page 261: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

261

Page 262: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

262

Page 263: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

263

Page 264: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

264

Page 265: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

265

Page 266: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

266

Page 267: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

267

Page 268: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

268

Page 269: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

269

Page 270: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

270

Page 271: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

271

Page 272: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

272

Page 273: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

273

Page 274: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

274

Page 275: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

275

Page 276: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

276

Page 277: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

277

Page 278: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

278

Page 279: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

279

Page 280: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

280

Page 281: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

281

Page 282: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

282

Page 283: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

283

Page 284: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

284

Page 285: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

285

Page 286: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

286

ตัวอยาง ตองการเขียนโปรแกรมภาษาแอสเซมบลีสําหรับ MASM32 หรือ MASM615 เพื่ออานเลขจํานวนเต็มบวก (N)

และพิมพคา Factorial ของเลขดังกลาว (N!)

ขั้นตอนที่ 1 ใหคิดกอน ดังนี้ เนื่องจาก N! = N*(N-1)*(N-2)* …*2*1 หรือ = 1* N*(N-1)*(N-2)* …*2

ดังนั้น

อานขอมูลมาเก็บที่ N

เริ่มตนให FAC <- 1 FAC <- FAC*N FAC <- 1*N

N <- N-1 N <- N-1

FAC <- FAC*N FAC <- 1*N*(N-1)

N <- N-1 N <- N-2 …

FAC <- FAC*N FAC <- 1*N*(N-1)*…*2

N <- N-1 N มีคานอยกวา 2

แสดงผลลัพธของ FAC

หมายเหตุ ทํา ซ้ําจนกวา N มีคานอยกวา 2

ขั้นตอนที่ 2 เขียนเปน pseudo code ได ดังนี้ read N

FAC <- 1

while N ≥ 2 do begin FAC <- FAC*N

N <- N-1 end

ใหทดลองใสขอมูลเมื่อ N เปน 0, 1, 2, 3 แลวทําตามขั้นตอนที่เขียน ตรวจสอบวาคําตอบถูกหรือไม

Page 287: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

287

ขั้นตอนที่ 3 เขียนเปนภาษาสัญลักษณดวยคําสั่งในหัวขอ 2.1 (แบบฝกหัดขอ 2) ได ดังนี้

READ N

MOV FAC,1

L1: CMP N,2

JL L2

MUL FAC,N

SUB N,1

JMP L1

L2: WRITE FAC

Page 288: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

288

ขั้นตอนที่ 4 เขียนเปนภาษาแอสเซมบลีของ MASM32 หรือ MASM615 ไดดังนี้ ; File: factorial.asm

.386

.model flat, stdcall

option casemap :none ; case sensitive

STD_INPUT_HANDLE equ -10

STD_OUTPUT_HANDLE equ -11

STD_ERROR_HANDLE equ -12

NULL equ 0

GetStdHandle PROTO :DWORD

ReadFile PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD

WriteFile PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD

ExitProcess PROTO :DWORD

atoi PROTO :DWORD

itoa PROTO :DWORD,:DWORD,:DWORD

.data

stdin_hFile dd ?

stdout_hFile dd ?

inbuff db 256 dup(?)

NumberOfBytesRead dd ?

NumberOfBytesWrite dd ?

outbuff db 12 dup(?)

N dd ?

prompt1 db 'Enter a number to find factorial (must be integer greather than zero):'

prompt1_length dd $-prompt1

prompt2 db 'Factorial = '

prompt2_length dd $-prompt2

newline db 0dh,0ah ; carriage return and linefeed

FAC dd 1 ; initialize FAC to 1

Page 289: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

289

.code

; int atoi(char *atoi_buff); --- Convert ASCII string to 32-bit signed integer.

blank equ 20h ; ASCII blank character

tab equ 09h ; ASCII tab character

atoi proc USES ebx ecx edx atoi_buff:DWORD

mov esi,atoi_buff

xor ebx,ebx ; initialize forming answer

xor ecx,ecx ; initialize sign flag

atoi1: mov al,[esi]

inc esi ; scan off whitespace

cmp al,blank ; ignore leading blanks

je atoi1

cmp al,tab ; ignore leading tabs

je atoi1

cmp al,'+' ; if + sign, proceed

je atoi2

cmp al,'-' ; is it - sign?

jne atoi3 ; no, test if numeric

dec ecx ; was - sign, set flag, for negative result

atoi2: mov al,[esi] ; get next character

inc esi

atoi3:cmp al,'0' ; is character valid?

jb atoi4 ; jump if not '0' to '9'

cmp al,'9'

ja atoi4 ; jump if not '0' to '9'

and eax,0fh ; isolate lower four bits

xchg ebx,eax ; previous answer x 10

mov edx,10

mul edx

add ebx,eax ; add this digit

jmp atoi2 ; convert next digit

Page 290: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

290

atoi4: mov eax,ebx ; put result into EAX

jecxz atoi5 ; jump if sign flag clear

neg eax ; make result negative

atoi5:

ret ; back to caller

atoi endp

; void itoa(int i, int radix, char *itoa_buff); --- Convert 32-bit integer to ASCII string

itoa proc USES ebx edx esi i:DWORD, radix:DWORD, itoa_buff:PTR BYTE

mov eax,i

mov esi,itoa_buff

add esi,11 ; advance to end of buffer

push esi ; and save that address.

or eax,eax ; test sign of 32-bit value,

pushfd ; and save sign on stack.

jns itoa1 ; jump if value was positive.

neg eax ; find absolute value.

itoa1: mov edx,0 ; divide value by radix to extract

div radix ; next digit for forming string

add dl,'0' ; convert remainder to ASCII digit

cmp dl,'9' ; in case converting to hex ASCII,

jle itoa2 ; jump if in range 0-9,

add dl,'A'-'9'-1 ; correct digit if in range A-F

itoa2: dec esi ; back up through buffer

mov [esi],dl ; store this character into string

or eax,eax

jnz itoa1 ; no, convert another digit

popfd ; was original value negative?

jns itoa3 ; no, jump

dec esi ; yes, store sign into output

mov byte ptr [esi],'-'

Page 291: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

291

itoa3: pop eax ; calculate length of string

sub eax,esi

; move string to the beginning of itoa_buff

mov edx,itoa_buff

itoa4: cmp eax,0

je exit_itoa

mov bl,[esi]

mov [edx],bl

inc edx

inc esi

dec eax

jmp itoa4

exit_itoa:

; fill zero of string

mov [edx],DWORD PTR 0

ret ; back to caller

itoa endp

Page 292: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

292

L0:

; First get STD_INPUT_HANDLE and STD_OUTPUT_HANDLE

invoke GetStdHandle,STD_INPUT_HANDLE

mov stdin_hFile,eax

invoke GetStdHandle,STD_OUTPUT_HANDLE

mov stdout_hFile, eax

; write string of prompt1

invoke WriteFile,stdout_hFile,ADDR prompt1,prompt1_length,ADDR NumberOfBytesWrite,NULL

; read N

invoke ReadFile,stdin_hFile,ADDR inbuff,256,ADDR NumberOfBytesRead,NULL

invoke atoi,ADDR inbuff

mov N,eax

; FAC is initialized to 1

L1: cmp N,2

jl L2

; MUL FAC,N

mov eax,FAC

imul N

mov FAC,eax

; SUB N,1

dec N

jmp L1

L2:

; write string of prompt1

invoke WriteFile,stdout_hFile,ADDR prompt2,prompt2_length,ADDR NumberOfBytesWrite,NULL

; write FAC

invoke itoa,FAC,10,ADDR outbuff

invoke WriteFile,stdout_hFile,ADDR outbuff,eax,ADDR NumberOfBytesWrite,NULL

; exit process

invoke ExitProcess,0

end L0

Page 293: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

293

ตัวอยาง เขียนโปรแกรม เพื่อพิมพเลข Fibonacci จํานวน 20 ตัวแรก เมื่อ เลข Fibonacci มีนิยาม ดังนี้ F1 := 1, F2:=1

Fi = Fi-1 + Fi-2 i = 3, 4, 5, . . .

คําตอบ มีหลายวิธี ในที่นี้เปนเพียงคําตอบหนึ่งเทานั้น

ขั้นตอนที่ 1 ใหคิดกอน ดังนี้ F1 <- 1

พิมพ F1

F2 <- 1

พิมพ F2

F3 <- F1+F2 = 1+1=2 F3 <- F1+F2 = 1+2=3 …

พิมพ F3 พิมพ F3

F1 <- F2 = 1 F1 <- F2 = 2

F2 <- F3 = 2 F2 <- F3 = 3 …

ทําซา 18 ครั้ง 1 1 2 3 …

ขั้นตอนที่ 2 เขียนรหัสเทียมได ดังนี้ F1:=1;

WRITE F1;

F2 := 1;

WRITE F2;

FOR I:=1 TO 18

F3 := F1+F2;

WRITE F3;

F1:=F2;

F2:=F3;

END_FOR;

Page 294: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

294

ขั้นตอนที่ 3 เขียนเปนภาษาสัญลักษณดวยคําสั่งในหัวขอ 2.1 (แบบฝกหัดขอ 2) ได ดังนี้

MOV F1,1

WRITE F1

MOV F2,1

WRITE F2

FORI: MOV I,1

LOOPI: CMP I,18

JG ENDLOOPI

MOV F3,F1

ADD F3,F2

WRITE F3

MOV F1,F2

MOV F2,F3

ADD I,1

JMP LOOPI

ENDLOOPI:

Page 295: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

295

ขั้นตอนที่ 4 เขียนเปนภาษาแอสเซมบลีของ MASM32 หรือ MASM615 ไดดังนี้ ;File: Fibonacci.asm

.386

.model flat, stdcall

option casemap :none ; case sensitive

STD_INPUT_HANDLE equ -10

STD_OUTPUT_HANDLE equ -11

STD_ERROR_HANDLE equ -12

NULL equ 0

GetStdHandle PROTO :DWORD

ReadFile PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD

WriteFile PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD

ExitProcess PROTO :DWORD

atoi PROTO :DWORD

itoa PROTO :DWORD,:DWORD,:DWORD

.data

stdout_hFile dd ?

NumberOfBytesWrite dd ?

outbuff db 12 dup(?)

newline db 0dh,0ah ; carriage return and linefeed

F1 dd 1

F2 dd 1

F3 dd ?

I dd ?

.code

; int atoi(char *atoi_buff); --- Convert ASCII string to 32-bit signed integer.

blank equ 20h ; ASCII blank character

tab equ 09h ; ASCII tab character

atoi proc USES ebx ecx edx atoi_buff:DWORD

Page 296: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

296

mov esi,atoi_buff

xor ebx,ebx ; initialize forming answer

xor ecx,ecx ; initialize sign flag

atoi1: mov al,[esi]

inc esi ; scan off whitespace

cmp al,blank ; ignore leading blanks

je atoi1

cmp al,tab ; ignore leading tabs

je atoi1

cmp al,'+' ; if + sign, proceed

je atoi2

cmp al,'-' ; is it - sign?

jne atoi3 ; no, test if numeric

dec ecx ; was - sign, set flag, for negative result

atoi2: mov al,[esi] ; get next character

inc esi

atoi3:cmp al,'0' ; is character valid?

jb atoi4 ; jump if not '0' to '9'

cmp al,'9'

ja atoi4 ; jump if not '0' to '9'

and eax,0fh ; isolate lower four bits

xchg ebx,eax ; previous answer x 10

mov edx,10

mul edx

add ebx,eax ; add this digit

jmp atoi2 ; convert next digit

atoi4: mov eax,ebx ; put result into EAX

jecxz atoi5 ; jump if sign flag clear

neg eax ; make result negative

atoi5:

ret ; back to caller

Page 297: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

297

atoi endp

; void itoa(int i, int radix, char *itoa_buff); --- Convert 32-bit integer to ASCII string

itoa proc USES ebx edx esi i:DWORD, radix:DWORD, itoa_buff:PTR BYTE

mov eax,i

mov esi,itoa_buff

add esi,11 ; advance to end of buffer

push esi ; and save that address.

or eax,eax ; test sign of 32-bit value,

pushfd ; and save sign on stack.

jns itoa1 ; jump if value was positive.

neg eax ; find absolute value.

itoa1: mov edx,0 ; divide value by radix to extract

div radix ; next digit for forming string

add dl,'0' ; convert remainder to ASCII digit

cmp dl,'9' ; in case converting to hex ASCII,

jle itoa2 ; jump if in range 0-9,

add dl,'A'-'9'-1 ; correct digit if in range A-F

itoa2: dec esi ; back up through buffer

mov [esi],dl ; store this character into string

or eax,eax

jnz itoa1 ; no, convert another digit

popfd ; was original value negative?

jns itoa3 ; no, jump

dec esi ; yes, store sign into output

mov byte ptr [esi],'-'

itoa3: pop eax ; calculate length of string

sub eax,esi

; move string to the beginning of itoa_buff

mov edx,itoa_buff

itoa4: cmp eax,0

Page 298: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

298

je exit_itoa

mov bl,[esi]

mov [edx],bl

inc edx

inc esi

dec eax

jmp itoa4

exit_itoa:

; fill zero of string

mov [edx],DWORD PTR 0

ret ; back to caller

itoa endp

L0:

; First get STD_OUTPUT_HANDLE

invoke GetStdHandle,STD_OUTPUT_HANDLE

mov stdout_hFile, eax

; F1, F2 is initialized to 1

; write F1

invoke itoa,F1,10,ADDR outbuff

invoke WriteFile,stdout_hFile,ADDR outbuff,eax,ADDR NumberOfBytesWrite,NULL

; write newline

invoke WriteFile,stdout_hFile,ADDR newline,2,ADDR NumberOfBytesWrite,NULL

; write F2

invoke itoa,F2,10,ADDR outbuff

invoke WriteFile,stdout_hFile,ADDR outbuff,eax,ADDR NumberOfBytesWrite,NULL

; write newline

invoke WriteFile,stdout_hFile,ADDR newline,2,ADDR NumberOfBytesWrite,NULL

FORI: mov I,1

LOOPI: cmp I,18

Page 299: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

299

jg ENDLOOPI

mov eax,F1

mov F3,eax

mov eax,F2

add F3,eax

; write F3

invoke itoa,F3,10,ADDR outbuff

invoke WriteFile,stdout_hFile,ADDR outbuff,eax,ADDR NumberOfBytesWrite,NULL

; write newline

invoke WriteFile,stdout_hFile,ADDR newline,2,ADDR NumberOfBytesWrite,NULL

mov eax,F2

mov F1,eax

mov eax,F3

mov F2,eax

inc I

jmp LOOPI

ENDLOOPI:

; exit process

invoke ExitProcess,0

end L0

.

Page 300: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

300

ตัวอยาง เขียนโปรแกรม เพื่อหาคําตอบของสมการ

X + 3Y +9Z = 126 X≥0, Y≥0, Z≥0

คําตอบ มีหลายวิธี ในที่นี้เปนเพียงคําตอบหนึ่งเทานั้น

ขั้นตอนที่ 1 ใหคิดกอน ดังนี้ X Y Z X+3Y+9Z

0 0 0 0 ≠ 126

0 0 1 9 ≠ 126

0 0 2 18 ≠ 126

0 0 14 126 = 126 เปนคําตอบหนึ่ง

0 1 0 3 ≠ 126

0 1 1 12 ≠ 126

0 1 2 21 ≠ 126

0 1 14 129 ≠ 126

0 2 0 6 ≠ 126

0 2 1 15 ≠ 126

0 2 14 132 ≠ 126

0 42 0 126 = 126 เปนคําตอบหนึ่ง …

0 42 14 252 ≠ 126

126 0 0 126 = 126 เปนคําตอบหนึ่ง …

126 42 14 378 ≠ 126

Page 301: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

301

ขั้นตอนที่ 2 เขียนรหัสเทียมได ดังนี้ FOR X:=0 TO 126

FOR Y:=0 TO 42

FOR Z:=0 TO 14

IF (X + 3Y +9Z = 126)

THEN WRITE (X,Y,Z);

END_IF;

END_FOR;

END_FOR;

END_FOR;

ขั้นตอนที่ 3 เขียนเปนภาษาสัญลักษณดวยคําสั่งในหัวขอ 2.1 (แบบฝกหัดขอ 2) ได ดังนี้

Page 302: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

302

FORX: MOV X,0

LOOPX: CMP X,126

JG ENDLOOPX

FORY: MOV Y,0

LOOPY: CMP Y,42

JG ENDLOOPY

FORZ: MOV Z,0

$LOOPZ: CMP Z,14

JG ENDLOOPZ

MOV SUM,X

MOV T,Y

MUL T,3

ADD SUM,T

MOV T,Z

MUL T,9

ADD SUM,T ; IF (X+3Y+9Z = 126 )

CMP SUM,126

JNE $ENDIF

WRITE X ; THEN WRITE (X,Y,Z);

WRITE Y

WRITE Z

$ENDIF:

ADD Z,1

JMP $LOOPZ

ENDLOOPZ:

ADD Y,1

JMP LOOPY

ENDLOOPY:

ADD X,1

JMP LOOPX

ENDLOOPX:

Page 303: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

303

ขั้นตอนที่ 4 เขียนเปนภาษาแอสเซมบลีของ MASM32 หรือ MASM615 ไดดังนี้ ;File equation.asm

.386

.model flat, stdcall

option casemap :none ; case sensitive

STD_INPUT_HANDLE equ -10

STD_OUTPUT_HANDLE equ -11

STD_ERROR_HANDLE equ -12

NULL equ 0

GetStdHandle PROTO :DWORD

ReadFile PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD

WriteFile PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD

ExitProcess PROTO :DWORD

atoi PROTO :DWORD

itoa PROTO :DWORD,:DWORD,:DWORD

.data

stdout_hFile dd ?

NumberOfBytesWrite dd ?

outbuff db 12 dup(?)

colon db ':'

newline db 0dh,0ah ; carriage return and linefeed

X dd ?

Y dd ?

Z dd ?

SUM dd ?

T dd ?

.code

; int atoi(char *atoi_buff); --- Convert ASCII string to 32-bit signed integer.

blank equ 20h ; ASCII blank character

Page 304: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

304

tab equ 09h ; ASCII tab character

atoi proc USES ebx ecx edx atoi_buff:DWORD

mov esi,atoi_buff

xor ebx,ebx ; initialize forming answer

xor ecx,ecx ; initialize sign flag

atoi1: mov al,[esi]

inc esi ; scan off whitespace

cmp al,blank ; ignore leading blanks

je atoi1

cmp al,tab ; ignore leading tabs

je atoi1

cmp al,'+' ; if + sign, proceed

je atoi2

cmp al,'-' ; is it - sign?

jne atoi3 ; no, test if numeric

dec ecx ; was - sign, set flag, for negative result

atoi2: mov al,[esi] ; get next character

inc esi

atoi3:cmp al,'0' ; is character valid?

jb atoi4 ; jump if not '0' to '9'

cmp al,'9'

ja atoi4 ; jump if not '0' to '9'

and eax,0fh ; isolate lower four bits

xchg ebx,eax ; previous answer x 10

mov edx,10

mul edx

add ebx,eax ; add this digit

jmp atoi2 ; convert next digit

atoi4: mov eax,ebx ; put result into EAX

jecxz atoi5 ; jump if sign flag clear

neg eax ; make result negative

Page 305: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

305

atoi5:

ret ; back to caller

atoi endp

; void itoa(int i, int radix, char *itoa_buff); --- Convert 32-bit integer to ASCII string

itoa proc USES ebx edx esi i:DWORD, radix:DWORD, itoa_buff:PTR BYTE

mov eax,i

mov esi,itoa_buff

add esi,11 ; advance to end of buffer

push esi ; and save that address.

or eax,eax ; test sign of 32-bit value,

pushfd ; and save sign on stack.

jns itoa1 ; jump if value was positive.

neg eax ; find absolute value.

itoa1: mov edx,0 ; divide value by radix to extract

div radix ; next digit for forming string

add dl,'0' ; convert remainder to ASCII digit

cmp dl,'9' ; in case converting to hex ASCII,

jle itoa2 ; jump if in range 0-9,

add dl,'A'-'9'-1 ; correct digit if in range A-F

itoa2: dec esi ; back up through buffer

mov [esi],dl ; store this character into string

or eax,eax

jnz itoa1 ; no, convert another digit

popfd ; was original value negative?

jns itoa3 ; no, jump

dec esi ; yes, store sign into output

mov byte ptr [esi],'-'

itoa3: pop eax ; calculate length of string

sub eax,esi

; move string to the beginning of itoa_buff

Page 306: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

306

mov edx,itoa_buff

itoa4: cmp eax,0

je exit_itoa

mov bl,[esi]

mov [edx],bl

inc edx

inc esi

dec eax

jmp itoa4

exit_itoa:

; fill zero of string

mov [edx],DWORD PTR 0

ret ; back to caller

itoa endp

L0:

; First get STD_OUTPUT_HANDLE

invoke GetStdHandle,STD_OUTPUT_HANDLE

mov stdout_hFile, eax

FORX: mov X,0

LOOPX: cmp X,126

jg ENDLOOPX

FORY: mov Y,0

LOOPY: cmp Y,42

jg ENDLOOPY

FORZ: mov Z,0

$LOOPZ: cmp Z,14

jg ENDLOOPZ

mov eax,X

mov SUM,eax

mov eax,Y

Page 307: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

307

mov ebx,3

imul ebx

add SUM,eax

mov eax,Z

mov ebx,9

imul ebx

add SUM,eax

cmp SUM,126

jne $ENDIF

; write X

invoke itoa,X,10,ADDR outbuff

invoke WriteFile,stdout_hFile,ADDR outbuff,eax,ADDR NumberOfBytesWrite,NULL

; write :

invoke WriteFile,stdout_hFile,ADDR colon,1,ADDR NumberOfBytesWrite,NULL

; write Y

invoke itoa,Y,10,ADDR outbuff

invoke WriteFile,stdout_hFile,ADDR outbuff,eax,ADDR NumberOfBytesWrite,NULL

; write :

invoke WriteFile,stdout_hFile,ADDR colon,1,ADDR NumberOfBytesWrite,NULL

; write Z

invoke itoa,Z,10,ADDR outbuff

invoke WriteFile,stdout_hFile,ADDR outbuff,eax,ADDR NumberOfBytesWrite,NULL

; write newline

invoke WriteFile,stdout_hFile,ADDR newline,2,ADDR NumberOfBytesWrite,NULL

$ENDIF:

inc Z

jmp $LOOPZ

ENDLOOPZ:

inc Y

jmp LOOPY

Page 308: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

308

ENDLOOPY:

inc X

jmp LOOPX

ENDLOOPX:

; exit process

invoke ExitProcess,0

end L0

Page 309: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

309

; EXAMPLE 4: example4.asm (copy file file)

; CS344-222 Computer Organization

; Prince Of Songkla University

; Faculty of Science

; Department of Computer Science

; #########################################################################

.386

.model flat, stdcall

option casemap :none ; case sensitive

; #########################################################################

include e:\masm32\include\windows.inc

include e:\masm32\include\user32.inc

include e:\masm32\include\kernel32.inc

; #########################################################################

.data

errmsg db 'Can not open file',0ah,0dh,0

errmsg1 db 'Can not create file',0ah,0dh,0

ask db "File exist replace(Y|N)?",0

filename db "input.dat",0 ; 256 dup (?)

outfilename db "output.dat",0 ;256 dup (?)

handle dd ?

outhandle dd ?

chandle dd ?

stdouthandle dd ?

inbuff db ?,0

len dd ?

answer db ?

Page 310: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

310

numread dd ?

.code

start:

invoke GetStdHandle,STD_OUTPUT_HANDLE

mov stdouthandle,eax

invoke CreateFile, ADDR filename, GENERIC_READ, FILE_SHARE_READ, NULL,

OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, NULL

cmp eax,INVALID_HANDLE_VALUE

je err

mov handle,eax

invoke CreateFile, ADDR outfilename, GENERIC_WRITE, FILE_SHARE_WRITE, NULL,

CREATE_NEW, FILE_ATTRIBUTE_ARCHIVE, NULL

cmp eax,INVALID_HANDLE_VALUE

jne ok2

invoke GetLastError

cmp eax,ERROR_FILE_EXISTS

jne err1

invoke WriteFile,stdouthandle,ADDR ask,24,ADDR len,NULL

invoke GetStdHandle,STD_INPUT_HANDLE

mov chandle,eax

invoke SetConsoleMode,chandle,ENABLE_ECHO_INPUT

askagain:

invoke ReadConsole,chandle,ADDR answer,1,ADDR numread,NULL

cmp answer,'Y'

je ansy

cmp answer,'y'

je ansy

cmp answer,'n'

je exit

cmp answer,'N'

je exit

Page 311: องค ประกอบคอมพิวเตอร (Computer Organization)staff.cs.psu.ac.th/iew/cs344-222/cs344-222-handout.pdf · 2018-10-18 · หน วยความจํา

CS344-222 องคประกอบคอมพิวเตอร (Computer Organization) หนา _____________________________________________________________________

ปรับปรุงจากที่ไดรับทุนสนับสนุนจากเงินรายไดคณะวิทยาศาสตร ป 2546 CopyRight ©2003 by Faculty of

Science, Prince of Songkla University หามจัดพิมพจําหนายโดยไมไดรับอนุญาต

311

jmp askagain

ansy:

invoke CreateFile, ADDR outfilename, GENERIC_WRITE, FILE_SHARE_WRITE, NULL,

CREATE_ALWAYS, FILE_ATTRIBUTE_ARCHIVE, NULL

cmp eax,INVALID_HANDLE_VALUE

jne ok2

jmp err1

ok2: mov outhandle,eax

L:

invoke ReadFile,handle,ADDR inbuff,1,ADDR len,NULL

cmp len,0

je closeh

invoke WriteFile,outhandle,ADDR inbuff,1,ADDR len,NULL

jmp L

closeh:

invoke CloseHandle,handle

invoke CloseHandle,outhandle

invoke ExitProcess,0

err:

invoke WriteFile,stdouthandle,ADDR errmsg,19,ADDR len,NULL

jmp exit

err1:

invoke WriteFile,stdouthandle,ADDR errmsg1,21,ADDR len,NULL

exit: invoke ExitProcess,0

end start