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

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

1 Arithmetic Instruction Suthida Chaichomchuen

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


งานนำเสนอเรื่อง: "1 Arithmetic Instruction Suthida Chaichomchuen"— ใบสำเนางานนำเสนอ:

1 1 Arithmetic Instruction Suthida Chaichomchuen

2 2 Arithmetic Instruction เป็นคำสั่งที่ใช้ในการคำนวณทาง คณิตศาสตร์ เช่น บวก ลบ คูณ หาร กับ เลขฐานสองหรือเลขฐานสิบ

3 3 ค่าที่ใช้ในการคำนวณ l เลขฐานสอง unsigned signed l เลขฐานสิบ packed unpacked

4 4 เลขฐานสอง l มีความยาว 8/16 บิต l Unsigned : ทุกบิตจะแทนค่าของข้อมูล 8 บิต : 0 ถึง บิต : 0 ถึง l Signed : บิตสูงสุดจะบอกเครื่องหมาย 8 บิต : -128 ถึง บิต : ถึง 32767

5 5 เลขฐานสิบ l เก็บค่าเป็นไบต์ l Packed (00-99) บิต 0-3 เก็บค่าในหลักที่ต่ำ (BCD) บิต 4-7 เก็บค่าในหลักที่สูง (BCD) l Unpacked (0-9) บิต 0-3 เก็บค่า BCD 1 ค่า บิต 4-7 เก็บค่า [0:คูณ,หาร] [?:บวก,ลบ]

6 6 l บวก operand 8/16 บิต l ADD destination = destination+source l ADC : ADD with Carry destination = destination+source+carry Addition Instruction

7 7 l [Label:] ADD/ADCregister, register l [Label:] ADD/ADCmemory, register l [Label:] ADD/ADCregister, memory l [Label:] ADD/ADCregister, immediate l [Label:] ADD/ADCmemory, immediate ADD & ADC

8 8 l ADDAL, BL l ADDAL, BYTE l ADDBYTE, AL l ADDBL, 10H l ADDBYTE, 25H ADD & ADC

9 9 l ปรับค่าของผลลัพธ์จากการบวกเลขฐานสิบ โดยที่ผลลัพธ์ที่จะปรับค่าต้องอยู่ใน AL l AAA จะเปลี่ยนค่าใน AL เป็น unpacked decimal digit โดยจะพิจารณาจาก ถ้า 4 บิตล่างของ AL มีค่า 0-9 จะทำให้ 4 บิตบนของ AL มีค่า 0 แฟลก AF และ CF เป็น 0 ด้วย AAA : ASCII Adjust After Addition

10 10 l พิจารณาจาก (ต่อ) ถ้า 4 บิตล่างของ AL มีค่ามากกว่า 9 หรือ AF มีค่า 1 จะบวก 6 ให้กับ AL บวก 1 กับ AH SET AF และ CF เป็น 1 4 บิตบนของ AL มีค่าเป็น 0 AAA

11 11 DAA : Decimal Adjustment After Addition l การทำงานคล้าย AAA l DAA จะเปลี่ยนค่าใน AL เป็น packed decimal digit 2 ค่า โดยจะพิจารณาจาก ตัวเลข 2 ตัว ถ้า 4 บิตล่างของ AL มีค่ามากกว่า 9 หรือ AF มีค่า 1 จะบวกค่า 6 กับ AL และให้ AF เป็น 1

12 12 DAA l พิจารณา (ต่อ) ถ้า 4 บิตบนของ AL มีค่ามากกว่า 9 หรือ AF มีค่า 1 จะบวกค่า 60 กับ AL และให้ AF เป็น 1

13 13 DAA l AL=‘5’BL=‘9’ ADDAL, BL AAA l AL=‘59’ BL=‘35’ ADDAL, BL DAA

14 14 l บวกค่า 1 ให้กับรีจิสเตอร์หรือหน่วยความจำ l [label:]INCregister/memory l Example INCCX INCAL INCMEM_BYTE INCMEM_WORD [BX] Increment Instruction

15 15 Subtraction Instruction l ลบค่า operand 8/16 บิต l CF ทำหน้าที่เหมือนตัวยืม l SUB destination = destination-source l SBB : Subtract with Borrow destination = destination-source-carry

16 16 SUB & SBB l SUBAX,BX l SUBAX,WORD l SUBWORD,AX l SUBBX,1000H l SUBWORD,256H

