Ассемблер Это просто! Учимся программировать

Заказать монтаж металлокаркас в Новосибирске и пригороде. Металлоконструкции на заказ.

ГЛАВА 07


  • . Теперь настало время научиться проверять, какую же клавишу нажал пользователь.

    Для этого рассмотрим несколько новых операторов.

    Оператор Перевод Применение Процессор
    CMP приемник, источник compare - сравнить Сравнение 8086

    Вы уже знаете, что после вызова функции 10h прерывания 16h, в AX помещается код клавиши, которую нажал пользователь. Как же нам проверить?

    Вот пример: ... (1) mov ah,10h (2) int 16h (3) cmp al,'Y' (4) jz Yes_key ... (5) Yes_key: ...

    Строки (1) - (2) нас уже не интересуют, а вот (3) - (4) мы рассмотрим.

    Что же происходит? На строке (2) компьютер остановится и не продолжит работу до тех пор, пока мы не нажмем какую-нибудь клавишу. После этого прерывание 10h поместит в AX код клавиши, и выполнение программы продолжится. В строке (3) мы проверяем, нажата ли клавиша 'Y'. Обратите внимание на запись: cmp al,'Y'

    Мы можем даже не знать ASCII-код клавиши. Для этого в кавычках просто указываем саму клавишу. Ассемблер при ассемблировании сам заменит ее на соответствующий код. Если вы запустите программу под отладчиком, то увидите, что код будет не cmp al,'Y'

    а cmp al,59h

    Теперь мы знаем код клавиши 'Y'. Естественно, можно записать и cmp al,59h. Программа будет работать правильно.

    Т.о., мы узнали, что в Ассемблере можно записывать не только двоичные, десятичные и шестнадцатеричные числа, но и просто символы. Например: mov al,'2' mov dh,'d'

    В результате AL будет содержать 32h, а DH - 64h. Все просто!

    Смотрим дальше. В строке (4) наша программа перейдет на метку 'Yes_key' (5), если нажата клавиша 'Y'.

    Оператор JZ (Jump if Zero - переход если флаг нуля установлен) выполняет переход на указанную метку, если флаг нуля установлен в единицу.

    Здесь мы подошли к изучению регистра флагов. Полностью его мы не будем рассматривать, а затронем лишь то, что нам нужно для проверки нажатой клавиши.

    Флаг нуля устанавливается в единицу, если предыдущая команда сравнения была верной. Например: mov ax,15 cmp ax,15 jz Our_lab mov ah,3 Our_lab: ...

    В данном случае флаг нуля будет установлен в единицу, и мы сможем перейти на указанную метку (Our_lab). Команда mov ah,3 не будет выполняться.

    Второй пример: mov ax,15 cmp ax,16 jz Our_lab mov ah,3 Our_lab: ...




    Начало  Назад  Вперед



    Книжный магазин