So I am new to the programming world, I started a class on microprocessors this semester and our first lab is using Visual Studio to create an Assembly file to add two numbers. I have followed the instructions completely and keep coming up with error code LNK2001 unresolved external symbol _MAIN LINK Line 1, followed by LNK1120. I had a Zoom meeting with my professor today and he can't even understand the problem with it. If anyone can help, please go into as much detail as possible as I am pretty much illiterate when it comes to coding. This is what I'm working with.
.MODEL FLAT
.DATA
.CODE
main PROC
;----- CLEAR CONTENTS OF REGISTERS -----
xor eax,eax
xor ebx,ebx
xor ecx,ecx
xor edx,edx
;----- BEGIN MAIN PROCEDURE HERE -----
mov ax,5
add ax,3
;----- END MAIL PROCEDURE HERE -----
ret
main ENDP
END
I would add stdcall to the model directive and precede with a processor directive .386 as an example, and end with the end pointing to the main proc
.386
.MODEL FLAT, STDCALL
.DATA
.CODE
main PROC
;----- CLEAR CONTENTS OF REGISTERS -----
xor eax,eax
xor ebx,ebx
xor ecx,ecx
xor edx,edx
;----- BEGIN MAIN PROCEDURE HERE -----
mov ax,5
add ax,3
;----- END MAIL PROCEDURE HERE -----
ret
main ENDP
END main
You sir, are a life saver. I used all parts that you suggested and got a success notification, did a little edit and found out that stdcall was the only necessary addition. Thank you for your help!
hello sir kennyd8200;
END
When you code this way (remove that line or comment), you're doing a module that will be added (agregate) to other modules to form final executable or a library (like dll files or .lib files), well, read object files that will be joined to final executable file.
You need specify where your program will start, the address (entry point) of your program by adding a label (memory address) to that as fearless point you.
Please, next time post your command line too, will be more easy to help you. Assembler (linker) have an option to you specify what's the entry point of your program in command line instead of being in code.
Windows adopt some rules to programs runs fine in it, this means that we need follow rules to our program runs in windows, and better, others can call our "modules" if they follow rules. Thats the "stdcall".
Good lucky man, keep walking.
---edited--- linker, (remove that line or comment)
Zeroing the registers does nothing useful.
I can't imagine what you mean by "Begin a Mail Procedure." I worked for the Postal Service for thirty years and never once began a "mail procedure." And I was a Systems Analyst.
I imagine it was only test code.