17 17 SUB & SBB l ถ้าต้องการลบค่า 32 บิต ใช้คำสั่งดังนี้ กำหนดตัวตั้งใน BX, AX ตัวลบอยู่ใน DX, CX SUBAX, CX SBBBX, DX

18 18 AAS : ASCII Adjust for Subtraction l ปรับค่าของผลลัพธ์จากการลบเลขฐานสิบ โดยที่ผลลัพธ์ที่จะปรับค่าต้องอยู่ใน AL l AAS จะเปลี่ยนค่าใน AL เป็น unpacked decimal digit โดยจะพิจารณาจาก ถ้า 4 บิตล่างของ AL มีค่า 0-9 จะทำให้ 4 บิตบนของ AL มีค่า 0 แฟลก AF และ CF เป็น 0 ด้วย

19 19 AAS l พิจารณาจาก (ต่อ) ถ้า 4 บิตล่างของ AL มีค่ามากกว่า 9 หรือ AF มีค่า 1 จะลบ 6 จาก AL ลบ 1 จาก AH SET AF และ CF เป็น 1 4 บิตบนของ AL มีค่าเป็น 0

20 20 DAS : Decimal Adjustment for Subtraction l การทำงานคล้าย AAS l DAS จะเปลี่ยนค่าใน AL เป็น packed decimal digit 2 ค่า โดยจะพิจารณาจาก ตัวเลข 2 ตัว ถ้า 4 บิตล่างของ AL มีค่ามากกว่า 9 หรือ AF มีค่า 1 จะลบค่า 6 ออกจาก AL และให้ AF เป็น 1

21 21 DAS l พิจารณา (ต่อ) ถ้า 4 บิตบนของ AL มีค่ามากกว่า 9 หรือ AF มีค่า 1 จะลบค่า 60 ออกจาก AL และให้ AF เป็น 1

22 22 AAS & DAS l AL=‘7’BL=‘4’ SUBAL, BL AAS l AL=‘4’CL=‘7’ SUBAL, CL AAS

23 23 AAS & DAS l AL=‘86’BH=‘57’ SUBAL, BH DAS l AL=‘45’CH=‘63’ SUBAL, CH DAS

24 24 Decrement Instruction l ลบค่า 1 ให้กับรีจิสเตอร์หรือหน่วยความจำ l [label:] DECregister/memory l Example DECCX DECAL DECMEM_BYTE DECMEM_WORD [BX]

25 25 Negate Instruction l เป็นคำสั่งในการหาค่า 2’s Complement l [label:]NEGregister/memory l Example NEGCL NEGBX NEGMEM_BYTE NEGMEM_WORD [BX]

26 26 Compare Instruction l CMP : Compare Destination to Source l ลบค่า source ออกจาก destination แต่ ไม่ได้เก็บค่าไว้ l มีผลต่อแฟลก AF, CF, OF, PF, SF และ ZF l ใช้ในการตรวจสอบค่าแฟลก เพื่อตัดสินใจใน การย้ายคำสั่งการทำงานไปยังจุดต่าง ๆ

27 27 Unsigned Operands ConditionOFSFZFCF Source < Destinationxx00 Source = Destinationxx10 Source > Destinationxx01 Compare Instruction

28 28 Signed Operands ConditionOFSFZFCF Source < Destination 0/1 00x Source = Destination001x Source > Destination 0/1 10x Compare Instruction

29 29 l [label:]CMPregister/memory, register/memory/ immediate l Example CMPDX, 00 CMP

30 30 Multiplication Instruction l MUL : Unsigned Multiplication l IMUL : Signed Multiplication l ใช้ AL สำหรับการคูณไบต์ ผลลัพธ์เก็บไว้ที่ AH และ AL l ใช้ AX สำหรับการคูณเป็นเวิร์ด ผลลัพธ์เก็บไว้ที่ DX และ AX l ผลลัพธ์จะมีความยาวเป็น 2 เท่า

31 31 MUL & IMUL l [label:] MUL/IMULregister/memory l MUL ถ้าครึ่งบนของผลลัพธ์เป็น 0 CF และ OF จะมีค่าเป็น 0 l IMUL : Signed Multiplication ถ้าครึ่งบนของผลลัพธ์เป็น sign-extension CF และ OF จะมีค่าเป็น 0

32 32 MUL & IMUL l Example MULBX MULMEM_BYTE IMULDL IMULMEM_WORD

