Hirdetés

Új hozzászólás Aktív témák

  • #95904256

    törölt tag

    válasz KMan #166 üzenetére

    Az SHLD parancsnak 3 operandusa van.
    formátum: SHLD céloperandus,forrás1,forrás2

    kezdeti állapot:
    AL = a7 a6 a5 a4 a3 a2 a1 a0 ; 8 bit
    BL = b7 b6 b5 b4 b3 b2 b1 b0 ; 8 bit

    SHLD AL,BL,3 ; 3 bites shiftelés

    a7 a6 a5 a4 a3 a2 a1 a0 b7 b6 b5 b4 b3 b2 b1 b0 ; <== SHLD balra shiftel

    eredmény:
    AL = a4 a3 a2 a1 a0 b7 b6 b5 ; 3 bites eltolás történt
    BL = b7 b6 b5 b4 b3 b2 b1 b0 ; a forrás opernadus nem változott

    a4 a3 a2 a1 a0 b7 b6 b5 b7 b6 b5 b4 b3 b2 b1 b0

    Természetesen az SHLD 3 operandusa lehet a CL regiszter is. Ekkor az abban tárolt számú bitet forgatja be a céloperandusba.

    Pl. egy 64 bites számot szeretnél shiftelni balra, akkor így teheted meg:
    mov eax,[felso32bit]
    mov ebx,[also32bit]
    mov cl,[bitekszama]
    shld eax,ebx,cl ;csak EAX módosult!
    shl ebx,cl ;EBX-et egy sima shift utasítással korrigáljuk
    mov [felso32bit],eax
    mov [also32bit],ebx

    [ Szerkesztve ]

Új hozzászólás Aktív témák