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