33 33 MUL & IMUL l Example : คูณเลขที่มีเครื่องหมาย ระหว่าง เลข 8 บิต กับ 16 บิต MOVAX, MULTIPLIER MOVCL, MULTIPLICAND MOVCH,0 IMULCX

34 34 MUL & IMUL l Example : คูณเลขที่ไม่มีเครื่องหมาย ระหว่างเลข 8 บิต กับ 16 บิต MOVAX, MULCAND_16 MOVCL, MULTIPIER_8 MOVCH, 0 MULCX

35 35 AAM : ASCII Adjust After Multiplication l ปรับค่าการคูณของเลข 8 บิตเป็น unpacked BCD 2 ค่า l AAM จะสมมติให้ผลลัพธ์อยู่ใน AH และ AL l ค่า unpacked BCD จะถูกเก็บใน AH และ AL l ตัวตั้งและตัวคูณต้องเป็น unpacked BCD ด้วย

36 36 AAM l ขั้นตอนการปรับค่าของคำสั่ง AAM หาร AL ด้วย 10 (0AH) เก็บค่าส่วนใน AH เก็บค่าเศษใน AL

37 37 AAM l Example AL=‘5’BH=‘9’ MULBH AAM

38 38 Division Instruction l DIV : Unsigned Division l IDIV : Signed Division l [label:] DIV/IDIV register/memory

39 39 DIV & IDIV l การหารเลข 8 บิต Source เป็นตัวหาร AL และ AH เก็บค่าตัวตั้ง ผลลัพธ์ จำนวนเต็มเก็บไว้ที่ AL เศษเก็บไว้ที่ AH

40 40 DIV & IDIV l การหารเลข 16 บิต Source เป็นตัวหาร DX และ AX เก็บค่าตัวตั้ง ผลลัพธ์ จำนวนเต็มเก็บไว้ที่ AX เศษเก็บไว้ที่ DX

41 41 DIV & IDIV l ถ้าผลลัพธ์จากการหารได้ค่าจำนวนเต็มที่ ใหญ่กว่าที่ AL หรือ AX จะเก็บได้ จะเกิดการ Interrupt ชนิด 0 โดย DOS จะแสดง ข้อความว่า “Divide Overflow”

42 42 DIV & IDIV l Example DIVBX DIVMEM_BYTE IDIVDL IDIVMEM_WORD

43 43 DIV & IDIV l Example : การหารเลขที่มีเครื่องหมาย ระหว่างเลข 8 บิตกับ 16 บิต AX=03ABH=939 BL=D3H=-45 IDIVBL

44 44 DIV & IDIV l Example : การหารเลขที่ไม่มีเครื่องหมาย ระหว่างเลข 8 บิตกับ 16 บิต AX=37D7H=14295 BL=97H=151 DIV BL

45 45 AAD : ASCII Adjust before Division l ปรับค่าของตัวตั้งในการหารให้เป็น เลขฐานสอง คูณส่วนบนของตัวตั้ง (AH) ด้วย 10 บวกผลลัพธ์กับส่วนล่างของตัวตั้ง (AL) ทำให้ค่าใน AH เป็น 0 l คำสั่ง AAD ต้องถูกเรียกใช้ก่อนการหาร

46 46 AAD l Example AX= CL= AAD DIVCL

47 47 Extending values in a Registers l CBW : Convert Byte to Word เป็นคำสั่งที่ลอกค่าของบิต 7 ใน AL ไปใส่ ใน AH ทำให้สามารถบวกค่า 8 บิตกับ 16 บิต หรือ ลบค่า 16 บิตจาก 8 บิต

48 48 Extending values in a Registers l CWD : Convert Word to Doubleword เป็นคำสั่งที่ลอกค่าของบิต 15 ใน AX ไป ใส่ใน DX ทำให้สามารถหารเลข 16 บิต ด้วยเลข 16 บิตได้

49 49 l Example CBW ADDAX, BX CBW IMULBX CWD IDIVBX CBW & CWD

50 50 CBW & CWD l Extending the sign(0) in the AL through the AH adds 20H to the AX. AHAL...xx60H CBW0060 ADDAX, 20H0080

51 51 CBW & CWD l Extending a 1 word signed value to a doubleword by duplication the sign bit of AX through the DX. MOVAX, WORD1 CWD


ดาวน์โหลด ppt 1 Arithmetic Instruction Suthida Chaichomchuen

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


Ads by Google