Форум программистов, компьютерный форум, киберфорум
ОС на Assembler
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.69/29: Рейтинг темы: голосов - 29, средняя оценка - 4.69
8 / 8 / 5
Регистрация: 28.03.2014
Сообщений: 137

Способы переключения видео режимов на современных видеокартах в защищенном режиме

24.08.2015, 09:57. Показов 6307. Ответов 51
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Давайте обсуждать способы переключения видео режимов на современных видеокартах в защищенном режиме.

Кто может, выкладывайте маны или код.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.08.2015, 09:57
Ответы с готовыми решениями:

Артефакты переключения режимов...
Добрый день.. помогите пожалуйста исправить код...не получается нормально переключать режимы и выбирать цвета..

Память в защищенном режиме
Всем доброго дня! Я, наконец, сдал основные экзамены и теперь снова могу заняться столь интересным для меня делом!)) Я многое забыл и...

Прерывания в защищенном режиме
Помогите пожалуйста разобраться с прерываниями в защищенном режиме.Какие обращения к памяти есть. Какие ошибки могут быть, есть ли...

51
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
06.10.2015, 10:38
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Полный 30h Посмотреть сообщение
В 32 сообщении имелось ввиду что movsq быстрее чем movsd.
А это то с какой стати? Она только оперирует данными в два раза больше.

Цитата Сообщение от Полный 30h Посмотреть сообщение
И если бы он выполнялся как loop, то какой смысл его было в отдельную команду выделять?
Судя по всему, только для удобства.
0
Эксперт быдлокодинга
 Аватар для Полный 30h
2095 / 529 / 70
Регистрация: 04.11.2010
Сообщений: 1,314
06.10.2015, 10:59
Цитата Сообщение от castaway Посмотреть сообщение
А это то с какой стати? Она только оперирует данными в два раза больше.
Интересно, если вам зарплату давать в два раза меньше, вы тоже никакой разницы не почувствуете?
Объем передаваемых данных в единицу времени возрастет в два раза. Ну или время передачи данных снизится в два раза, при том же объеме. Школьный курс информатики на минуточку.
Цитата Сообщение от castaway Посмотреть сообщение
Судя по всему, только для удобства.
Не по всему, а по вашему. Руcским по белому же написал. rep и loop не однозначны не только для меня но и для IDA с Olly. Более того, у них даже опкоды не едентичны. Это вам не JAE и JNC
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
06.10.2015, 11:25
Цитата Сообщение от Полный 30h Посмотреть сообщение
Объем передаваемых данных в единицу времени возрастет в два раза.
Вот не надо быть таким голословным. Попробуй сделать разные тесты с пересылкой байт, слов, двойных слов. И замерь время.

Добавлено через 25 секунд
Цитата Сообщение от Полный 30h Посмотреть сообщение
не однозначны не только для меня но и для IDA с Olly. Более того, у них даже опкоды не едентичны.
Иии?

Добавлено через 57 секунд
Цитата Сообщение от Полный 30h Посмотреть сообщение
Интел прямо так и пишет - эту инструкцию мы слепили из чёрти чего и хрен пойми как?
Интел прямо пишет как работает эта инструкция.

