การกระโดดและการวนรอบ

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
อัลกอริทึ่มทำงานวนซ้ำ
Advertisements

การทำงานแบบเลือกทำ (Selection)
คำสั่ง while และ คำสั่ง do..while
Control Statement if..else switch..case for while do-while.
Control Statement for while do-while.
Lecture no. 5 Control Statements
CS Assembly Language Programming
CS Assembly Language Programming
CS Assembly Language Programming
คำสั่ง while ควบคุมการทำงานวนซ้ำ กรณีระบบงานมีลักษณะตรวจสอบเงื่อนไขก่อน แล้วเข้าสู่ส่วนลำดับงานคำสั่งที่กำหนดไว้ การเขียนคำสั่ง while ต้องกำหนดนิพจน์แบบตรรกะเป็นเงื่อนไขมีค่าในหน่วยความจำเป็น.
ผังงานโปรแกรม (Program Flowchart)
บทที่ 5 การทำงานแบบวนซ้ำ
CE 112 บทที่ 5 การทำซ้ำในภาษา C
เนื้อหา ประเภทของโปรแกรมภาษา ขั้นตอนการพัฒนาโปรแกรม
Repetitive Statements (Looping)
อ.อรวรรณ เชาวลิต For คำสั่งวนซ้ำ อ.อรวรรณ เชาวลิต
Repetitive Instruction
คำสั่งเงื่อนไขและการควบคุม
โครงสร้างควบคุม 1. โครงสร้างควบคุมแบบวนทางเลือก
Control Transfer Instructions
Addressing Modes Assembly Programming.
Arithmetic Instruction
การควบคุมทิศทางการทำงานของโปรแกรม
การเขียนผังงานแบบโครงสร้าง
คำสั่ง Repeat...Until คำสั่งควบคุมให้ทำงานซ้ำ
Looping การวนรอบ บทที่ 4.
Computer Architecture and Assembly Language
CS Assembly Language Programming
CS Assembly Language Programming
CS Assembly Language Programming Period 30.
1 นายทินวัฒน์ พงษ์ทองเมือง. 2 การเปิดให้ Program ทำงาน 3  p:\xampplite\ xampplite-control.exe  Start Apache.
แบบฝึกหัด 24/12/09. เมื่อคอมพ์ทำคำสั่งต่อไปนี้ จงแสดง ผลลัพธ์และ ค่าแฟลกต่างๆ InstructionResult Z-FlagC-FlagP- Flag S- Flag O- Flag MOV AL,3h Inc AL Mov.
บทที่ 15 โปรแกรมย่อยและแสต็ก
บทที่ 17 คำสั่งตารางและการสร้างแมคโคร
บทที่ 10 โครงสร้างควบคุม
ธนาวินท์ รักธรรมานนท์
ธนาวินท์ รักธรรมานนท์
ธนาวินท์ รักธรรมานนท์
คำสั่งควบคุมการทำงาน
Chapter 6 Decision Statement
Chapter 7 Iteration Statement
ครูรัตติยา บุญเกิด.
คำสั่ง while และ do…while
การเขียนเว็บเพจด้วยภาษา php ศูนย์คอมพิวเตอร์ โรงเรียนปลวกแดงพิทยาคม
คำสั่งควบคุมการทำงานของ ActionScripts
Week 3 Flow Control in PHP
เครื่องหมายและการดำเนินการ ในภาษา C
Week 6 การทำซ้ำโดย for loop
Week 5 การทำซ้ำโดย while loop และ do while loop
CS Assembly Language Programming
Week 6 การทำซ้ำโดย for loop
Chapter 5 การทำซ้ำโดย while loop และ do while loop
Week 5 การทำซ้ำโดย while loop และ do while loop
2.3.1 รหัสเทียม (Pseudo code)
คำสั่งควบคุมขั้นตอน Flow control statements
หลักการเขียนโปรแกรม ( )
CHAPTER 4 Control Statements
หลักสูตรอบรมครู คอมพิวเตอร์ หลักสูตรอบรมครู คอมพิวเตอร์ หลักสูตรที่ ๑ ทักษะการโปรแกรม เบื้องต้น วันที่สาม.
คำสั่งทำซ้ำ for คำสั่ง for เป็นคำสั่งทำซ้ำในลักษณะ Definite loop คือทราบจำนวนรอบที่แน่นอนในการทำงาน ซึ่งจะใช้ตัวแปร 1 ตัวในการนับจำนวนรอบว่าครบตามกำหนดหรือไม่
อัลกอริทึ่มทำงานวนซ้ำ
Chapter 6 Repetition Structure[2] ผู้สอน อ. ยืนยง กันทะเนตร สาขาวิชาเทคโนโลยี คอมพิวเตอร์เคลื่อนที่ ng.
Computer Programming Asst. Prof. Dr. Choopan Rattanapoka
บทที่ 7 เงื่อนไขในภาษาซี
การรับและแสดงผลข้อมูล (Input/Output)
Computer Programming การเขียนโปรแกรมคอมพิวเตอร์
Computer Programming การเขียนโปรแกรม คอมพิวเตอร์ สัปดาห์ที่ 6 คำสั่งควบคุมการทำงานแบบ เงื่อนไขและคำสั่งควบคุมการ ทำงานแบบวนซ้ำ.
Week 5 While and Do-While loop (Control Structure 2)
ผังงานโปรแกรม (Program Flowchart)
Microcomputer and Assembly Language
โปรแกรมภาษาแอสเซมบลี้เบื้องต้น
ใบสำเนางานนำเสนอ:

