dec [var], но var увеличивается.

Тема в разделе "WASM.BEGINNERS", создана пользователем Igor1024, 19 апр 2011.

  1. Igor1024

    Igor1024 Васил Троянов Боянов (Azis)

    Публикаций:
    0
    Регистрация:
    15 окт 2010
    Сообщения:
    345
    Адрес:
    Sliven, Bulgaria
    Судя по всему у меня где-то в самых базовых знаниях пробел (честно искал, но не смог прояснить вопрос).
    Вот простой backspace для PM (находится в обработчике int'ов от клавы):
    Код (Text):
    1. .backsp:
    2.          xor eax,eax
    3.          dec [cur]                  ;по значению cur выводятся символы - в (0B800h+cursor*2)
    4.          movzx edi,[cur]
    5.          mov al,' '
    6.          mov word [es:edi*2],ax;выводим в видеосегмент
    7.          jmp .end                    ;там pop'аем всё и выходим благополучно из прерывания
    8. ...
    9. cur dw 10
    Так судя по всему cur увеличивается. В чём моя ошибка?
     
  2. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.624
    Адрес:
    Russia
    Igor1024
    кто вас учил имена меток с точки начинать ???
     
  3. Igor1024

    Igor1024 Васил Троянов Боянов (Azis)

    Публикаций:
    0
    Регистрация:
    15 окт 2010
    Сообщения:
    345
    Адрес:
    Sliven, Bulgaria
    Локальные переменные в fasm'e.
     
  4. Igor1024

    Igor1024 Васил Троянов Боянов (Azis)

    Публикаций:
    0
    Регистрация:
    15 окт 2010
    Сообщения:
    345
    Адрес:
    Sliven, Bulgaria
    Пруфлинк
    http://en.wikibooks.org/wiki/X86_Assembly/FASM_Syntax#Local_Labels
     
  5. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.624
    Адрес:
    Russia
    я думаю что значение cur всетаки уменьшается с каждым нажатием backspace, но контроля границ нету и за 0 будет ff или ffff (размера cur вы не указали) который расшириться нулями - эффект прыжка вперед
     
  6. Igor1024

    Igor1024 Васил Троянов Боянов (Azis)

    Публикаций:
    0
    Регистрация:
    15 окт 2010
    Сообщения:
    345
    Адрес:
    Sliven, Bulgaria
    Контроль границ я не делал. Сейчас дело не в том. Просто этот обработчик затирает символы, идущие впереди (вот почему я и решил, что значение не уменьшается). Я предусмотрительно писал в cur большее число. Дело в чём-то другом (и как мне кажется дело в какой-нибудь опечатке... как у меня и бывает по ночам).
     
  7. Igor1024

    Igor1024 Васил Троянов Боянов (Azis)

    Публикаций:
    0
    Регистрация:
    15 окт 2010
    Сообщения:
    345
    Адрес:
    Sliven, Bulgaria
    Вот, в принципе, весь код клавиатурного обработчика:
    Код (Text):
    1. keyboard:
    2.         pushad
    3.         push es
    4.         push ds
    5.         xor eax,eax
    6.         xor edi,edi
    7.         xor ebx,ebx
    8.         in al,60h ;is key pushed?
    9.         mov ah,al
    10.         and ah,80h
    11.         jnz .end
    12.  
    13.         and al,7Fh
    14.         cmp al,8h
    15.         je .backsp
    16.         jne .just_key
    17.  
    18.  .backsp:
    19.          xor eax,eax
    20.          movzx edi,[cursor]
    21.          sub edi,2
    22.          mov al,' '
    23.          mov word [es:edi*2],ax
    24.          mov dword [cursor],edi
    25.          jmp .end
    26.  
    27.  .just_key:
    28.         mov ebx,ascii
    29.         add ebx,eax
    30.         mov edi,ebx
    31.         mov al,byte [edi]
    32.         mov ah,07h
    33.         movzx edi,[cursor]
    34.         mov word [es:edi*2],ax
    35.         inc [cursor]
    36.  
    37.        .end:
    38.         pop ds
    39.         pop es
    40.         popad
    41.         jmp int_EOI
     
  8. Sasha7b9

    Sasha7b9 New Member

    Публикаций:
    0
    Регистрация:
    17 окт 2010
    Сообщения:
    105
    Igor1024
    Из первого поста ничего не понятно.
    Могу посоветовать только загрузить в OllyDbg и поставить точку останова на 3-й строке. Но в этом мало смысла - вряд ли у тебя процессор глючит.
     
  9. Vilco

    Vilco Vitaly

    Публикаций:
    0
    Регистрация:
    5 мар 2007
    Сообщения:
    190
    Адрес:
    Nsk, Russia
    :lol:
    Я думаю у тс такой возможности нет.

    Судя по чему? Каретка сдвигается вперед? Символ не затирается? Вы вообще уверены что проц попадает на ветку .backsp?
    Код (Text):
    1. cmp al,8h
    2. je .backsp
    Насколько я помню 08h это ASCII код backspace, но не сканкод её. 0Eh вроде бы оно.

    Кстати, зачем сбрасывать бит, которого нет?
    Код (Text):
    1. and ah,80h
    2. jnz .end
    3. and al,7Fh
     
  10. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Как-будто в коде других недочётов мало. А два прыжка зачем?
    На случай, если один не сработает? Где-то я уже что-то подобное слышал.
     
  11. Igor1024

    Igor1024 Васил Троянов Боянов (Azis)

    Публикаций:
    0
    Регистрация:
    15 окт 2010
    Сообщения:
    345
    Адрес:
    Sliven, Bulgaria
    Так. Спасибо Vilco, я сканкод перепутал.
     
  12. Sasha7b9

    Sasha7b9 New Member

    Публикаций:
    0
    Регистрация:
    17 окт 2010
    Сообщения:
    105
    Igor1024
    Праздравляю. А что такое РМ? (в 1-м посте)
     
  13. Sunzer

    Sunzer Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    256
    Protected Mode?
     
  14. Sasha7b9

    Sasha7b9 New Member

    Публикаций:
    0
    Регистрация:
    17 окт 2010
    Сообщения:
    105
    Sunzer
    Возможно. Неграмотно поставленный вопрос в совокупности с этим protected mode (понятие не для новичков, согласитесь) ввёл меня в ступор.
     
  15. Mikl___

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

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.882
    Sasha7b9, Sunzer
    а почему не Post meridiem или Particulate matter?
    Google на сокращение PM вон сколько накидал:
    Мало ли что находится у Igor1024 в "обработчике int'ов от клавы", да и подразумевался скорее Real Mode, а не Protected
     
  16. Sasha7b9

    Sasha7b9 New Member

    Публикаций:
    0
    Регистрация:
    17 окт 2010
    Сообщения:
    105
    Mikl___
    Возможно. Потому и спросил:
    у топикстартера. Вопрос поверг меня в смятение.
    Но, похоже, Игорь не тратит время на форумы. Делает дело.
     
  17. Igor1024

    Igor1024 Васил Троянов Боянов (Azis)

    Публикаций:
    0
    Регистрация:
    15 окт 2010
    Сообщения:
    345
    Адрес:
    Sliven, Bulgaria
    Самый что ни на есть защищенный.
     
  18. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Сказал А:
    Код (Text):
    1.         push es
    2.         push ds
    Говори и Б:
    Код (Text):
    1.         push VIDEOBUFFER_SEL
    2.         pop es
    3.         push ss
    4.         pop ds
    Но самое главное, что работа с аппаратурой в принципе организована не правильно. Не нужно намертво вшивать код вывода на экран в клавиатурный обработчик, потому что в окончательном варианте его там быть не должно. Ты сделал мизер из того, что должно присутствовать в полноценном обработчике, а код уже смотрится коряво. Я тебе посоветовал нормально реализовать putstr (для продвижения по экрану вперед), который можно было временно использовать в обработчике. Но раз речь пошла уже и о BS, то становится понятно, что ты пытаешься сделать. По-хорошему это реализуется через событийный механизм (обработчики шлют сообщения о наступивших событиях - "основная программа" их получает и обрабатывает). Если это в данный момент реализовать не можешь, тогда хотя бы полноценный putchar с обработкой в том числе и BS (в виде управляющего кода) реализуй отдельно, а также что-то типа translate, если "выходные" коды обработчика будут отличаться от управляющих и символьных кодов ASCII. В таком виде это потом будет легко вынести из обработчика.
     
  19. Igor1024

    Igor1024 Васил Троянов Боянов (Azis)

    Публикаций:
    0
    Регистрация:
    15 окт 2010
    Сообщения:
    345
    Адрес:
    Sliven, Bulgaria
    Phantom_84, теперь вот думаю, что нужно разбираться с TSS, чтобы по-красивому всё это организовать. (Служба обработчик команд, диспетчер задач...) Становится всё интересней и интересней!
     
  20. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Пока ты в нулевом кольце, то это не критично. Хотя, исходя из того же принципа делать несложные вещи сразу (я про TSS), это было бы полезно.

    Код (Text):
    1.         xor eax,eax
    2.         lldt ax
    3.  
    4.         mov eax,TSS_SEL
    5.         ltr ax