Transcript
Page 1: 1 IKI10230 Pengantar Organisasi Komputer Kuliah no. 05.b: Arithmetic Operations Sumber: 1. Paul Carter, PC Assembly Language 2. Hamacher. Computer Organization,

1

IKI10230Pengantar Organisasi Komputer

Kuliah no. 05.b: Arithmetic OperationsSumber:1. Paul Carter, PC Assembly Language2. Hamacher. Computer Organization, ed-53. Materi kuliah CS61C/2000 & CS152/1997, UCB4. Intel Architecture Software Developer’s Manual

17 Maret 2004

L. Yohanes Stefanus ([email protected])Bobby Nazief ([email protected])

bahan kuliah: http://www.cs.ui.ac.id/kuliah/POK/

Page 2: 1 IKI10230 Pengantar Organisasi Komputer Kuliah no. 05.b: Arithmetic Operations Sumber: 1. Paul Carter, PC Assembly Language 2. Hamacher. Computer Organization,

2

Arithmetic Instructions

° The binary arithmetic instructions• operate on 8-, 16-, and 32-bit numeric data

• encoded as signed or unsigned binary integers

° Operations include• add,

• subtract,

• multiply,

• divide

• increment, decrement, compare, and change sign (negate)

° The are also BCD (binary coded decimal) arithmetic instructions

Page 3: 1 IKI10230 Pengantar Organisasi Komputer Kuliah no. 05.b: Arithmetic Operations Sumber: 1. Paul Carter, PC Assembly Language 2. Hamacher. Computer Organization,

3

Arithmetic Instructions: Summary

1. ADD Integer add

2. ADC Add with carry

3. SUB Subtract

4. SBB Subtract with borrow

5. IMUL Signed multiply

6. MUL Unsigned multiply

7. IDIV Signed divide

8. DIV Unsigned divide

9. INC Increment

10. DEC Decrement

11. NEG Negate

12. CMP Compare

13. DAA Decimal adjust after addition

14. DAS Decimal adjust after subtraction

15. AAA ASCII adjust after addition

16. AAS ASCII adjust after subtraction

17. AAM ASCII adjust after multiplication

18. AAD ASCII adjust before division

Page 4: 1 IKI10230 Pengantar Organisasi Komputer Kuliah no. 05.b: Arithmetic Operations Sumber: 1. Paul Carter, PC Assembly Language 2. Hamacher. Computer Organization,

4

Additions & Subtractions

° ADD DEST,SRC ; DEST [DEST] + [SRC]• OF, SF, ZF, AF, CF, and PF flags are set according to the result

° ADC DEST,SRC ; DEST [DEST] + [SRC] + [CF]• OF, SF, ZF, AF, CF, and PF flags are set according to the result

° SUB DEST,SRC ; DEST [DEST] - [SRC] • OF, SF, ZF, AF, CF, and PF flags are set according to the result

° SBB DEST,SRC ; DEST [DEST] - [SRC] – [CF]• OF, SF, ZF, AF, CF, and PF flags are set according to the result

Page 5: 1 IKI10230 Pengantar Organisasi Komputer Kuliah no. 05.b: Arithmetic Operations Sumber: 1. Paul Carter, PC Assembly Language 2. Hamacher. Computer Organization,

5

Format Instruksi ADD, ADC, SUB, SBB

ACC [ACC] + IMM• ADD AL,imm8 Add imm8 to AL

• ADD AX,imm16 Add imm16 to AX

• ADD EAX,imm32 Add imm32 to EAX

REG/MEM [REG/MEM] + IMM• ADD r/m8,imm8 Add imm8 to r/m8

• ADD r/m16,imm16 Add imm16 to r/m16

• ADD r/m32,imm32 Add imm32 to r/m32

• ADD r/m16,imm8 Add sign-extended imm8 to r/m16

• ADD r/m32,imm8 Add sign-extended imm8 to r/m32

REG/MEM [REG/MEM] + [REG]• ADD r/m8,r8 Add r8 to r/m8

• ADD r/m16,r16 Add r16 to r/m16