การกระโดดและการวนรอบ

คำสั่งกระโดด Jxx label คำสั่งกระโดดมี 3 รูปแบบ คำสั่งกระโดดแบบไม่มีเงื่อนไข คำสั่งกระโดดแบบมีเงื่อนไขตามแฟล็กซ์ คำสั่งกระโดดแบบมีเงื่อนไขตามค่าในรีจิสเตอร์ Jxx label MOV AX, 01H ADD AX, BX CMP AX, 0 JZ TRUE JNZ FALSE TRUE : INC AX FALSE : INC CX AX := BX + 1; IF AX = 0 THEN AX:=AX+1; CX := CX + 1;

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

คำสั่งการกระโดดเบื้องต้น JMP <เลเบล> กระโดดข้ามไปที่ <เลเบล> อย่างไม่มีเงื่อนไข JZ (JE) <เลเบล> กระโดดข้ามไปที่ <เลเบล> เมื่อผลของคำสั่งทางคณิตศาสตร์ล่าสุดที่ผ่านมาเป็นศูนย์ JNZ (JNE) <เลเบล> กระโดดข้ามไปที่ <เลเบล> เมื่อผลของคำสั่งทางคณิตศาสตร์ล่าสุดที่ผ่านมาไม่เป็นศูนย์

คำสั่งกระโดด (ตัวเลขไม่มีเครื่องหมาย) เงื่อนไขการกระโดด แฟล็กทดสอบ JA (JNBE) Above CF = 0 , ZF = 0 JB (JNAE) Below CF = 1 , ZF = 0 JAE (JNB) Above or Equal Zero CF = 0 , ZF = 1 JBE (JNA) Below or Equal Zero CF = 1 , ZF = 1

คำสั่งกระโดด (ตัวเลขมีเครื่องหมาย) เงื่อนไขการกระโดด แฟล็กทดสอบ JG (JNLE) Greater OF = SF , ZF = 0 JL (JNGE) Less OF ≠ SF , ZF = 0 JGE (JNL) Greater or Equal Zero OF = SF , ZF = 1 JLE (JNG) Less or Equal Zero OF ≠ SF , ZF = 1

คำสั่งกระโดด (ตามแฟล็กซ์และรีจิสเตอร์) การกระโดด ความหมาย แฟล็กทดสอบ JNC No Carry CF = 0 JO Overflow OF =1 JNO Not Overflow OF =0 JS Sign SF = 1 JNS No Sign SF = 0 JPO (JNP) Parity odd PF = 0 JPE (JP) Parity Even PF = 1 JCXZ CX = 0 none

ตัวอย่างการใช้คำสั่งกระโดด cmp ah,10 jz lab1 mov bx,2 lab1: add cx,10 ;เปรียบเทียบ ah กับ 10 ;ถ้าเท่ากันให้กระโดดไปที่ lab1 Ex#1 EX#2 cmp ah,10 jge tenup add dl,’0’ jmp endif tenup: add dl,’A’ endif: ;เปรียบเทียบ ah กับ 10 ถ้ามากกว่า ;หรือเท่ากับให้กระโดดไปที่ lab1 ;ปรับค่า dl ;กระโดดไปที่ endif

