which assembler is the best? it is NASM, right? | Sololearn: Learn to code for FREE!
New course! Every coder should learn Generative AI!
Try a free lesson
+ 2

which assembler is the best? it is NASM, right?

hello friends , I had completed my C++ course and worked out with visual studio and Qt . now I want to learn x86 assembly . but I am in confusion , I don't know which assembler's syntax to pick up. I wanted to take NASM syntax , but outside resources teach how to make only linux system calls , I want to write win32 and win64 asm codes in NASM , but where can I learn ? I also checked out MASM , but it is DOS-based. finally , please share your views regarding this topic and tell which assembler is the best

9th Jan 2018, 4:34 AM
Digitalboy
15 Answers
+ 3
Please upvote to have asm tutorial: https://www.sololearn.com/Discuss/1037926/?ref=app Not just trying to get xp, I didn’t even post it. Just want it to happen.
29th Jan 2018, 9:52 PM
Jacob Pembleton
Jacob Pembleton - avatar
+ 2
I don't have linux os in my computer . I only have windows 10 in my PC. that is why I was talking about writing win32 and win64 codes in NASM
9th Jan 2018, 5:39 AM
Digitalboy
+ 1
ok , if I learn linux system calls , then where to practice them ????????????
9th Jan 2018, 5:38 AM
Digitalboy
+ 1
just like the way DOSBox helps dos apps to run on windows , is there any tool which helps linux apps to run on windows , so that we can use linux nasm in windows ?
10th Jan 2018, 12:01 PM
Digitalboy
+ 1
After reading this question and answers, I got the impression, that Linux must be somehow more assembler-friendly than Windows. Weird, because I used to have completely opposite impression before. Is it really that way now, and why? Regarding which assembler is best, IMHO it doesn't matter. At least while you learning. And even after you complete your learning it won't matter. What does matter is what exactly you are going to learn. And considering the possible information overflow, you want to minimize the volume of the stuff to care about. So, I think it is important to stick to the environment you want to learn about, and pick the learning materials that appeal to you most. And as for the assembler, stick to whatever is taught in the learning materials of your choice. So, if you're interested in x86 assembler for WinApi, choose best tutorials, and stick to the instruments used in the tutorials. No cross-platforming, no VMs, learn exactly what you want to learn. If that's asm basics, just learn the assembler and computer architecture, don't go into WinApi. If that's assembler for Windows, learn assembler for WinApi. Do not touch any other OS if you're not interested in them. And choose whichever assembler is taught in you favourite tutorial. Syntax differences are insignificant anyway. An yeah, what do you mean by MASM is DOS-based? Currently I have nothing to do with neither Windows nor assembler, but back in the days when I was learning it, I kinda preferred MASM. It was simple, understandable, and the macros where exceptionally useful to me. PS. Just now searched the web, and found an old tutorial, I used to learn WinApi basics with assembler: http://win32assembly.programminghorizon.com/tutorials.html . Good old stuff… :)
10th Jan 2018, 2:56 PM
deFault
+ 1
After thinking about it, I realized that yeah, if you leave out DOS from the available choices, Linux is indeed a good alternative to statring off with WinAPI. Though, maybe I'm overconcervative here, but for me int21h still looks like a good starting point :). Is it still supported in Windows? Anyway, if the OP wants to really learn x86 asm, I would recommend getting a good book or tutorial on asm and computer architecture, and use whatever is recommended by that book/tutorial.
10th Jan 2018, 3:38 PM
deFault
+ 1
@kurwius, Ok, so in21h is officially dead :'( That leaves us with either WinAPI or Linux syscalls for pure assembler. And that means, that Linux is the only choice that doesn't impose an API with massive learning curve on a learner.
10th Jan 2018, 4:04 PM
deFault
+ 1
@Digitalboy, After reading what Kurwius said here, my opinion on the matter is like this: Considering that DOS is officially dead, and that you need a DOS box to run it, it's better to use a "Linux box" to start learning assembler. At least you'll be using an existing os, not a dead one. There's nothing to learn in DOS that can be still used in Windows. So either dive straight into the overcomplicated WinAPI, or listen to Kurwius, and start with Linux in a VM (Virtualbox for example). And if you want to see how the primitive WinAPI looks like in assembler, you may take a look at the Iczelion's tutorials I linked here (though they may be a bit outdated). And yeah, Win64 brings even more complication to this topic... Also you can use asm in a C/C++ compiler. Even here at SoloLearn. Take a look at the code called "Intel Syntax" by Kurwius for example of using Intel assembler syntax in gcc. But I don't know if it's a good idea to start learning assembler by using it in C code. Also, you'll need to learn how to pass your C variables to and from your assembler code in your compiler (gcc in SoloLearn).
10th Jan 2018, 4:58 PM
deFault
+ 1
Learn GoAsm. It is designed specifically for windows. https://www.godevtool.com/
29th Jul 2023, 3:55 PM
TacoBlayno
TacoBlayno - avatar
0
we can still write , assemble and run DOS-based ASM codes in masm 8086 with the help of DOS box. but I am also thinking about the linux one too. I feel the DOS platform would be a great one to start , then linux and then winAPI
10th Jan 2018, 4:44 PM
Digitalboy
0
I had got a linux box called cygwin . I'll try with it.
11th Jan 2018, 3:11 AM
Digitalboy
0
what is dword?
11th Jan 2018, 3:11 AM
Digitalboy
0
ok
11th Jan 2018, 3:21 AM
Digitalboy
0
so , I agree linux is the best one to start , since I have a linux box to work with , I will learn the inline ASM in c compiler later
11th Jan 2018, 3:42 AM
Digitalboy
0
I had been learning the Linux one , also I found a nice link for win API. http://forum.codecall.net/topic/65222-intro-to-win32-assembly-using-nasm-part-1/
14th Jan 2018, 2:02 AM
Digitalboy