1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code]. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
разработка виртуального процессора, помогите разработать виртуальный процессор
помогите сделать задание задача такая:Разработать виртуальный процессор для арифметических операций над целыми числами. Система команд-арифметические операции над содержимым регистров ввод и вывод значений регистров,условный и безусловный переход к команде заданного номера.длинна команды 3 байта включает в себя код операции (6бит) и номер 3х регистров (по 6 бит),в первых 2Х содержаться операнды, в 3й заносится результат операции. дать описание системы команд и программу для вычисления суммы квадратов первых n натуральных чисел.препод вообще ниче не обьяснил по этой теме и я блин даже не представляю как это сделать в паскале.мнеб хотяб понять как это делать
опять проблема и опять с условием: если на ассемблере у меня условие выглядело так 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;