Простой код не пашет под XP

Тема в разделе "WASM.BEGINNERS", создана пользователем Rohan, 12 авг 2005.

  1. Rohan

    Rohan New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2004
    Сообщения:
    133
    Собственно не работает под 2000 и XP

    а под 98 все работает отлично. В чем может быть проблемма?
    Код (Text):
    1.     org 100h
    2.  
    3.  
    4.     mov si,mess2
    5.     mov ax,0B800h
    6.     mov es,ax
    7.     mov di,0
    8.     mov cx,3
    9.  
    10.  
    11.     mov ah,31h
    12.     outscr: lodsb
    13.     stosw
    14.     loop outscr
    15.  
    16.     xor ax,ax
    17.     int 16h
    18.     ret
    19.  
    20. mess2 db 'new',24h
    21.  
    22.  
     
  2. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Rohan

    Надо в самом начале добавить
    Код (Text):
    1. mov ax,3
    2. int 10h




    mov si,offset mess2
     
  3. Rohan

    Rohan New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2004
    Сообщения:
    133
    Код (Text):
    1.  
    2. mov ax,3
    3. int 10h
    4.  
    5.  
    6.  


    А что эта команда значит? Почему ее нужно использовать?


    Код (Text):
    1. mov si,offset mess2
    - я в Fasm пишу этого в нем нет
     
  4. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Rohan



    См. RBIL.

    Если я правильно помню, это устанавливает режим и очищает экран.
     
  5. Rohan

    Rohan New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2004
    Сообщения:
    133
    Возник следующий вопрос.
    Код (Text):
    1.         org 100h
    2.         mov ah,3
    3.         int 10h
    4.         mov ax,0B800h
    5.         mov es,ax
    6.         mov si,mess
    7.         mov di,6 ; <----
    8.         mov cx,3
    9.         mov ah,31h
    10.        new: lodsb
    11.         stosw
    12.         loop new
    13.         xor ax,ax
    14.         int 16h
    15.         ret
    16. mess db 'hi'      


    Выводится не просто "hi" а 'hiS' почему так происходит?

    Откуда берется лишний символ? Я понимаю что т.к. в cx,3 но почему именно S ?

    Если изменить чисто в di (смещение) на нечетное то выводится "111" в разной цветовой гамме. Почему?
     
  6. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348




    Просто S - это первый байт мусора после твоей проги.







    Формат видеопамяти:

    [символ][атрибут][символ][атрибут][символ][атрибут]...



    Так что, если смещение в di нечетное, то в качестве атрибута пишется очередной символ твоей строки, а в качестве символа - 31h
     
  7. Rohan

    Rohan New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2004
    Сообщения:
    133
    И еще вопрос. Наткнулся в книге на пример цикла. Но походу в нем допущена ошибка
    Код (Text):
    1.  
    2.     mov cx,200
    3. out:
    4.     push cx
    5.     mov cx,0
    6. in:  
    7.     loop in ; вычитаем из 0 1 получаем 65565
    8.     pop cx
    9.     loop out
    10.  


    Тогда получается что уменьшенное значение 65535 нигде не сохраняется, и цикл вечен?

    Или я не в ту сторону думаю?
     
  8. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    Код выполнится 200*65536 раз.


    Код (Text):
    1.     mov cx,200    ; Пишем в cx число итераций
    2. out: push cx       ; Сохраняем счетчик внешнего цикла
    3.  
    4.      mov cx,0      ;
    5. in:  loop in       ; Выполняем внутренний цикл (65536 раз)
    6.  
    7.      pop cx        ; Восстанавливаем счетчик внешнего цикла
    8.      loop out