SHLD/SHRD - instrukce dvojitého posuvu

Z Delphi & Pascal (česká wiki)
Verze z 24. 1. 2013, 17:28, kterou vytvořil Zdeno Sekerák (diskuse | příspěvky)
(rozdíl) ← Starší verze | zobrazit aktuální verzi (rozdíl) | Novější verze → (rozdíl)
Skočit na navigaci Skočit na vyhledávání
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