Использую Visual Studio Visual C ++ 2013
... что, вероятно, означает, что вы создаете 32-разрядную или 64-разрядную программу Windows.
Тем не менее, отправленный вами код, очевидно, является 16-битным кодом. Обычно нельзя смешивать 16-битный, 32-битный и 64-битный код.
Пользователи "prl" и "rkhb" оставили два комментария:
В Windows вы не можете использовать программные прерывания DOS или BIOS ...
...
а точнее: некоторые версии Windows
В 16-битных программах Windows вы использовали комбинацию функций в файлах .DLL и прерываниях BIOS и MS-DOS одновременно. Функция AH=3Eh
из INT 21h
использовалась для закрытия дескриптора файла.
Однако в 32- и 64-битных программах Windows использование команды INT
никогда не допускалось. Вместо этого файлы .DLL содержали все необходимые функции (например, CloseHandle
, который заменил AH=3Eh, INT 21h
в 32- и 64-разрядных программах).
И 16-разрядные программы Windows никогда не имели доступа к консоли, поэтому функция AH=9
из INT 21h
не будет работать в 16-разрядной программе Windows, но только в программе MS-DOS.
Я просто пробую какой-нибудь ассемблерный код, и хотя я могу работать над многими математическими материалами.
А что ты хочешь делать?
Использовать ассемблерный код в 32- или 64-битной программе из соображений производительности?
В этом случае вы должны изучить различия между 16-, 32- и 64-битным ассемблерами x86 и написать свою программу в 32- или 64-битной сборке. Вы не можете вызывать функции операционной системы (например, вывод строки) «напрямую», но вы должны вызывать функции из файлов .DLL (что просто делается с помощью инструкции CALL
).
Изучить 16-битную сборку x86?
В этом случае вам понадобится 16-битный компилятор и 16-битный ассемблер, создающий программы MS-DOS (так что Visual Studio 2013 никуда вас не приведет). И если ваш компьютер работает под управлением Windows 7 или более поздней версии, вам потребуется эмулятор MS-DOS или виртуальная машина с операционной системой DOS, поскольку последние версии Windows не поддерживают запуск программ DOS.