Добавлено через 5 минут
Цитата Сообщение от Полный 30h Посмотреть сообщение
И если бы он выполнялся как loop, то какой смысл его было в отдельную команду выделять?
Для не читателей:
Цитата Сообщение от rep
Operation
IF AddressSize = 16
THEN
Use CX for CountReg;
Implicit Source/Dest operand for memory use of SI/DI;
ELSE IF AddressSize = 64
THEN Use RCX for CountReg;
Implicit Source/Dest operand for memory use of RSI/RDI;
ELSE
Use ECX for CountReg;
Implicit Source/Dest operand for memory use of ESI/EDI;
FI;
WHILE CountReg ≠ 0
DO
Service pending interrupts (if any);
Execute associated string instruction;
CountReg ← (CountReg – 1);
IF CountReg = 0
THEN exit WHILE loop; FI;
IF (Repeat prefix is REPZ or REPE) and (ZF = 0)
or (Repeat prefix is REPNZ or REPNE) and (ZF = 1)
THEN exit WHILE loop; FI;
OD;
Цитата Сообщение от loop
Operation
IF (AddressSize = 32)
THEN Count is ECX;
ELSE IF (AddressSize = 64)
Count is RCX;
ELSE Count is CX;
FI;
Count ← Count – 1;
IF Instruction is not LOOP
THEN
IF (Instruction ← LOOPE) or (Instruction ← LOOPZ)
THEN IF (ZF = 1) and (Count ≠ 0)
THEN BranchCond ← 1;
ELSE BranchCond ← 0;
FI;
ELSE (Instruction = LOOPNE) or (Instruction = LOOPNZ)
IF (ZF = 0 ) and (Count ≠ 0)
THEN BranchCond ← 1;
ELSE BranchCond ← 0;
Opcode Instruction Op/
En
64-Bit
Mode
Compat/
Leg Mode
Description
E2 cb LOOP rel8 D Valid Valid Decrement count; jump short if count ≠ 0.
E1 cb LOOPE rel8 D Valid Valid Decrement count; jump short if count ≠ 0 and
ZF = 1.
E0 cb LOOPNE rel8 D Valid Valid Decrement count; jump short if count ≠ 0 and
ZF = 0.
Op/En Operand 1 Operand 2 Operand 3 Operand 4
D Offset NA NA NA
LOOP/LOOPcc—Loop According to ECX Counter
INSTRUCTION SET REFERENCE, A-M
3-494 Vol. 2A
FI;
FI;
ELSE (* Instruction = LOOP *)
IF (Count ≠ 0)
THEN BranchCond ← 1;
ELSE BranchCond ← 0;
FI;
FI;
IF BranchCond = 1
THEN
IF OperandSize = 32
THEN EIP ← EIP + SignExtend(DEST);
ELSE IF OperandSize = 64
THEN RIP ← RIP + SignExtend(DEST);
FI;
ELSE IF OperandSize = 16
THEN EIP ← EIP AND 0000FFFFH;
FI;
FI;
IF OperandSize = (32 or 64)
THEN IF (R/E)IP < CS.Base or (R/E)IP > CS.Limit
#GP; FI;
FI;
FI;
ELSE
Terminate loop and continue program execution at (R/E)IP;
FI;
Добавлено через 2 минуты
Цитата Сообщение от movs
DEST ← SRC;
Non-64-bit Mode:
IF (Byte move)
THEN IF DF = 0
THEN
(E)SI ← (E)SI + 1;
(E)DI ← (E)DI + 1;
ELSE
(E)SI ← (E)SI – 1;
(E)DI ← (E)DI – 1;
FI;
ELSE IF (Word move)
THEN IF DF = 0
(E)SI ← (E)SI + 2;
(E)DI ← (E)DI + 2;
FI;
ELSE
(E)SI ← (E)SI – 2;
(E)DI ← (E)DI – 2;
FI;
ELSE IF (Doubleword move)
THEN IF DF = 0
(E)SI ← (E)SI + 4;
(E)DI ← (E)DI + 4;
FI;
ELSE
(E)SI ← (E)SI – 4;
(E)DI ← (E)DI – 4;
FI;
FI;
...

Добавлено через 9 минут
loop без мусора
IF (AddressSize = 32)
THEN Count is ECX;
ELSE IF (AddressSize = 64)
Count is RCX;
ELSE Count is CX;
FI;
Count ← Count – 1;
IF Instruction is not LOOP
THEN
IF (Instruction ← LOOPE) or (Instruction ← LOOPZ)
THEN IF (ZF = 1) and (Count ≠ 0)
THEN BranchCond ← 1;
ELSE BranchCond ← 0;
FI;
ELSE (Instruction = LOOPNE) or (Instruction = LOOPNZ)
IF (ZF = 0 ) and (Count ≠ 0)
THEN BranchCond ← 1;
ELSE BranchCond ← 0;
FI;
FI;
ELSE (* Instruction = LOOP *)
IF (Count ≠ 0)
THEN BranchCond ← 1;
ELSE BranchCond ← 0;
FI;
FI;
IF BranchCond = 1
THEN
IF OperandSize = 32
THEN EIP ← EIP + SignExtend(DEST);
ELSE IF OperandSize = 64
THEN RIP ← RIP + SignExtend(DEST);
FI;
ELSE IF OperandSize = 16
THEN EIP ← EIP AND 0000FFFFH;
FI;
FI;
IF OperandSize = (32 or 64)
THEN IF (R/E)IP < CS.Base or (R/E)IP > CS.Limit
#GP; FI;
FI;
FI;
ELSE
Terminate loop and continue program execution at (R/E)IP;
FI;
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
06.10.2015, 11:40
Цитата Сообщение от Полный 30h Посмотреть сообщение
Не по всему, а по вашему.
Не вижу смысла что-то доказывать. Вы либо не понимаете о чём я говорю, либо просто троль.
0
Эксперт быдлокодинга
 Аватар для Полный 30h
