x86 Assembler for Vista 64-bit?

Started by
8 comments, last by Sean_Seanston 15 years, 5 months ago
Ok, so I'm doing a Computer Science degree and we're learning assembly. I had TASM running on my XP 32-bit laptop but recently I got a new computer with Vista 64-bit and trying to run TASM results in an error message saying I need a version that works with 64-bit since, obviously with TASM being so old, it must be a 16-bit application. (Like Dungeon Keeper unfortunately as I discovered -_- but that's another issue). I looked at NASM and FASM but they both give me errors when I put in code like this which TASM never had a problem with:
.model small
.stack
.data
message   db "Hello world", "$"

.code

main   proc
   mov   ax,seg message
   mov   ds,ax

   mov   ah,09
   lea   dx,message
   int   21h

   mov   ax,4c00h
   int   21h
main   endp
end main
I don't know much about x86 Assembly but I've seen something about Intel syntax and AT&T syntax, though NASM and FASM are supposed to work with Intel syntax so I dunno. Maybe I need to configure them somehow? I also see Visual Studio 2008 Express includes MASM 9. How do I use that exactly? When I go to C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin with the Cmd prompt and type "ml test.asm" I get some errors about "symbol type conflict" and something else. ml /? doesn't really help either... Any ideas as to how I can successfully assemble and run the code above? I could just use TASM on my laptop but being able to do it on my main PC would be easier. Thanks.
Advertisement
What are the exact error messages you get?
I type this:

C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin>ml test.asm


Then this comes out:

Microsoft (R) Macro Assembler Version 9.00.30729.01Copyright (C) Microsoft Corporation.  All rights reserved. Assembling: test.asmtest.asm(9) : error A2004:symbol type conflicttest.asm(19) : warning A4023:with /coff switch, leading underscore required forstart address : main
Have you considered doing what the warning says to do?
SlimDX | Ventspace Blog | Twitter | Diverse teams make better games. I am currently hiring capable C++ engine developers in Baltimore, MD.
Unfortunately once you've got it to assemble you'll run into another problem - that assembly code is 16-bit so I think the result won't run!

You're probably best off dual booting with an older O/S, or using an emulator like DosBox.
Just a bit of trivia:
Quote:Original post by Sean_Seanston
[...]TASM[...]

Quote:Original post by Sean_Seanston
[...]Microsoft (R) Macro Assembler Version 9.00.30729.01[...]
TASM doesn't stand for "Microsoft (R) Macro Assembler". The appropriate acronym in this case is MASM. TASM stands for Turbo Assembler, which was (is?) a Borland product.
"Walk not the trodden path, for it has borne it's burden." -John, Flying Monk
Hi, during college i used a program for some courses, cant remember the name but it allowed you to program assembly and simulate/emulate all the functionalites ( IO and interrupts etc ) it had its own output window and all, if you dont need to make exes then you can search for something like that
@extarius - I believe he tried to use TASM, discovered it didn't work on a 64 bit OS, and now is trying MASM and wonders why it won't compile his TASM-compatible code.

@Sean_Seanston - The main problem you're having is that, like Adam_42 said, you are trying to compile 16 bit code in a very-not-16-bit assembler!! ".model small"? Memory models don't work like that now in windows. That's why MASM is complaining. The line "mov ax, seg message" I believe will error because you don't have segments to address memory any more either. It's all flat (in fact it's not even real memory addresses any more, but that's another issue that probaby won't concern you)

Also, as promit and the masm warning said, you need an underscore to main, so call it _main.

I think your best bet would definitely be to boot to a 32 bit OS (maybe even DOS???) or learn to use MASM for making windows programs, of which there are tons and tons of tutorials on the internet if you just google for them.

[edit] Or do what NoPlace suggested... sounds like it's just what you need.

Good luck!

Cheers
-Scott
Quote:Original post by popsoftheyear
@extarius - I believe he tried to use TASM, discovered it didn't work on a 64 bit OS, and now is trying MASM and wonders why it won't compile his TASM-compatible code.[...]
Indeed. I must be more tired than I thought =-/

"Walk not the trodden path, for it has borne it's burden." -John, Flying Monk
Quote:Original post by Extrarius
Just a bit of trivia:
Quote:Original post by Sean_Seanston
[...]TASM[...]

Quote:Original post by Sean_Seanston
[...]Microsoft (R) Macro Assembler Version 9.00.30729.01[...]
TASM doesn't stand for "Microsoft (R) Macro Assembler". The appropriate acronym in this case is MASM. TASM stands for Turbo Assembler, which was (is?) a Borland product.


Yes, I was talking about TASM in the early part of the post but later on I was discussing MASM and the errors I get with that...

Quote:Original post by popsoftheyear
@extarius - I believe he tried to use TASM, discovered it didn't work on a 64 bit OS, and now is trying MASM and wonders why it won't compile his TASM-compatible code.


Yes indeed ^_^

Quote:Original post by popsoftheyear
@Sean_Seanston - The main problem you're having is that, like Adam_42 said, you are trying to compile 16 bit code in a very-not-16-bit assembler!! ".model small"? Memory models don't work like that now in windows. That's why MASM is complaining. The line "mov ax, seg message" I believe will error because you don't have segments to address memory any more either. It's all flat (in fact it's not even real memory addresses any more, but that's another issue that probaby won't concern you)


I see... suppose I'll just use my laptop for assembly then.

Thanks.

This topic is closed to new replies.

Advertisement