• ADD r/m32,r32 Add r32 to r/m32

REG [REG] + [REG/MEM]• ADD r8,r/m8 Add r/m8 to r8

• ADD r16,r/m16 Add r/m16 to r16

• ADD r32,r/m32 Add r/m32 to r32

Page 6: 1 IKI10230 Pengantar Organisasi Komputer Kuliah no. 05.b: Arithmetic Operations Sumber: 1. Paul Carter, PC Assembly Language 2. Hamacher. Computer Organization,

6

Multiplication

° MUL SRC ; DEST [ACC] * [SRC]• The MUL instruction multiplies two unsigned integer operands.

• SRC ACC DEST

r/m8 AL AX

r/m16 AX DX:AX

r/m32 EAX EDX:EAX

• CF & OF flags are set to 0 if the upper half of the result is 0; otherwise, they are set to 1

° IMUL• IMUL SRC ; lihat MUL SRC

• IMUL DEST,SRC ; DEST [DEST] * [SRC]

• The IMUL instruction multiplies two signed integer operands.

• CF & OF flags are set when:

- significant bits are carried into the upper half of the result

- the result must be truncated to fit in the destination operand size

Page 7: 1 IKI10230 Pengantar Organisasi Komputer Kuliah no. 05.b: Arithmetic Operations Sumber: 1. Paul Carter, PC Assembly Language 2. Hamacher. Computer Organization,

7

Format Instruksi MUL

° MUL r/m8 Unsigned multiply (AX ← [AL] * [REG/MEM])

° MUL r/m16 Unsigned multiply (DX:AX ← [AX] * [REG/MEM])

° MUL r/m32 Unsigned multiply (EDX:EAX ← [EAX] * [REG/MEM])

CONTOH:

° MUL DL

° MUL BYTE [DATA]

° MUL DX

° MUL WORD [DATA]

° MUL EDX

° MUL DWORD [DATA]

Page 8: 1 IKI10230 Pengantar Organisasi Komputer Kuliah no. 05.b: Arithmetic Operations Sumber: 1. Paul Carter, PC Assembly Language 2. Hamacher. Computer Organization,

8

Format Instruksi IMUL

1-OPERAND• IMUL r/m8 AX← [AL] * [REG/MEM]• IMUL r/m16 DX:AX ← [AX] * [REG/MEM]• IMUL r/m32 EDX:EAX ← [EAX] * [REG/MEM]

2-OPERAND• IMUL r16,r/m16 REG ← [REG] * [REG/MEM]• IMUL r16,imm8 REG ← [REG] * sign-extended IMM• IMUL r16,imm16 REG ← r/m16 * IMM• IMUL r32,r/m32 REG ← [REG] * [REG/MEM]• IMUL r32,imm8 REG ← [REG] * sign-extended IMM• IMUL r32,imm32 REG ← [REG/MEM] * IMM

3-OPERAND• IMUL r16,r/m16,imm8 REG ← [REG/MEM] * sign-ext. IMM• IMUL r16,r/m16,imm16 REG ← [REG/MEM] * IMM• IMUL r32,r/m32,imm8 REG ← [REG/MEM] * sign-ext. IMM • IMUL r32,r/m32,imm32 REG ← [REG/MEM] * IMM

Page 9: 1 IKI10230 Pengantar Organisasi Komputer Kuliah no. 05.b: Arithmetic Operations Sumber: 1. Paul Carter, PC Assembly Language 2. Hamacher. Computer Organization,

9

Division

° DIV SRC ; QUO. & REM. [ACC] / [SRC]• divides one unsigned integer operand (ACC) by another (SRC)• SRC ACC QUOTIENT REMAINDER

r/m8 AX AL AH

r/m16 DX:AX AX DX

r/m32 EDX:EAX EAX EDX• non-integral results are truncated (chopped) towards 0• remainder is always less than the divisor in magnitude• overflow is indicated with the #DE (divide error) exception rather than

with the OF flag

