Несколько вопросов начинающего

Тема в разделе "WASM.BEGINNERS", создана пользователем s3dworld, 6 окт 2010.

  1. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.549
    Адрес:
    Russia
    s3dworld
    Но я же вам от деления предлагаю избавиться, поэтому и предлагал поиск по форуму. Вот один из вариантов:
    http://www.wasm.ru/forum/viewtopic.php?id=23926
    См там архив приаттаченый.
    Если хорошо поищете - найдете еще.
     
  2. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.549
    Адрес:
    Russia
    Эм. И какой вы хотите ответ на выход? Типа адреса от 0 до 255 принадлежат векторам , адреса A0000–BFFFF - это видеопамять. Это вы хотите?
     
  3. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    TermoSINteZ

    Это смешно. Каждый компьютер может по своему всё интерпретировать. Но есть стандартные функции для определения адресов ОЗУ. Типа как указанная выше. Я думаю она мне полностью подойдёт. Или же можно определить как-то по другому? Как же те же Windows и Linux определяют диапазон памяти ОЗУ?
     
  4. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.549
    Адрес:
    Russia
    s3dworld
    Ну определяют очень просто - смотрят скока всего памяти. Включают трансляцию страниц (c PAE \ без не важно), адресуют весь доступный диапазон памяти в 4 гб (64гб), включают подкачку. И юзают во всю эту виртуальную память. Это один из ходов событий. Вы сорцы линукса посмотрите хотя бы.
     
  5. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    s3dworld
    Бред. Производители в принципе не могут делать иначе, кроме как "байт в байт".

    Не решите. Часть физической памяти используется для специальных целей, а посему не будет указана как обычная оперативная. С помощью всех этих функций можно получить только объём, доступный программам (в т.ч. ОС) для использования, а не объём реально имеющейся памяти.
     
  6. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    SII
    они могут использовать часть памяти по своему усмотрению
    http://en.wikipedia.org/wiki/Extreme_Memory_Profile#Extensions
     
  7. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    Если честно, то я запутался.

    Вы поймите, есть адресное пространство в 4294967296 байт (для x86 архитектуры) и в 18446744073709551616 байт (для x64 архитектуры). Пока я собираюсь работать только с 32-битной архитектурой (x86), то есть все устройства компьютера, регистры устройств, оперативная память (ОЗУ) и возможно ещё что-то будут спроецированы на всю адресную память в 4294967296 байт.

    Мне же не нужно строить 1024 странички по 4194304 байта на каждую, чтобы тем самым захватить всё адресное пространство в 4294967296 байт. Ну вот не нужно мне использовать память для различных устройств, память регистров устройств и ещё какую-то память. Я хочу использовать только оперативную память (ОЗУ).

    То есть я хочу знать, какие адреса мне нужно будет указывать для формирования базового адреса начала страницы для каталога страниц. Да, я могу создать 1024 страницы на всю адресную память. Но мне это не нужно. Я хочу работать только с оперативной памятью (ОЗУ).

    Вот же написано:

    Ведь определяет же она адреса начала оперативной память (ОЗУ). Ну пускай она мне не всё определит, пускай что-то отсеет, но всё же ведь это будет маленький процент отсеивания. И я получу реальные адреса и длины. Вот я и не понимаю что Вы тогда на эту функцию ругаетесь? Тем более что лучше ничего не предложили.

    Давайте пойдём от обратного. Создам я 1024 элемента таблицы страниц для описания всей адресной памяти в 4294967296 байт. Будут у меня странички идти так:

    Но опять же, откуда я могу знать какую страничку для чего использовать, когда я не знаю какая страничка на какое устройство указывает. Я хочу использовать страничку чтобы загрузить инструкции процессора в оперативную память (ОЗУ), а вместо этого могу отправить эти инструкции в видеопамять и получится чёрт знает что.

    Поэтому я и хочу определить адреса адресного пространства, которые относятся к оперативной памяти (ОЗУ) и на основании этих данных построить таблицу страниц таким образом, чтобы я знал под какими индексами у меня странички для работы с оперативной памятью (ОЗУ).

    Вроде теперь даже самому стало понятно как объяснил))
     
  8. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    Что касается на счёт моей процедуры перевода числа в строку, то я её переделал и теперь она работает.

    Код (Text):
    1. ; ********************************************************
    2. ;                   П Р О Ц Е Д У Р А
    3. ; ********************************************************
    4.  
    5. ; -------------------------------------------------------{
    6. ; Название: UnsignedNumberToString()
    7. ; Описание: Преобразование 32-битного числа в строку
    8. ; Вход:     EAX - 32-битное число
    9. ; Выход:   EDI - указатель на строку
    10. ;           ECX - количество символов в строке
    11. ; --------------------------------------------------------
    12. UnsignedNumberToString:
    13.         mov EDI,string1
    14.         mov ECX,0
    15.         mov EBX,10
    16.    
    17.     UnsignedNumberToString__Label_Div:
    18.         mov EDX,0
    19.         div EBX
    20.    
    21.         add EDX,48
    22.         mov [EDI],byte DL
    23.         inc EDI
    24.         inc ECX
    25.    
    26.         cmp EAX,0
    27.         jz UnsignedNumberToString__Label_NoDiv
    28.         jmp UnsignedNumberToString__Label_Div
    29.    
    30.     UnsignedNumberToString__Label_NoDiv:
    31.         cmp ECX,1
    32.         jz UnsignedNumberToString__Label_NoBuild
    33.         jmp UnsignedNumberToString__Label_Build
    34.    
    35.     UnsignedNumberToString__Label_Build:
    36.         ;mov ESI,string1
    37.         ;mov EDI,string2
    38.         mov EBX,0
    39.        
    40.         UnsignedNumberToString__Label_Build_Copy:
    41.             mov EDX,ECX
    42.             sub EDX,EBX
    43.             sub EDX,1
    44.            
    45.             ;add ESI,EBX
    46.             ;add EDI,EDX
    47.            
    48.             ;mov AL,byte [ESI]
    49.             ;mov [EDI],byte AL
    50.            
    51.             mov EDI,string1
    52.             add EDI,EBX
    53.             mov AL,byte [EDI]
    54.             mov EDI,string2
    55.             add EDI,EDX
    56.             mov [EDI],byte AL
    57.            
    58.             inc EBX
    59.  
    60.         cmp ECX,EBX
    61.         jz UnsignedNumberToString__Label_BuildComplete
    62.         jmp UnsignedNumberToString__Label_Build_Copy
    63.    
    64.     UnsignedNumberToString__Label_BuildComplete:
    65.         mov EDI,string2
    66.         jmp UnsignedNumberToString__Label_End
    67.    
    68.     UnsignedNumberToString__Label_NoBuild:
    69.         mov EDI,string1
    70.    
    71.     UnsignedNumberToString__Label_End:
    72. ret
    73. ; -------------------------------------------------------}
    74.  
    75. ; ********************************************************
    76. ;                     Д А Н Н Ы Е
    77. ; ********************************************************
    78.  
    79. UnsignedNumberToString__Data:
    80.     string1 db 0,0,0,0,0,0,0,0,0,0,0
    81.     string2 db 0,0,0,0,0,0,0,0,0,0,0
    Я вот только не понимаю следующего...

    Там в коде видно закомментированные инструкции. Так почему же мне удаётся использовать вместе ESI и EDI? Пример заработал только когда я решил всё переделать под один EDI.
     
  9. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Про использование страничек почтай Рихтера (у него про win, но это как раз практика их использования) а то у тебя какие-то заморочки...

    По числу в строку: http://www.wasm.ru/forum/viewtopic.php?id=18476
     
  10. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    Y_Mur
    Не нашёл я в Google по Рихтеру ничего, кроме эффективного создания Windows-приложений (думаю это не то что нужно). И какие же у меня заморочки? То что я хочу знать к какому адресному диапазону принадлежит оперативная память (ОЗУ)?
     
  11. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    Ай, я уже с ума схожу!

    Делаю всё по статье http://ru.osdev.wikia.com/wiki/Определение_объёма_памяти. Про функцию 0xE820 прерывания 0x15. Вот код этого модуля:

    Код (Text):
    1. ; Имя:           test_memory
    2. ; Описание:     Определение карты памяти
    3. ; Автор:       Дубровкин Сергей
    4. ; Начало:     26.10.2010 - 13:19
    5. ; Завершение: ??.??.???? - ??:??
    6. ; *******************************************************************************
    7.  
    8. use16
    9.  
    10. ; *******************************************************************************
    11. ;                                П Р О Ц Е Д У Р Ы
    12. ; *******************************************************************************
    13.  
    14. ; ------------------------------------------------------------------------------{
    15. ; Название: Test_Memory__Main()
    16. ; Описание: Определение карты памяти
    17. ; Вход:     Нет
    18. ; Выход:   Нет
    19. ; -------------------------------------------------------------------------------
    20. Test_Memory__Main:
    21.     mov EAX,0x0000E820
    22.     xor EBX,EBX
    23.     mov EDI,test_memory__item
    24.     mov ECX,24
    25.     mov EDX,"SMAP"
    26.     int 0x15
    27.    
    28.     cmp EAX,"SMAP"
    29.     jnz Test_Memory__Main_Label_1
    30.    
    31.     push EDI
    32.     mov EAX,[EDI]
    33.     call UnsignedNumberToString
    34.    
    35.     mov ESI,EDI
    36.     mov BL,00001111b
    37.     mov DH,0
    38.     mov DL,0
    39.     call Boot__DrawText
    40.    
    41.     pop EDI
    42.     add EDI,4
    43.    
    44.     push EDI
    45.     mov EAX,[EDI]
    46.     call UnsignedNumberToString
    47.    
    48.     mov ESI,EDI
    49.     mov BL,00001111b
    50.     mov DH,1
    51.     mov DL,0
    52.     call Boot__DrawText
    53.    
    54.     pop EDI
    55.     add EDI,4
    56.    
    57.     push EDI
    58.     mov EAX,[EDI]
    59.     call UnsignedNumberToString
    60.    
    61.     mov ESI,EDI
    62.     mov BL,00001111b
    63.     mov DH,2
    64.     mov DL,0
    65.     call Boot__DrawText
    66.    
    67.     pop EDI
    68.     add EDI,4
    69.    
    70.     push EDI
    71.     mov EAX,[EDI]
    72.     call UnsignedNumberToString
    73.    
    74.     mov ESI,EDI
    75.     mov BL,00001111b
    76.     mov DH,3
    77.     mov DL,0
    78.     call Boot__DrawText
    79.    
    80.     pop EDI
    81.     add EDI,4
    82.    
    83.     push EDI
    84.     mov EAX,[EDI]
    85.     call UnsignedNumberToString
    86.    
    87.     mov ESI,EDI
    88.     mov BL,00001111b
    89.     mov DH,4
    90.     mov DL,0
    91.     call Boot__DrawText
    92.    
    93.     pop EDI
    94.     add EDI,4
    95.    
    96.     mov EAX,[EDI]
    97.     call UnsignedNumberToString
    98.    
    99.     mov ESI,EDI
    100.     mov BL,00001111b
    101.     mov DH,5
    102.     mov DL,0
    103.     call Boot__DrawText
    104.    
    105.     jmp Test_Memory__Main_Label_End
    106.    
    107.     Test_Memory__Main_Label_1:
    108.         mov ESI,test_memory__end
    109.         mov BL,00001111b
    110.         mov DH,0
    111.         mov DL,0
    112.         call Boot__DrawText
    113.    
    114.     Test_Memory__Main_Label_End:
    115. ret
    116. ; ------------------------------------------------------------------------------}
    117.    
    118. ; *******************************************************************************
    119. ;                                   Д А Н Н Ы Е
    120. ; *******************************************************************************
    121.  
    122. test_memory__Data16:
    123.     test_memory__itemSize   db  24
    124.     test_memory__item       db  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    125.     test_memory__end        db "Function no complete!",0
    Но почему-то после отработки прерывания, регистр EAX не содержит сигнатуру "SMAP". Я ничего не понимаю. В чём дело?
     
  12. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    Уж не знаю на сколько эта функция мне подходит, но теперь она работает. Причина была в том, что команду с сигнатурой:

    Код (Text):
    1. mov EDX,"SMAP"
    2. int 0x15
    3.    
    4. cmp EAX,"SMAP"
    Нужно было заменить на:

    Код (Text):
    1. mov EDX,0x534d4150
    2. int 0x15
    3.    
    4. cmp EAX,0x534d4150
     
  13. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    Ребят, вызываю функцию 0x0000E820 прерывания 0x15. В ответ получаю следующее:

    Начальный адрес диапазона, младшие 32 бита: 0
    Начальный адрес диапазона, старшие 32 бита: 0
    Длина диапазона, младшие 32 бита: 651264
    Длина диапазона, старшие 32 бита: 062156
    Тип диапазона: 162156
    Расширенные атрибуты диапазона: 062156

    И что это значит? Откуда такая длина? У меня всего 2 ГБ оперативной памяти (ОЗУ). Да и что-то значение в Длина диапазона, старшие 32 бита равно значению в Расширенные атрибуты диапазона.

    Сначала я подумал что возможно тупит моя функция перевода числа в строку, но я её тестировал (подсовывал ей значения и смотрел на результат) и она работала правильно. Хотя интересно, что в тексте впереди стоит 0, так ведь не должно быть. В чём может быть дело?

    Вот код перевода:

    Код (Text):
    1. ; ********************************************************
    2. ;                   П Р О Ц Е Д У Р А
    3. ; ********************************************************
    4.  
    5. ; -------------------------------------------------------{
    6. ; Название: UnsignedNumberToString()
    7. ; Описание: Преобразование 32-битного числа в строку
    8. ; Вход:     EAX - 32-битное число
    9. ; Выход:   EDI - указатель на строку
    10. ;           ECX - количество символов в строке
    11. ; --------------------------------------------------------
    12. UnsignedNumberToString:
    13.         mov EDI,string1
    14.         mov ECX,0
    15.         mov EBX,10
    16.    
    17.     UnsignedNumberToString__Label_Div:
    18.         mov EDX,0
    19.         div EBX
    20.    
    21.         add EDX,48
    22.         mov [EDI],byte DL
    23.         inc EDI
    24.         inc ECX
    25.    
    26.         cmp EAX,0
    27.         jz UnsignedNumberToString__Label_NoDiv
    28.         jmp UnsignedNumberToString__Label_Div
    29.    
    30.     UnsignedNumberToString__Label_NoDiv:
    31.         cmp ECX,1
    32.         jz UnsignedNumberToString__Label_NoBuild
    33.         jmp UnsignedNumberToString__Label_Build
    34.    
    35.     UnsignedNumberToString__Label_Build:
    36.         ;mov ESI,string1
    37.         ;mov EDI,string2
    38.         mov EBX,0
    39.        
    40.         UnsignedNumberToString__Label_Build_Copy:
    41.             mov EDX,ECX
    42.             sub EDX,EBX
    43.             sub EDX,1
    44.            
    45.             ;add ESI,EBX
    46.             ;add EDI,EDX
    47.            
    48.             ;mov AL,byte [ESI]
    49.             ;mov [EDI],byte AL
    50.            
    51.             mov EDI,string1
    52.             add EDI,EBX
    53.             mov AL,byte [EDI]
    54.             mov EDI,string2
    55.             add EDI,EDX
    56.             mov [EDI],byte AL
    57.            
    58.             inc EBX
    59.  
    60.         cmp ECX,EBX
    61.         jz UnsignedNumberToString__Label_BuildComplete
    62.         jmp UnsignedNumberToString__Label_Build_Copy
    63.    
    64.     UnsignedNumberToString__Label_BuildComplete:
    65.         mov EDI,string2
    66.         jmp UnsignedNumberToString__Label_End
    67.    
    68.     UnsignedNumberToString__Label_NoBuild:
    69.         mov EDI,string1
    70.    
    71.     UnsignedNumberToString__Label_End:
    72. ret
    73. ; -------------------------------------------------------}
    74.  
    75. ; ********************************************************
    76. ;                     Д А Н Н Ы Е
    77. ; ********************************************************
    78.  
    79. UnsignedNumberToString__Data:
    80.     string1 db 0,0,0,0,0,0,0,0,0,0,0
    81.     string2 db 0,0,0,0,0,0,0,0,0,0,0
     
  14. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    s3dworld
    Функция выдаёт несуществующий "хвост", оставшийся от старых вызовов.
    Сначала функция вызывается для младших 32 бит длины диапазона и создаёт правильную строку "651264" (0x9F000), причём в string1 символы идут в обратном порядке, то есть "462156". Следующий вызов функции получает на вход число 0, создаёт строку "0", которая состоит из одного символа; но после этого символа ещё остаётся строка от предыдущей записи, в силу устройства функции string1 теперь содержит "062156" вместо правильного "0". Поскольку для односимвольных строк функция возвращает сразу string1, то на выходе это "062156" и получается. Дальше - то же самое, на самом деле тип, видимо, равен 1, а расширенные атрибуты нулевые.
    Надо полагать, потому что закомментированный вариант на каждой итерации прибавляет всё новые и новые значения, увеличивая и увеличивая esi и edi.
     
  15. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    diamond
    Спасибо большое!

    Процедуру переделал, теперь она выглядит так:

    Код (Text):
    1. ; ********************************************************
    2. ;                   П Р О Ц Е Д У Р А
    3. ; ********************************************************
    4.  
    5. ; -------------------------------------------------------{
    6. ; Название: UnsignedNumberToString()
    7. ; Описание: Преобразование 32-битного числа в строку
    8. ; Вход:     EAX - 32-битное число
    9. ; Выход:   EDI - указатель на строку
    10. ;           ECX - количество символов в строке
    11. ; --------------------------------------------------------
    12. UnsignedNumberToString:
    13.         mov EDI,string1
    14.         mov ECX,0
    15.         mov EBX,10
    16.        
    17.         mov [EDI],byte 0
    18.         inc EDI
    19.         mov [EDI],byte 0
    20.         inc EDI
    21.         mov [EDI],byte 0
    22.         inc EDI
    23.         mov [EDI],byte 0
    24.         inc EDI
    25.         mov [EDI],byte 0
    26.         inc EDI
    27.         mov [EDI],byte 0
    28.         inc EDI
    29.         mov [EDI],byte 0
    30.         inc EDI
    31.         mov [EDI],byte 0
    32.         inc EDI
    33.         mov [EDI],byte 0
    34.         inc EDI
    35.         mov [EDI],byte 0
    36.        
    37.         mov EDI,string2
    38.        
    39.         mov [EDI],byte 0
    40.         inc EDI
    41.         mov [EDI],byte 0
    42.         inc EDI
    43.         mov [EDI],byte 0
    44.         inc EDI
    45.         mov [EDI],byte 0
    46.         inc EDI
    47.         mov [EDI],byte 0
    48.         inc EDI
    49.         mov [EDI],byte 0
    50.         inc EDI
    51.         mov [EDI],byte 0
    52.         inc EDI
    53.         mov [EDI],byte 0
    54.         inc EDI
    55.         mov [EDI],byte 0
    56.         inc EDI
    57.         mov [EDI],byte 0
    58.        
    59.         mov EDI,string1
    60.    
    61.     UnsignedNumberToString__Label_Div:
    62.         mov EDX,0
    63.         div EBX
    64.    
    65.         add EDX,48
    66.         mov [EDI],byte DL
    67.         inc EDI
    68.         inc ECX
    69.    
    70.         cmp EAX,0
    71.         jz UnsignedNumberToString__Label_NoDiv
    72.         jmp UnsignedNumberToString__Label_Div
    73.    
    74.     UnsignedNumberToString__Label_NoDiv:
    75.         cmp ECX,1
    76.         jz UnsignedNumberToString__Label_NoBuild
    77.         jmp UnsignedNumberToString__Label_Build
    78.    
    79.     UnsignedNumberToString__Label_Build:
    80.         ;mov ESI,string1
    81.         ;mov EDI,string2
    82.         mov EBX,0
    83.        
    84.         UnsignedNumberToString__Label_Build_Copy:
    85.             mov EDX,ECX
    86.             sub EDX,EBX
    87.             sub EDX,1
    88.            
    89.             ;add ESI,EBX
    90.             ;add EDI,EDX
    91.            
    92.             ;mov AL,byte [ESI]
    93.             ;mov [EDI],byte AL
    94.            
    95.             mov EDI,string1
    96.             add EDI,EBX
    97.             mov AL,byte [EDI]
    98.             mov EDI,string2
    99.             add EDI,EDX
    100.             mov [EDI],byte AL
    101.            
    102.             inc EBX
    103.  
    104.         cmp ECX,EBX
    105.         jz UnsignedNumberToString__Label_BuildComplete
    106.         jmp UnsignedNumberToString__Label_Build_Copy
    107.    
    108.     UnsignedNumberToString__Label_BuildComplete:
    109.         mov EDI,string2
    110.         jmp UnsignedNumberToString__Label_End
    111.    
    112.     UnsignedNumberToString__Label_NoBuild:
    113.         mov EDI,string1
    114.    
    115.     UnsignedNumberToString__Label_End:
    116. ret
    117. ; -------------------------------------------------------}
    118.  
    119. ; ********************************************************
    120. ;                     Д А Н Н Ы Е
    121. ; ********************************************************
    122.  
    123. UnsignedNumberToString__Data:
    124.     string1 db 0,0,0,0,0,0,0,0,0,0,0
    125.     string2 db 0,0,0,0,0,0,0,0,0,0,0
    Результат такой:

    [​IMG]

    Первое значение на рисунке - это значение для регистра EBX (нужно для обработки следующих диапазонов). То что у меня идёт строка в обратном порядке, это точно. Но всё же получается что адрес с 0x00000000 (0) по 0x0009F000 (651264) у меня будет принадлежать именно к оперативной памяти (ОЗУ)? А значение 1 будет определять что память доступна для использования. Так? Но есть очень интересный момент: последнее значение равно 0. А в статье написано следующее:

    То есть данный диапазон использовать мне не стоит и продолжать дальше искать адреса. Так?
     
  16. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    Скорее всего, BIOS просто не заполняет расширенные атрибуты (ибо вообще-то не обязана). Проверяется это по возвращённому функцией значению cx - если там 20, то функция записала ровно 20 байт, то есть расширенных атрибутов нет и соответствующее поле не заполнялось.
     
  17. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    diamond
    Да я почитал описание других полей расширенной информации:

    Собственно тут и нет того, чтобы точно можно было знать стоит ли использовать диапазон или нет. И так что же делать в случае если в ECX будет 20? И что делать если в ECX будет 24?
     
  18. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    Для определения, можно ли использовать этот диапазон, ограничиться проверкой поля типа.
    Дополнительно к проверке поля типа проверять ещё, что 0-й бит равен 1, а 1-й бит равен 0.

    Есть, впрочем, подозрение, что на поле расширенных атрибутов на практике можно вообще всегда просто забивать.
     
  19. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    Решил я вызвать большее количество раз функцию, передавая ей то в EBX, что она сама вернула. Вот что у меня получилось:

    [​IMG]

    Но не понимаю, почему два раза значение 5. Кто-нибудь вообще объяснит?

    Напомню, что самым первым в каждой группе цифр отображается то значение, которое оказалось в регистре EBX после вызова прерывания 0x15.
     
  20. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    Опа, вот это новость. Пролистал сейчас книгу "Программирование аппаратных средств в Windows", а именно про программирование видеоконтроллера:

    [​IMG]

    Это что, серьёзно? Возгорание? Это для всех мониторов или для определённого типа? У меня с электронной-лучевой трубкой.

    Я тут подумал, это что-же получается, что испытывая какую-то новую операционную систему (которых сейчас полным полно), я рискую оборудованием?