Я бы хотел объяснить комментарий zx485 более подробно:
Я часто видел, что начинающие на ассемблере не понимают, что такое инструкции, как int
(x86), syscall
(MIPS) или SWI
(ARM) на самом деле.
На самом деле, эти инструкции представляют собой особую форму инструкции call
: они вызывают некоторую подпрограмму, которая обычно находится в операционнойsystem.
64-битные процессоры x86 имеют разные режимы работы.Один из них называется «реальный режим».В этом режиме ЦП может выполнять только 16-битный код.
Подпрограмма BIOS, которую можно вызвать с помощью int 0x16
, работает только тогда, когда ПК работает в «реальном режиме».
Тот факт, что ваша программа является 64-битной программой (используются регистры типа rax
), говорит о том, что ваш процессор не работает в реальном режиме.
Если вы пишете свою собственную операционную систему, вы можетеопределить собственные подпрограммы, которые вызываются определенными int
инструкциями:
Вы можете определить подпрограмму, которая вызывается с помощью int 0x16
, которая читает клавиатуру, а другую - с помощью int 0x10
, записывающую вscreen.
Однако вы также можете указать, что int 0x16
используется для записи на экран, а int 0x10
используется для доступа к жесткому диску в вашей операционной системе.
И вв каждом случае вам придется писать подпрограммы самостоятельно, потому что существующие подпрограммы в BIOS не могут использоваться в любом другом рабочем режиме, кроме «реального режима».(Это то, что Росс-Ридж указывает в своем комментарии.)