Для этого рассмотрим несколько новых операторов.
Оператор | Перевод | Применение | Процессор |
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: ...