peperonity.net
Welcome, guest. You are not logged in.
Log in or join for free!
 
Stay logged in
Forgot login details?

Login
Stay logged in

For free!
Get started!

Text page


sypsniux.peperonity.net

egzo pvz

Mikroprogramavimo kalba (MPL)

-48, -42, -8, -6, -3, -2, 0, 34, 16382, 16383, beslyginis valdymas


Nusisti -48 MBR 2 komandom

1) X = 15; D = LEFT_SHIFT (COM (1) + COM (1)); // X = 15, D = -8
2) MBR = LEFT_SHIFT (COM (X) + D); // COM (X) = 16, MBR = (-8 + (-16))*2 = -48

Ats.:
1) X = 15; D = LEFT_SHIFT (COM (1) + COM (1));
2) MBR = LEFT_SHIFT (COM (X) + D);.


Dviem komandomis ra?yti de?imtain skaii -42 registr MBR.

1) X = 15; D = LEFT_SHIFT(1 + 1); // X = 15, D = -4
2) MBR = LEFT_SHIFT(COM(X) + COM(D)); // COM (15) = -16, COM (4) = -5

Ats.:
1) X = 15; D = LEFT_SHIFT(1 + 1);
2) MBR = LEFT_SHIFT(COM(X) + COM(D));

ra?yti -8 MBR per vien komand

1) MBR = LEFT_SHIFT (COM (1) + COM (1)); // COM (1) = -2, -2 + (-2) = -4, -4 * 2 = -8

Ats.:
MBR = LEFT_SHIFT (COM (1) + COM (1));

ra?yti -6 MBR per vien komand

-6 =..111010
COM(1)
...11110
+...11111
=...11101
LEFT_SHIFT(...11101) ->...111010

Ats.:
MBR = LEFT_SHIFT (COM (1) + (-1));


Parasyti mikrokomanda, kuri registre MBR suformuoja reiksme -3, nenaudojant skaitymo is
atminties


11

-3(dec) = 11111101(bin)
COM(1): 11111110
LEFT_SHIFT: 11111100
+1: 11111101

Ats.:
MBR = LEFT_SHIFT (COM (1)) + 1;


Para?yti mikrokomand MPL kalba be konstant ir registr, kuri MBR ra?o -2.

COM(REG) invertuoja registro REG bitus (0 pakeiia 1, ir atvirk?iai). Taigi MBR + COM(MBR),
kad ir kokia pradin MBR reik?m bebt, gr?ins 1111111111111111 (registras MBR yra
?e?iolikos bit). Paslink ?i reik?m kair per vien bit gausime 1111111111111110. Tai ir yra
skaiius -2 (papildomu kodu), nes 1111111111111110 + 0000000000000010 = 0 (16-oje bit).
Pra?om si?irti "ms" Mikroprograminio lygio architektr (doc. A. Mita?ino "Kompiuteri
architektra", 16 psl.), u?ra?as MBR = LEFT_SHIFT(MBR + COM(MBR)); MPL kalba reik? 6-os,
15-os, 29-os, 30-os ir 36-os magistrali atidarym atitinkamais pocikliais.
COM - complement (pakeisti, invertuoti).

Ats.:
MBR = LEFT_SHIFT (COM (MBR) + MBR);


Nesinaudojant konstantiniais registrais irasyti i MBR 0

Sprendimas
MBR =COM (MBR) + MBR;
MBR =COM (MBR) + COM (MBR);

Cia naudojame dvi gudrybes: COM (MBR) + MBR = -1 ir COM (MBR) = 0.
Kadangi nera antro tokio registro susieto su dviejais sumatoriaus iejimais, rezultata ishsaugome
MBR.

Ats.:
1) MBR = COM (MBR) + MBR;
2) MBR = COM (MBR) + COM (MBR);

ra?yti 34 MBR dviem komandomis

Vis pirma, reikia suprasti, k rei?kia pasakymas "dviem komandomis". MPL kalba u?ra?yta viena
eilut rei?kia vien komand. Ta viena komanda turi bt vykdoma per vien cikl. Pvz. negalima
komanda MBR = A + D; MBR = MBR + C; nes tam reikia dviej cikl (reikt ra?yti dviejose
eilutse - dviem komandomis).
O ra?yti 34 MBR galima taip:
X = 15; D = 1 + 1;
MBR = LEFT_SHIFT(X + D);

Pastaba: vietoje registro D negaljome naudoti jokio kito registro, nes:
1) registras X yra sujungtas tik su kairiuoju sumatoriaus jimu, taigi kitas dmuo turi bti sujungtas
su de?iniuoju (?irti schem 16 psl.), o tokie registrai yra tik C, D, MBR ir konstantiniai.

