0 / 0 / 0
Регистрация: 18.10.2015
Сообщений: 104
1

Изменять содержимое внутренних регистров контроллера CRT до срыва изображения

25.10.2016, 13:55. Показов 647. Ответов 13
Метки нет (Все метки)

Надо написать программу, которая изменяет содержимое внутренних регистров контроллера. Сначала надо сохранить содержимое исследуемого регистра, а потом изменять в цикле его значение от 0 до 255 , например, через единицу, по каждому нажатию клавиши. Доступ к внутренним регистрам через два регистра с аппаратными адресами 0x3d4 и 0x3d5.
Регистры имеют номера в 16-ричной системе 1, A, B.

Буду благодарна за помощь, а то я совсем запуталась как это нужно сделать.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.10.2016, 13:55
Ответы с готовыми решениями:

Содержимое регистров
Здравствуйте Знатоки и Программисты! Очень нужна Ваша помощь! Я начинающий программист, и мне...

Название и содержимое регистров
помогите пожалуйста Написать программу, выводящую на экран названия и содержимое регистров...

Определить содержимое регистров по уравнению
Всем привет! Ребята, помогите пожалуйста решить такое вот уравненице.. (AX+BX)/3 - (DX+CX)*2 =...

Обменять содержимое сегментных регистров DS и ES
Вот задачка: Обменять содержимое сегментных регистров DS и ES. У меня получилось вот так: MOV...

13
131 / 157 / 87
Регистрация: 06.04.2016
Сообщений: 992
25.10.2016, 13:58 2
1) Забыли сказать какой контроллер.
2) Щас модераторы тебя выкинут в другую тему, потому что здесь для компа пишут, для контроллеров другая тема.
0
0 / 0 / 0
Регистрация: 18.10.2015
Сообщений: 104
26.10.2016, 11:59  [ТС] 3
DemolitionMan, контроллер ЭЛТ
0
131 / 157 / 87
Регистрация: 06.04.2016
Сообщений: 992
26.10.2016, 12:29 4
Ничего не понял, какой еще контроллер ЭЛТ? Электролюминисцентной трубки? Видюха что-ли? Тот контроллер, который внутри монитора, мы к нему не имеем доступа без разбора монитора.
0
0 / 0 / 0
Регистрация: 18.10.2015
Сообщений: 104
26.10.2016, 12:53  [ТС] 5
DemolitionMan, к контроллеру ЭЛТ можно обратиться через регистры.
Вот само задание. К сожалению, я не слишком понимаю, что нужно делать.
0
Вложения
Тип файла: rar Контрольная работа.rar (44.5 Кб, 4 просмотров)
131 / 157 / 87
Регистрация: 06.04.2016
Сообщений: 992
26.10.2016, 13:09 6
Ну примерно понял, короче, задание. Это нужно старую машину с Windows 98 на ней для доступа к портам ввода-вывода. Мой C++Builder 6 вполне бы подошел для решения этой задачи. Задача сложная, нужно знать низкоуровневое программирование. Вообще это задача про режимы видюхи. К видюхе мы обращаемся через порты ввода-вывода.
Там хоть и написано, что Windows XP дает обращение к портам ввода-вывода, но по-моему нифига она не дает, будет Access Violation - нарушение доступа.
Это, короче, тема для компов, а не для микроконтроллеров. Я опять тупанул, извиняюсь. Тему опять нужно переносить обратно.
0
0 / 0 / 0
Регистрация: 18.10.2015
Сообщений: 104
26.10.2016, 13:42  [ТС] 7
DemolitionMan, то есть нужно будет создать в виртуалке режим Windows 98? И C++Builder у меня тоже есть. Правда не помню какая версия.
Да и с низкоуровневым у меня проблемы. Я больше на с# работаю, поэтому тут у меня сложности.
Если не трудно, то не могли бы вы немного объяснить?
0
131 / 157 / 87
Регистрация: 06.04.2016
Сообщений: 992
26.10.2016, 13:53 8
Вот, короче, основная суть задания(картинка снизу) - на Си написаны команды записи и чтения из порта. Осталось только прикрепить реакцию на нажатие кнопки и все!
С виртуальными машинами не работал, но это, по-ходу, то что нужно.
0
Миниатюры
Изменять содержимое внутренних регистров контроллера CRT до срыва изображения  
0 / 0 / 0
Регистрация: 18.10.2015
Сообщений: 104
26.10.2016, 14:04  [ТС] 9
DemolitionMan, спасибо за помощь. Постараюсь сделать.
Если будут вопросы, то я могу к вам обратиться?
0
131 / 157 / 87
Регистрация: 06.04.2016
Сообщений: 992
26.10.2016, 16:58 10
Можете, но я этой темой давно занимался, сильно не смогу помочь, так по-мелочи помогу.

Добавлено через 16 минут
Вот примерный план программы. Функции чтения и записи:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void WriteInPort(short int Address, int Value)
{
    outportb(0x3D4, Address);
    outportb(0x3D5, Value);
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
int ReadFromPort(short int Address)
{
    int Value;
    
    outportb(0x3D4, Address);
    Value = inportb(0x3D5);
    return Value;
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Теперь вызываем эти функции, когда нам нужно что-то записать или прочитать, чтобы задание выполнялось.
Прежде всего нужно навесить на событие OnCreate формы чтение из 1 регистра(и со всеми теми с которыми хотим работать) и сохранить это значение на время работы программы. Потом при закрытии нужно навесить обработчик события OnDestroy формы запись всех этих значений, которые были прочитаны ранее.
Потом нужно навесить на событие OnKeyUp или OnKeyPress(нажатие кнопки, когда работает оконное приложение, Application) и в нем написать прибавление величины(глобальная переменная) от 0 до 255(тип unsigned char, как в задании) и записать ее в регистр.
1
0 / 0 / 0
Регистрация: 18.10.2015
Сообщений: 104
26.10.2016, 17:25  [ТС] 11
DemolitionMan, вот я сама пыталась написать, но не слишком уверена, что получилось верно.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#include <dos.h>
#include <stdio.h>
#include <conio.h>
int getportval(int portnum)
{
  outportb(0x3D4,portnum);
  return inportb(0x3D5);
}
void setportval(int portnum, int val)
{
  outportb(0x3D4,portnum);
  outportb(0x3D5,val);
}
int main()
{
  printf("0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25");
  int StValA =getportval(0x0A);
  int ValA = StValA;
  int StValE =getportval(0x0B);
  int ValB = StValB;
  int StVal1 =getportval(0x1);
  int Val1 = StVal1;
  printf("%d",Val1);
  while(1)
  {
    char com = getch();
    if(com == 'c')
      break;
    else if(com == 'r')
    {
      if(ValA != 15)
      {
    setportval(0x0A,++ValA);
      }
      else
      {
    putch(7);
      }
    }
    else if(com == 'f')
    {
      if(ValA != 0)
      {
    setportval(0x0A,--ValA);
      }
      else
      {
    putch(7);
      }
    }
    else if(com == 'e')
    {
      if(ValB != 8)
      {
    setportval(0x0B,++ValB);
      }
      else
      {
    putch(7);
      }
    }
    else if(com == 'd')
    {
      if(ValB != 0)
      {
    setportval(0x0B,--ValB);
      }
      else
      {
    putch(7);
      }
    }
    else if(com == 'w')
    {
      if(Val1 != 1)
      {
    setportval(0x1,++Val1);
    printf("\b\b\b%d",Val1);
      }
      else
      {
    putch(7);
      }
    }
    else if(com == 's')
    {
      if(Val1 != 0)
      {
    setportval(0x1,--Val1);
    printf("\b\b\b%d",Val1);
      }
      else
      {
    putch(7);
      }
    }
    else if(com == 'q')
    {
      if(Val1 != 1)
      {
    setportval(0x1,++Val1);
    printf("\b\b\b%d",Val1);
      }
      else
      {
    putch(7);
      }
    }
    else if(com == 'a')
    {
      if(Val1 != 0)
      {
    setportval(0x1,--Val1);
    printf("\b\b\b%d",Val1);
      }
      else
      {
    putch(7);
      }
    }
    else if(com == 'v')
    {
      setportval(0x0A,StValA);
      ValA=StValA;
      setportval(0x0B,StValB);
      ValE=StValB;
      setportval(0x1,StVal1);
      Val1=StVal1;
      setportval(0x1,StVal1);
      Val1=StVal1;
    }
  }
  setportval(0x0A,StValA);
  setportval(0x0B,StValB);
  setportval(0x1,StVal1);
  setportval(0x1,StVal1);
  return 0;
}
0
131 / 157 / 87
Регистрация: 06.04.2016
Сообщений: 992
27.10.2016, 08:54 12
Я понял задание по-другому. Нужно по нажатию клавиши постоянно прибавлять к значениям, видимо, всех 3-х регистров(1, А, В) по 1 начиная от 0 до 255. У Вас сделано как-то по-другому, правда я не понял, зачем эти пороги:
1) 8 - в строке 53;
2) 1 - в строке 75;
3) 15 - в строке 31;
4) 1 - в строке 99.
Правда все это не нужно, если правильно делать задание. Заведи цикл
C++
1
for(n = 0; n <= 255; n++)
И в этом цикле записывай переменную во все 3 регистра(1, А, В).
Повторы кода из строк 127 и 128, в строках 129 и 130. То же самое из строк 133 и 134, в строки 135 и 136.
А что такое
C++
1
putch(7);
- это типа Beep; такой что-ли?
0
0 / 0 / 0
Регистрация: 18.10.2015
Сообщений: 104
27.10.2016, 14:58  [ТС] 13
DemolitionMan, спасибо, теперь понятнее.
А putch() выводит на экран символ, указанный в ch.
0
131 / 157 / 87
Регистрация: 06.04.2016
Сообщений: 992
27.10.2016, 18:00 14
Ну я посмотрел, это Beep(). Так?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.10.2016, 18:00

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Вывести содержимое регистров в двоичном виде
Подскажите как в debug вывести на экран содержимое регистров BX и DI в двоичном виде

Codewars nasm, отобразить содержимое регистров
Эмулятор ассемблера через сайт, см скриншот Возможно ли как-то смотреть содержимое регистров...

Содержимое регистров при переходе от Delphi к Assembler
Здравствуйте. Скажите пожалуйста, при систематическом входе и выходе из Assembler, содержание...

Скопировать содержимое 2-го банка регистров в 3-й в обратном порядке
Приветствую, помогите с задачей в Assembler i80C51 вот в этом эмуляторе Скопировать содержимое...

Загрузить в стек содержимое всех сегментных регистров
Сделать на Си с ассемблерной вставкойЗагрузить в стек содержимое всех сегментных регистров и сумм...

Найти содержимое регистров после выполнения группы команд
Задано содержимое регистров AL, BL i DL. Найти содержимое регистров после выполнения группы команд:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.