การประยุกต์คำสั่งกระโดด Repeat Statement; Until condition ; While condition do statement ; condition False True Statement condition False True Statement

การประยุกต์คำสั่งกระโดด (repeat) Pascal Language Assembly Language ax := 10; repeat ax := ax-1; bx := bx+1; cx := ax-bx; until ax = 0 ; dx := dx + 10; mov ax,10 repeat: dec ax inc bx sub ax,bx mov cx,ax cmp ax,0 jnz repeat

การประยุกต์คำสั่งกระโดด (while) Pascal Language Assembly Language while: cmp ax,128h jge endwhile add ax,bx inc bx jmp while endwhile: dec cx while ax < 28h do begin ax := ax+bx ; bx := bx+1 ; end; cx := cx-1 ;

แบบฝึกหัด จงเขียนคำสั่งในการบวกตัวเลขจาก 1 ถึง 50 และเก็บค่าไว้ใน AX จงเขียนคำสั่งในการหา หรม. ของ AX และ BX กำหนดให้เป็นตัวเลขไม่คิดเครื่องหมาย Loop : CMP AX , BX JB Notswap MOV CX , AX MOV AX , BX MOV BX , CX Notswap : SUB BX , AX JNZ Loop

คำสั่งวนรอบ LOOP label คำสั่งวนรอบเป็นคำสั่งที่ใช้ในการกระทำซ้ำ โดยใช้รีจิสเตอร์ CX (Counter Register) ในการนับจำนวนครั้งของการกระทำซ้ำ รูปแบบ LOOP label คำสั่งในกลุ่มนี้คือ LOOP : คำสั่งที่พิจารณาค่าของ CX อย่างเดียว LOOPZ , LOOPNZ : พิจารณาแฟล็กร่วมด้วย

คำสั่งวนรอบ LOOP การทำงานของคำสั่ง LOOP ลดค่าของ CX ลงหนึ่ง โดยไม่กระทบแฟล็ก ถ้า CX ยังมีค่ามากกว่าศูนย์ กระโดดไปทำงานที่เลเบลที่ระบุ คำสั่ง LOOP มีการทำงานเทียบเท่ากับ DEC CX JNZ label แต่ไม่มีการกระทบแฟล็ก

ตัวอย่างการใช้คำสั่งวนรอบ EX mov cx,50h mov bl,1 mov dx,0 addnumber: add dl,bl adc dh,0 inc bl loop addnumber ; ทำซ้ำ 50 ครั้ง ; เริ่มที่ 1 ; ค่าเริ่มต้น = 0 ; บวก 8 บิตล่าง ; บวกตัวทด ; ทำซ้ำ

คำสั่ง LOOPZ และ LOOPNZ คำสั่ง LOOPZ และ LOOPNZ มีการทำงานเหมือนกับคำสั่ง LOOP แต่จะนำค่าของแฟล็กศูนย์มาใช้ในการพิจารณาด้วย LOOPZ จะกระโดดกลับไปทำงานถ้าค่าของ CX ที่ลดแล้วมีค่าไม่เท่ากับศูนย์ และค่าของแฟล็กศูนย์มีค่าเป็นหนึ่ง (Zero) (CX ≠ 0) and (Z = 1) LOOPNZ จะกระโดดกลับไปทำงานถ้าค่าของ CX ที่ลดแล้วมีค่าไม่เท่ากับศูนย์ และค่าของแฟล็กศูนย์มีค่าเป็นศูนย์ (Not Zero) (CX ≠ 0) and (Z = 0)

ข้อพึงระวังของการใช้คำสั่งวนรอบ กรณีที่รีจิสเตอร์ CX มีค่าเท่ากับศูนย์ก่อนการทำงานของคำสั่ง LOOP ค่าของ CX จะถูกปรับค่าเป็น 0FFFFh และการทำงานจะผิดพลาด แก้โดยใช้คำสั่ง JCXZ ในการป้องกันความผิดพลาด action_0 CXZ ENDLOOP LABEL1: action_1 action_2 action_3 LOOP LABEL1 ENDLOOP:

Question ?