12

2) taiau nra magistrals jungianios registr C su sumatoriaus I?JIMU, taigi jam nieko negalima
tiesiogiai priskirti (negaltume u?ra?yti C = 1 + 1)

Tiems, kas dar nesuprato: perstumti bitus kair - tai tas pats, kas reik?m dauginti i? 2, nes visi
bitai perstumiami "per vien dvejeto laipsn". Perstumti bitus de?in - tas pats, kas reik?m dalinti
i? dviej be liekanos.

Ats.:
1) X = 15; D = 1 + 1;
2) MBR = LEFT_SHIFT (X + D);


U?ra?yti MPL komand, ra?ani de?imtain skaii 16382 registr MBR.

Vis pirma, kadangi reikia ra?yti didel skaii, tai jau ai?ku, kad ka?kas bus daroma su
konstantiniu registru SIGN :)

SIGN = 1000000000000000 = -32768
COM(SIGN) = 0111111111111111 = 32767

COM(1) = -2

COM(SIGN) + COM(1) = 32765

Visa tai padalinus i? dviej (be liekanos), gausime tai, ko reikia. RIGHT_SHIFT btent ir veikia
kaip dalyba i? dviej be liekanos.
Taigi pilna komanda: MBR = RIGHT_SHIFT(COM(SIGN) + COM(1))

Ats.:
MBR = RIGHT_SHIFT (COM (SIGN) + COM(1));


Para?yti mikrokomand, kuri skaii 16383 nusiunia i registr MBR.

Ats.: MBR = RIGHT_SHIFT (SIGN + (-1)) arba MBR = RIGHT_SHIFT (COM (SIGN) + 0)

7. Parasyti mikrokomanda, kuri skaiciu 16383 nusiuncia i registra MBR.
Ideja tokia siunciame i kairiji sumatoriu SIGN(1000000000000000) ir ji
invertuojame (0111111111111111(bin)=32767(dec)) ir gauta rezultata
pastumiame i desine, t.y div 2 (0011111111111111111(bin) = 16383). Tai butu
MBR = RIGHT_SHIFT(COM(SIGN) + 0).

7. Para?yti mikrokomanda, kuri skaiciu 16383 nusiuncia i registra MBR.

(abiem variantam tas pats?)

Ats:
MBR = RIGHT_SHIFT (SIGN + (-1));
arba
MBR = RIGHT_SHIFT (COM (SIGN) + 0);



13

Para?yti beslyginio valdymo perdavimo mikrokomand.

Ats.:
GOTO label;


7. Parasyti mikrokomanda, kuri i registrus A ir D nusiuncia
sesioliktaine reiksme 8001.

Mano versija:
D = (SIGN + 1); A = D;



14

Po?ymi registras SF (Status Flag)


Registras SF = 0000. Sudties komanda prie de?imtains reik?ms 222 pridedama de?imtain
reik?m 98. U?ra?yti nauj SF reik?m.

Ats.:
SF = 0011h.


Registras SF = 0000. Atimties komanda i? de?imtains reik?ms 99 atimama de?imtain reik?m -
33. U?ra?yti nauj SF reik?m.

Ats.:
SF = 0895h.


Registras SF = 0000. Duotos dvi de?imtains reik?ms: 99 ir -33. Atliekama operacija CMP.
U?ra?yti nauj SF reik?m.

Ats.:
SF = 0895h.

// Nustatant SF, atminties komanda ekvivalenti CMP.


Registras SF=0000.
Baitu sudties komanda prie 10-taines reik?ms 247 yra prideda 10-aine reik?m 137. Pagal
rezultat suformuoti SF

Sprendimas
Sk.bezenklo - sk.suzenklu - binary
247 = -9 - 11110111
137 = -119 - 10001001

1) Ziurime skaiciu be zenklo suma: 247+137=384 - iseina uz ribu (ribos sk.be zenklo yra 0..256),
rejshkias CF=1;
2) Ziurime sk. su zenklu suma: -9 + -119=-128 - neiseina uz ribu (ribos sk. su zenklu yra -128..127),
rejshkias OF=0;
3) Sudedam binary mode kad nustatyti likusius flagus:

1111 0111
+ 1000 1001
=11000 0000 -> SF =1(zenklo bitas =1), ZF=0(atsakymas 0) ; AF=1 (perne?imas i? jaunesnio
pusbaiio buvo), PF=0 (nes vienetu skaicius atsakyme nelyginis).

Prisimename SF format
F E D C B A 9 8 7 6 5 4 3 2 1 0
x x x x OF DF IF TF SF ZF x AF x PF x CF

