Dobrý den,
jediné co mi na assembly vadí je spousta dat mezi řádky... Člověk přesune data do jednoho registru a pak je použije naprosto nesouvisející adresou... Takže třeba při interpretaci jazyka BAS se snažím načíst tyto proměnné:
LOADVAR:
POKEINT J 65426
PEEK J 65421
IF J = 0 THEN $E = "Can't load variables, none stored!"
IF J = 0 THEN GOSUB FATALERR
J = J + 65198
PEEKINT Y J
J = J - 2
PEEKINT X J
J = J - 2
PEEKINT V J
J = J - 2
PEEKINT W J
J = J - 65202
POKE J 65421
J = J + 65200
PEEKINT J J
RETURN
Příslušný JSA:
%DEFINE VARIABLE 1
%DEFINE StringVar 2
%DEFINE NUMBER 3
%DEFINE STRING 4
%DEFINE QUOTE 5
%DEFINE CHAR 6
%DEFINE UNKNOWN 7
%DEFINE LABEL 8
...
System.CMD.Pokeint:
call GetToken
cmp ax, VARIABLE
je .DataIsvar
cmp ax, NUMBER
jne .error
.DataIsNum:
mov si, token
call Int.Parse
jmp .GetSecond
.DataIsvar:
mov al, [token]
call GetVar
.GetSecond:
mov cx, ax
call GetToken
cmp ax, VARIABLE
je .AddressIsVar
cmp ax, NUMBER
jne .error
.AddressIsNum:
mov si, token
call Int.Parse
jmp .SaveData
.AddressIsVar:
mov al, [token]
call GetVar
.SaveData:
mov si, ax
mov [si], cx
jmp MainLoop
.error:
mov si, ErrSyntax
jmp error
Vtip je v tom, že jsem to napsal v jednom souboru - s pomocí internetu. Ale ač se možná budete divit, úspěšně v Assembly aplikuji OOP. Proto jsem z funkcí interpretu BAS udělal objekty - separoval je do souborů a vytvořil vazby předáváním vstupu a vydáváním výstupu. (Tedy toto mne od této práce odtrhlo - bez zkoušek to dokupy nedám.) Jenže to samozřejmě narušilo nějakou meziřádkovou adresaci. Pokus praví, že když to dám do jednoho souboru, opět to jede. Napište, mám-li poslat celý interpret. Jinak BAS jazykem myslím BAS DOSu.
Děkuji.