Вопросы по разделу "Неофиту"

Тема в разделе "WASM.BEGINNERS", создана пользователем probka, 12 фев 2008.

Статус темы:
Закрыта.
  1. probka

    probka New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    170
    В исходниках, которые даются в разделе, при трассировке, появляются команды, которые я не писал явно. Это команды обработки прерываний? (int 20h например)? Комп их сам подставляет?
    Их надо знать, я думаю. И именно из-за этого мои проги слетали. Я не учитывал код, который автоматически вставляется?

    И я так и не понял, как все-таки вырисовывается прямоугольник? Разных цветов.

    В кодировке
    Код (Text):
    1. :0100 XOR AL,AL
    2. :0102 MOV BH,10
    3. :0104 MOV CH,05
    4. :0106 MOV CL,10
    5. :0108 MOV DH,10
    6. :010A MOV DL,3E
    7. :010C MOV AH,06
    8. :010E INT 10
    9. :0110 MOV CX,0004
    10. :0113 CALL 011A
    11. :0116 LOOP 0113
    12. :0118 INT 20
    13. :011A ADD BH,10
    14. :011D ADD CH,01
    15. :0120 ADD CL,01
    16. :0123 SUB DH,01
    17. :0126 SUB DL,01
    18. :0129 INT 10
    19. :012B RET
    нужно сохранить в стеке значения счетчика, а потом вытолкнуть. Я не понял, координаты верхнего левого угла, постоянно должны быть определены в программе или нет? В какое время выполнения программы, нет? Вот в это время и втолкнуть в стек. А потом, когда они нужны, вытолкнуть. Делать это надо, наверно перед и после вызова прерывания int 20h? Только как это сделать корректнее?
     
  2. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    probka
    Я не смотрел код в исходниках, но все INT ... - это вызов прерывания.

    > INT 20 - DOS 1+ - TERMINATE PROGRAM
    Зачем сей вызов в середине программы еще тот вопрос.

    а вызовы int 10h это:
    > INT 10 06-- - VIDEO - SCROLL UP WINDOW
    > AH = 06h
    > AL = number of lines by which to scroll up (00h = clear entire window)
    > BH = attribute used to write blank lines at bottom of window
    > CH,CL = row,column of window's upper left corner
    > DH,DL = row,column of window's lower right corner

    Вообще-то линия рисуется попиксельно (или я упустил появление более сложных функций).
    > INT 10 0C-- - VIDEO - WRITE GRAPHICS PIXEL

    А вообще, я не понял большую часть поста. Можно более структурировано и четко.
     
  3. Ivan_assm

    Ivan_assm New Member

    Публикаций:
    0
    Регистрация:
    5 ноя 2007
    Сообщения:
    132
    Адрес:
    Везде и нигде
    а помоему в тело программы кроме нужного кода еще и записывается и "мусор"...я не разбирался, это просто так думаю. )
     
  4. probka

    probka New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    170
    1. при вызове прерывания или команды "ret", под отладчиком видно, что появляются
    строки и появляется работа с этими строками, которые я в своей программе, не
    писал. Эти строки, добавляет комп, для выполнения всей необходимой работы,
    связанной с обработкой этого прерывания или обработкой команды "ret"? В частности:
    работа со стеком (востановление), переход по адресам выходящими за адреса моей
    программы командами сравнения "cmd" и переход "jz". Это так?

    2. Если я в своей проге использую регистры (например СХ), под несколько действий,
    например счетчик и адрес верхнего левого угла квадрата, то перед переходом по этим
    двум различным действиям, я должен сохранить регистр первого действия, занести в
    регистр новое значение (под второе действие), а после того, как второе действие
    отработало, востановить регистр первого действия. Если в это время вызываются
    прерывания, то я должен в описании этого прерывания посмотреть работу с какими
    регистрами оно осуществляется (что записывает в них), и так же сохранить их. Так?

    3. И я так и не понял, как все-таки вырисовывается прямоугольник? Разных цветов:
    Код (Text):
    1. ;-[блок 2]--------------------------  
    2. CODESG segment
    3. assume CS:CODESG
    4. org 100
    5.  
    6. ;-[блок 3]--------------------------  
    7. MAIN proc
    8.   xor AL,AL
    9.   mov BH,10h
    10.   mov CH,5
    11.   mov CL,10h
    12.   mov DH,10h
    13.   mov DL,3Eh
    14.   mov AH,6
    15.   int 10h
    16.   call WINDOW
    17.   call WINDOW
    18.   call WINDOW
    19.   call WINDOW
    20.   int 20h
    21. MAIN endp
    22.  
    23. WINDOW proc
    24.   ADD BH,10h
    25.   ADD CH,1
    26.   ADD CL,1
    27.   SUB DH,1
    28.   SUB DL,1
    29.   INT 10h
    30.   RET
    31. WINDOW endp
    32.  
    33. ;-[блок 4]--------------------------  
    34. CODESG ends
    35.  
    36. end MAIN
    4. В кодировке
    Код (Text):
    1. :0100 XOR AL,AL
    2. :0102 MOV BH,10
    3. :0104 MOV CH,05
    4. :0106 MOV CL,10
    5. :0108 MOV DH,10
    6. :010A MOV DL,3E
    7. :010C MOV AH,06
    8. :010E INT 10
    9. :0110 MOV CX,0004
    10. :0113 CALL 011A
    11. :0116 LOOP 0113
    12. :0118 INT 20
    13. :011A ADD BH,10
    14. :011D ADD CH,01
    15. :0120 ADD CL,01
    16. :0123 SUB DH,01
    17. :0126 SUB DL,01
    18. :0129 INT 10
    19. :012B RET
    нужно сохранить в стеке значения счетчика, а потом вытолкнуть. Я не понял, координаты верхнего левого угла, постоянно должны быть определены в программе или нет? В какое время выполнения программы, нет? Вот в это время и втолкнуть в стек. А потом, когда они нужны, вытолкнуть. Делать это надо, наверно перед и после вызова прерывания int 10h? Только как это сделать корректнее?
     
  5. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    probka
    1) Вызов ret передает управление завершающему коду, добавляемому компилятором.
    2) При обработке прерывания управление передается обработчику прерывания. Вот такая вот тавтология . За сохранение регистров отвечает вызываемый код.
    3) По поводу рисования - я выкладывал на форуме http://www.wasm.ru/forum/viewtopic.php?pid=221214#p221214 модуль VSPI, там есть вывод линий, треугольников и прямоугольников, правда не прерывания а напрямую в память, но может помочь.
    4) А что такое "кодировка"? Может это код из дизассемблера?
    5) Зачем хранить все время? Достаточно только в начальный момент времени получить координаты верхнего левого угла - и вперед!
     
  6. AshBone

    AshBone New Member

    Публикаций:
    0
    Регистрация:
    12 дек 2007
    Сообщения:
    101
    Автор, не мучай себя ненужным геморроем... найди (купи/скачай) учебник Питера Абеля. Там все доходчиво, последовательно и понятно может быть даже барану. Потому как сначала надо выучить пару тем из дискретной математики и немножечко поинтересоваться архитектурой компа...
     
  7. probka

    probka New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    170
    Я о чем хочу сказать :dntknw:
    Что существует специальная метода написания прог на Асме (правила) :dntknw:
    Существуют специальные правила и эти правила привязаны:
    1. к процу в реальном режиме.
    2. к процу в защищенном режиме.
    То чем мы занимаемся, это чистой воды исследование. Исследование проца и возможности работы с ним на Асме :dntknw:
    Сколько времени тратится зря!
    Мы незнаем полностью, как работать с системой!!! :dntknw: :dntknw: :dntknw: Ведь существуют и внутренние прерывания проца, которых обычный программер незнает и не работает с ними. А для 100% рабочей проги это нужно знать!

    Интересно, почему этого нет в открытом доступе? Наверно Intel и Microsoft не имеют заинтересованности в этом? Другого вывода не могу сделать :dntknw:

    Xerx, я ходил туда и скачал исходники на Асме и на С.

    Вопросы из моего поста #4 остаются открытыми, если кто знает, пожалуйста ответьте.

    Работа с 0А000:0В00, позволяет обратится напрямую к видеобуферу. Отлично.
    Например, у меня есть массив и мне нужно инициализировать этим массивом определенную область видеобуфера. То есть другими словами, наложить текстуру.
    Этим занимался кто-нибудь? Можете пример показать?
    Только, пожалуйста, не надо показывать примеры, которые, после понимания, делают 'вывих разума'.

    В "Неофите", это ведь учеба. Так? Почему там приводятся самостоятельные задания, которые не рассматриваются в процессе учебы? (работа с сохранением регистров) Зачем Вы завышаете "понятийную" планку? И так же тяжело для понимания. Зачем еще более усложнять? Задания можно давать ТОЛЬКО по пройденному материалу!

    Извините за брызганье слюной, но злость полезнее чем отчаяние. И спасибо за помощь.
     
  8. Ivan_assm

    Ivan_assm New Member

    Публикаций:
    0
    Регистрация:
    5 ноя 2007
    Сообщения:
    132
    Адрес:
    Везде и нигде
  9. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Когда ты достаешь продукты из холодильника -- вспоминаешь ли о законах термодинамики? Скорее всего, пользователя не интересует вопрос: как этому железному ящику удалось понизить температуру -- работает и ладно!
    Существует как бы стандарт или традиция обучения языку ассемблер
    1) Минимальные знания о микропроцессоре, наличие регистров их назначение, работа с данными на уровне битов, логические операции, сдвиги и т.д.
    2) Чуть позже переходят к простейшей "учебной" операционной системе MS DOS (работа с прерываниями 21h), работа с оборудованием, получение данных от клавиатуры, вывод на экран, на принтер через прерывания BIOS и запись/чтение в/из порты, присоединение к компьютеру нестандартных устройств и программное управление ими...
    3) Еще чуть позже переходят к программированию под Win/Linux и т.д. Написание драйверов и тд. и т.п.
    4) Еще дальше -- написание своих операционных систем и исправление существующих ОС, вопросы "почему операционная система работает так, а не иначе", но до этого еще идти и идти, искать литературу как правило на английском...
    В данном конкретном случае, ты еще не освоил арифметику, а тебя уже потянуло к интегралам/дифференциальным уравнениям/тензорному исчислению... Всему свое время;)
    А еще загляни сюда Ralf Brown's Files
    Первые шаги
    Иллюстрированный самоучитель по Ассемблеру - курс лекций
    Ассемблер. Уроки 2007
    Google в помощь:)
    А поговорку про "чужой монастырь" помнишь?:)
     
  10. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    probka
    В целом тебе уже все написали. А насчет
    Рано еще. Но если ОЧЕНЬ интересно почитай про вывод треугольника с линейной интерполяцией координат по его граням, ну и про точечное текстурирование. Думаю, хватит. ( "3D FAQ" везде можно отыскать ).
     
  11. probka

    probka New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    170
    Xerx, понятно.
    Mikl__, понятно. Только это выглядит, как дразнилка (действия Intela и Microsoft в отношении нас ;)

    Вот одно правило, которое я понял сам:
    Если я в своей проге использую регистры (например СХ), под несколько действий,
    например счетчик и адрес верхнего левого угла квадрата, то перед переходом по этим
    двум различным действиям, я должен сохранить регистр первого действия, занести в
    регистр новое значение (под второе действие), а после того, как второе действие
    отработало, востановить регистр первого действия. Если в это время вызываются
    прерывания, то я должен в описании этого прерывания посмотреть работу с какими
    регистрами оно осуществляется (что записывает в них), и так же сохранить их. Так?

    1. Какие еще есть, такие же правила?

    2. И существует сборник описания прерываний BIOS-DOS, с описанием функций? Чтоб нормально читать можно было? А не как в helpasm, пока ищешь, уже забыл, что искал.

    3. Посоветуйте, пожалуйста, инфу по составным материнки. Чипсеты, шины, памяти и др. - функции каждого в общей работе, программная или аппаратная работа, что прошито, а что перезаписывается и т.д.
     
  12. assorted

    assorted New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2006
    Сообщения:
    227
    Не вижу пользы от изучения прерываний доса если дос полностью умер... Думаю начинать стоит сразу с плоской модели а не тратить время на сегментную адресацию\функции-прерывани доса.
    Автор купи книгу, и не мучай себя и других излишними вопросами. Ты в пустую тратишь время.
     
  13. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    probka
    Абель, Юров и много других... Честно, сначала надо почитать.

    assorted
    Программировать под DOS полезно в начале изучения программированию на ассемблере, а подчас еще и интересно. Пусть автор читает что хочет, все равно придет к программированию во flat-mode.
     
  14. AshBone

    AshBone New Member

    Публикаций:
    0
    Регистрация:
    12 дек 2007
    Сообщения:
    101
    Не пытайтесь объять необъятное (с) ))))))))
     
  15. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    А еще загляни сюда Ralf Brown's Files вот это для кого написано?
    Рано тебе это, читай учебники, внимательно читай
     
  16. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    AshBone
    Да ладно, год-другой (от силы) покопается в DOS, выучит команды и разберется в системе и ее программировании в целом. А потом уже пускай разбирается в более сложных вещах.
    И вообще, многие здесь сразу сели на flat-mode? Наверняка большинство начинали с 16bit (про ZX и т.п. я вообще молчу, знаю, что такие есть здесь). И что, помешало? Зря время потратили? Вряд ли.
     
  17. probka

    probka New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    170
    Xerx, AshBone, Mikl__, Ivan_assm, assorted, я учусь на 5 курсе, ИиВТ. Я программист на С,С++. Работаю и на асме тоже. Вставляю вставки в языки высшего уровня. Программирую микроконтроллеры и РС совместимые контроллеры. Знаю электронику и радиоэлектронику. Вы понимаете, что я не начинающий? Я хочу понять графику на машинном уровне. Асм в целом, я представляю с трудом, чтоб его представлять, и представлять работу всего приложения в целом, нужно знать и аппаратуру тоже. Я когда пишу, ё-маё, "hello, world!", или "DOOM3", без разницы - что; я представляю себе всю работу, на всех уровнях, отладка - Вы слышали об этом? Оптимизация, Вы слышали об этом? Что отладка и оптимизация бывают трех видов, 'аппаратная', 'аппаратно-программная' и 'программная' - Вы слышали об этом?

    Так вот, я читал и читаю Питера Абеля, Чарьза Петзольда, Калашникова, Зубкова и еще других и многих. Во всех книгах описывается сам процесс. Вывод правил программирования, предоставляется самому изучающему. Как познать Бога? Познай бытие, вселенную, вычти из бытия вселенную, "остаток" и будет Он. Вы понимаете, что это ужас какой напряг. Вот я и спрашиваю, о чистой субстанции, так-сказать, именно о том, что мне нужно, а именно:
    1. Правила программирования на асме (первое я вывел сам, см. пост #11).
    2. Инфа по составным материнки. Чипсеты, шины, памяти и др. - функции каждого в общей работе, программная или аппаратная работа, что прошито, а что перезаписывается и т.д.

    Литература именно об этом, есть? Или может Ваши какие-нибудь собственные записки и черновки по этому вопросу?

    Я не считаю что ДОС умер. В приоритете для меня "свободное программирование", я не хочу зависеть от ОС. Я хочу писать подовсе, что есть.
     
  18. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    probka
    Хорошо, что ты так подкован. Значит большим открытием для тебя не будет, что управление компьютером и его частями без проблем осуществляется только в реальном режиме (DOS) -- при программировании под Win операционная система начнет этому прямому воздействию сопротивлятся, под операционкой крутится несколько задач и все они имеют равный приоритет, и все считают что они единственные -- доступ к аппаратуре в таком случае можно будет получить только через драйвер
    Замечательно что ты пытаешься вывести какие-то правила
    Под Win работа, через прерывания не идет, используются API функции, которые по соглашению не меняют значения в регистрах EBX, ESP, EBP, EDI, ESI в остальных регистрах (EAX, ECX, EDX) значения будут изменяться. Требуется сохранить значение в регистре - его отправляют в глобальную или локальную переменную в памяти или выталкивают в стек но об этом есть и у
    , так что Америку здесь ты не открыл, читай статьи на сайте wasm.ru
    Ищи М.Гук,В.Юров "Процессоры Pentium III, Athlon и другие. Анатомия компьютера"
     
  19. assorted

    assorted New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2006
    Сообщения:
    227
    Автор постоянно ссылается на какие то "правила" программирования на асме.. Это ты сам выдумал, никаких правил нет..

    есть концепция процедурного программирования, синтаксис компилятора, система команд процессора.
     
  20. TermoSINteZ

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

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    /off последнее время меня шокируют. Но чтоб так...

    probka
    Что означает в вашем понимании "Знаю". Мне кажется ваши знания поверхностные.
    То есть :
    1) Мы в универе программировали контроллер прерываний PIC . Я ничего не понял. Но мы это сделали. И теперь я знаю, как программировать микроконтроллеры, и конечно же умею.

    2) Понятия "В кодировке" "язык высшего уровня"... это вам маразматические препод из универа нарасказывал? (ни как не хотел обидеть препода)

    3) Вы говорите о информации об материнках, чипсетах. Вы очень наивны. Попробуйте поискать сами - и поймете о чем я. Чтото более менее серьезное и новое вы врятли найдете.

    Это навевает на определенные мысли о вашей квалификации (да и еще - судя по коду который вы привели в начале, и вопросам по нему , я могу сделать вывод что всетаки эти книги вы не читали, а услышали от препода, что такие есть...) И отладчик, хотяб программный вам не особо знаком

    Это все мое ИМХО

    Да и еще - Писали бы вы на своем С\С++ под directX . И были бы мега счастливы.
     
Статус темы:
Закрыта.