разработка виртуального процессора, помогите разработать виртуальный процессор |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
разработка виртуального процессора, помогите разработать виртуальный процессор |
blackhard |
Сообщение
#1
|
Бывалый Группа: Пользователи Сообщений: 151 Пол: Мужской Реальное имя: иван Репутация: 0 |
помогите сделать задание задача такая:Разработать виртуальный процессор для арифметических операций над целыми числами.
Система команд-арифметические операции над содержимым регистров ввод и вывод значений регистров,условный и безусловный переход к команде заданного номера.длинна команды 3 байта включает в себя код операции (6бит) и номер 3х регистров (по 6 бит),в первых 2Х содержаться операнды, в 3й заносится результат операции. дать описание системы команд и программу для вычисления суммы квадратов первых n натуральных чисел.препод вообще ниче не обьяснил по этой теме и я блин даже не представляю как это сделать в паскале.мнеб хотяб понять как это делать |
volvo |
Сообщение
#2
|
Гость |
Цитата мнеб хотяб понять как это делать Понять, говоришь? Ну, попробуй:Виртуальный процессор над битовыми строками (если тебе надо "на блюдечке" программу ИМЕННО для твоего случая - можешь туда даже не ходить, предупреждаю сразу. Я привел эту ссылку ТОЛЬКО для того, чтоб ты понял, что это за задание, и как оно может решаться.) Сообщение отредактировано: volvo - |
blackhard |
Сообщение
#3
|
Бывалый Группа: Пользователи Сообщений: 151 Пол: Мужской Реальное имя: иван Репутация: 0 |
аможно в 2х словах обьяснить как в паскале вообще с регистрами работать?
rgs[i]вот это чтоли и есть регистр? Добавлено через 5 мин. procedure print_reg(i: integer); эта процедура для вывода значения регистра? Сообщение отредактировано: blackhard - |
blackhard |
Сообщение
#4
|
Бывалый Группа: Пользователи Сообщений: 151 Пол: Мужской Реальное имя: иван Репутация: 0 |
короче у меня такой вопрос:
$80000000вот это я так понимаю адрес в памяти.а в задаче регистр в 32 бита а мне надо в 6 бит можите подсказать как это сделать? |
Malice |
Сообщение
#5
|
Профи Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: 20 |
|
blackhard |
Сообщение
#6
|
Бывалый Группа: Пользователи Сообщений: 151 Пол: Мужской Реальное имя: иван Репутация: 0 |
уф я понял как написать прогу токо я так и не понял как сделать этодлинна команды 3 байта включает в себя код операции (6бит) и номер 3х регистров (по 6 бит),щас напишу прогу как я понял и выложу ее тут.тогда посмотрите?и поможите доделать?
|
Malice |
Сообщение
#7
|
Профи Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: 20 |
длинна команды 3 байта включает в себя код операции (6бит) и номер 3х регистров (по 6 бит),[/color] Преобразовать команды и номера регистров в 3 байта можно примерно так: b1:=(c shl 2) or (r1 shr 4);и обратно: c:=b1 shr 2; Если не напутал нигде |
blackhard |
Сообщение
#8
|
Бывалый Группа: Пользователи Сообщений: 151 Пол: Мужской Реальное имя: иван Репутация: 0 |
Program processor;ну вот чето сделал и она считает и наверно даже правильно но это неважно.что я не пойму так это как организовать команды вот так длинна команды 3 байта включает в себя код операции (6бит) и номер 3х регистров (по 6 бит) помогите доделать 15 б) INPUT аDD SUB MUL DIV CASE OUTPUT вот собственно названия команд |
blackhard |
Сообщение
#9
|
Бывалый Группа: Пользователи Сообщений: 151 Пол: Мужской Реальное имя: иван Репутация: 0 |
ну че никто мне не поможет?помогите очень прошу
|
Malice |
Сообщение
#10
|
Профи Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: 20 |
|
blackhard |
Сообщение
#11
|
Бывалый Группа: Пользователи Сообщений: 151 Пол: Мужской Реальное имя: иван Репутация: 0 |
Преобразовать команды и номера регистров в 3 байта можно примерно так: b1:=(c shl 2) or (r1 shr 4);и обратно: c:=b1 shr 2; Если не напутал нигде а можно небольшой комментарий я не знаком с операциями shl shr |
Malice |
Сообщение
#12
|
Профи Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: 20 |
а можно небольшой комментарий я не знаком с операциями shl shr Shr - битовый сдвиг вправо, аналогичен делению на 2 на каждый бит. Shl - влево - умножение на 2. пусть у тебя 4 6-ти битовых числа, в 3-х байтах они выглядят так: 11111122 22223333 33444444 чтобы получить первый байт, нужно сдвинуть на 2 бита влево первое число (c shl 2) и сложить с 2-мя старшими от второго (r1 shr 4). Аналогично для 2-х следующих байт. Почитай про битовые операции, это просто ;) Сообщение отредактировано: Malice - |
blackhard |
Сообщение
#13
|
Бывалый Группа: Пользователи Сообщений: 151 Пол: Мужской Реальное имя: иван Репутация: 0 |
а сколько бит в паскале занимает один символ например 'A'?
|
Malice |
Сообщение
#14
|
Профи Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: 20 |
1 символ занимает 1 байт, а байт это:
http://ru.wikipedia.org/wiki/%D0%91%D0%B0%D0%B9%D1%82 |
blackhard |
Сообщение
#15
|
Бывалый Группа: Пользователи Сообщений: 151 Пол: Мужской Реальное имя: иван Репутация: 0 |
а как сделать чтобы все элементы reg[i].obozn массива занимали 6 бит?и можно ли после этого сравнивать
их с элементами st[m] где на символ по прежнему 8 бит? |
blackhard |
Сообщение
#16
|
Бывалый Группа: Пользователи Сообщений: 151 Пол: Мужской Реальное имя: иван Репутация: 0 |
вобщем опять нужна помощь.доделал прогу и отправил препаду,а он написал что она должна работать с командами заданными в машинном коде
сейчас она работает вот с такими командами IN 1 IN 2,1 IN 4,0 AD 1,2,1 IN 3,1 MUL 3,3,5 AD 4,5,4 AD 3,2,3 CASE 3<1 TO 6 OUTPUT 4 так вчем мой вопрос: например команда in 1 в машинном коде выглядит примерно так так 010100 000001 000000 000000 если я напишу такую команду прога попросит ввести число в регистр 1 ну а если мне надо ввести уже заданное число т.е in 1 15 а по заданию у меня команда длинной 3Б номер команды 6б и номера регистров 6б и где тогда задавать число 15 ? и тоже самое с командой условия как задать <>= такие знаки ? |
Lapp |
Сообщение
#17
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
если я напишу такую команду прога попросит ввести число в регистр 1 ну а если мне надо ввести уже заданное число Нет, так процессоры не работают. Они вообще ничего не запрашивают, никогда. Запрашивают программы. Процессоры только выполняют действия. Поэтому команда ввода числа в регист уже должна содержать это число. Если она его не содержит, то тогда скажи - а что вообще эта команда делает?? Конечно, бывают такие команды, которые работают за два такта: 1. in 2 2. 15 - в первом такте сообщается, что дальше будет число, которое нужно положить в регистр 2, а в следующем - само число идет. Но только мне кажется, что это не есть твой случай. Я думаю, твой операнд идет непосредственно в команде. Примерно так: хх000001 хх000010 хх001111 , где хх000001 - это номер команды (1), хх000010 - номер регистра (2), хх001111 - операнд (15). Знаком х обозначены биты, которые не используются. Я не вполне понимаю, почему на номер регистра, которых всего три, нужно было отводить 6 бит.. Хватило бы и двух. Поле номера команды вряд ли тоже требует 6 бит (что означет 64 номера). А поле операнда шестибитное, потому что его длина должна быть равна длине регистра. Конечно, расположить можно было бы все и иначе, например так: CCCCCCRRRRRRPPPPPPxxxxxx - здесь С - поле команды, R - поле номера регистра, P - поле значения операнда (я назвал от слова Parameter, потому что первая буква слова Operand похожа на ноль). Так или иначе остаются лишние 6 бит. Но с первым вариантом (xxCCCCCCxxRRRRRRxxPPPPPP) работать явно удобнее (каждая функция в своем байте). После выполнения этой команды в регистре 2 должно быть число 15. Ты покажи свою прогу, текущий вариант. Тогда проще будет разговаривать. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
blackhard |
Сообщение
#18
|
Бывалый Группа: Пользователи Сообщений: 151 Пол: Мужской Реальное имя: иван Репутация: 0 |
Нет, так процессоры не работают. Они вообще ничего не запрашивают, никогда. Запрашивают программы. Процессоры только выполняют действия. Поэтому команда ввода числа в регист уже должна содержать это число. Если она его не содержит, то тогда скажи - а что вообще эта команда делает?? Конечно, бывают такие команды, которые работают за два такта: 1. in 2 2. 15 - в первом такте сообщается, что дальше будет число, которое нужно положить в регистр 2, а в следующем - само число идет. Но только мне кажется, что это не есть твой случай. Я думаю, твой операнд идет непосредственно в команде. Примерно так: хх000001 хх000010 хх001111 , где хх000001 - это номер команды (1), хх000010 - номер регистра (2), хх001111 - операнд (15). Знаком х обозначены биты, которые не используются. Я не вполне понимаю, почему на номер регистра, которых всего три, нужно было отводить 6 бит.. Хватило бы и двух. Поле номера команды вряд ли тоже требует 6 бит (что означет 64 номера). А поле операнда шестибитное, потому что его длина должна быть равна длине регистра. Конечно, расположить можно было бы все и иначе, например так: CCCCCCRRRRRRPPPPPPxxxxxx - здесь С - поле команды, R - поле номера регистра, P - поле значения операнда (я назвал от слова Parameter, потому что первая буква слова Operand похожа на ноль). Так или иначе остаются лишние 6 бит. Но с первым вариантом (xxCCCCCCxxRRRRRRxxPPPPPP) работать явно удобнее (каждая функция в своем байте). После выполнения этой команды в регистре 2 должно быть число 15. Ты покажи свою прогу, текущий вариант. Тогда проще будет разговаривать. вот текущий вариант он не сильно отличается от предыдущего но всеже отличается впринципе переделть ее под двоичные команды несложно единственная проблема это вот такие знаким <>= в команде условия и сейчас для выполнения команд я использую case st[1]of 'I':Input; т е если в строке 1 буква I то выполняем процидуру ввод, а когда у меня двоичное число как проще организовать распознование команды опять через case или можно как то проще?вот прикрепляю прогу а это алгоритм IN 1 IN 2,1 IN 4,0 AD 1,2,1 IN 3,1 MUL 3,3,5 AD 4,5,4 AD 3,2,3 CASE 3<1 TO 6 OUTPUT 4 он та и должен быть написан в машинном коде Прикрепленные файлы CPU10.PAS ( 5.79 килобайт ) Кол-во скачиваний: 243 |
blackhard |
Сообщение
#19
|
Бывалый Группа: Пользователи Сообщений: 151 Пол: Мужской Реальное имя: иван Репутация: 0 |
вот начал переделывать прогу для работы с машинным кодом сделал вначале только для 2х команд ввод и вывод
Program processor;может конечно не рационально но я другого способа не знаю. 000001 000001 000000 000000 000011 000010 000001 000000 000000 сдесь я в регистр 1 ввожу число 3 и вывожу егог на экран кстати по заданию даже если команда использует 1 регистр номера других должны быть просто нулями так вот помогите переделать команду условия темже способом вот она procedure Uslov;а то я чето не врубаюсь че делать со знаками условия |
Mlc |
Сообщение
#20
|
Гость |
У тебя на код команды отводится 6 бит, а команд на самом деле меньше. Надо на каждый вид условия (если равно то, если > то, если меньше то, и т.д.) выделить отдельный код команды. Тогда в 1 и 2 операндах будут регистры, а в 3-ем адрес перехода при верном условии.
|
Текстовая версия | 13.05.2024 13:20 |