1

This might sound common to many. I just need help declaring and printing string in assembly language Using visual studio. Am just trying out some assembly code, and while I can work on many mathematic based stuffs. Am not able to handle String related function.

Am trying to run some code which I found online on the same. BUt its showing some errors. Am using 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

Error 1 error A2004: symbol type conflict .asm 11 1 Project

2
  • 2
    Are you using some sort of 16-bit emulator? In Windows you can’t use DOS or BIOS software interrupts (INT instructions) to do I/O. Commented Mar 31, 2019 at 21:02
  • @prl: to be exact: some versions of Windows - especially the 64-bit ones - do not have a built-in DOS&BIOS emulator. Commented Apr 1, 2019 at 4:58

1 Answer 1

1

Am using Visual Studio Visual C++ 2013

... which probably means that you are creating a 32-bit or 64-bit Windows program.

However, the code you have posted is obviously 16-bit code. Normally, you cannot mix 16-bit, 32-bit and 64-bit code.

The users "prl" and "rkhb" left two comments:

In Windows you can’t use DOS or BIOS software interrupts ...
...
to be exact: some versions of Windows

In 16-bit Windows programs you used a combination of functions in .DLL files and BIOS and MS-DOS interrupts the same time. The function AH=3Eh of INT 21h was used to close a file handle.

However, in 32- and 64-bit Windows programs using the INT instruction was never allowed. Instead, the .DLL files contained all necessary functions (e.g. CloseHandle, which replaced AH=3Eh, INT 21h in 32- and 64-bit programs).

And 16-bit Windows programs never had access to the console, so function AH=9 of INT 21h would not work in a 16-bit Windows program, but only in an MS-DOS program.

Am just trying out some assembly code, and while I can work on many mathematic based stuffs.

And what do you want to do?

  • Use assembly code in a 32- or 64-bit program for performance reasons?

    In this case you should learn the differences between 16-, 32- and 64-bit x86 assembler and write your program in 32- or 64-bit assembly. You cannot call the operating system functions (e.g. string output) "directly" but you have to call functions from .DLL files (which is simply done using the CALL instruction).

  • Learn 16-bit x86 assembly?

    In this case you will need a 16-bit compiler and a 16-bit assembler creating MS-DOS programs (so Visual Studio 2013 will get you nowhere). And if your computer runs Windows 7 or newer, you will need some MS-DOS emulator or a virtual machine running some DOS operating system because recent Windows versions do not support running DOS programs.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.