Студентам с вопросами о лабораторных работах сюда

Тема в разделе "WASM.BEGINNERS", создана пользователем IceStudent, 11 ноя 2006.

  1. Alex4361

    Alex4361 New Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    7
    я вот не могу это в ассемблере выразить....
     
  2. SpikeR

    SpikeR New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2009
    Сообщения:
    2
    Здравствуйте.
    Можете подсказать как инициализировать графический режим на TASM через порты ввода вывода?
    INT 10h нельзя использовать
     
  3. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    Библиотека системного программиста © Фролов А.В., Фролов Г.В., 1992-1995 г.
    Том 21 Программирование видеоадаптеров EGA, VGA и SVGA
    Глава 4. РЕГИСТРЫ ВИДЕОАДАПТЕРОВ EGA, VGA И SVGA

    http://frolov-lib.ru/books/bsp/v21/ch4.htm
     
  4. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    Alex4361
    ох и надоел же уже этот дос. но примерно так (ошибки, опечатки и доведение до ума за Вами)
    Код (Text):
    1. ;1 перехватываешь вектор int9
    2. xor ax, ax
    3. mov es, ax
    4. mov ax, new_int9+4
    5. mov ds, cs
    6. cli
    7. xchg [es:9*4], ax
    8. xchg [es:9*4+2], dx
    9. mov [cs:new_int9], ax
    10. mov [cs:new_int9+2], dx
    11. sti
    12. ;далее делаем что угодно, хоть выходим резидентом или какие либо другие действия
    13. ...
    14. new_off:
    15. ;это то место куда мы попадем по нажатию right shift+left shift+space, но продолжение прежней программы отсюда будет уже не возможным
    16. ...
    17. new_int9:
    18.             dw 0, 0
    19. ;чтобы не утруждаться в программирование контроллера клавиатуры предоставим это системе
    20. pushf
    21. call dword [cs:new_int9]
    22. ;далее по адресам 0:417h лежит слово состояние системных клавиш клавиатуры, и 0:41Сh, 0:41Ah указатели начала и конца буфера клавиатуры
    23. pusha
    24. push es
    25. xor ax, ax
    26. mov es, ax
    27. mov bl, [es:41Ch]
    28. xor bh, bh
    29. cmp byte [es:bx], 20h;если в конце буфера не лежит код пробела, то выходим
    30. jnz @f
    31. test [es:417h], 1;right shift
    32. jz @f
    33. test [es:417h], 2;left shift
    34. jz @f
    35. ;подменяем адрес возврата
    36. mov bp, sp
    37. ;если в последствие хотите продолжать прерванную программу, то вмести следующих двух mov'ов следует сделать тоже что и с 9м прерыванием (т.е. сохранить где-либо старый адрес возврата)
    38. mov [bp+18], new_off;16 за pusha и 2 за pushf
    39. mov [bp+20], cs
    40. @@:
    41. pop es
    42. popa
    43. iret
     
  5. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    да редактирование запретили, поэтому добавляю. там есть пару огрехов сознательно мной допущенных и пару опечаток. ну это так. чтобы жизнь медом не казалась.
     
  6. SpikeR

    SpikeR New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2009
    Сообщения:
    2
    murder
    в книге то написано много но мне лично непонятно. выводить в видеопамять то неслшожно а вот саму инициализацию графического режима то как? задать например разрешение 800х600
     
  7. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    SpikeR
    Загляни в исходники Колибри, там это должно быть. И ещё в доках часто попадается предупреждение о возможности испортить монитор неправильной инициализацией видеорежима, не знаю насколько оно актуально особенн на современном железе, но на всякий случай имей это в виду.
     
  8. popozopo

    popozopo New Member

    Публикаций:
    0
    Регистрация:
    3 июн 2009
    Сообщения:
    2
    можете хотя бы ссылок кинуть по теме? :)
     
  9. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    SpikeR
    А нет это я тормознул - в Колибри такие извращения вряд-ли будут, нормальные люди vesa используют и не парятся с портами.

    popozopo
    http://www.wasm.ru/publist.php?list=1
     
  10. Noga

    Noga New Member

    Публикаций:
    0
    Регистрация:
    10 окт 2008
    Сообщения:
    92
    Доброе время суток,

    Все пишу свою программу во выводу информации. Теперь хочу выводить информацию о смарт картах. Использую pkcs11. Есть функция http://registercsp.nets.co.kr/PKCS11/Functions/c_getslotlist.htm. Никак не могу заставить её работать, постоянно возвращает CKR_BUFFER_TOO_SMALL. Все необходимые шаги для работы - выполняю. Вот код:

    Код (Text):
    1. .data
    2.         SlotWithTokenCount  dd ?
    3.     SlotWithTokenList   db sizeof(DWORD)*10 dup(?) 
    4. .code
    5.         ...
    6.     invoke GetProcAddress,hLib,ADDR GetSlotList
    7.     mov SlotList,eax   
    8.     .if eax==NULL
    9.         invoke MessageBox,NULL,addr LibError,addr AppName,MB_OK
    10.     .ENDIF            
    11.            push offset SlotWithTokenCount
    12.            push offset SlotWithTokenList
    13.            push 1    
    14.            call [SlotList]
    15.            add esp,4*3
    Помогите пожалуйста.
     
  11. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Noga
    Твоя ссылка на функцию не открывается, так что правильно ли ты передаеёшь параметры не скажу, но SlotWithTokenCount dd ? - у тебя инициализирован 0, наверно потому и ругается что буфер рассчитанный на 0 данных ей не подходит :)) Функция же не может к тебе в листинг программы залезть и догадаться, что там на самом деле 10 dword зарезервировано ;)
     
  12. SL7549

    SL7549 New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2009
    Сообщения:
    17
    Y_Mur
    ты точку убери из ссылки, вот так работает http://registercsp.nets.co.kr/PKCS11/Functions/c_getslotlist.htm
     
  13. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    SL7549 Спасибо.
    Noga Ну точно, в твоём примере GetSlotList сначала вызывается с SlotWithTokenList = NULL, чтобы она сама инициализировала SlotWithTokenCount реальным количеством девайсов, а потом выделяется память под буфер и GetSlotList вызывается с коррекным буфером и коррекным количеством слотов. А ты делаешь наоборот - ссылку на буфер передаёшь сразу, а количество записей запрашиваешь нулевое.
     
  14. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Noga
    И ещё чтобы не париться с GetProcAddress, загляни сюда
     
  15. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    Для вывода картинки с большим чем 256 количеством цветов или с большим разрешением чем 320 на 200 придется использовать функции VESA SVGA 103h режим 800х600х256 цветов. Режим устанавливается просто:
    Код (Text):
    1. MOV AX,4F02h;установить видеомоду
    2.  MOV BX,103h        ;video_mode 800x600x256
    3.  INT 10h
    А вот дальше начнется геморой -- 600*800=480000 В видеопамять SVGA файл можно выводить кусками только по 65536 байт. 480000=7*65536+21248 т.е. 7 нормальных сегментов по 64 Кбайта с адресами от 0000 до FFFFh и один неполный сегмент с адресами от 0000 до 5300h. Вывод пикселей начинешь в неполный сегмент построчно двигаясь в направлении уменьшения адресов. В нормальном сегменте 65536/800=81 полная строка и одна неполная строка из 736 пикселей. В неполном сегменте 21248/800=26 полных строк и одна неполная строка из 448 пикселей.
     
  16. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Mikl___
    дык ему извращение задали #1702:
    :))
     
  17. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    Y_Mur
    Я бы смотрел через afd, нажимая на F1 по-шагово, что делает прерывание 10h -- если преподаватель не садист, он скорее всего объяснял на лекциях (практике), чего он от испытуемых хочет -- но это же на лекции ходить нужно :)
     
  18. Noga

    Noga New Member

    Публикаций:
    0
    Регистрация:
    10 окт 2008
    Сообщения:
    92
    Y_Mur

    Спасибо !
    To All

    Комрады, как бы мне выделить память? VirtualAlloc требует чтобы dwSize был константой. А мне нужно что-то типа SIZEOF(DWORD)*SlotWithTokenCount
     
  19. q1q1

    q1q1 New Member

    Публикаций:
    0
    Регистрация:
    7 июн 2009
    Сообщения:
    1
    Всем добрый вечер!

    У меня есть две программы: одна с интерфейсом, но с функциями, не нужными мне, а другая - наоборот: с функциями, нужными мне, но без интерфейса, который надо позаимствовать из другой программы.

    Суть работы программы: Разбить входные числа на массив положительных и массив отpицательных чисел, вычислить попаpные пpоизведения и их сумму. (файл 3.asm)

    А вот программа с необходимым интерфейсом, который я не понял как могу добавить в свою (я не знаю точно, что делает эта программа, но она считает сумму двух векторов) (файл 4_1.ASM)

    Можно еще из этой программы часть идей взять (Программа умножения среднего арифметического чисел на сумму чётных чисел массива) (файл 4.ASM)

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

    Примерно то, что я хочу получить от программы:
    1. Ввод целых десятичных чисел со знаком (Макрокоманда или процедура).
    2. Ввод и анализ функциональных кодов (int 16h).
    3. Вывод строк и чисел на экран (макрокоманда или процедура).
    4. Элементы управления экраном в текстовом режиме (int 10h):
    - управление курсором,атрибутами,цветом,страницами,
    - прокрутка,очистка,
    - организация окон, манипуляция окнами,
    - всплывающие окна,
    - динамическое отображение.

    Использую TASM и TLINK

    Надеюсь на вашу помощь и советы

    Тексты программ можно скачать здесь:
    http://rapidshare.com/files/242266901/Progz.zip.html
    зеркало:
    http://depositfiles.com/files/0sgi2p801
     
  20. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    SpikeR
    Вспомнил! вот.

    AFAIK совместимость на уровне портов присутствует только для VGA. Для SVGA нужно использвать VESA.