° IDIV SRC ; QUO. & REM. [ACC] / [SRC]• divides one signed integer operand (ACC) by another (SRC)• non-integral results are truncated (chopped) towards 0• sign of the remainder is always the same as the sign of the dividend• absolute value of the remainder is always less than the absolute

value of the divisor• overflow is indicated with the #DE (divide error) exception rather than

with the OF (overflow) flag

Page 10: 1 IKI10230 Pengantar Organisasi Komputer Kuliah no. 05.b: Arithmetic Operations Sumber: 1. Paul Carter, PC Assembly Language 2. Hamacher. Computer Organization,

10

Format Instruksi DIV & IDIV

Unsigned Divide• DIV r/m8 Q:AL, R:AH ← AX / [REG/MEM]

• DIV r/m16 Q:AX, R:DX ← DX:AX / [REG/MEM]

• DIV r/m32 Q:EAX, R:EDX ← EDX:EAX / [REG/MEM]

Signed Divide• IDIV r/m8 Q:AL, R:AH ← AX / [REG/MEM]

• IDIV r/m16 Q:AX, R:DX ← DX:AX / [REG/MEM]

• IDIV r/m32 Q:EAX, R:EDX ← EDX:EAX / [REG/MEM]

Page 11: 1 IKI10230 Pengantar Organisasi Komputer Kuliah no. 05.b: Arithmetic Operations Sumber: 1. Paul Carter, PC Assembly Language 2. Hamacher. Computer Organization,

11

INC & DEC

° INC DEST ; DEST [DEST] + 1

° DEC DEST ; DEST [DEST] – 1• Operand is assumed to be unsigned integer.

• CF flag is not affected. OF, SF, ZF, AF, and PF flags are set according to the result.

° INC/DEC r/m8 Increment r/m byte by 1• INC BYTE [DATA]

° INC/DEC r/m16 Increment r/m word by 1• INC WORD [DATA]

° INC/DEC r/m32 Increment r/m doubleword by 1• INC DWORD [DATA]

° INC/DEC r16 Increment word register by 1

° INC/DEC r32 Increment doubleword register by 1

Page 12: 1 IKI10230 Pengantar Organisasi Komputer Kuliah no. 05.b: Arithmetic Operations Sumber: 1. Paul Carter, PC Assembly Language 2. Hamacher. Computer Organization,

12

CMP & NEG

° CMP DEST,SRC ; [DEST] – [SRC], update FLAGS• The source operands are not modified, nor is the result saved.

• The CF, OF, SF, ZF, AF, and PF flags are set according to the result (in the same manner as the SUB instruction)

° NEG DEST ; DEST 0 – [DEST]• Assume a signed integer operand

• CF flag set to 0 if the source operand is 0; otherwise it is set to 1

• OF, SF, ZF, AF, and PF flags are set according to the result

Page 13: 1 IKI10230 Pengantar Organisasi Komputer Kuliah no. 05.b: Arithmetic Operations Sumber: 1. Paul Carter, PC Assembly Language 2. Hamacher. Computer Organization,

13

Format Instruksi CMP

[ACC] - IMM• CMP AL, imm8 Compare imm8 with AL

• CMP AX, imm16 Compare imm16 with AX

• CMP EAX, imm32 Compare imm32 with EAX

[REG/MEM] - IMM• CMP r/m8, imm8 Compare imm8 with r/m8

• CMP r/m16, imm16 Compare imm16 with r/m16

• CMP r/m32,imm32 Compare imm32 with r/m32

• CMP r/m16,imm8 Compare imm8 with r/m16

• CMP r/m32,imm8 Compare imm8 with r/m32

[REG/MEM] – [REG]• CMP r/m8,r8 Compare r8 with r/m8

• CMP r/m16,r16 Compare r16 with r/m16

• CMP r/m32,r32 Compare r32 with r/m32

[REG] – [REG/MEM]• CMP r8,r/m8 Compare r/m8 with r8

• CMP r16,r/m16 Compare r/m16 with r16

• CMP r32,r/m32 Compare r/m32 with r32

