Не работает функция 06 прерывания 10

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

  1. Artyom2

    Artyom2 New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2011
    Сообщения:
    3
    Исходный код для был взят мною из статьи "Низкоуровневое программирование для дZенствующих". Открываю "Блокнот", пишу:
    CSEG segment
    org 100h
    Begin:
    xor al,al
    mov bh,10
    mov ch,05
    mov cl,10
    mov dh,10
    mov dl,3E
    mov ah,06
    int 10
    mov bh,20
    mov ch,06
    mov cl,11
    mov dh,0F
    mov dl,3D
    int 10
    mov ah,10h; эти 2 строки добавил сам, чтобы форточка не закрывалась
    int 16h
    int 20
    CSEG ends
    end Begin

    Сохраняю файл, например как 1.asm. Далее, в командной строке пишу как обычно masm 1.asm. Компилятор выдаёт сообщение об ошибке: "error A2048". Стоит поменять значение dl для второго окна, например на Dh, или скажем на 10h, код компилируется. Затем линкую: "link 1.obj /TINY;" В результате создаётся одно окно с бегунком, которое закрывается при нажатии любой клавиши. При этом не важно пытаюсь я создать таким образом 2 окна или 5 (как в статье), результат такой же. Интересно, что если обнулить регистры координат окна, ничего не меняется. Помогите, пожалуйста разобраться, в чём причина?

    P.S.
    Если не сложно, объясните почему "xor al,al" а не "mov al,00"?
     
  2. kernel16

    kernel16 Human Vl

    Публикаций:
    0
    Регистрация:
    29 окт 2010
    Сообщения:
    316
    это один хрен, но xor быстрее.
    Для шестнадцеричных значений на конце 'h' должно быть
    это у тебя выходит int 0Ah
    int 20h!!!
    отсюда и неработа прерываний, ты не те вызываешь и сбои из за ошибок вводных данных)

    в шестнадцеричном числе, если первая цифра буква (adfh), то перед ней ставится нолик (0adfh), иначе ассемблер воспренимает её как переменную

    элсо: для доса лучше tasm, а не masm
     
  3. iamlamer

    iamlamer New Member

    Публикаций:
    0
    Регистрация:
    20 июн 2005
    Сообщения:
    273
    Адрес:
    Russia
    Оформи _все_ числа в 16-ричном формате (например, "20h" вместо "20") и будет тебе щастье. А "xor al,al" вместо "mov al,0" - это сделано спецом, чтобы все спрашивали. :)
     
  4. kernel16

    kernel16 Human Vl

    Публикаций:
    0
    Регистрация:
    29 окт 2010
    Сообщения:
    316
    О чтобы все спрашивали лучше так:
    Код (Text):
    1. @1:
    2. or al,al
    3. jz @2
    4. dec al
    5. jmp @1
    6. @2:
    :lol:
     
  5. Artyom2

    Artyom2 New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2011
    Сообщения:
    3
    Огромное спасибо! Всё работает! Решение, как всегда лежало на поверхности! )))
     
  6. Sasha7b9

    Sasha7b9 New Member

    Публикаций:
    0
    Регистрация:
    17 окт 2010
    Сообщения:
    105
    О-ё-ё-ё-ёй. А я вот слышал, что быстрее было во времена ещё самых первых процессоров, а сейчас чисто машинально так делают.
     
  7. kernel16

    kernel16 Human Vl

    Публикаций:
    0
    Регистрация:
    29 окт 2010
    Сообщения:
    316
    а щас вон, действие с 32 битовым числом быстрее, чем с 8 битовым. Перестраивают процессоры под С++ и другие комп.