Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Examle
1 / 1 / 0
Регистрация: 11.06.2017
Сообщений: 2
#1

Определение ёмкости видеопамяти - Assembler

01.12.2017, 01:13. Просмотров 204. Ответов 4
Метки нет (Все метки)

Необходимо написать программу с асемблерной вставкой на pascal для нахождения емкости видеопамяти.
http://www.cyberforum.ru/assembler/thread617268.html
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.12.2017, 01:13
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Определение ёмкости видеопамяти (Assembler):

Банки видеопамяти
Привет! У меня большие проблемы с пониманием видеопамяти! Я вроде разобрался с...

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

Вывод содержания видеопамяти
Как вывести на экран содержимое видеопамяти в DOS? По какому адресу она...

Начало и конец видеопамяти
Допустим видеокарта имеет в себе 512 мегабайт памяти. Как получить к ним...

Прямое программирование видеопамяти
Доброго времени суток! Нужна программа, которая создает в левом верхнем углу...

4
R71MT
2979 / 1109 / 264
Регистрация: 29.07.2014
Сообщений: 2,118
Записей в блоге: 4
01.12.2017, 01:52 #2
Лучший ответ Сообщение было отмечено Examle как решение

Решение

.ищи сигнатуру 55AAh в блоках по 512-байт, начиная с адреса 0A000:0h
(найдёшь её по адресу C000:0h. с этого адреса начинаются ROM встроеных устройств)
1
Argogo
488 / 232 / 39
Регистрация: 29.03.2013
Сообщений: 495
01.12.2017, 08:17 #3
Int 10/AX=4F00h
слово по смещению 12h содержит объём видеопамяти в 64KB блоках.
12h WORD total amount of video memory in 64K blocks
Так можно получить объём до (4GB-64KB), теоретически. Как получить объём свыше 4GB мне не ведомо.
3
Examle
1 / 1 / 0
Регистрация: 11.06.2017
Сообщений: 2
03.01.2018, 21:16  [ТС] #4
Я читал про адресное пространство, но не могу понять как собрать все в коде, чтобы вычислить емкость
0
ФедосеевПавел
Модератор
3412 / 1909 / 815
Регистрация: 01.02.2015
Сообщений: 6,449
04.01.2018, 00:23 #5
Лучший ответ Сообщение было отмечено Examle как решение

Решение

Pascal
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
program VideoMem;
 
type
  TSVGAInfo = packed record
    fSignature: array [0..3] of char;
    fVersion: word;
    fOemName: PChar;
    fCapabilitesFlag: array [0..3] of byte;
    fListVideoModes: Pointer;
    fVideoMemorySize: word;
 
    fOemSoftwareVersion: word;
    flptrVendorName: Pointer;
    flptrProductName: Pointer;
    flptrProductRevision: Pointer;
    fVbeAfVersion: word;
    fListAccelVideoMode: Pointer;
    fReserved1: array [1..216] of byte;
    fOemScratchpad: array [0..255] of byte;
  end;
 
var
  svgaInfo: TSVGAInfo;
  VideoSize: longint;
 
begin
  asm
        push    es
        push    ds
        pop     es
        mov     ax,     4F00h
        mov     di,     offset  svgaInfo
        int     10h
        pop     es
        cmp     ax,     004Fh
        jne     @@NoVBE
 
        mov     ax,     [di+12h]
        mov     bx,     64
        mul     bx
        mov     word ptr [VideoSize],   ax
        mov     word ptr [VideoSize+2], dx
        jmp     @@ToMain
  @@NoVBE:
        push    es
        mov     ax,     0040h
        mov     es,     ax
        mov     al,     es:[0087h]
        pop     es
 
        and     ax,     1100000b
        add     ax,     0100000b
        shl     ax,     1
        mov     word ptr [VideoSize],   ax
        mov     word ptr [VideoSize+2], 0
  @@ToMain:
  end;
 
  writeln('Video memory: ', VideoSize, ' KByte');
end.
Добавлено через 3 минуты
Самостоятельно разберётесь с вызовами
http://www.ctyme.com/intr/rb-0273.htm

На случай отсутствия VESA вторая ветвь. Не помню откуда взял
Код
CRT_Info      0040:0087 бит  7   отражает состояние бита 7 (сохранение/
                                 очистка видеобуфера при установке нового
                                 видеорежима) в регистре AL функции 0
                                 прерывания INT 10h
                        биты 6-5 размер памяти видеобуфера
                                 00 -  64K
                                 01 - 128K
                                 10 - 192K
                                 11 - 256K
                        бит  4   (резерв)
                        бит  3   1 - видеосистема не активна
                        бит  2   1 - BIOS должен ожидать VERTICAL RETRACE
                                 перед выполнением некоторых функций (затем
                                 BIOS обнуляет этот флаг).
                        бит  1   1 - видеосистема связана с монохромным дисплеем
                        бит  0   1 - разрешена эмуляция текстового курсора
2
04.01.2018, 00:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.01.2018, 00:23
Привет! Вот еще темы с решениями:

Прямое программирование видеопамяти
Привет мальчики и девочки:) Помогите пожалуйста сделать задание, потому что я...

Прямой доступ к видеопамяти
Здраствуйте уважаемы программеры! У меня к вам огромная просьба не могу...

Основы работы с областью видеопамяти
Программа, выводящая на экран таблицу ASCII в окне размером 16x16 и...

Прямой доступ к видеопамяти в режиме VESA
Если у кого-то есть код программы вывода на экран точки, графика, линии и т. д....


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

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

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