งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

การกระโดดและการ วนรอบ. 2 คำสั่งกระโดด คำสั่งกระโดดมี 3 รูปแบบ คำสั่งกระโดดแบบไม่มีเงื่อนไข คำสั่งกระโดดแบบมีเงื่อนไขตามแฟล็กซ์ คำสั่งกระโดดแบบมีเงื่อนไขตามค่าในรีจิสเตอร์

งานนำเสนอที่คล้ายกัน


งานนำเสนอเรื่อง: "การกระโดดและการ วนรอบ. 2 คำสั่งกระโดด คำสั่งกระโดดมี 3 รูปแบบ คำสั่งกระโดดแบบไม่มีเงื่อนไข คำสั่งกระโดดแบบมีเงื่อนไขตามแฟล็กซ์ คำสั่งกระโดดแบบมีเงื่อนไขตามค่าในรีจิสเตอร์"— ใบสำเนางานนำเสนอ:

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

2 2 คำสั่งกระโดด คำสั่งกระโดดมี 3 รูปแบบ คำสั่งกระโดดแบบไม่มีเงื่อนไข คำสั่งกระโดดแบบมีเงื่อนไขตามแฟล็กซ์ คำสั่งกระโดดแบบมีเงื่อนไขตามค่าในรีจิสเตอร์ AX := BX + 1; IF AX = 0 THEN AX:=AX+1; CX := CX + 1; MOVAX, 01H ADDAX, BX CMPAX, 0 JZTRUE JNZFALSE TRUE :INCAX FALSE :INCCX Jxx label

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

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

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

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

7 7 คำสั่งกระโดด ( ตามแฟล็กซ์ และรีจิสเตอร์ ) การ กระโดด ความหมายแฟล็กทดสอบ JNC No CarryCF = 0 JO OverflowOF =1 JNO Not OverflowOF =0 JS SignSF = 1 JNS No SignSF = 0 JPO (JNP) Parity oddPF = 0 JPE (JP) Parity EvenPF = 1 JCXZ CX = 0none

8 8 ตัวอย่างการใช้คำสั่ง กระโดด 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 ; ปรับค่า dl

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

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

11 11 การประยุกต์คำสั่งกระโดด (while) while ax < 28h do begin ax := ax+bx ; bx := bx+1 ; end; cx := cx-1 ; while: cmpax,128h jgeendwhile addax,bx incbx jmpwhile endwhile: deccx Pascal Language Assembly Language

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

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

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

15 15 ตัวอย่างการใช้คำสั่ง วนรอบ 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 บิตล่าง ; บวกตัวทด ; ทำซ้ำ

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

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

18 18 Question ?


ดาวน์โหลด ppt การกระโดดและการ วนรอบ. 2 คำสั่งกระโดด คำสั่งกระโดดมี 3 รูปแบบ คำสั่งกระโดดแบบไม่มีเงื่อนไข คำสั่งกระโดดแบบมีเงื่อนไขตามแฟล็กซ์ คำสั่งกระโดดแบบมีเงื่อนไขตามค่าในรีจิสเตอร์

งานนำเสนอที่คล้ายกัน


Ads by Google