Про прерывания и DEBUG

Тема в разделе "WASM.BEGINNERS", создана пользователем Guru_of_Zen, 13 мар 2010.

  1. Guru_of_Zen

    Guru_of_Zen Member

    Публикаций:
    0
    Регистрация:
    21 янв 2010
    Сообщения:
    288
    Разбираю у Абеля вопросы, споткнулся на таком:

    Я написал нижеследующее: (сразу попрошу - пожалуйста, не критикуйте код, тем более код неофита! я специально не стал организовывать цикл, юзать стек и т.д. - все предельно тупо и просто, для наибольшей наглядности - ибо мне нужен конкретный ответ на конкретный вопрос, а не дискуссия о наглядности/оптимизации/кол-ве кода/гуанкода :).)

    итак:

    Код (Text):
    1. A 100
    2.  
    3. ;FIRST SYMBOL
    4. MOV AH, 10
    5. INT 16
    6. MOV [200], AL
    7. XOR AX, AX
    8.  
    9. ;SECOND SYMBOL
    10. MOV AH, 10
    11. INT 16
    12. MOV [201], AL
    13. XOR AX, AX
    14.  
    15. ;THIRD SYMBOL
    16. MOV AH, 10
    17. INT 16
    18. MOV [202], AL
    19. XOR AX, AX
    20.  
    21. ;DISPLAY
    22. MOV AH, 09
    23. MOV DX, 200
    24. INT 21
    25. ;ограничитель $ должен быть скорее всего тут
    26. JMP 100.
    Собственно программа работает отлично - выполняю в DEBUG, инструкции трассирую (T), прерывания выполняю (P), в конце программа выводит кучу символов, из них первые 3 - это те самые которые ввожу я.

    И вопрос: куда поставить ограничитель $ в приведенном выше листинге, чтобы программа выводила только 3 введенных мною символа ?

    И еще вопрос: что значат слова Абеля: используйте команду Е 123 $ для установки ограничителя $ после 3-х введенных символов ?
     
  2. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.626
    Адрес:
    Russia
    насколько я понимаю $ нужно поместить с помощью команды E адрес по смещению 203h Для того чтоб функция 9 int21h знала где кончается строка, а
    123 - опечатка
     
  3. Guru_of_Zen

    Guru_of_Zen Member

    Публикаций:
    0
    Регистрация:
    21 янв 2010
    Сообщения:
    288
    Rockphorr
    Спасибо, все так и есть.

    123 опечатка и есть, а $ нужно было втулить в [203].

    Единственное что я изменил - это юзал не Е, а ассемблерную инструкцию

    MOV BYTE PTR [203], 24 ; где 24 - ASCII-код символа $.
     
  4. Guru_of_Zen

    Guru_of_Zen Member

    Публикаций:
    0
    Регистрация:
    21 янв 2010
    Сообщения:
    288
    Собственно программа стала выглядеть так:

    Код (Text):
    1. A 100
    2.  
    3. ;FIRST SYMBOL
    4. MOV AH, 10
    5. INT 16
    6. MOV [200], AL
    7. XOR AX, AX
    8.  
    9. ;SECOND SYMBOL
    10. MOV AH, 10
    11. INT 16
    12. MOV [201], AL
    13. XOR AX, AX
    14.  
    15. ;THIRD SYMBOL
    16. MOV AH, 10
    17. INT 16
    18. MOV [202], AL
    19. XOR AX, AX
    20.  
    21. ;DISPLAY
    22. MOV AH, 09
    23. MOV DX, 200
    24. MOV BYTE PTR [203], 24
    25. INT 21
    26. JMP 100