Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
56
7:
AAD
8:
DIVDL
2.Podstawyprogramowaniaprocesorówrodzinyx86wtrybierzeczywistym
;Wykonaniekorekcjidzielnejprzedoperacjądzielenia
;RejestrAXzawieraterazwartość18h
;DzielenierejestruAXprzezDL
2.2.7.Zmianarozmiaruliczby
Wprogramachczęstowystępujekoniecznośćzwiększeniarozmiaruliczbyzbajtudo
słowa,zesłowadopodwójnegosłowaorazzpodwójnegosłowadopoczwórnegosłowa.
Zwiększenierozmiaruliczbyzależyodtego,czyjesttoliczbabezznaku,czyzeznakiem
(wkodzieU2).Zwiększenierozmiaruliczbybezznakuodbywasięprzezuzupełnienie
starszejczęściliczbyzeramiimożezostaćwykonanewdwojakisposób.
PierwszypoleganaużyciuspecjalnejinstrukcjiMOVZX(ang.MoveWithZero-
Extend),któraprzenosimniejszyoperandźródłowydooperandudocelowego.Załóż-
my,żekoniecznejestumieszczeniewartościrejestruCLwrejestrzeAX:
MOVZXAX,CL
Drugipoleganabezpośrednimwyzerowaniuprzezprogramistęstarszejczęścireje-
stru.Rozszerzenieliczby8-bitowej,zapisanejwrejestrzeAL,doliczby16-bitowej,zapisa-
nejwrejestrzeAX,poleganawpisaniuwartościzerodorejestruAH,awykonanieoperacji
dodawaniaBX:=BX+ALwymagawykonanianastępującychinstrukcji:
MOVAH,0;
ADDBX,AX
rozszerzeniebezznaku
Zwiększenierozmiaruliczbyzeznakiem,zapisanejwkodzieU2,poleganauzupeł-
nieniustarszejczęściliczbyzerami,gdyliczbajestdodatnia,orazjedynkami,gdyliczba
jestujemna.Dotejoperacjisłużąnastępująceinstrukcjeprocesorówx86:
CBW;ALAX
CWD;AX(DX,AX)
CWDE;AXEAX
CDO;EAX(EDX,EAX)
(konwersjabajtudosłowa)
(konwersjasłowadopodwójnegosłowa)
(konwersjasłowadopodwójnegosłowa)
(konwersjapodwójnegosłowadopoczwórnegosłowa)
InstrukcjeCBW,CWDorazCDOstosowanedorozszerzeniadzielnejdlainstrukcji
dzieleniaIDIV.
Wartoprzedstawićdodatkowąinstrukcjęwprowadzonąwrazzprocesorem80386
MOVSX(ang.MoveWithSign-Extend).Jejdziałaniepowodujeprzeniesieniemniejszego
operanduźródłowegodowiększegodocelowego,zrównoczesnymwypełnieniemstar-
szejczęścioperandubitemznaku.AbyumieścićwrejestrzeCXrozszerzonąwartość
rejestruAL,należyzapisać:
MOVSXCX,AL