INT 21H ist sozusagen die "WinAPI des DOS"
Anstatt z.B. sowas wie TimeGetTime_() aufzurufen, tut man eben eine bestimmte Nummer in ein bestimmtes Register, plus die Parameter, und ruft dann INT 21H auf, um damit eine bestimmte Funktion auszulösen (z.B. Dateien öffnen, Text ausgeben, etc).
Wenn Du was standalone machen willst, also komplett ohne OS, dann kannst Du logischerweise keine DOS-Funktionen aufrufen, sondern mußt Dir alles selber machen. Was natürlich etwas umständlich ist

Du kannst Dir aber für den Anfang ja auch eine etwas einfachere Maschine suchen. Ich hab z.B. ein Spiel für den C64 geschrieben (gibt hier auch
einen Thread), natürlich hat der keinen x86-Prozessor, aber die Assembler-Denkweise ist grob gesagt die gleiche. Und da hab ich alles ohne OS-Funktionen gemacht (obwohl auch das möglich gewesen wäre, weil ja auch der C64 ein (fest integriertes) OS hat).
---
Mich wundert aber allgemein warum bei Dir INT 21H nicht funktioniert, weil aus Kompatibilitätsgründen müßte das unter Windows doch eigentlich immer noch laufen...