Změna uložení big-endian na little-endian (47)
| D | = | adresa operandu v paměti |
| L | = | délka operandu v 16b slovech |
| [D] | ... | operand v paměti v uložení big-endian |
| DOUT | = | DIN + L |
| SOUT | = | SIN + L |
| WOUT | = | nedefinováno |
| LOUT | = | 0 |
| [DIN] | ... | operand v paměti v uložení little-endian |
| CF | = | 0 |
| ZF | = | (operand == 0)? 1 : 0 |
| SF, OF, AF | = | nedefinováno |
| PCOUT | = | PCIN + 1 |
RRCJSW: {
ECW CFS1 ECF, 1 , 0 , INTCHECK ; IR=10010000 instrukce RRC
, 0 , 0 , INTCHECK ; IR=10010001 nedef.
OED PES ECW , 2 , 0 , BEL ; IR=10010010 BEL prvni krok (S=W=D)
OEPC ECOUTWR ECSP, 0 , 0 , JSW ; IR=10010011 realizace instrukce JSW
}
BEL: OEL ECW ECF, 10, , ; W = D+L (preteceni pres okraj pameti nevadi)
OEL ECW ECF, 10, , ; W = D+2L (preteceni pres okraj pameti nevadi)
OEW PED ECF, 0, , ; v D je pointer na konec operandu, v S na zacatek, CF = 0; ZF = 1
BEL_TEST: , , 14, BEL_TESTED ; L == 0 ?
BEL_TESTED: {
ECD UDD OES OEAB, , , BEL_LOOP1 ; D-- a predstih pro cteni [S]
, , , INTCHECK ; konec cyklu
}
BEL_LOOP1: {
OES OEAB ECINL MRD, 0, 10, BEL_LOOP1 ; DINL = [S]
OEINZE PET, , , ; T = (byte)DINL
}
OED OEAB, , , BEL_LOOP2 ; predstih pro cteni [D]
BEL_LOOP2: {
OED OEAB ECINL MRD UCF, 0, 10, BEL_LOOP2 ; DINL = [D] a UCF => CZM pro kumulaci ZF
OET ECF UCF, 2, , ; kumulace ZF pro T (byte ze zacatku)
}
OEINZE ECF ECW, 2, , ; kumulace ZF pro DIN (byte z konce), zruseni CZM
OEINZE ECOUTWR, , , ; DOUT = DIN (pro zapis konce na zacatek)
OES OEAB OEWR, , , BEL_LOOP3 ; predstih pro zapis [S]
BEL_LOOP3: {
OES OEAB OEWR MWR, 0, 10 , BEL_LOOP3 ; zapis [S]
OES OEAB OEWR, , , ; presah pro zapis [S]
}
OET ECOUTWR, , , ; DOUT = T (pro zapis zacatku na konec)
OED OEAB OEWR, , , BEL_LOOP4 ; predstih pro zapis [D]
BEL_LOOP4: {
OED OEAB OEWR MWR, 0, 10 , BEL_LOOP4 ; zapis [D]
OED OEAB OEWR ECS ECL , , , BEL_TEST ; presah pro zapis [D]; S++, L--
}
VSTUP:
PC: 0000 L: 02 CF:0 RAM: 000A: 78
SP: 0000 F: 00 ZF:0 000B: 56
S: 0000 OF:0 000C: 34
D: 000A SF:0 000D: 12
W: 0000 DO: 0000 AF:0
U: 0000 DIL: 00 IF:0
T: 0000 DIH: 00
VÝSTUP::
PC: 0001 L: 00 CF:0 RAM: 000A: 12
SP: 0000 F: 00 ZF:0 000B: 34
S: 000C OF:0 000C: 56
D: 000C SF:0 000D: 78
W: 0034 DO: 0056 AF:0
U: 0000 DIL: 34 IF:0
T: 0056 DIH: 00
VSTUP:
PC: 0000 L: 01 CF:0 RAM: 0100: 00
SP: 0000 F: 00 ZF:0 0101: 00
S: 0000 OF:0
D: 0100 SF:0
W: 0000 DO: 000 AF:0
U: 0000 DIL: 00 IF:0
T: 0000 DIH: 00
VÝSTUP::
PC: 0001 L: 00 CF:0 RAM: 0100: 00
SP: 0000 F: 02 ZF:1 0101: 00
S: 0101 OF:0
D: 0101 SF:0
W: 0000 DO: 0000 AF:0
U: 0000 DIL: 00 IF:0
T: 0000 DIH: 00
VSTUP:
PC: 0000 L: 03 CF:0 RAM: 0000: 92
SP: 0000 F: 00 ZF:0 0001: 92
S: 0000 OF:0 ....
D: FFFC SF:0 FFFC: FC
W: 0000 DO: 0000 AF:0 FFFD: FD
U: 0000 DIL: 00 IF:0 FFFE: FE
T: 0000 DIH: 00 FFFF: FF
VÝSTUP:
PC: 0001 L: 00 CF:0 RAM: 0000: FD
SP: 0000 F: 00 ZF:0 0001: FC
S: FFFF OF:0 ....
D: FFFF SF:0 FFFC: 92
W: 00FF DO: 00FE AF:0 FFFD: 92
U: 0000 DIL: FF IF:0 FFFE: FF
T: 00FE DIH: 00 FFFF: FE
VSTUP:
PC: 0000 L: 00 CF:0 RAM: 0000: 92
SP: 0000 F: 00 ZF:0
S: 0000 OF:0
D: 0000 SF:0
W: 0000 DO: 0000 AF:0
U: 0000 DIL: 00 IF:0
T: 0000 DIH: 00
VÝSTUP:
PC: 0001 L: 00 CF:0 RAM: 0000: 92
SP: 0000 F: 02 ZF:1
S: 0000 OF:0
D: 0000 SF:0
W: 0000 DO: 0000 AF:0
U: 0000 DIL: 00 IF:0
T: 0000 DIH: 00
© 2006 Jan Skalicky
cz (dot) skalda (at) seznam (dot) cz