Использование языка ассемблера для печати строковых переменных - PullRequest
0 голосов
/ 31 марта 2019

Это может показаться общим для многих. Мне просто нужна помощь, чтобы объявить и напечатать строку на ассемблере Используя Visual Studio. Я просто пробую некоторый ассемблерный код, и пока я могу работать над многими математическими материалами. Я не в состоянии обрабатывать функции, связанные со строками.

Я пытаюсь запустить какой-то код, который я нашел в Интернете на том же. Но это показывает некоторые ошибки. Использую visual studio visualc ++ 2013

main proc
 MOV AX, @DATA                ; initialize DS
 MOV DS, AX

 LEA DX, STRING_1             ; load & display the STRING_1  
 MOV AH, 9            
 INT 21H

Ошибка 1, ошибка A2004: конфликт типов символов .asm 11 1 Проект

1 Ответ

1 голос
/ 01 апреля 2019

Использую 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...