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

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

Arithmetic Instruction

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


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

1 Arithmetic Instruction
Suthida Chaichomchuen

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

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

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

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

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

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

8 ADD & ADC ADD AL, BL ADD AL, BYTE ADD BYTE, AL ADD BL, 10H
ADD BYTE, 25H

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

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

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

12 DAA พิจารณา (ต่อ) ถ้า 4 บิตบนของ AL มีค่ามากกว่า 9 หรือ AF มีค่า 1

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

14 Increment Instruction
บวกค่า 1 ให้กับรีจิสเตอร์หรือหน่วยความจำ [label:] INC register/memory Example INC CX INC AL INC MEM_BYTE INC MEM_WORD [BX]

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

16 SUB & SBB SUB AX,BX SUB AX,WORD SUB WORD,AX SUB BX,1000H SUB WORD,256H

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

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

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

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

21 DAS พิจารณา (ต่อ) ถ้า 4 บิตบนของ AL มีค่ามากกว่า 9 หรือ AF มีค่า 1

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

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

24 Decrement Instruction
ลบค่า 1 ให้กับรีจิสเตอร์หรือหน่วยความจำ [label:] DEC register/memory Example DEC CX DEC AL DEC MEM_BYTE DEC MEM_WORD [BX]

25 Negate Instruction เป็นคำสั่งในการหาค่า 2’s Complement
[label:] NEG register/memory Example NEG CL NEG BX NEG MEM_BYTE NEG MEM_WORD [BX]

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

27 Source < Destination x x 0 0 Source = Destination x x 1 0
Compare Instruction Unsigned Operands Condition OF SF ZF CF Source < Destination x x 0 0 Source = Destination x x 1 0 Source > Destination x x 0 1

28 Source < Destination 0/1 0 0 x Source = Destination 0 0 1 x
Compare Instruction Signed Operands Condition OF SF ZF CF Source < Destination 0/1 0 0 x Source = Destination x Source > Destination 0/1 1 0 x

29 CMP [label:] CMP register/memory, register/memory/ immediate Example
CMP DX, 00

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

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

32 MUL & IMUL Example MUL BX MUL MEM_BYTE IMUL DL IMUL MEM_WORD

33 MUL & IMUL Example : คูณเลขที่มีเครื่องหมาย ระหว่างเลข 8 บิต กับ 16 บิต MOV AX, MULTIPLIER MOV CL, MULTIPLICAND MOV CH,0 IMUL CX

34 MUL & IMUL Example : คูณเลขที่ไม่มีเครื่องหมาย ระหว่างเลข 8 บิต กับ 16 บิต MOV AX, MULCAND_16 MOV CL, MULTIPIER_8 MOV CH, 0 MUL CX

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

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

37 AAM Example AL=‘5’ BH=‘9’ MUL BH AAM

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

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

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

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

42 DIV & IDIV Example DIV BX DIV MEM_BYTE IDIV DL IDIV MEM_WORD

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

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

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

46 AAD Example AX= CL= AAD DIV CL

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

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

49 CBW & CWD Example CBW ADD AX, BX IMUL BX CWD IDIV BX

50 CBW & CWD Extending the sign(0) in the AL through the AH adds 20H to the AX. AH AL xx 60H CBW ADD AX, 20H

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


ดาวน์โหลด ppt Arithmetic Instruction

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


Ads by Google