IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

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

> разработка виртуального процессора, помогите разработать виртуальный процессор
blackhard
сообщение 19.11.2007 17:15
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 151
Пол: Мужской
Реальное имя: иван

Репутация: -  0  +


помогите сделать задание smile.gif задача такая:Разработать виртуальный процессор для арифметических операций над целыми числами.
Система команд-арифметические операции над содержимым регистров ввод и вывод значений регистров,условный и безусловный переход к команде заданного номера.длинна команды 3 байта включает в себя код операции (6бит) и номер 3х регистров (по 6 бит),в первых 2Х содержаться операнды, в 3й заносится результат операции. дать описание системы команд и программу для вычисления суммы квадратов первых n натуральных чисел.препод вообще ниче не обьяснил по этой теме и я блин даже не представляю как это сделать в паскале.мнеб хотяб понять как это делать smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
blackhard
сообщение 1.12.2007 21:27
Сообщение #2


Бывалый
***

Группа: Пользователи
Сообщений: 151
Пол: Мужской
Реальное имя: иван

Репутация: -  0  +


опять проблема и опять с условием: если на ассемблере у меня условие выглядело так
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;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
blackhard   разработка виртуального процессора   19.11.2007 17:15
volvo   Понять, говоришь? Ну, попробуй: Виртуальный процес...   19.11.2007 17:24
blackhard   аможно в 2х словах обьяснить как в паскале вообще ...   19.11.2007 18:23
blackhard   короче у меня такой вопрос:$80000000 вот это ...   22.11.2007 20:07
Malice   короче у меня такой вопрос:$80000000 вот это...   22.11.2007 20:51
blackhard   уф я понял как написать прогу :) токо я так и не ...   22.11.2007 21:46
Malice   длинна команды 3 байта включает в себя код операц...   22.11.2007 22:33
blackhard   Преобразовать команды и номера регистров в 3 байт...   26.11.2007 21:23
Malice   а можно небольшой комментарий я не знаком с опера...   26.11.2007 22:01
blackhard   Program processor; Uses CRT; type treg=record ob...   23.11.2007 21:25
blackhard   ну че никто мне не поможет?помогите очень прошу :)   26.11.2007 19:00
Malice   ну че никто мне не поможет?помогите очень прошу :...   26.11.2007 20:56
blackhard   а сколько бит в паскале занимает один символ напри...   27.11.2007 19:26
Malice   1 символ занимает 1 байт, а байт это: http://ru.wi...   27.11.2007 19:51
blackhard   а как сделать чтобы все элементы reg[i].obozn мас...   28.11.2007 16:09
blackhard   вобщем опять нужна помощь.доделал прогу и отправил...   30.11.2007 23:30
Lapp   если я напишу такую команду прога попросит ввести...   1.12.2007 9:51
blackhard   Нет, так процессоры не работают. Они вообще ниче...   1.12.2007 12:35
blackhard   вот начал переделывать прогу для работы с машинным...   1.12.2007 17:44
Mlc   У тебя на код команды отводится 6 бит, а команд на...   1.12.2007 18:24
blackhard   опять проблема и опять с условием: если на ассембл...   1.12.2007 21:27
Malice   У тебя при выполнении условия должен выполнятся пе...   1.12.2007 21:51
blackhard   У тебя при выполнении условия должен выполнятся п...   1.12.2007 22:17
Malice   но если в 3ем регистре будет хранится номер коман...   1.12.2007 22:32
blackhard   Не понимаю в чем сложность. Эмулируется по сути т...   1.12.2007 22:40
Malice   if a>b then goto 5 ну для такого условия пробл...   1.12.2007 22:45
blackhard   Легко ! или блин действительно легко спасиб...   1.12.2007 22:52


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 17:15
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"