SHLD/SHRD - instrukce dvojitého posuvu
- Instrukce
- SHLD/SHRD - instrukce dvojitého posuvu
- Časování
- 3-7
- Popis
- Instrukce SHLD/SHRD posouvají operand reprezentujíci číslo v dvojité přesnosti doleva nebo doprava tak, aby vzniklo číslo v jednoduché přesnosti. Registr nebo hodnota paměťového místa je posunutá v závislosti na hodnote v trětím operandu instrukce který je čítačem. Tento posuv se líši od posuvu u čísel v jednoduché přesnosti v tom, že dvojitý posuv používa registrový operand pro specifikaci bitů, které se mají posouvat, zatímco jednoduchý posuv přesouva jen nuly nebo jedničky. Registr nebo paměťové místo (reg/mem) specifikuje vstupní operand. Registr (reg) specifikuje bity, které mají být vsunuty a třetí operand (immediate/CL) obsahuje počet posuvu.
- Pro SHLD obsahuje registr nebo paměťový operand vyšší bity čísla v dvojité přesnosti a registr (druhý operand) obsahuje nižší bity čísla. První operand je posunut doleva, přičemž vyšší bity druhého operandu jsou vsunutý doprava (na místo nižšího řádu). Výsledek je uložen v prvním operandu.
- Pro SHRD obsahuje registr nebo paměťový operand nižší bity čísla ve dvojité přesnosti a registrový (druhý) operand obsahuje vyšší bity. První operand je posunut doprava a nižší bity registrového operandu jsou vsunuty doleva (na místo vyššího řádu). Výsledek je uložen v prvním operandu.
- Syntaxe
- SHLD reg/mem, reg, immediate_operand
- SHLD reg/mem, reg, CL
- Ovlivňuje příznaky
- CF je nastaven na hodnotu posledního vysouvaného bitu OF je nastaven jestliže posunutí posledního bitu způsobilo přetečení SF, ZF a PF jsou nastaveny podle hodnoty výsledku.
- Nedefinované příznaky
- AF
- Příklad
SHLD AX, BL, 0AH ; 0AH = bezprostrědní operand SHRD AL, BL, CL ; CL = počet posuvu