15

i? salygos ir sprendimo
SF= 0000 0000 1001 0001 ~ 0091h

Ats.:
0091h


U?duotys:

a) Registras SF=0000. Sudties komanda prie de?imtains reik?ms 69 pridedama de?imtain
reik?m 99. U?ra?yti nauj SF reik?m.
b) Registras SF=0000. Sudties komanda prie de?imtains reik?ms 103 pridedama de?imtain
reik?m 111. U?ra?yti nauj SF reik?m.
c) Registras SF=0000. Sudties komanda prie de?imtains reik?ms 236 pridedama de?imtain
reik?m 138. U?ra?yti nauj SF reik?m.
d) Registras SF=0000. Sudties komanda prie de?imtains reik?ms 249 pridedama de?imtain
reik?m 138. U?ra?yti nauj SF reik?m.
e) Registras SF=0000. Sudties komanda prie de?imtains reik?ms 88 pridedama de?imtain
reik?m -44. U?ra?yti nauj SF reik?m.
f) Registras SF=FFFF. Sudties komanda prie de?imtains reik?ms -138 pridedama de?imtain
reik?m -145. U?ra?yti nauj SF reik?m.
g) Registras SF=0000. Sudties komanda prie de?imtains reik?ms -119 pridedama de?imtain
reik?m 122. U?ra?yti nauj SF reik?m.
h) Registras SF=0000. Atimties komanda i? de?imtains reik?ms 99 atimama de?imtain
reik?m -33. U?ra?yti nauj SF reik?m.



16

JMP


AX = 0003, BX = 0000, CX = 0001, DX = 0000.

FFFA EB A1 JMP number

valdymo perdavimo adresas?

Sprendimas
FFFCh - IP reik?m(nes kadangi komanda 2 bait ilgio, o IP rodo i sekancia komanda), EBA1h -
opkodas su operandais (2 baitai).

EBh - JMP NEAR (vidinis artimas) su 1 baito poslinkiu.
IP lygus IP + poslinkis i?plstas iki 2 bait. A1h 1 baite (-95) -> FFA1h 2 baituose.

FFFCh
+FFA1h
______
1FF9Dh
Suma?iname iki IP registro dyd?io (2 baitai)

Ats.:
FF9Dh


AX = 0003, BX = 0002, CX = 0001, DX = 0000.

B901 EB80 jmp number.
koks sekancios komandos adresas?

Sprendimas
B901 - IP registro reik?m, EB80 - opkodas ir operandai.

n?n ar "jmp number" yra nurodyta slygoje, todl nagrinju opkoda. EB tai JMP NEAR (vidinis
artimas) su vieno baito poslinkiu. Todl 80 yra poslinkis.

Dmesio!!! 80h u?ra?ius viename baite, gauname skaii su ?enklu papildomu kodu. IP yra 2 bait
dyd?io. I?pliame 80h (-128) iki 2 bait, gauname FF80h (-128).

Valdymo perdavimo adresas bus IP +FF80h.

Kita nuomone/papildymas: IP +FF80h yra teisinga, bet reikia tureti omeny, kad vykdant komanda
IP rodo i sekancia komanda (musu komanda 2B ilgio), todel IP + FF80h = B901h + 2h + FF80h =
B883

Ats.:
B883h



17

8EDC E9 12 34 jmp SKIP

Ats.: 8EDC + 1234 + 3 = (ATS: A113)


9854 EB EC90 jmp poslinkis

EB yra jmp vidinis artimas, t.y poslinkis 1 baitas.

Tada adresas bus perduodamas: 9856(prie esamo adreso pridedame du,nes IP
yra ne einamoji komanda, o kitos skaitomos komandos adresas t.y.
9856)+FFEC(priekyje prirasome FF, nes EC yra neigiamas, ne vyriausiame bite
yra vienetas, o poslinkis traktuojamas kaip -128 - 127)=9842

Ats.:
9842h


b.8EDC E9 12 34 jmp SKIP (ATS: A113)

18

LOOP

vykd?ius nurodyt komand apskaiiuoti sekanios komandos efektyv adres, kai
AX=0003, BX=0002, CX=0001, DX=0000.

FFFE E2 F2 90 loop number (FFFE yra poslinkis kodo segmente)

Sprendimas
FFFEh yra poslinkis kodo segmente - IP reik?m prie? komandos vykdym. IP po loop number yra
IP=0000 (1 baito opkodas, 1 baito poslinkis).


loop ...
Next part ►


This page:




Help/FAQ | Terms | Imprint
Home People Pictures Videos Sites Blogs Chat
Top
.