120 likes | 271 Views
8086 Samesteller: Adressering. Die Datasegment): MOV instruksies Die Kodesegment: JMP instruksies Die Stapelsegment: PUSH en POP instruksies. ADRESSEER MODUSSE [Hoofstuk 3.1]. OOMBLIKLIK (IMMEDIATE) Die data is deel van die instruksie. BV: MOV AX,1000H
E N D
8086 Samesteller: Adressering • Die Datasegment): MOV instruksies • Die Kodesegment: JMP instruksies • Die Stapelsegment: PUSH en POP instruksies Lesing3
ADRESSEER MODUSSE [Hoofstuk 3.1] OOMBLIKLIK (IMMEDIATE) Die data is deel van die instruksie. BV: MOV AX,1000H Die getal 1000H word in AX geplaas. Die objekkode in die geheue is B8 MOV AX, 00 10 1000H Dit lyk of die laaste twee grepe verkeerdom is, maar dit is as gevolg van die ("little endian")konvensie om die mees belangrike greep by die hoogste adres te plaas. Lesing3
REGISTER ADRESSERING Hier is die geheue nie betrokke nie. Data word slegs tussen registers beweeg: BV MOV AX,8010H (Oombliklik) MOV DS,AX (Register) DS bevat nou die woord 8010H. LW Data kan nie oombliklik in 'n segmentregister (CS, DS, ES, SS) gelaai word nie. Registeradressering oorkom hierdie beperking - soos hier getoon. Lesing3
DIREK Die adres van die data word direk gegee as deel van die instruksie. BV: MOV AX,[23F8H] (Onthou die [ ] !!!) Die woord by adres 23F8 + DS*16 word in AX geplaas. MOV AL,[23F8H] Die greep by adres 23F8 + DS*16 word in AL geplaas. MOV AH,[MEMBDS] Die greep by adres MEMBDS + DS*16 word in AH geplaas. MEMBDS is die naam van 'n veranderlike. 'n Veranderlike naam is egter slegs 'n adres in die geheue. Die [ ] is in hierdie geval opsioneel. Lesing3
REGISTER INDIREKTE ADRESSERING Hier word registers gebruik om die adres te spesifiseer: BV: MOV AX,[BX] Die woord by adres BX+DS*16 word in AX geplaas. Enige van die volgende registers kan gebruik word vir adressering van data in die datasegment: BX,SI,DI BASIS PLUS INDEKS REGISTER ADRESSERING MOV AX,[BX][SI] Die woord by adres BX+SI+DS*16 word in AX geplaas DI kan in die plek van SI gebruik word. Lesing3
BASIS PLUS INDEKS PLUS RELATIEWE AFSET MOV AX,[BX][SI][4] Die woord by adres BX+S+4I+DS*16 word in AX geplaas DI kan in die plek van SI gebruik word. LW Ons behandel slegs 8086 formate. Dus nie die "scaled index" formaat nie. Lees hoostuk 3.1 deur. Ignoreer gedeeltes wat nie op die 8086 van toepassing is nie. Lesing3
OEFENING ADRES DATA 10C50H 7EH 10C51H F8H 10C52H EBH 10C53H 29H 10C54H AAH 10C55H 00H 10C56H 55H 10C57H 12H DS = 10C4H BX=10H SI=11H DI=2H Gestel die geheue en registers bevat bostaande data. Bepaal wat AX (of AL) na elk van die onderstaande instuksies bevat: MOV AX,[BX] MOV AL,[BX] MOV AL,[SI] MOV AX,[BX][DI] MOV AL,[BX][DI][4] Lesing3
SPRONGE [Hoofstuk 3.2] Die MOV instruksie word gebruik om data in die datasegment te manipuleer. Die instruksies word in die kodesegment gestoor. Ons sal hoofsaaklik onderstaande tipe spronge gebruik en keer later terug na indirekte spronge soos JMP AX wat in hoofstuk 3.2 beskryf word. JMP LABL1; (* IP <= IP + (LABL1 - IP) *) Maksimum sprong vir 'n 'SHORT' JMP : +127 tot - 128 JMP NEAR LABL1; (* IP <= LABL1 *) Spring na enige plek binne die segment. JMP FAR LABL1; (* IP <= OFFSET LABL1 CS <= SEGMENT LABL1 *) Lesing3
DIE STAPEL [Hoofstuk 3.3] Die stapel ("stack" ) segment word gebruik as 'n tydelike stoorarea. Die push en pop instruksie word gebruik om die stapel as laaste in eerste uit ("Last-in-first-out" LIFO) geheue te benut. Die segmentregister is SS. In die geval van PUSH en POP word die SP register gebruik as afsetadres. SP word outomaties gedekrementeer en geïnkrementeer deur PUSH en POP onderskeidelik. Slegs 16-bis registers kan op die stapel geplaas word deur die PUSH instruksie. Lesing3
Voorbeeld: PUSH AX : SP <= SP-2 [SS:SP]<=AX POP AX: AX <=[SS:SP] SP<=SP+2 Laat SP = 2000H AX = 0E2H SS = 8000H BX = 02DH PUSH AX ;[80000+1FFE] <= E2H PUSH BX ;[80000+ 1FFC] <= 2DH . . POP BX ;BX <= [80000 + 1FFC] POP AX ;AX <= [80000 + 1FFE] AX en BX kan dus in die tussenstappe gebruik word en weer herstel word deur die POP instruksies. Let op die volgorde! Lesing3
WENKE Die belangrikste is dat jy allesverstaan. 'n Mens kan nie maklik in die hierdie vak wegkom met 'n vae idee van wat aan die gang is nie. Maak dus seker dat jy na elke Tutoriaal 100% weet hoe dit werk! Jy behoort dan min probleme met die toetse en eksamens te ondervind. Ek sal altyd bereid wees om studente te help wat hard werk, maar dan moet hulle ook betyds kom aanklop vir hulp - met byna 150 studente in die vak gaan dit nie help as jy wag tot net voor die toets of eksamen nie. Die volgende tye is by voorkeur beskikbaar vir studente met vrae: Donderdag 12:00 - 13:00 Vrydag 11:00 - 12:00 Vrydag 14:00 - 15:00 Laat weet asseblief vooraf per Epos as jy my tydens hierdie tyd wil sien - as ek van niemand hoor nie benut ek die tyd vir ander dinge. As jy een of ander krisis het wat jou werk affekteer, is jy welkom om my op ander tye te kom sien. Lesing3
Dinge om te probeer: Speel rond met die mov instruksies. Pas dit toe op die tutoriaalprogram en kyk of dit werk soos jy verwag. Lesing3