Page 14: 1 IKI10230 Pengantar Organisasi Komputer Kuliah no. 05.b: Arithmetic Operations Sumber: 1. Paul Carter, PC Assembly Language 2. Hamacher. Computer Organization,

14

Format Instruksi NEG

° NEG r/m8 Two’s complement negate r/m8

° NEG r/m16 Two’s complement negate r/m16

° NEG r/m32 Two’s complement negate r/m32

CONTOH:

° NEG DL

° NEG BYTE [DATA]

° NEG DX

° NEG WORD [DATA]

° NEG EDX

° NEG DWORD [DATA]

Page 15: 1 IKI10230 Pengantar Organisasi Komputer Kuliah no. 05.b: Arithmetic Operations Sumber: 1. Paul Carter, PC Assembly Language 2. Hamacher. Computer Organization,

15

DECIMAL ARITHMETIC

Page 16: 1 IKI10230 Pengantar Organisasi Komputer Kuliah no. 05.b: Arithmetic Operations Sumber: 1. Paul Carter, PC Assembly Language 2. Hamacher. Computer Organization,

16

Packed & Unpacked BCD Integers

° Binary-coded decimal integers (BCD integers) are unsigned 4-bit integers with valid values ranging from 0 to 9.

° BCD integers can be unpacked (one BCD digit per byte) or packed (two BCD digits per byte).

° The value of an unpacked BCD integer is the binary value of the low halfbyte (bits 0 through 3).

• The high half-byte (bits 4 through 7) can be any value during addition and subtraction, but must be zero during multiplication and division.

° Packed BCD integers allow two BCD digits to be contained in one byte.

• Here, the digit in the high half-byte is more significant than the digit in the low half-byte.

Page 17: 1 IKI10230 Pengantar Organisasi Komputer Kuliah no. 05.b: Arithmetic Operations Sumber: 1. Paul Carter, PC Assembly Language 2. Hamacher. Computer Organization,

17

Decimal Arithmetic

° Decimal arithmetic can be performed by combining the binary arithmetic instructions ADD, SUB, MUL, and DIV with the decimal arithmetic instructions.

° The decimal arithmetic instructions are provided to carry out the following operations:

• To adjust the results of a previous binary arithmetic operation to produce a valid BCD result.

• To adjust the operands of a subsequent binary arithmetic operation so that the operation will produce a valid BCD result.

° Decimal arithmetic instructions operate only on both packed and unpacked BCD values.

Page 18: 1 IKI10230 Pengantar Organisasi Komputer Kuliah no. 05.b: Arithmetic Operations Sumber: 1. Paul Carter, PC Assembly Language 2. Hamacher. Computer Organization,

18

Packed-BCD Instructions

° The DAA (decimal adjust after addition) and DAS (decimal adjust after subtraction) instructions adjust the results of operations performed on packed BCD integers.

° Adding two packed BCD values requires two instructions:

• an ADD instruction: adds (binary addition) the two values and stores the result in the AL register

• followed by a DAA instruction: adjusts the value in the AL register to obtain a valid, 2-digit, packed BCD value and sets the CF flag if a decimal carry occurred as the result of the addition.

° Subtracting one packed BCD value from another requires:

• a SUB instruction: subtracts (binary subtraction) one BCD value from another and stores the result in the AL register

• followed by a DAS instruction: adjusts the value in the AL register to obtain a valid, 2-digit, packed BCD value and sets the CF flag if a decimal borrow occurred as the result of the subtraction.

Page 19: 1 IKI10230 Pengantar Organisasi Komputer Kuliah no. 05.b: Arithmetic Operations Sumber: 1. Paul Carter, PC Assembly Language 2. Hamacher. Computer Organization,

19

Unpacked-BCD Instructions

° AAA (ASCII adjust after addition)• converts the binary value in the AL register into a decimal value and

stores the result in the AL register in unpacked BCD format• if a decimal carry occurred as a result of the addition, the CF flag is

set and the contents of the AH register are incremented by 1

° AAS (ASCII adjust after subtraction)• similar with AAA

° AAM (ASCII adjust after multiplication)• converts the binary value in the AL register into a decimal value and

