Papp Róbert

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

(Bartók Tamás / Szerda 16:00-17:00)
8. gyakorlat - 2005. 11. 09.

Elrettentő példák (Ezeket érdemes kerülni, vagy bux :)

XCHG ES:[BP+IP], ALHelytelen, mert nem azonos a méret (nem igaz, mert az AL határozza meg a méretet)
Az IP-t nem lehet közvetlenül használni!!!
XOR CS, CSMinimum egy általános regiszter (Szegmens regisztert csak PUSH POP MOV kaphat)
XCHG [BX], DS:[BX+DI]54hMinimum egy általános regiszter kell
MOV [BX+BP+16h], SINincs általános regiszter (de van SI)

NagyZH: December 2. péntek 14:00 Kiss Árpád terem

Ciklusszervező utasítások

LOOP címkeHA CX!=0 CÍMKE
LOOPZ=LOOPE címkeHA CX!=0 && ZF=1
LOOPNZ=LOOPNE címkeHA CX!=0 && ZF=0
CX-=1; HA CX=0 AKKOR ugrás címke
;Eddig így csináltuk:
DEC CX
CMP CX,0
JNE címke

Stringkezelő utasítások

DF=0Byte esetén: SI+=1, DI+=1Direction Flag
Word esetén: +=2
DF=1Byte esetén: SI-=1, DI-=1Direction Flag
Word esetén: -=2
STDDF<-1SeT Direction Flag
CLDDF<-0CLear Direction Flag

NévMűveletRövidítésSIDIFLAGS
MOVSB(DS:SI)->(ES:DI) (1 byte)MOVe String Byte++-
MOVSW(DS:SI)->(ES:DI) (2 byte)MOVe String Word++-
LODSBAL <- (DS:SI)LOaD String Byte+--
LODSWAX <- (DS:SI)LOaD String Word+--
STOSBAL -> (ES:DI)STOre String Byte-+-
STOSWAX -> (ES:DI)STOre String Word-+-
CMPSB(DS:SI)-(ES:DI) (1 byte)CoMPare String Byte+++
CMPSW(DS:SI)-(ES:DI) (2 byte)CoMPare String Word+++
SCASBAL-(ES:DI)SCAn String Byte+-+
SCASWAX-(ES:DI)SCAn String Word+-+
Source: (DS:SI), Destination: (ES:DI)
+ = Változik, - = Nem Változik

Ismétlő utasítások

REP===REPE===REPZ és REPNE===REPNZ utána levő utasítást hajtja végre CX alapján: Csökkenti CX-et és megnézi, hogy =? 0, ha REPE, akkor addig csinálja, amíg nem 0, ha

Feladatok

1. S byteokbol álló n hosszú string, minden bájtja legyen 'A'

MOV DI, offset S ;LEA DI,[S]
MOV AL, 'A'
MOV CX, n
REP STOSB
C-bem:
do {
	STOSB;	// ES:DI=AL, DI++
	CX--;
} while (CX > 0);

2. Keressük meg a bájtokból álló n hosszú stringben az első 'A' karaktert

MOV DI, offset S ///LEA DI,[S]
MOV AL, 'A'
MOV CX, n
REPNZ SCASB
C-bem:
do {
	talalt=SCASB;	// ES:DI==AL, DI++
	cx--;
} while (!talalt && cx > 0);

3. Két n hosszú szavas string (S és T)-ben keressük meg az első különbőzőséget

MOV SI offset S
MOV DI offset T
MOV CX,n
REPZ CMPSW
;Kiír CX
© All rights reserved by TWiStEr & PaulikR. Köszönöm -[PaulikR]-nek a segítséget!