![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
NoRToN |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 18 Пол: Мужской Репутация: ![]() ![]() ![]() |
Разработать виртуальный процессор для логических операций над битовыми строками.
Система команд – логические операции над содержимым 32-разрядных регистров , ввод и вывод содержимого регистров в шестнадцатеричной форме , считывание содержимого регистра в выделенный регистр (сумматор) и запись в регистр содержимого сумматора. Команды записываются в мнемонической форме с указанием имени регистра , в котором содержится один из операндов , второй операнд берётся из сумматора. Результат операции записывается в сумматор. Дать описание системы команд и программу для вычисления значений булевской функции. ПОМОГИТЕ. Заранее спасибо |
Altair |
![]()
Сообщение
#2
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
То есть вы просите написать всю систему??
Если есть конекретные вопросы, тогда другое дело ... 1. требуется определить чем будем эмулировать регистры (не забываем что 32 разрядние - то есть 4 байта... можно использовать как регистр число типа LONGINT)... 2. ввод чисел в шестнадцатиричное СС - в FAQ'е есть процедура для конвертирования. То есть вводим в 16. а работаем в 10. -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
NoRToN |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 18 Пол: Мужской Репутация: ![]() ![]() ![]() |
Просто я не представляю ,что эта программа должна делать. Пример хотя бы.
Добавлено позже: Я могу решать только простые задачи. А это задача не по мне... Помогите мне с решением ![]() |
Altair |
![]()
Сообщение
#4
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Цитата Просто я не представляю ,что эта программа должна делать. Пример хотя бы. Она должна эмулировать работу процессора. напрмер ввожу я 2 чсила. И она показывает в какие регистры что помещает, и как вычисляет пошагово - все это должно быть визуализированно. -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
volvo |
![]()
Сообщение
#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. |
NoRToN |
![]()
Сообщение
#6
|
Новичок ![]() Группа: Пользователи Сообщений: 18 Пол: Мужской Репутация: ![]() ![]() ![]() |
А как здесь сделать, чтобы ввод и вывод осуществлялся в 16-ой форме.(в вирт процессе)
А тут, чтобы коэффициенты матрицы вводились с клавиатуры censored Сообщение отредактировано: volvo - 24.12.2004 20:58 |
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
NoRToN
Цитата А как здесь сделать, чтобы ввод и вывод осуществлялся в 16-ой форме.(в вирт процессе) Ввод осуществляется в строку, найди, где она преобразуется в число и делай, что тебе надо... Только зачем? Ты что, сможешь контролировать результат в 16-ой системе? А вот второй вопрос к этой теме не относится... Спрашивай там, где программа была написана... |
NoRToN |
![]()
Сообщение
#8
|
Новичок ![]() Группа: Пользователи Сообщений: 18 Пол: Мужской Репутация: ![]() ![]() ![]() |
хорошо. Просто по заданию надо в 16 форме , а у мен яне получилось переделать
|
lidok |
![]()
Сообщение
#9
|
Гость ![]() |
как сделать с сумматором я знаю, а как с 3 регистрами - нет. И что такое условный, безусловный переходы и мнемоническая форма??
|
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
lidok
Если человек знает, как сделать с сумматором, то для 3-х регистров переделать - для него не проблема ... Тем более, что сумматор ведь тоже регистр ... |
lidok |
![]()
Сообщение
#11
|
Гость ![]() |
И как это сделать?? Ты знаешь??
Сообщение отредактировано: lidok - 26.12.2004 1:53 |
1nvaL |
![]()
Сообщение
#12
|
Группа: Пользователи Сообщений: 7 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Спасибо за этот пример! Вобщем мне сказали вот что:
текст программы в машинных кодах должен считываться из отдельного текстового файла. Ты не мог бы помоч мне это сделать??? |
Гость |
![]()
Сообщение
#13
|
Гость ![]() |
Приведите пример программы к етому процессору =)
|
![]() ![]() |
![]() |
Текстовая версия | 18.07.2025 16:32 |