1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
разработка виртуального процессора, помогите разработать виртуальный процессор
помогите сделать задание задача такая:Разработать виртуальный процессор для арифметических операций над целыми числами. Система команд-арифметические операции над содержимым регистров ввод и вывод значений регистров,условный и безусловный переход к команде заданного номера.длинна команды 3 байта включает в себя код операции (6бит) и номер 3х регистров (по 6 бит),в первых 2Х содержаться операнды, в 3й заносится результат операции. дать описание системы команд и программу для вычисления суммы квадратов первых n натуральных чисел.препод вообще ниче не обьяснил по этой теме и я блин даже не представляю как это сделать в паскале.мнеб хотяб понять как это делать
вот начал переделывать прогу для работы с машинным кодом сделал вначале только для 2х команд ввод и вывод
Program processor; Uses CRT; type treg=record obozn:char; chislo:integer; end; var a:array[1..20] of string; st: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[14+m]<>' ' 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 ras; begin k:=1; while k<>n do begin st:=a[k]; 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; 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; readln; end.
может конечно не рационально но я другого способа не знаю. 000001 000001 000000 000000 000011 000010 000001 000000 000000 сдесь я в регистр 1 ввожу число 3 и вывожу егог на экран кстати по заданию даже если команда использует 1 регистр номера других должны быть просто нулями так вот помогите переделать команду условия темже способом вот она
procedure Uslov; var a,b:integer; i:1..26; f:boolean; begin f:=false; for i:=1 to 26 do begin if st[6]=reg[i].obozn then a:=reg[i].chislo; if st[8]=reg[i].obozn then b:=reg[i].chislo; end; case st[7] of '=':if a=b then f:=true; '>':if a>b then f:=true; '<':if a<b then f:=true; end; if f=true then begin m:=9; case st[10]of 'I':Input; 'A':Add; 'S':Sub; 'M':Mult; 'D':Divis; 'C':Uslov; 'O':Output; 'T':Wentto; end; end; end;
а то я чето не врубаюсь че делать со знаками условия
У тебя на код команды отводится 6 бит, а команд на самом деле меньше. Надо на каждый вид условия (если равно то, если > то, если меньше то, и т.д.) выделить отдельный код команды. Тогда в 1 и 2 операндах будут регистры, а в 3-ем адрес перехода при верном условии.