Учебник по ассемблеру (ASM)
 

Ассемблер в примерах - Флаг jc

Вопрос:
По поводу флага jc Калашников в 8-ой главе пишет: "Все функции прерывания 21h устанавливают в единицу флаг переноса, если произошла ошибка, и сбрасывают его, если ошибки не было". Возможно, это написано в контексте неудачного открытия файла функцией 3Dh прерывания 21h. Но всё равно, почему ошибка-то? Мы задали флагу определённое условие: перейти туда-то, если будет неравенство (в данном случае - не найден файл), что флаг и сделал. Вот, если бы было равенство (файл найден), то флаг бы не выполнил свою задачу, т.е. не было бы переноса.

Ответ:
Флаг C используется в данных функциях как признак того, что произошла ошибка. Состояние флага C можно установить или сбросить вручную с помощью команд STC, CLC, поэтому от того, было "равенство" или не было, неважно. Не все функции этого прервания возвращают ошибку ввиде установленного флага С. К примеру этим не занимаются файловые функции (0fh : 16h) введеные ещё в MSDOS 1.0, они возвращают код ошибки в регистре AL. Флаг переноса начали использовать только со второй версии, а сам код ошибки обрабатывается функцией 59h. Флаг переноса устанавливается функцией, как сигнал программе, что была ошибка и её нужно обработать(программа открывает не существующий файл, а потом из него ещё и данные считывает, как Вы думаете, результат работы программы будет корректным?). В языках высокого уровня обработкой ошибок занимается компилятор, он сам вставляет нужный код в программу. В ассемблере этим должен заниматся программист.


   Вперёд
   Содержание