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

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

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

 
 Ответить  Открыть новую тему 
> Виртуальный процессор над битовыми строками
сообщение
Сообщение #1


Новичок
*

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

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


Разработать виртуальный процессор для логических операций над битовыми строками.
Система команд – логические операции над содержимым 32-разрядных регистров , ввод и вывод содержимого регистров в шестнадцатеричной форме , считывание содержимого регистра в выделенный регистр (сумматор) и запись в регистр содержимого сумматора. Команды записываются в мнемонической форме с указанием имени регистра , в котором содержится один из операндов , второй операнд берётся из сумматора. Результат операции записывается в сумматор.
Дать описание системы команд и программу для вычисления значений булевской функции.
ПОМОГИТЕ. Заранее спасибо
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Ищущий истину
******

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

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


То есть вы просите написать всю систему??
Если есть конекретные вопросы, тогда другое дело ...

1. требуется определить чем будем эмулировать регистры (не забываем что 32 разрядние - то есть 4 байта... можно использовать как регистр число типа LONGINT)...
2. ввод чисел в шестнадцатиричное СС - в FAQ'е есть процедура для конвертирования.
То есть вводим в 16. а работаем в 10.


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


Просто я не представляю ,что эта программа должна делать. Пример хотя бы.

Добавлено позже:
Я могу решать только простые задачи. А это задача не по мне... Помогите мне с решением !mol1.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Ищущий истину
******

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

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


Цитата
Просто я не представляю ,что эта программа должна делать. Пример хотя бы.

Она должна эмулировать работу процессора.
напрмер ввожу я 2 чсила. И она показывает в какие регистры что помещает, и как вычисляет пошагово - все это должно быть визуализированно.


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






NoRToN
Значит, так: вот набросок виртуального процессора. Это чтобы было понятно, чего от тебя хотят, и как вообще это делать...

Система команд:
Цитата
in    <#> <значение> - заслать <значение> в регистр <#>
out <#> - показ значения регистра <регистр#>
mov <#> - переслать содержимое регистра <#> в сумматор
reg  <#> - переслать содержимое сумматора в регистр <#>
and  <#> - операция AND между значениями сумматора и регистра <#> Результат - в сумматоре
or    <#> - операция OR между значениями сумматора и регистра <#> Результат - в сумматоре
xor  <#> - операция XOR между значениями сумматора и регистра <#> Результат - в сумматоре
halt - останов процессора (выход из программы)


"Процессор" расчитан на 10 регистров...
Вот сама программа. Если есть баги - сильно не ругаться, посмотри на время поста... ;)
Код
uses crt;

const
 n = 10;
 alu = succ(n);
 rgs: array[1 .. n+1] of longint = {начальные значения - для отладки...}
   (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0);

type
 TWords =
   (rwError,
    rwIn, rwOut, rwMov, rwReg, rwAnd, rwOr, rwXor, rwHalt);

const
 words: array[TWords] of string =
   ('', 'in', 'out', 'mov', 'reg', 'and', 'or', 'xor', 'halt');
 letter: array[boolean] of char =
   ('0', '1');
procedure print_reg(i: integer);
 var x: longint;
 begin
   x := rgs[i];
   for i := 0 to 31 do
     write( letter[((x shl i) and $80000000) = $80000000] );
 end;

procedure show_cpu;
 var i: integer;
 begin
   for i := 1 to n do
     begin
       gotoxy(1, i); write('reg(', i, '):');
       gotoxy(20, i); print_reg(i)
     end;

   gotoxy(1, n+3); write('sum: ');
   gotoxy(20, n+3); print_reg(n+1);
 end;

function get_command: boolean;
 procedure print_error;
   begin
     gotoxy(1, n+5); write('>> ILLEGAL INSTRUCTION <Enter>');
     readln
   end;

 function find_word(s: string): TWords;
   var i: TWords;
   begin
     for i := succ(low(TWords)) to high(TWords) do
       if s = words[i] then
         begin
           find_word := i; exit
         end;
     find_word := rwError
   end;

 function next_token(s: string; var x: longint;
          max: longint): boolean;
   var err: integer;
   begin
     next_token := false;
     if s = '' then exit;

     while s[1] = ' ' do
       delete(s, 1, 1);
     val(s, x, err);
     next_token :=
       ((err <> 0) or (x <= 0) or (x > max))
   end;

 var
   s, s_oper: string;
   p: byte;
   found: TWords;
   value, data: longint;
 begin
   gotoxy(1, n+5); write('':55);
   gotoxy(1, n+5); write('>');
   readln(s);

   p := pos(' ', s);
   if p > 0 then
     begin
       s_oper := copy(s, 1, pred(p));
       delete(s, 1, p)
     end
   else s_oper := s;

   get_command := false;
   found := find_word(s_oper);
   case found of
     rwOut .. rwXor:
       begin
         if next_token({copy(s, 1, pred(pos(' ', s)))}s, value, n)
           then print_error {error occured}
           else
             begin
               case found of
                 rwOut:
                   begin
                     gotoxy(1, n+5); write('>> reg(', value, ') = ', rgs[value], ' <Enter>');
                     readln
                   end;
                 rwMov: rgs[alu] := rgs[value];
                 rwReg: rgs[value] := rgs[alu];
                 rwAnd: rgs[alu] := rgs[alu] and rgs[value];
                 rwOr: rgs[alu] := rgs[alu] or rgs[value];
                 rwXor: rgs[alu] := rgs[alu] xor rgs[value];
               end;
               get_command := false;
               exit
             end;
       end;
     rwIn:
       begin
         if next_token(copy(s, 1, pred(pos(' ', s))), value, n)
           then print_error {error occured}
           else
             begin
               delete(s, 1, pos(' ', s));
               if next_token(s, data, maxlongint)
                 then print_error {error occured}
                 else
                   begin
                     rgs[value] := data;
                     get_command := false;
                     exit
                   end;
             end;
       end;
     rwHalt:
       get_command := true;
   else
     print_error {error occured}
   end;
 end;

var
 stopped: boolean;

begin
 clrscr;
 stopped := false;
 repeat
   show_cpu;
   stopped := get_command;
 until stopped;

end.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

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

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


А как здесь сделать, чтобы ввод и вывод осуществлялся в 16-ой форме.(в вирт процессе)

А тут, чтобы коэффициенты матрицы вводились с клавиатуры
censored

Сообщение отредактировано: volvo -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






NoRToN
Цитата
А как здесь сделать, чтобы ввод и вывод осуществлялся в 16-ой форме.(в вирт процессе)

Ввод осуществляется в строку, найди, где она преобразуется в число и делай, что тебе надо... Только зачем? Ты что, сможешь контролировать результат в 16-ой системе?

А вот второй вопрос к этой теме не относится... Спрашивай там, где программа была написана...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

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

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


хорошо. Просто по заданию надо в 16 форме , а у мен яне получилось переделать
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






как сделать с сумматором я знаю, а как с 3 регистрами - нет. И что такое условный, безусловный переходы и мнемоническая форма??
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






lidok
Если человек знает, как сделать с сумматором, то для 3-х регистров переделать - для него не проблема ... Тем более, что сумматор ведь тоже регистр ...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






И как это сделать?? Ты знаешь??

Сообщение отредактировано: lidok -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12





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

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


Спасибо за этот пример! Вобщем мне сказали вот что:
текст программы в машинных кодах должен считываться из отдельного текстового файла.
Ты не мог бы помоч мне это сделать???
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гость






Приведите пример программы к етому процессору =)
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 26.10.2020 15:03
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name