DU6

Odpovědět
mike04
Donátor
Donátor
Příspěvky: 79
Registrován: 23. 9. 2004 12:00
Typ studia: Informatika Mgr.
Bydliště: Děčín/ Praha
Kontaktovat uživatele:

DU6

Příspěvek od mike04 »

Povedlo se nekomu pridat instrukci pro skok? (JMP, JF,..)
Vim, ze by se pridavat nejak takto, aspon podle zapisek ze cviceni:

Kód: Vybrat vše

append_instruction_with_target(new ai::JMP,lsp->label()) 
Problem je, ze prekladac mi toto odmitne prelozit, protoze instrukce JMP nema defaultni parametr, zjistil uz nekdo co to ma byt?
Uživatelský avatar
luk
Matfyz(ák|ačka) level II
Příspěvky: 74
Registrován: 6. 6. 2005 18:32
Typ studia: Informatika Mgr.
Bydliště: Praha

Re: DU6

Příspěvek od luk »

mike04 píše:Povedlo se nekomu pridat instrukci pro skok? (JMP, JF,..)
Vim, ze by se pridavat nejak takto, aspon podle zapisek ze cviceni:

Kód: Vybrat vše

append_instruction_with_target(new ai::JMP,lsp->label()) 
Problem je, ze prekladac mi toto odmitne prelozit, protoze instrukce JMP nema defaultni parametr, zjistil uz nekdo co to ma byt?
No, já jsem to sice ještě nezkoušel, ale podle dokumentace k ICM má mít JMP jako parametr konstruktoru ten cíl, tak nepomohlo by

Kód: Vybrat vše

append_instruction_with_target(new ai::JMP(lsp->label()),lsp->label())
? :roll:
Luk
mike04
Donátor
Donátor
Příspěvky: 79
Registrován: 23. 9. 2004 12:00
Typ studia: Informatika Mgr.
Bydliště: Děčín/ Praha
Kontaktovat uživatele:

Re: DU6

Příspěvek od mike04 »

luk píše: No, já jsem to sice ještě nezkoušel, ale podle dokumentace k ICM má mít JMP jako parametr konstruktoru ten cíl, tak nepomohlo by

Kód: Vybrat vše

append_instruction_with_target(new ai::JMP(lsp->label()),lsp->label())
? :roll:
To jsem uz taky zkousel a nic.
Co jsem se tak dival v kodu, chce to const iterator na instrukci (takze asi cilova instrukce, kam to ma skocit), jenze pokud je navesti urceno az po prikazu "goto", tak instrukci jmp (a jemu podobne) nemohu pouzit a pockat, az se navesti nadefinuje.. (coz mi dost rozbije soucasny kod)

I podle dokumentace vyzaduje operace jump relativni adresu, kam ma skocit.
johnny
Donátor
Donátor
Příspěvky: 95
Registrován: 13. 12. 2005 00:31
Typ studia: Informatika Mgr.
Bydliště: Trója

Příspěvek od johnny »

Dal jsem tam nulu ("JMP(0)") a vypadá to OK.
mike04
Donátor
Donátor
Příspěvky: 79
Registrován: 23. 9. 2004 12:00
Typ studia: Informatika Mgr.
Bydliště: Děčín/ Praha
Kontaktovat uživatele:

Příspěvek od mike04 »

johnny píše:Dal jsem tam nulu ("JMP(0)") a vypadá to OK.
Ano, to se uz zkompiluje a vicemene to i funguje.
Pri testovani navesti jsem narazil na nekolik problemu:

1) instrukce JMP ve vygenerovanem kodu skace na adresu (ktera je uvedena v komentari u JMP) o 1 vic, nez by mela - Chyba u me
2) pokud je pouzit prikaz goto (resp. jump) na nedefinovane navesti, program spadne.
3) Nevim, jestli to mame delat (a nevim jestli to vubec muzeme delat), ale mlc nekontroluje redefinici navesti, bere se vzdy to posledni z nich.

Napisu email s chybami, uvidime vysledek.

EDIT:
bod je neplati, chyba byla u me.
mike04
Donátor
Donátor
Příspěvky: 79
Registrován: 23. 9. 2004 12:00
Typ studia: Informatika Mgr.
Bydliště: Děčín/ Praha
Kontaktovat uživatele:

Příspěvek od mike04 »

Tak sem zas o trochu moudrejsi a o trochu moudra se podelim s vami :)

Instrukce JMP,JF, a podobne se nemaji konstruovat s parametrem 0, ale s const iteratorem, napriklad icb->end()

Kód: Vybrat vše

icblock_pointer icb=icblock_create();
icb->append_instruction_with_target(new ai::JMP(icb->end())  ,lsp->label()); 
kde, pro uplnost, lsp je label_symbol_pointer.

Dale, musime kontrolovat duplicitni definice navesti, nebo naopak pokud neni vubec definovan cil skoku. Cili tyto 2 pripady:

Kód: Vybrat vše

Program jedna;
label 1;
begin
goto 1; {chybejici cil}
end.

Program dve;
label 1;
begin
goto 1;
1: writes('navesti 1');
1: writes('navesti 2'); {redefinice navesti}
end.
Pokud se neosetri pripad jedna a necha se skakat na nenadefinovany label, program odleti.
Pokud je vic navesti, skoci se na to posledni, ale to take musime ohlidat.
mike04
Donátor
Donátor
Příspěvky: 79
Registrován: 23. 9. 2004 12:00
Typ studia: Informatika Mgr.
Bydliště: Děčín/ Praha
Kontaktovat uživatele:

pascaluv trojuhelnik

Příspěvek od mike04 »

Pro ty, co by si chteli otestovat funkcnost sveho prekladace na necem, co uz asi urcite nekdy videli (mozna i napsali) 8) :

Kód: Vybrat vše

program PascalTrojuhelnik;

const 
maxcislo=10;
maxpole=11; {maxcislo +1}
max=5; {pocet radu}

type
Tpole = array [1..maxpole] of integer;

var
pole:Tpole;
i,j:integer;

procedure zarovnani(pocet:integer);
var
i:integer;
begin
	for i:=1 to pocet do
		writes(' ');
end;

begin
	{inicializace}
	for i:=2 to maxcislo do
		pole[i]:=0;
	pole[1]:=1;

	{vlastni program}
	for i:=0 to max do
	begin
		zarovnani(max-i);
		for j:=i+1 downto 2 do
		begin
			pole[j]:=pole[j-1]+pole[j];
		end;
		{vypis}
		for j:=1 to i+1 do
		begin
			writei(pole[j]); writes(' ');
		end;	
		writeln;
	end;

end.
nebo si muzete stahnout jeste 2. verzi, kde je otestovani predavani parametru referenci.
Přílohy
pascal.mls.txt
zdrojak pro vas prekladac
(712 bajtů) Staženo 203 x
Návštěvník

LDLITB

Příspěvek od Návštěvník »

podarilo se nekomu z vas prelozit kod "if (true) then prikaz;" ?
ja kdyz generuju kod pro "true" tak volam new ai::LDLITB(1) ale to mi vygeneruje instrukci "LDLITB 0" , coz je vzdy false... Tak nevim, kde v tom je zakopany pes
mike04
Donátor
Donátor
Příspěvky: 79
Registrován: 23. 9. 2004 12:00
Typ studia: Informatika Mgr.
Bydliště: Děčín/ Praha
Kontaktovat uživatele:

Příspěvek od mike04 »

Me to funguje, ale co jsem videl z toho, cos napsal, tak vytvaris spatne tu instrukci.

Kód: Vybrat vše

new ai::LDLITB(true)
resp. parametr

Kód: Vybrat vše

sp->access_const()->access_bool_const()->bool_value()
by ti melo fungovat. Boolean se vytvari primo s hodnotou narozdil od zbylych LDLITx, kde je jako parametr ukazatel do tabulky konstant (ls_xxx_index).
Uživatelský avatar
chedwig
Matfyz(ák|ačka) level I
Příspěvky: 12
Registrován: 20. 9. 2006 20:14
Typ studia: Informatika Bc.
Bydliště: Usti n/L

Zapisky ze cvika

Příspěvek od chedwig »

Podeli se nekdo o sve zapisky se zadanim DU6 s mene stastnymi, kteri jeste neabsolvovali cviceni?
fissie
Matfyz(ák|ačka) level I
Příspěvky: 34
Registrován: 10. 11. 2006 20:41
Typ studia: Informatika Bc.
Kontaktovat uživatele:

Příspěvek od fissie »

A kdyz jsme u toho, nemluvilo se nekde o terminu na DU6?
Uživatelský avatar
nohis
Matfyz(ák|ačka) level III
Příspěvky: 128
Registrován: 7. 11. 2004 13:39
Typ studia: Informatika Mgr.
Bydliště: Praha - Prosek / Krakovany
Kontaktovat uživatele:

Příspěvek od nohis »

fissie píše:A kdyz jsme u toho, nemluvilo se nekde o terminu na DU6?
myslím že do konce ledna...
mike04
Donátor
Donátor
Příspěvky: 79
Registrován: 23. 9. 2004 12:00
Typ studia: Informatika Mgr.
Bydliště: Děčín/ Praha
Kontaktovat uživatele:

Příspěvek od mike04 »

Na prednasce bylo receno, ze si kazdy ma napsat svemu cvicicimu, az to bude chtit opravit a ziskat tak body.

Navic bylo receno, za znamka z DU lze uplatnit pouze tehdy, pokud clovek nesel na zkousku, cili nejde udelat toto:

Z DU mas za 2, chces zkusit dostat za 1 na zkousce, jenze tam se neco pokazi a mel bys dostat za 3. Tak se rozhodnes pro znamku z DU. - To uz ale nemuzes
Uživatelský avatar
Kate
Matfyz(ák|ačka) level III
Příspěvky: 146
Registrován: 8. 1. 2005 10:52
Typ studia: Informatika Mgr.
Bydliště: Milada squat
Kontaktovat uživatele:

Příspěvek od Kate »

mike04 píše:Z DU mas za 2, chces zkusit dostat za 1 na zkousce, jenze tam se neco pokazi a mel bys dostat za 3. Tak se rozhodnes pro znamku z DU. - To uz ale nemuzes
oni nam snad ctou myslenky! :D
Člověk si nemusí nic myslet, aby něco udělal.
Uživatelský avatar
Almer
Site Admin
Příspěvky: 686
Registrován: 12. 10. 2004 10:58
Typ studia: Informatika Ph.D.
Bydliště: Mala Strana - 203
Kontaktovat uživatele:

Příspěvek od Almer »

Kate píše:
mike04 píše:Z DU mas za 2, chces zkusit dostat za 1 na zkousce, jenze tam se neco pokazi a mel bys dostat za 3. Tak se rozhodnes pro znamku z DU. - To uz ale nemuzes
oni nam snad ctou myslenky! :D
Ne...ale tohle forum :twisted: :twisted: :twisted:
Zakládající člen klubu Ortodoxních Matfyzáků :-D

Jsem LAMER ale neumim se ani podepsat ]:-)
Odpovědět

Zpět na „2006“