case 1=2 add 1 2 3 если число в регистре 1 = число в регистре 2 то складываем их и помещаем в регистр 3
в машинных кодах это будет выглядеть както длинно и не по заданию поэтому я хочу сделать так
case 1=2 001001 000001 000010 000000
add 1 2 3 в машинных кодах примерно так 000011 000001 000010 000100 но вот какая проблема у меня возникла получается что add 1 2 3 выполняется 2 раза если 1=2 и выполняется даже если они не равны подскажите как этого можно избежать я выделю строки которые отвечают за это
Program processor;
Uses CRT;
type treg=record
obozn:char;
chislo:integer;
end;
var a:array[1..20] of string;
st,st2:string;ch:char;
n,m,k:byte;
reg:array[1..26] of treg;
f:text;
s:string;
procedure fail;
begin
writeln('ўл § Јаг§Ё«Ё Є®¤:');
assign(f,'2.txt');
reset(f);
n:=1;
while not eof(f) do
begin
readln(f,a[n]);
writeln(a[n]);
n:=n+1;
end;
end;
function ToDec(n:string; radix:longint):longint;
var
m, i: longint;
const
digit: string[16]='0123456789ABCDEF';
begin
m:=0;
while (n[1]='0') and (length(n) > 1) do delete(n,1,1);
for i:=1 to length(n) do m:=m*radix+pos(n[i],digit)-1;
ToDec:=m;
end;
procedure Input;
var i,j:1..10;
s,r,c:string;
k,Iv,n:integer;
begin
s:='';
r:='';
c:='';
str(todec(st[8+m]+st[9+m]+st[10+m]+st[11+m]+st[12+m]+st[13+m],2),r);
for i:=1 to 10 do
if reg[i].obozn=r then
if (st[29+m]<>'0') and (st[29+m]<>'1') then
begin
writeln('ўўҐ¤ЁвҐ зЁб«® ў ॣЁбва ',r);
readln(reg[i].chislo);
end
else
begin
k:=todec(st[29+m]+st[30+m]+st[31+m]+st[32+m]+st[33+m]+st[34+m],2);
reg[i].chislo:=k;
end;
end;
procedure Output;
var i:1..10;
n:integer;
r:string;
begin
r:='';
str(todec(st[8+m]+st[9+m]+st[10+m]+st[11+m]+st[12+m]+st[13+m],2),r);
for i:=1 to 10 do
if reg[i].obozn=r then
begin
writeln('зЁб«® ў ॣЁбвॠ',r,' =',reg[i].chislo);
end;
end;
procedure Add;
var s:longint;
a,b:integer;
c,d,r:string;
i:1..10;
begin
s:=0;a:=0;b:=0;
str(todec(st[8+m]+st[9+m]+st[10+m]+st[11+m]+st[12+m]+st[13+m],2),r);
str(todec(st[15+m]+st[16+m]+st[17+m]+st[18+m]+st[19+m]+st[20+m],2),c);
str(todec(st[22+m]+st[23+m]+st[24+m]+st[25+m]+st[26+m]+st[27+m],2),d);
for i:=1 to 10 do
begin
if r=reg[i].obozn then a:=reg[i].chislo;
if c=reg[i].obozn then b:=reg[i].chislo;
s:=a+b;
end;
for i:=1 to 10 do
begin
if d=reg[i].obozn then reg[i].chislo:=s;
end;
end;
procedure Sub;
var s:longint;
a,b:integer;
i:1..10;
c,d,r:string;
begin
s:=0;a:=0;b:=0;
str(todec(st[8+m]+st[9+m]+st[10+m]+st[11+m]+st[12+m]+st[13+m],2),r);
str(todec(st[15+m]+st[16+m]+st[17+m]+st[18+m]+st[19+m]+st[20+m],2),c);
str(todec(st[22+m]+st[23+m]+st[24+m]+st[25+m]+st[26+m]+st[27+m],2),d);
for i:=1 to 10 do
begin
if r=reg[i].obozn then a:=reg[i].chislo;
if c=reg[i].obozn then b:=reg[i].chislo;
s:=a-b;
end;
for i:=1 to 10 do
begin
if d=reg[i].obozn then reg[i].chislo:=s;
end;
end;
procedure Mult;
var s:longint;
a,b:integer;
i:1..10;
c,d,r:string;
begin
s:=0;a:=0;b:=0;
str(todec(st[8+m]+st[9+m]+st[10+m]+st[11+m]+st[12+m]+st[13+m],2),r);
str(todec(st[15+m]+st[16+m]+st[17+m]+st[18+m]+st[19+m]+st[20+m],2),c);
str(todec(st[22+m]+st[23+m]+st[24+m]+st[25+m]+st[26+m]+st[27+m],2),d);
for i:=1 to 10 do
begin
if r=reg[i].obozn then a:=reg[i].chislo;
if c=reg[i].obozn then b:=reg[i].chislo;
s:=a*b;
end;
for i:=1 to 10 do
begin
if d=reg[i].obozn then reg[i].chislo:=s;
end;
end;
procedure Divis;
var s:longint;
a,b:integer;
i:1..10;
c,d,r:string;
begin
s:=0;a:=0;b:=0;
str(todec(st[8+m]+st[9+m]+st[10+m]+st[11+m]+st[12+m]+st[13+m],2),r);
str(todec(st[15+m]+st[16+m]+st[17+m]+st[18+m]+st[19+m]+st[20+m],2),c);
str(todec(st[22+m]+st[23+m]+st[24+m]+st[25+m]+st[26+m]+st[27+m],2),d);
for i:=1 to 10 do
begin
if r=reg[i].obozn then a:=reg[i].chislo;
if c=reg[i].obozn then b:=reg[i].chislo;
s:=Round(a div b);
end;
for i:=1 to 10 do
begin
if d=reg[i].obozn then reg[i].chislo:=s;
end;
end;
procedure Uslov;
var a,b:integer;
i:1..10;
f:boolean;
r,c,d:string;
begin
writeln(st2);
writeln(ToDec(st2[1]+st2[2]+st2[3]+st2[4]+st2[5]+st2[6],2));
str(todec(st[8+m]+st[9+m]+st[10+m]+st[11+m]+st[12+m]+st[13+m],2),r);
str(todec(st[15+m]+st[16+m]+st[17+m]+st[18+m]+st[19+m]+st[20+m],2),c);
str(todec(st[22+m]+st[23+m]+st[24+m]+st[25+m]+st[26+m]+st[27+m],2),d);
f:=false;
for i:=1 to 10 do
begin
if r=reg[i].obozn then a:=reg[i].chislo;
if c=reg[i].obozn then b:=reg[i].chislo;
end;
case ToDec(st[1]+st[2]+st[3]+st[4]+st[5]+st[6],2) of
9:if a=b then f:=true;
7:if a>b then f:=true;
8:if a<b then f:=true;
end;
writeln(s);
if f=true then
begin
{m:=0;}
case ToDec(st2[1]+st2[2]+st2[3]+st2[4]+st2[5]+st2[6],2) of
1:Input;
2:Output;
3:add;
4:sub;
5:mult;
6:divis;
7:uslov;
8:uslov;
9:uslov;
end;
end;
end;
procedure ras;
begin
k:=1;
while k<>n do
begin
st:=a[k];
st2:=a[k+1];
if ord(st[1])<58 then
begin
m:=0{1};
case ToDec(st[1]+st[2]+st[3]+st[4]+st[5]+st[6],2) of
1:Input;
2:Output;
3:add;
4:sub;
5:mult;
6:divis;
7:uslov;
8:uslov;
9:uslov;
end;
end;
k:=k+1;
end;
end;
procedure registr;
var i:integer;
begin
for i:=48 to 58 do
reg[i-47].obozn:=chr(i)
end;
BEGIN
clrscr;
registr;
fail;
ras;