2095 / 529 / 70
Регистрация: 04.11.2010
Сообщений: 1,314
06.10.2015, 23:38
Цитата Сообщение от shmkv Посмотреть сообщение
Вот не надо быть таким голословным. Попробуй сделать разные тесты с пересылкой байт, слов, двойных слов. И замерь время.
Вот не надо гуру из себя корчить. Взял, замерил
Вложение 583019
Внезапно оказалось что голословен не я. Циферки в file time
Цитата Сообщение от shmkv Посмотреть сообщение
Иии?
Клавиатуру чистить надо. Буковка "и" залипает.
Цитата Сообщение от shmkv Посмотреть сообщение
Интел прямо пишет как работает эта инструкция.
Цитата Сообщение от shmkv Посмотреть сообщение
Для не читателей:
А тебе не приходило в голову, что как бы не работала инструкция алгоритм выполнения будет описан всё равно последовательно. Когда как в реальности (в аппаратной части) некоторые вещи могут происходить параллельно. К примеру "Паша ест кашу и смотрит телевизор" описывается как цепочка. Когда как Паша оба дела может делать одновременно. Так же дела могут обстоять и у процессора. Например ему при команде REP ничего (с точки зрения логики) не мешает на одних и тех же тактах выполнять команду MOV и инкриминировать регистр CX. Когда как команда loop не может себе позволить такой роскоши с предстоящей командой.
Цитата Сообщение от castaway Посмотреть сообщение
Не вижу смысла что-то доказывать. Вы либо не понимаете о чём я говорю, либо просто троль.
А я вот нашёл смысл что то доказывать. (см. скрин выше) И цифры показали, что не понимаете как раз вы.

UPD
Название: test.jpg
Просмотров: 65

Размер: 19.5 Кб

бралось 4000000h байт памяти и командой mosq и movsd гонялась цепочка 4000000h/8 и 4000000h/4 соответственно.
И так по 200h кругов что бы наколотить время. Время замерялось до и после. Круги организовывал на dec r8?
rep movsq всегда был быстрее.

Кликните здесь для просмотра всего текста
Assembler
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
format PE64 GUI 5.0
entry Start
 
include 'win64a.inc'
Value = 4000000h
Cycles_64 = Value/8
Cycles_32 = Value/4
Repetitions = 200h
 
 
struc ftime {
.Low  dd ?
.High dd ?
}
  _Start ftime
  _Finish ftime
section '.text' code readable executable
 
Start:
  sub rsp, 8        ; Make stack dqword aligned
 
  invoke Beep,500,500
;###############################################################################
  invoke GetSystemTimeAsFileTime,_Start
;===============================================================================
  mov r8,Repetitions  
AA: 
;-------------------------------------------------------------------------------
  mov rcx,Cycles_64
  mov rsi,A
  mov rdi,A
  rep movsq 
;------------------------------------------------------------------------------- 
  dec r8
  jnz AA
;===============================================================================
  invoke GetSystemTimeAsFileTime,_Finish
  invoke Beep,500,500
  mov r15,[_Finish]
  sub r15,[_Start]
;###############################################################################  
  invoke GetSystemTimeAsFileTime,_Start
;=============================================================================== 
  mov r8,Repetitions  
BB:
;-------------------------------------------------------------------------------
  mov rcx,Cycles_64
  mov rsi,A
  mov rdi,A
@@:  movsq 
  loop @r
;-------------------------------------------------------------------------------
  dec r8
  jnz BB
;===============================================================================   
  invoke GetSystemTimeAsFileTime,_Finish
  invoke Beep,500,500
  mov r14,[_Finish]
  sub r14,[_Start]
;###############################################################################
  invoke GetSystemTimeAsFileTime,_Start
;=============================================================================== 
  mov r8,Repetitions  
CC:
;-------------------------------------------------------------------------------
  mov rcx,Cycles_32
  mov esi,A
  mov edi,A
  rep movsd 
;-------------------------------------------------------------------------------
  dec r8
  jnz CC
;===============================================================================   
  invoke GetSystemTimeAsFileTime,_Finish
  invoke Beep,500,500
  mov r13,[_Finish]
  sub r13,[_Start]
;###############################################################################
  invoke GetSystemTimeAsFileTime,_Start
;=============================================================================== 
  mov r8,Repetitions  
EE:
;-------------------------------------------------------------------------------
  mov rcx,Cycles_32
  mov esi,A
  mov edi,A
@@:  movsd 
  loop @r
;-------------------------------------------------------------------------------
  dec r8
  jnz EE
;===============================================================================   
  invoke GetSystemTimeAsFileTime,_Finish
  invoke Beep,500,500
  mov r12,[_Finish]
  sub r12,[_Start]
;###############################################################################
   
  invoke wnsprintf,String,127,StrForm,r15,r14,r13,r12
  invoke MessageBox, NULL,String, Title, MB_OK      
  invoke ExitProcess,NULL
 
section '.data' data readable writeable  
  String rb 128
  StrForm db 'rep_64  Время  %d',0ah,0dh,'loop_64 Время  %d',\
              0ah,0dh,'rep_32   Время  %d',0ah,0dh,'loop_32 Время  %d',0    
  Title db 'Test', 0
  A rq  Value
