Помогите разобраться.

Тема в разделе "WASM.BEGINNERS", создана пользователем KitKet, 8 апр 2009.

  1. KitKet

    KitKet New Member

    Публикаций:
    0
    Здрасьте, всем! :)
    Начал изучение статьи Serrgio / HI-TECH - Введение в машинный код
    Вопрос по мометну, где с помощью INT10 рисуется квадрат в квадрате.
    Код (Text):
    1. XOR AL,AL  ;первый раз
    2. MOV BH,10
    3. MOV CH,05
    4. MOV CL,10
    5. MOV DH,10
    6. MOV DL,3E
    7. [b]MOV AH,06 [/b]
    8. INT 10
    9. XOR AL,AL  ;второй раз
    10. MOV BH,10
    11. MOV CH,06
    12. MOV CL,11
    13. MOV DH,0F
    14. MOV DL,3D
    15. INT 10
    16. INT 20
    Так как регистр AH не переписывается, то можно не прописывать повторно это команду. И это работает, если я делаю пример в cmd из под Windows XP. Но если этот пример делаю на ноутбуке из под DOS 6.22 прорисовывается только первый квадрат, а чтобы прорисовался второй квадрат, необходимо прописывать повторно MOV AH,06.

    Почему так происходит?
     
  2. deLight

    deLight New Member

    Публикаций:
    0
    видимо системный обработчик int10 отличается в оригинальном MSDOS и виндовой подсистеме.

    лучший вариант - выставлять нужные значения перед каждым вызовом и забыть о различиях версийю
     
  3. censored

    censored New Member

    Публикаций:
    0
    Насколько я помню, никто не гарантирует сохранение значений регистров.
     
  4. cppasm

    cppasm New Member

    Публикаций:
    0
    Вообще говоря гарантирует :)
    В нормальной документации указывают какие регистры изменяются.

    Код (Text):
    1. INT 10h,  06h (6)        Scroll Window Up
    2.  
    3.     Scrolls a specified window upward a specified number of lines.
    4.  
    5.        On entry:      AH         06h
    6.                       AL         Number of lines to scroll (if 0, clear entire
    7.                                  window)
    8.                       BH         Display attribute for blank lines
    9.                       CH         Row number of upper left corner
    10.                       CL         Column number of upper left corner
    11.                       DH         Row number of lower right corner
    12.                       DL         Column number of lower right corner
    13.  
    14.        Returns:       None
    15.  
    16.        Registers destroyed:      AX, SP, BP, SI, DI
     
  5. iZzz32

    iZzz32 Sergey Sfeli

    Публикаций:
    0
    Меня давно мучает вопрос: как SP может быть destroyed?!
     
  6. KitKet

    KitKet New Member

    Публикаций:
    0
    То есть согласно этой доки AX переписывается (и AH слдедовательно), значит MOV AH,6 надо прописывать каждый раз? Эти доки отличаются для разных ОСей?
     
  7. cppasm

    cppasm New Member

    Публикаций:
    0
    Да никак :)
    После выхода из обработчика ясное дело будет то же значение, что и перед входом.
    Просто имеется ввиду что обработчик стек использует.

    Да.

    В каком смысле?
    Это документация на сервисы BIOS, от OS не зависит.
    Список изменяемых регистров - это список регистров которые могут изменяться.
    Остальные гарантированно сохраняются.
    Но это не значит что AX к примеру обязательно изменится.
    Некоторые реализации могут его и не менять.
    Плюс вектор прерывания BIOS может быть перехвачен к примеру ОС, и её обработчик будет сохранять/восстанавливать изменённые регистры.
    Но на это лучше не надеяться.
     
  8. KitKet

    KitKet New Member

    Публикаций:
    0
    2cppasm, все ясно. Спасибо! Тему можно закрывать.