Ось глянь, що вийшло
Думаю розберешся
в квадратних дужках (закоментовано) процедури, - {MOV(Rg1,Value)} які генерують
а поруч результат, - A:=4294967295; того, що саме вона генерує.
Тут майже всі команди, які будуть емітуватись, окрім доступу до пам'яті.
З пам'яттю ніякі дії проводитись не будуть лише присвоювання до регістрів та
завантаження числового значення,тобто? - Mov, Mvi.
Думаю, що немає потреби проводити якісь дії (операції) з пам'яттю. Усі дії (операції),
потім зчитуються та записуються в пам'ять.
Усі команди в програмі, як набір команд, для тестування.
Це не є якась програма, яка щось виконує.
Оціни.
Далі...
Питання:
Якщо я зміню всі "Cardinal" на "Longint" (для сумісності з турбопаскалем),
то все буде працювати, як треба ?
Звісно. до потрібно в Дельфі зроблю Cardinal(), а в паскалі type TCardinal=record Hi:Word;Lo:Word; end;
та напишу процедури відповідні обробці типа TCardinal
Код:
Program Enot;
{$APPTYPE CONSOLE}
type {Byte 0..255} {Word 0..65535} DWord=Cardinal;{0..4294967295}{Longword}
const SizeRAMBytes=65535;
var RAMdw:array[0..((SizeRAMBytes div 2)+1)]of DWord;
var RAMw:array[0..((SizeRAMBytes div 2)+1)]of Word;
var RAM:array[0..SizeRAMBytes]of Byte absolute RAMw;
Procedure StartProgram;
Var A,B,C,D, ESP:Dword;
label m1;
Procedure Test1;begin end;
BEGIN
ESP:=(SizeRAMBytes div 4);
m1:
{MOV(Rg1,Value)} A:=4294967295;
{MOV(Rg1,Value)} B:=4294967295;
{MOV(Rg1,Value)} C:=4294967295;
{MOV(Rg1,Value)} D:=4294967295;
{MOV(Rg1,Rg2)} A:=A;
{MOV(Rg1,Rg2)} A:=B;
{MOV(Rg1,Rg2)} A:=C;
{MOV(Rg1,Rg2)} A:=D;
{MOV(Rg1,Rg2)} B:=A;
{MOV(Rg1,Rg2)} B:=B;
{MOV(Rg1,Rg2)} B:=C;
{MOV(Rg1,Rg2)} B:=D;
{MOV(Rg1,Rg2)} C:=A;
{MOV(Rg1,Rg2)} C:=B;
{MOV(Rg1,Rg2)} C:=C;
{MOV(Rg1,Rg2)} C:=D;
{MOV(Rg1,Rg2)} D:=A;
{MOV(Rg1,Rg2)} D:=B;
{MOV(Rg1,Rg2)} D:=C;
{MOV(Rg1,Rg2)} D:=D;
{INC_(Rg1)} INC(A);
{INC_(Rg1)} INC(B);
{INC_(Rg1)} INC(C);
{INC_(Rg1)} INC(D);
{DEC_(Rg1)} DEC(A);
{DEC_(Rg1)} DEC(B);
{DEC_(Rg1)} DEC(C);
{DEC_(Rg1)} DEC(D);
{ADD(Rg1,Rg2,Value)} A:=(D+56);
{ADD(Rg1,Rg2,Rg3)} A:=(D+C);
{SUB(Rg1,Rg2,Value)} A:=(D-56);
{SUB(Rg1,Rg2,Rg3)} A:=(D-C);
{AND(Rg1,Rg2,Value)} A:=(D AND 56);
{AND(Rg1,Rg2,Rg3)} A:=(D AND C);
{XOR(Rg1,Rg2,Value)} A:=(D XOR 56);
{XOR(Rg1,Rg2,Rg3)} A:=(D XOR C);
{ OR(Rg1,Rg2,Value)} A:=(D OR 56);
{ OR(Rg1,Rg2,Rg3)} A:=(D OR C);
{NOT(Rg1,Rg2)} C:=(NOT D);
{ SHL(Rg1,Rg2,Value)} A:=(D SHL 56);
{ SHL(Rg1,Rg2,Rg3)} A:=(D SHL C);
{ SHR(Rg1,Rg2,Value)} A:=(D SHR 56);
{ SHR(Rg1,Rg2,Rg3)} A:=(D SHR C);
{ PUSH(Value)} DEC(ESP);RAMdw[ESP]:=100;
{ PUSH(Rg1)} DEC(ESP);RAMdw[ESP]:=B;
{ POP(Value)} D:=RAMdw[ESP];INC(ESP);
{ JE GotoIs(Rg1,Value)} IF A=10 then goto m1;
{ JE GotoIs(Rg1,Rg2)} IF A=B then goto m1;
{ JNE GotoNotIs(Rg1,Value)} IF A<>10 then goto m1;
{ JNE GotoNotIs(Rg1,Rg2)} IF A<>B then goto m1;
{ JB GotoLess(Rg1,Value)} IF Cardinal(A)<Cardinal(10) then goto m1;
{ JB GotoLess(Rg1,Rg2)} IF Cardinal(A)<Cardinal(B) then goto m1;
{ JA GotoMore(Rg1,Value)} IF Cardinal(A)>Cardinal(10) then goto m1;
{ JA GotoMore(Rg1,Rg2)} IF Cardinal(A)>Cardinal(B) then goto m1;
{ JB GotoLess(Rg1,Value)} IF Cardinal(A)<Cardinal(10) then goto m1;
{ JB GotoLess(Rg1,Rg2)} IF Cardinal(A)<Cardinal(B) then goto m1;
{ JA GotoMore(Rg1,Value)} IF Cardinal(A)>Cardinal(10) then goto m1;
{ JA GotoMore(Rg1,Rg2)} IF Cardinal(A)>Cardinal(B) then goto m1;
{ JBE GotoLess(Rg1,Value)} IF Cardinal(A)<=Cardinal(10) then goto m1;
{ JBE GotoLess(Rg1,Rg2)} IF Cardinal(A)<=Cardinal(B) then goto m1;
{ JAE GotoLess(Rg1,Value)} IF Cardinal(A)>=Cardinal(10) then goto m1;
{ JaE GotoLess(Rg1,Rg2)} IF Cardinal(A)>=Cardinal(B) then goto m1;
{ JL GotoLessz(Rg1,Value)} IF Longint(A)<Longint(10) then goto m1;
{ JL GotoLessz(Rg1,Rg2)} IF Longint(A)<Longint(B) then goto m1;
{ JG GotoMorez(Rg1,Value)} IF Longint(A)>Longint(10) then goto m1;
{ JG GotoMorez(Rg1,Rg2)} IF Longint(A)>Longint(B) then goto m1;
{ JL GotoLessz(Rg1,Value)} IF Longint(A)<Longint(10) then goto m1;
{ JL GotoLessz(Rg1,Rg2)} IF Longint(A)<Longint(B) then goto m1;
{ JG GotoMorez(Rg1,Value)} IF Longint(A)>Longint(10) then goto m1;
{ JG GotoMorez(Rg1,Rg2)} IF Longint(A)>Longint(B) then goto m1;
{ JLE GotoLessz(Rg1,Value)} IF Longint(A)<=Longint(10) then goto m1;
{ JLE GotoLessz(Rg1,Rg2)} IF Longint(A)<=Longint(B) then goto m1;
{ JAE GotoLess(Rg1,Value)} IF Cardinal(A)>=Cardinal(10) then goto m1;
{ JGE GotoLessz(Rg1,Rg2)} IF Longint(A)>=Longint(B) then goto m1;
{ JE CallIs(Rg1,Value)} IF A=10 then Test1;
{ JE CallIs(Rg1,Rg2)} IF A=B then Test1;
{ JNE CallNotIs(Rg1,Value)} IF A<>10 then Test1;
{ JNE CallNotIs(Rg1,Rg2)} IF A<>B then Test1;
{ JB CallLess(Rg1,Value)} IF Cardinal(A)<Cardinal(10) then Test1;
{ JB CallLess(Rg1,Rg2)} IF Cardinal(A)<Cardinal(B) then Test1;
{ JA CallMore(Rg1,Value)} IF Cardinal(A)>Cardinal(10) then Test1;
{ JA CallMore(Rg1,Rg2)} IF Cardinal(A)>Cardinal(B) then Test1;
{ JB CallLess(Rg1,Value)} IF Cardinal(A)<Cardinal(10) then Test1;
{ JB CallLess(Rg1,Rg2)} IF Cardinal(A)<Cardinal(B) then Test1;
{ JA CallMore(Rg1,Value)} IF Cardinal(A)>Cardinal(10) then Test1;
{ JA CallMore(Rg1,Rg2)} IF Cardinal(A)>Cardinal(B) then Test1;
{ JBE CallLess(Rg1,Value)} IF Cardinal(A)<=Cardinal(10) then Test1;
{ JBE CallLess(Rg1,Rg2)} IF Cardinal(A)<=Cardinal(B) then Test1;
{ JAE CallLess(Rg1,Value)} IF Cardinal(A)>=Cardinal(10) then Test1;
{ JaE CallLess(Rg1,Rg2)} IF Cardinal(A)>=Cardinal(B) then Test1;
{ JL CallLessz(Rg1,Value)} IF Longint(A)<Longint(10) then Test1;
{ JL CallLessz(Rg1,Rg2)} IF Longint(A)<Longint(B) then Test1;
{ JG CallMorez(Rg1,Value)} IF Longint(A)>Longint(10) then Test1;
{ JG CallMorez(Rg1,Rg2)} IF Longint(A)>Longint(B) then Test1;
{ JL CallLessz(Rg1,Value)} IF Longint(A)<Longint(10) then Test1;
{ JL CallLessz(Rg1,Rg2)} IF Longint(A)<Longint(B) then Test1;
{ JG CallMorez(Rg1,Value)} IF Longint(A)>Longint(10) then Test1;
{ JG CallMorez(Rg1,Rg2)} IF Longint(A)>Longint(B) then Test1;
{ JLE CallLessz(Rg1,Value)} IF Longint(A)<=Longint(10) then Test1;
{ JLE CallLessz(Rg1,Rg2)} IF Longint(A)<=Longint(B) then Test1;
{ JAE CallLess(Rg1,Value)} IF Cardinal(A)>=Cardinal(10) then Test1;
{ JGE CallLessz(Rg1,Rg2)} IF Longint(A)>=Longint(B) then Test1;
Writeln('A=',A,' B=',B,' C=',C,' D=',D);Readln;
END;
BEGIN StartProgram; END.