ดาวน์โหลดงานนำเสนอ
งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ
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
งานนำเสนอที่คล้ายกัน
© 2024 SlidePlayer.in.th Inc.
All rights reserved.