section '.idata' import data readable writeable
 
  library kernel32, 'KERNEL32.DLL',user32, 'USER32.DLL',shlwapi,'SHLWAPI.DLL'
  include 'api\kernel32.inc'
  include 'api\user32.inc'
  import shlwapi,wnsprintf,'wnsprintfA'
1
1127 / 261 / 9
Регистрация: 11.06.2010
Сообщений: 1,049
07.10.2015, 06:11
Полный, тут проблема была не просто в копировании, а в копировании из обычной памяти в LFB. И movsd была упомянута чисто из-за того, что я имел в виду 32 битный защищенный режим. Конечно, в 64-битном можно юзать movsq. Если хочешь тестить, то тестить придется на голом железе и копировать придется в LFB. У меня всё.
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
07.10.2015, 07:02
Цитата Сообщение от Полный 30h Посмотреть сообщение
Вот не надо гуру из себя корчить. Взял, замерил
Проц какой?
Я тоже замерял coe2 duo E7500, копирование 256М памяти, х86 (без 64)
Assembler
1
2
3
4
5
6
7
8
mov ESI, p1
mov EDI, p2
mov ECX, n
@rep:
sub ECX, 4
mov EAX, [ESI+ECX]
mov [EDI+ECX], EAX
jnz @rep
time = 141 мс

Assembler
1
2
3
4
5
mov ESI, p1
mov EDI, p2
mov ECX, n / 4
cld
rep movsd
time = 281

Добавлено через 2 минуты
Но я не исключаю, что на самыхновых процах это не так. Т. к. интел совсем недавно, после нескольких десятков лет раздумий, решила таки реально заточить movs для копирования памяти. пруф
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
07.10.2015, 07:05
Цитата Сообщение от shmkv Посмотреть сообщение
Проц какой?
"Дело было не в бабине...". Он не понимает о чём речь.
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
07.10.2015, 07:14
Хотя, если четсно, достоверность изложенной там инфы вызывает у меня сомнения.

Добавлено через 7 минут
Ну и конечно же для MMIO можно получить совсем другие результаты.
0
1127 / 261 / 9
Регистрация: 11.06.2010
Сообщений: 1,049
07.10.2015, 07:21
Вообще в ось без специальных дров можно вклбчить несколько вариантов записи кадра. При инициализации потом ищем самый быстрый и юзаем его в дальнейшем.
0
Эксперт быдлокодинга
 Аватар для Полный 30h
2095 / 529 / 70
Регистрация: 04.11.2010
Сообщений: 1,314
07.10.2015, 08:46
Цитата Сообщение от sh2ezo Посмотреть сообщение
Если хочешь тестить, то тестить придется на голом железе и копировать придется в LFB. У меня всё.
Я пожалуй воздержусь. Очень не хочется высказываний без аргументов от отдельных экспертов в ответ на потраченное время тут выслушивать.
Цитата Сообщение от shmkv Посмотреть сообщение
Проц какой?

Цитата Сообщение от shmkv Посмотреть сообщение
Я тоже замерял coe2 duo E7500, копирование 256М памяти, х86 (без 64)
Я специально брал объем памяти не превышающей сотни мегабайт, а несколько меньше. Потому что опасался что при большом объеме операционная система частично выдаст её ну совсем виртуальную т.е. на диске. И тогда эксперемент упрется в измерение скорости чтения/записи винта.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
07.10.2015, 16:45
Цитата Сообщение от Полный 30h Посмотреть сообщение
А я вот нашёл смысл что то доказывать...
Разумеется будет прирост в скорости за счёт перемещения 8-и байт в итерацию вместо 4-х.
Что ты пытаешься доказать? То что movsq работает с данными в два раза больше чем movsd? Это и так все знают.
Изначально я говорил о "развёрнутом" цикле, и он будет быстрее чем любой movs*.
А пока что ты "едешь в Тулу со своим самоваром"...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.10.2015, 16:45

Принципы адресации в защищенном режиме
Здраствуйте, давно когда начинал заниматься ассемблером не разобрался с одним вопросом ... начал заниматься программированием в другой...

Удаленный доступ в защищенном режиме
Обычный удаленный доступ: Ввожу IP, пользователя и пароль, а затем подключаюсь. Мне не нравится, что безопасность зависит от каких-то двух...

Не обрабатываются прерывания в защищенном режиме
Здравствуйте! Помогите, пожалуйста, найти и исправить ошибку. Программа должна переводить процессор в защищенный режим и обрабатывать...

Работа с файлами в защищенном режиме
Здравствуйте, я взялся писать ОС, уже готов загрузчик переводящий в защищенный режим процессор, IDT GDT разумеется тоже. Хотелось бы...

Размер программы в защищенном режиме
и снова возникли проблемы. Дело в том,что при достижении определенного размера программы,она перестает работать,а порою работает с...


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

Или воспользуйтесь поиском по форуму:
52
Ответ Создать тему
Новые блоги и статьи
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru