Здравствуйте, Aistesis!
Память не может быть 20-ти битной при всех 16-ти битных регистрах.
В данном случае речь идет о 20-ти битной
адресации памяти.
На рисунке показано как получается физический адрес при сегментной адресации реального режима.
Значение сегментного регистра уможенное на 16-ть складывается со значение регистра общего назначения. Механизм получения физического адреса реализован на аппаратном уровне и для программиста практически прозрачен.
С помощью такого метода можно работать с 1мб памяти.
Да ещё
Смещение (т.е. разница 20h-16h) при этом составляет 4 бита. , тут Вы тоже ошиблись т.к. 20
h-16
h=0Аh или 10 в десятичной системе.
Не все функции этого прервания возвращают ошибку ввиде установленного флага С. К примеру этим не занимаются файловые функции (0fh : 16h) введеные ещё в MSDOS 1.0, они возвращают код ошибки в регистре AL. Флаг переноса начали использовать только со второй версии, а сам код ошибки обрабатывается функцией 59h. Флаг переноса устанавливается функцией, как сигнал программе, что была ошибка и её нужно обработать(программа открывает не существующий файл, а потом из него ещё и данные считывает, как Вы думаете, результат работы программы будет корректным?). В языках высокого уровня обработкой ошибок занимается компилятор, он сам вставляет нужный код в программу. В ассемблере этим должен заниматся программист.
Удачи!
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.