Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2016, 22:13   #1
User7991
 
Регистрация: 29.05.2016
Сообщений: 3
По умолчанию VESA 4f00h - как считать информацию из буфера?

Всем привет,
документация по VESA говорит что при вызове функции 4f00h и передаче в di адреса буфера размером 512 байт по смещению 16h-19h и 1Ah-1Dh будут размещены дальние указатели на строки с названиями производителя видеокарты и названием самой карты. Что значит дальний указатель, как найти эти строки с названием если я работаю в защищенном режиме? Что будет если буфер будет 256 байт, а не 512?
Документация стр. 28:
http://www.petesqbsite.com/sections/.../tuts/vbe3.pdf
User7991 вне форума Ответить с цитированием
Старый 30.05.2016, 01:02   #2
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Эта функция заполнит твой буфер, где в смещения 16/1Ah от начала буфера будут лежать указатели на текстовые строки в памяти. Как правило такие строки не имеют определённой длинны, а заканчиваются нуль-терминалом.

Размеры каждого из указателей по 4 байта, в формате [сегмент:смещение] строки в памяти (не в буфере). Сперва указывается смещение, потом сегмент. Попробуй такой код. Он проверит поддержку VESA, выведет её версию и (по-сути) должен вывести производителя. Имя выводится аналогичным способом. /ИМХО/

Код:
;' fasm code/.......
org 100h
jmp  start

mes0   db  13,10,' Support VESA.: $'
mes1   db  13,10,' Manufacture..: $'
okey   db  'Okey! ver.$'
err    db  'Error! BugCode: $'
buff   db  512 dup(0)

start:  mov   ax,12h               ; ставим видео
        int   10h                  ;
        mov   dx,mes0              ;
        call  message              ;

        mov   ax,4f00h             ;
        mov   di,buff              ;
        int   10h                  ; зовём VESA
        cmp   al,4fh               ; есть поддерка?
        jne   error                ;

        mov   dx,okey              ; ОК!
        call  message              ;
        xor   ah,ah                ;
        mov   al,byte[buff+5]      ; выводим версию (должна быть 2+)
        call  hex2asc              ;
;------------------------------------------------------------------------
        mov   dx,mes1              ; выводим производителя
        call  message              ;
        push  ds                   ; строка валяется где-то в памяти..
        mov   si,word[buff+16h]    ; SI - смещение строки
        mov   ds,word[buff+18h]    ; DS - её сегмент
prn1:   lodsb                      ; читаем символы из DS:SI
        or    al,al                ;    ..пока не встретится нуль
        jz    next                 ;
        int   29h                  ; выводим их на консоль
        jmp   prn1                 ;
next:   pop   ds                   ; возвращаемся в свой сегмент
        jmp   exit                 ; на выход!
;--------------------------------------------------------------
error:  mov   dx,err               ; обработчик ошибки
        call  message              ;    ..в AH = её код
        shr   ax,8                 ; сдвиг в AL
        call  hex2asc              ; выводим на экран

exit:   xor   ax,ax                ;
        int   16h                  ;
        int   20h                  ; в DOS

;------------------------------------------------------------------
message:                      ;
        mov   ah,9            ;
        int   21h             ;
        ret                   ;
;------------------------------------------------------------------
hex2asc:                      ; Функция переводит числа в символы
        pusha                 ; Вход:  АХ = число, BX = система счисления
        mov   bx,10           ; Выход: на экране
        xor   cx,cx           ;
isDiv:  xor   dx,dx           ;
        div   bx              ;
        push  dx              ;
        inc   cx              ;
        or    ax,ax           ;
        jnz   isDiv           ;
isOut:  pop   ax              ;
        cmp   al,9            ;
        jle   noHex           ;
        add   al,7            ;
noHex:  add   al,30h          ;
        int   29h             ;
        loop  isOut           ;
        popa                  ;
        ret                   ;
;------------------------------------------------------------------
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
считать информацию komra2 C# (си шарп) 1 15.05.2015 08:52
Задание по Visual c++ 2013, Нужно создать файл, записать в него информацию, а затем по другой кнопке считать информацию из файла. Rastoried Visual C++ 5 16.03.2014 20:21
Почему Vesa не поддерживает vbe Debris Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 07.10.2011 23:23
Считать информацию из файла ros.pro Общие вопросы C/C++ 4 05.07.2011 14:38
Как считать информацию с CD\DVD? Bullterrier Общие вопросы Delphi 3 12.01.2010 00:13