stores the least significant digit of the result in the AL register and the most significant digit, if there is one, in the AH register

° AAD (ASCII adjust before division)• converts the BCD value in registers AH (most significant digit) and

AL (least significant digit) into a binary value and stores the result in register AL

• when the value in AL is divided by an unpacked BCD value, the quotient and remainder will be automatically encoded in unpacked BCD format

Page 20: 1 IKI10230 Pengantar Organisasi Komputer Kuliah no. 05.b: Arithmetic Operations Sumber: 1. Paul Carter, PC Assembly Language 2. Hamacher. Computer Organization,

20

Contoh Program: math.asm (1/5)

1. %include "asm_io.inc"

2. segment .data

3. ;

4. ; Output strings

5. ;

6. prompt db "Enter a number: ", 0

7. square_msg db "Square of input is ", 0

8. cube_msg db "Cube of input is ", 0

9. cube25_msg db "Cube of input times 25 is ", 0

10. quot_msg db "Quotient of cube/100 is ", 0

11. rem_msg db "Remainder of cube/100 is ", 0

12. neg_msg db "The negation of the remainder is ", 0

13. segment .bss

14. input resd 1

Page 21: 1 IKI10230 Pengantar Organisasi Komputer Kuliah no. 05.b: Arithmetic Operations Sumber: 1. Paul Carter, PC Assembly Language 2. Hamacher. Computer Organization,

21

Contoh Program: math.asm (2/5)

15.segment .text

16. global _asm_main

17._asm_main:

18. enter 0,0 ; setup routine

19. pusha

20. mov eax, prompt

21. call print_string

22. call read_int

23. mov [input], eax

24. imul eax ; edx:eax = eax * eax

25. mov ebx, eax ; save answer in ebx

26. mov eax, square_msg

27. call print_string

28. mov eax, ebx

29. call print_int

30. call print_nl

Page 22: 1 IKI10230 Pengantar Organisasi Komputer Kuliah no. 05.b: Arithmetic Operations Sumber: 1. Paul Carter, PC Assembly Language 2. Hamacher. Computer Organization,

22

Contoh Program: math.asm (3/5)

31. mov ebx, eax

32. imul ebx, [input] ; ebx *= [input]

33. mov eax, cube_msg

34. call print_string

35. mov eax, ebx

36. call print_int

37. call print_nl

38. imul ecx, ebx, 25 ; ecx = ebx*25

39. mov eax, cube25_msg

40. call print_string

41. mov eax, ecx

42. call print_int

43. call print_nl

Page 23: 1 IKI10230 Pengantar Organisasi Komputer Kuliah no. 05.b: Arithmetic Operations Sumber: 1. Paul Carter, PC Assembly Language 2. Hamacher. Computer Organization,

23

Contoh Program: math.asm (4/5)

44. mov eax, ebx

45. cdq ; initialize edx by sign extension

46. mov ecx, 100 ; can't divide by immediate value

47. idiv ecx ; edx:eax / ecx

48. mov ecx, eax ; save quotient into ecx

49. mov eax, quot_msg

50. call print_string

51. mov eax, ecx

52. call print_int

53. call print_nl

54. mov eax, rem_msg

55. call print_string

56. mov eax, edx

57. call print_int

58. call print_nl

Page 24: 1 IKI10230 Pengantar Organisasi Komputer Kuliah no. 05.b: Arithmetic Operations Sumber: 1. Paul Carter, PC Assembly Language 2. Hamacher. Computer Organization,

24

Contoh Program: math.asm (5/5)

59. neg edx ; negate the remainder

60. mov eax, neg_msg

61. call print_string

62. mov eax, edx

63. call print_int

64. call print_nl

65. popa

66. mov eax, 0 ; return back to C

67. leave

68. ret

Page 25: 1 IKI10230 Pengantar Organisasi Komputer Kuliah no. 05.b: Arithmetic Operations Sumber: 1. Paul Carter, PC Assembly Language 2. Hamacher. Computer Organization,

25

math.exe


Top Related