chapt 07 par ti solve

Upload: kaleem-chaudhary

Post on 06-Apr-2018

225 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/2/2019 Chapt 07 Par Ti Solve

    1/26

    Assembly Language for IntelAssembly Language for Intel--BasedBasedComputers, 4Computers, 4thth EditionEdition

    Chapter 7: Integer Arithmetic

    (c) Pearson Education, 2002. All rights reserved.

    Kip R. Irvine

  • 8/2/2019 Chapt 07 Par Ti Solve

    2/26

    Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 2

    Chapter OverviewChapter Overview

    Shift and Rotate Instructions

    Shift and Rotate Applications Multiplication and Division Instructions

    Extended Addition and Subtraction

    ASCII and Packed Decimal Arithmetic

  • 8/2/2019 Chapt 07 Par Ti Solve

    3/26

    Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 3

    Shift and Rotate InstructionsShift and Rotate Instructions

    Logical vs. Arithmetic Shifts

    SHL Instruction

    SHR Instruction

    SAL and SAR Instructions

    ROL Instruction

    ROR Instruction

    RCL and RCR Instructions

    SHLD/SHRD Instructions

  • 8/2/2019 Chapt 07 Par Ti Solve

    4/26

    Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 4

    LogicalLogical vsvs Arithmetic ShiftsArithmetic Shifts

    A logical shift fills the newly created bit position withzero:

    An arithmetic shift fills the newly created bit positionwith a copy of the numbers sign bit:

    CF

    0

    CF

  • 8/2/2019 Chapt 07 Par Ti Solve

    5/26

    Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 5

    SHL InstructionSHL Instruction

    The SHL (shift left) instruction performs a logical leftshift on the destination operand, filling the lowest bitwith 0.

    CF

    0

    Operand types:SHL reg,imm8

    SHL mem,imm8

    SHL reg,CLSHL mem,CL

  • 8/2/2019 Chapt 07 Par Ti Solve

    6/26

    Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 6

    Fast MultiplicationFast Multiplication

    mov dl,5shl dl,1

    Shifting left 1 bit multiplies a number by 2

    0 0 0 0 1 0 1 0

    0 0 0 0 0 1 0 1 = 5

    = 10

    Before:

    After:

    mov dl,5shl dl,2 ; DL = 20

    Shifting left nbits multiplies the operand by 2n

    For example, 5 * 22 = 20

  • 8/2/2019 Chapt 07 Par Ti Solve

    7/26

    Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 7

    SHR InstructionSHR Instruction

    The SHR (shift right) instruction performs a logicalright shift on the destination operand. The highest bitposition is filled with a zero.

    CF

    0

    mov dl,80

    shr dl,1 ; DL = 40shr dl,2 ; DL = 10

    Shifting right nbits divides the operand by 2n

  • 8/2/2019 Chapt 07 Par Ti Solve

    8/26

    Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 8

    SAL and SAR InstructionsSAL and SAR Instructions

    SAL (shift arithmetic left) is identical to SHL.

    SAR (shift arithmetic right) performs a right arithmetic

    shift on the destination operand.

    CF

    An arithmetic shift preserves the number's sign.

    mov dl,-80sar dl,1 ; DL = -40

    sar dl,2 ; DL = -10

  • 8/2/2019 Chapt 07 Par Ti Solve

    9/26

    Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 9

    Your turn . . .Your turn . . .

    mov al,6Bhshr al,1 a.

    shl al,3 b.

    mov al,8Ch

    sar al,1 c.

    sar al,3 d.

    Indicate the hexadecimal value of AL after each shift:

    35h

    A8h

    C6h

    F8h

  • 8/2/2019 Chapt 07 Par Ti Solve

    10/26

    Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 10

    ROL InstructionROL Instruction

    ROL (rotate) shifts each bit to the left

    The highest bit is copied into both the Carry flagand into the lowest bit

    No bits are lost

    CF

    mov al,11110000b

    rol al,1 ; AL = 11100001b

    mov dl,3Fh

    rol dl,4 ; DL = F3h

  • 8/2/2019 Chapt 07 Par Ti Solve

    11/26

    Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 11

    ROR InstructionROR Instruction

    ROR (rotate right) shifts each bit to the right

    The lowest bit is copied into both the Carry flag and

    into the highest bit No bits are lost

    CF

    mov al,11110000b

    ror al,1 ; AL = 01111000b

    mov dl,3Fh

    ror dl,4 ; DL = F3h

  • 8/2/2019 Chapt 07 Par Ti Solve

    12/26

    Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 12

    Your turn . . .Your turn . . .

    mov al,6Bhror al,1 a.

    rol al,3 b.

    Indicate the hexadecimal value of AL after each rotation:

    B5h

    ADh

  • 8/2/2019 Chapt 07 Par Ti Solve

    13/26

    Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 13

    RCL InstructionRCL Instruction

    RCL (rotate carry left) shifts each bit to the left

    Copies the Carry flag to the least significant bit

    Copies the most significant bit to the Carry flag

    CF

    clc ; CF = 0

    mov bl,88h ; CF,BL = 0 10001000brcl bl,1 ; CF,BL = 1 00010000b

    rcl bl,1 ; CF,BL = 0 00100001b

  • 8/2/2019 Chapt 07 Par Ti Solve

    14/26

    Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 14

    RCR InstructionRCR Instruction

    RCR (rotate carry right) shifts each bit to the right

    Copies the Carry flag to the most significant bit

    Copies the least significant bit to the Carry flag

    stc ; CF = 1

    mov ah,10h ; CF,AH = 00010000 1

    rcr ah,1 ; CF,AH = 10001000 0

    CF

  • 8/2/2019 Chapt 07 Par Ti Solve

    15/26

    Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 15

    Your turn . . .Your turn . . .

    stcmov al,6Bh

    rcr al,1 a.

    rcl al,3 b.

    Indicate the hexadecimal value of AL after each rotation:

    B5h

    AEh

  • 8/2/2019 Chapt 07 Par Ti Solve

    16/26

    Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 16

    SHLD InstructionSHLD Instruction

    Shifts a destination operand a given number of bits tothe left

    The bit positions opened up by the shift are filled bythe most significant bits of the source operand

    The source operand is not affected

    Syntax:

    SHLD destination, source, count

  • 8/2/2019 Chapt 07 Par Ti Solve

    17/26

    Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 17

    SHLD ExampleSHLD Example

    .data

    wval WORD 9BA6h

    .codemov ax,0AC36h

    shld wval,ax,4

    9BA6 AC36

    BA6A AC36

    wval AX

    Shift wval 4 bits to the left and replace its lowest 4 bits withthe high 4 bits of AX:

    Before:

    After:

  • 8/2/2019 Chapt 07 Par Ti Solve

    18/26

    Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 18

    SHRD InstructionSHRD Instruction

    Shifts a destination operand a given number of bits tothe right

    The bit positions opened up by the shift are filled bythe least significant bits of the source operand

    The source operand is not affected

    Syntax:

    SHRD destination, source, count

  • 8/2/2019 Chapt 07 Par Ti Solve

    19/26

    Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 19

    SHRD ExampleSHRD Example

    mov ax,234Bh

    mov dx,7654h

    shrd ax,dx,4

    Shift AX 4 bits to the right and replace its highest 4 bits withthe low 4 bits of DX:

    Before:

    After:

    7654 234B

    7654 4234

    DX AX

  • 8/2/2019 Chapt 07 Par Ti Solve

    20/26

    Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 20

    Your turn . . .Your turn . . .

    mov ax,7C36h

    mov dx,9FA6h

    shld dx,ax,4 ; DX =

    shrd dx,ax,8 ; DX =

    Indicate the hexadecimal values of each destination operand:

    FA67h

    36FAh

  • 8/2/2019 Chapt 07 Par Ti Solve

    21/26

    Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 21

    Shift and Rotate ApplicationsShift and Rotate Applications

    Shifting Multiple Doublewords

    Binary Multiplication Displaying Binary Bits

    Isolating a Bit String

  • 8/2/2019 Chapt 07 Par Ti Solve

    22/26

    Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 22

    Shifting MultipleShifting Multiple DoublewordsDoublewords

    Programs sometimes need to shift all bits within anarray, as one might when moving a bitmappedgraphic image from one screen location to another.

    The following shifts an array of 3 doublewords 1 bit tothe right (view complete source code):

    .data

    ArraySize = 3

    array DWORD ArraySize DUP(99999999h) ; 1001 1001...

    .code

    mov esi,0

    shr array[esi + 8],1 ; high dword

    rcr array[esi + 4],1 ; middle dword, include Carry

    rcr array[esi],1 ; low dword, include Carry

  • 8/2/2019 Chapt 07 Par Ti Solve

    23/26

    Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 23

    Binary MultiplicationBinary Multiplication

    We already know that SHL performs unsignedmultiplication efficiently when the multiplier is a powerof 2.

    You can factor any binary number into powers of 2.

    For example, to multiply EAX * 36, factor 36 into 32 + 4and use the distributive property of multiplication to

    carry out the operation:

    EAX * 36

    = EAX * (32 + 4)

    = (EAX * 32)+(EAX * 4)

    mov eax,123

    mov ebx,eax

    shl eax,5 ; mult by 25

    shl ebx,2 ; mult by 22add eax,ebx

  • 8/2/2019 Chapt 07 Par Ti Solve

    24/26

    Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 24

    Your turn . . .Your turn . . .

    mov ax,2 ; test value

    mov dx,ax

    shl dx,4 ; AX * 16

    push dx ; save for latermov dx,ax

    shl dx,3 ; AX * 8

    shl ax,1 ; AX * 2

    add ax,dx ; AX * 10

    pop dx ; recall AX * 16add ax,dx ; AX * 26

    Multiply AX by 26, using shifting and addition instructions.Hint:26 = 16 + 8 + 2.

  • 8/2/2019 Chapt 07 Par Ti Solve

    25/26

    Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 25

    Displaying Binary BitsDisplaying Binary Bits

    Algorithm:Shift MSB into the Carry flag; If CF = 1,append a "1" character to a string; otherwise, append a"0" character. Repeat in a loop, 32 times.

    mov ecx,32

    mov esi,offset buffer

    L1: shl eax,1

    mov BYTE PTR [esi],'0'jnc L2

    mov BYTE PTR [esi],'1'

    L2: inc esi

    loop L1

  • 8/2/2019 Chapt 07 Par Ti Solve

    26/26

    Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 26

    Isolating a Bit StringIsolating a Bit String

    The MS-DOS file date field packs the year, month,and day into 16 bits:

    DH DL

    Year Month Day

    9-15 5-8 0-4

    Field:

    Bit numbers:

    01 000 10 1 10 1 010 10

    mov ax,dx ; make a copy of DX

    shr ax,5 ; shift right 5 bitsand al,00001111b ; clear bits 4-7

    mov month,al ; save in month variable

    Isolate the Month field: