Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
22
Asembler.Wykładyićwiczenia
strachSP,AXiBXinastosie,podczaswykonywaniasiękodu;przyjmujemy,żepocząt-
kowystanrejestruSPmawartość1:
000
MOVAX,1
PUSHAX
MOV;X,2
PUSH;X
PUSHAX
PUSH;X
000
;prześlij1dorejestruakumulatoraAX
;odłóżnastoszawartośćrejestruAX
;prześlijdorejestruBXzawartość2
;odłóżnastoszawartośćrejestruBX
;odłóżnastoszawartośćrejestruAX
;odłóżnastoszawartośćrejestruBX
JeślizmieniamyrejestrSP,tozmieniamypołożeniewierzchołkastosuiwówczasmoże-
myszybkodoprowadzićdokatastrofy.Zmianynastosiemogąbyćdokonywanejedynieza
pomocąrozkazówoperującychnastosie.Zakażdymrazem,gdywywołujemypodprogramlub
wracamyzeńdoprogramu,stosjestużywany.Reasumując,modyfikacjęrejestruSPzostawmy
rozkazomoperującymnastosie,wywołaniomproceduripowrotomznichdoprogramów;nie
dokonujmybezpośredniejmodyfikacjizawartościtegorejestru.
2.3.
Rejestrysegmentowe
Podstawowąprzesłankąsegmentacjipamięcijestto,procesor8086mazdolnośćadre-
sowania1MBpamięci.20-bitowysposóbadresowaniapamięciwystarcza,bykażdakomórka
1MBpamięcizostałazaadresowana.8086używatylko16-bitowegowskaźnikadopamięci
(dlaprzykładunależyprzypomnieć,że16-bitowyrejestrBXmożebyćużytydowskazania
wpamięci).Jakwobectegopogodzić16-bitowewskaźnikiz20-bitowąprzestrzeniąadresową?
Odpowiedźjestnastępująca:procesor8086składapełny20-bitowyadreszdwóchczęści.
Każdy16-bitowywskaźnikluboffsetpamięcijestskładanyzzawartościąrejestrusegmento-
wegodoformypełnego20-bitowegoadresu.Wartośćsegmentujestprzesuwanao4pozycje
wlewo(mnożonaprzez16)idopierowówczasjestdodawanadooffsetu,takjakpokazanotona
rysunku.
Weźmypoduwagęnastępującyprzykład:
000
MOVAX,1000H
MOVDS,AX
MOVSI,201H
MOVDL,[SI]
000
;prześlij1000hdorejestruakumulatoraAX
;prześlijzrejestruAXdorejestrusegmentowegoDS.
;prześlij201hdorejestruSI
;prześlijdorejestruDLzaw.pamięcispodadresuDS:201h
DorejestruDLładowanajestwartośćspodadresu((DS*16)+SI),czyliwtymprzykładzie
((1000H*16)+201H)=10000H+201H=10201Hszesnaście(dziesiętnie)wsystemieszesnastko-
wymmawartość10H.
Poprzedni,ogólnyschematadresowanianabierzeterazkonkretnejtreściwsposóbpo-
kazanynarysunku2.4.
Podczasprogramowaniamusimyzawszeużywaćadresupamięciwpostacipary
SEGMENT:OFFSET.Wszystkierozkazyitrybyadresowaniaprocesora8086domyślnie
odnosząsiędojednegolubwielurejestrówsegmentowych,jednakżeniektórerozkazymogą
byćjawnieprzypisanedotakiegorejestrusegmentowego,jakiegosobieżyczymy.Rzadko