Pengantar Organisasi Komputer - PowerPoint PPT Presentation

1 / 25
About This Presentation
Title:

Pengantar Organisasi Komputer

Description:

increment, decrement, compare, and change sign (negate) ... DEC Decrement. NEG Negate. CMP Compare. DAA Decimal adjust after addition ... – PowerPoint PPT presentation

Number of Views:45
Avg rating:3.0/5.0
Slides: 26
Provided by: bobbyn4
Category:

less

Transcript and Presenter's Notes

Title: Pengantar Organisasi Komputer


1
IKI10230Pengantar Organisasi KomputerKuliah no.
05.b Arithmetic Operations
Sumber1. Paul Carter, PC Assembly Language2.
Hamacher. Computer Organization, ed-53. Materi
kuliah CS61C/2000 CS152/1997, UCB4. Intel
Architecture Software Developers Manual
17 Maret 2004 L. Yohanes Stefanus
(yohanes_at_cs.ui.ac.id)Bobby Nazief
(nazief_at_cs.ui.ac.id) bahan kuliah
http//www.cs.ui.ac.id/kuliah/POK/
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

3
Arithmetic Instructions Summary
  • ADD Integer add
  • ADC Add with carry
  • SUB Subtract
  • SBB Subtract with borrow
  • IMUL Signed multiply
  • MUL Unsigned multiply
  • IDIV Signed divide
  • DIV Unsigned divide
  • INC Increment
  • DEC Decrement
  • NEG Negate
  • CMP Compare
  • DAA Decimal adjust after addition
  • DAS Decimal adjust after subtraction
  • AAA ASCII adjust after addition

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

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

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 DXAX
  • r/m32 EAX EDXEAX
  • 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

7
Format Instruksi MUL
  • MUL r/m8 Unsigned multiply (AX ? AL
    REG/MEM)
  • MUL r/m16 Unsigned multiply (DXAX ? AX
    REG/MEM)
  • MUL r/m32 Unsigned multiply (EDXEAX ? EAX
    REG/MEM)
  • CONTOH
  • MUL DL
  • MUL BYTE DATA
  • MUL DX
  • MUL WORD DATA
  • MUL EDX
  • MUL DWORD DATA

8
Format Instruksi IMUL
  • 1-OPERAND
  • IMUL r/m8 AX? AL REG/MEM
  • IMUL r/m16 DXAX ? AX REG/MEM
  • IMUL r/m32 EDXEAX ? 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

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 DXAX AX DX
  • r/m32 EDXEAX 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

10
Format Instruksi DIV IDIV
  • Unsigned Divide
  • DIV r/m8 QAL, RAH ? AX / REG/MEM
  • DIV r/m16 QAX, RDX ? DXAX / REG/MEM
  • DIV r/m32 QEAX, REDX ? EDXEAX / REG/MEM
  • Signed Divide
  • IDIV r/m8 QAL, RAH ? AX / REG/MEM
  • IDIV r/m16 QAX, RDX ? DXAX / REG/MEM
  • IDIV r/m32 QEAX, REDX ? EDXEAX / REG/MEM

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

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

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

14
Format Instruksi NEG
  • NEG r/m8 Twos complement negate r/m8
  • NEG r/m16 Twos complement negate r/m16
  • NEG r/m32 Twos complement negate r/m32
  • CONTOH
  • NEG DL
  • NEG BYTE DATA
  • NEG DX
  • NEG WORD DATA
  • NEG EDX
  • NEG DWORD DATA

15
  • DECIMAL ARITHMETIC

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.

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.

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.

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

20
Contoh Program math.asm (1/5)
  • include "asm_io.inc"
  • segment .data
  • Output strings
  • prompt db "Enter a number ", 0
  • square_msg db "Square of input is ", 0
  • cube_msg db "Cube of input is ", 0
  • cube25_msg db "Cube of input times 25 is ", 0
  • quot_msg db "Quotient of cube/100 is
    ", 0
  • rem_msg db "Remainder of cube/100 is
    ", 0
  • neg_msg db "The negation of the
    remainder is ", 0
  • segment .bss
  • input resd 1

21
Contoh Program math.asm (2/5)
  • segment .text
  • global _asm_main
  • _asm_main
  • enter 0,0 setup
    routine
  • pusha
  • mov eax, prompt
  • call print_string
  • call read_int
  • mov input, eax
  • imul eax edxeax
    eax eax
  • mov ebx, eax save answer
    in ebx
  • mov eax, square_msg
  • call print_string
  • mov eax, ebx
  • call print_int
  • call print_nl

22
Contoh Program math.asm (3/5)
  • mov ebx, eax
  • imul ebx, input ebx input
  • mov eax, cube_msg
  • call print_string
  • mov eax, ebx
  • call print_int
  • call print_nl
  • imul ecx, ebx, 25 ecx ebx25
  • mov eax, cube25_msg
  • call print_string
  • mov eax, ecx
  • call print_int
  • call print_nl

23
Contoh Program math.asm (4/5)
  • mov eax, ebx
  • cdq initialize
    edx by sign extension
  • mov ecx, 100 can't divide
    by immediate value
  • idiv ecx edxeax /
    ecx
  • mov ecx, eax save quotient
    into ecx
  • mov eax, quot_msg
  • call print_string
  • mov eax, ecx
  • call print_int
  • call print_nl
  • mov eax, rem_msg
  • call print_string
  • mov eax, edx
  • call print_int
  • call print_nl

24
Contoh Program math.asm (5/5)
  • neg edx negate the
    remainder
  • mov eax, neg_msg
  • call print_string
  • mov eax, edx
  • call print_int
  • call print_nl
  • popa
  • mov eax, 0 return back to
    C
  • leave
  • ret

25
  • math.exe
Write a Comment
User Comments (0)
About PowerShow.com