Papp Róbert

SZámítógép ARchitektúra jegyzet 2005/I.

(Bartók Tamás / Szerda 16:00-17:00)
4. gyakorlat - 2005. 10. 05.

Regiszterek

Szegmens meghatározás (mimi.hu): a cím felső 8 bitje (beágyazott sorszám) jelöli ki a fizikai címet tartalmazó táblázatsort. Minden regiszter 16 bites. Minden szegmens 64 kilobyteos

Általános célú regiszterek: AX, BX, CX, DX

AX - (accumulator) akkumulátor, kiemelt jelentőségű, központi szerepe van. Bizonyos utasítások csak erre vonatkoznak.
BX - (base) bázisregiszter, egy alapcímhez képesti relatív eltérések kijelölése a fő funkciója.
CX - (counter) számlálóregiszter, elsődlegesen az ismételni kívánt utasítások esetén van szerepe (ciklus érték).
DX - (data) adatregiszter, főként adatok byte-jainak kijelölésére szolgál. Fontos szerepe van az I/O utasításokban.

Van alsó és felső fele, például:
AX (16 bit)
AH (8 bit) AL (8 bit)
11001010 01011000
AH = A regiszter High bájtja (magas [helyiértékű])
AL = A regiszter Low bájtja (alacsony [helyiértékű])

Szegemens-regiszterek: DS, CS, ES, SS

DS: Data Segment: adat szegmens, az adatok tárolására szolgáló szegmens címét tartalmazza.
CS: Code Segment: kód szegmens, arra a szegmensre mutat, amelyben a program következő utasítása található.
ES: Extra Segment: másodlagos adatszegmens, ha nem férünk DS-ben.
SS: Stack Segment: verem szegmens, a verem kezdőszegmensének címét tartalmazza.

Mutató-regiszterek (Pointer): SP, BP, IP

SP Stack Pointer, a verem teteje a verem szegmensen belül, SS:SP a verem tényleges teteje
BP Base Pointer (tömbökhöz)
Az IP Instruction Pointer fogja megmutatni hogy mi a végrehajtandó utasítás, a processzor a következő IP által mutatott utasítást a CS:IP-n fogja keresni.

Indexregiszterek: SI, DI

SI, DI indexkezelők, (stringekhez)

Egyéb: FLAGS/SR

FLAGS: 1 bit = flag, a flagnek logikai értéke van (boolean) igaz/hamis, amit 1/0 reprezentál
of = Overflow Flag (túlcsordulás)
cf = Carry Flag (átvitel)
zf = Zero Flag (0-e az előző művelet eredménye?)
df = Direction Flag (a stringek olvasási iránya)

Verem működése

LIFO = Last In First Out, az utoljára betett értéket lehet először kiszedni

Verem felépítése:
               
               
               
               
SP ->
               
               
               
SS ->
               

Veremebe tevés: PUSH op
  1. SP = SP - 2
  2. SS:SP = op
Veremből előszedés: POP op
  1. op = SS:SP
  2. SP = SP + 2
A verem magasság = a benne levő adatok mennyiségével.
Ha a verem mérete = magasság, akkor azt jelenti, hogy tele van a verem.

Alapvető regiszterkezelő utasítások

MOV op1, op2 ;op1 = op2
op1 és op2 Általános regiszterek, op1 != CS, csak op2 lehet konstans
Általános regiszterek: Általános célú regiszterek, Indexregiszterek és Mutató-regiszterek (csak SP és BP)
XCHG op1, op2 ;op1 <-> op2
op1 és op2 méretének azonosnak kell lennie
Példák:
XCHG AL, CX ;nem jó, mert AL 8 bites és CX 16 bites
XCHG AX, DS ;nem jó
XCHG AX, IP ;nem jó, mert az IP-t nem használhatjuk közvetlenül
XCHG AX, BX ;jó

Címzések

MOV AX, BX != MOV AX, [BX]
[BX] = DS:BX által mutatott címről fog bemásolódni az adat AX-be
Az alapértelmezett szegmensregiszter a DS (Default Segment Register), kivéve, ha a címzésben van BP, mert akkor SS lesz.

Bázisregiszter Indexregiszter Eltolás (Displacement)
BX SI 8 bit
BP DI 16 bit
nincs nincs nincs
Minden oszlopból pontosan egy értéket lehet kiválasztani! És az értékeke között összeadás lesz: Bázisregiszter + Indexregiszter + Eltolás

A következő példák ugyanazt jelentik:
MOV AX, [BP+SI+1234h]
MOV AX, [BP][SI]1234h
MOV AX, [BP][SI+1234h]
...

ZH Típuspélda:

DS=ABCDh, SS=3421h, ES=2ABCh
DI=3410h, SI=3333h, BP=1001h, BX=1230h

MOV [BX+1000h],AX;[DS*10h+BX+1000h] = ABCD:2230h <- AX
MOV ES:[BP],AX;Az alapértelmezett SS-t felülbírálja ES-sel (override)
MOV AX,11;Jó-e? Igen
MOV 11,AX;Jó-e? Nem, mert az op1 nem lehet konstans
MOV [AX],BX;Jó-e? Nem, mert AX nem hasztnálható címzéshez [táblázat]
MOV ES:[BX+DI],[SI+120h];Jó-e? Nem, mert egyik op sem általános regiszter, pedig az egyiknek muszáj annak lennie
MOV [SI+DI],AX;Jó-e? Nem, mert SI és DI nem lehet együtt, egy oszlopból csak egyet lehet választani!
XCHG AH,AL;Jó-e? Igen
© All rights reserved by TWiStEr & PaulikR. Köszönöm -[PaulikR]-nek a segítséget!