From: JGCASEY on 22 Aug 2005 18:01 When Beta and VHS went head to head I was told Beta was a better product. If for arguments sake this was the case Beta still failed as VHS apparently had more movie titles which was the whole point of video tape in the first place. And I think that would apply to operating systems such as Linux vs. Windows or applications such as MASM, TASM, NASM, FASM, RosAsm, GAS or HLA. In the case of the list of assemblers read "tutorials" instead of "titles". In my quest to get up to speed with Windows assembler the cold reality is MASM has the examples. Now when I first learnt assembler for DOS with TASM and then went onto MASM the translation was easy as none of the books used the high level constructs and directives I see in the MASM Window examples. Thus I get an example like this, .. . . start: ; The CODE entry point to the program print chr$("Hey, this actually works.",13,10) exit ; end start ; Tell MASM where the program ends Without any explanation of where the "print" instruction came from or how to use it. As for Iczelion's tutorials they do assume a working knowledge of MASM. So I wonder how many programmers using NASM, FASM, RosASM etc actually learnt Windows assembler using those assemblers? There are no beginner tutorials for them so I suspect they learnt assembler with MASM? Although I think I get the "invoke" statement there are other statements such as, LOCAL wc:WNDCLASSEX ; create local variables on stack that are not explained in a way I could translate this to say FASM. and what I presume are directives of some kind, ..WHILE TRUE ; Enter message loop invoke GetMessage, ADDR msg,NULL,0,0 .BREAK .IF (!eax) invoke TranslateMessage, ADDR msg invoke DispatchMessage, ADDR msg ..ENDW leaving me wondering what is being tested for being TRUE? Now I know the answers can be found scattered all over the web somewhere. Indeed the obvious place to look was Randy Hydes AoA. While looking through AoA these lines struck a cord, "A lot of so-called "advanced" assembly language programmers get carried away with the idea that they can create their own instructions via macro definitions and they start creating macros for every imaginable function under the sun. The COPY macro presented earlier is a good example. The 80x86 doesn't support a memory to memory move operation. Fine, we'll create a macro that does the job for us." "Soon, the assembly language program doesn't look like 80x86 assembly language at all." Window examples don't look like the old assembly language I learnt with DOS that is for sure! "Instead, a large number of the statements are macro invocations. Now this may be great for the programmer who has created all these macros and intimately understands their operation. To the 80x86 programmer who isn't familiar with those macros, however, it's all gibberish." My thoughts exactly. Unless *fully* explained they are all gibberish. That's why, and I direct this to René in particular, I have to use MASM. I don't have the education or time to learn from the intel documentation when there is an easier way. Let experts like Randy Hyde explain it to me with his AoA the same way I learnt DOS assembler from the assembler books I have on my shelf. I have to use the assembler they use. The only alternative is for those developing yet another assembler is to realise that if they want new blood they need to spend more time on tutorials and less time on giving their product even more bells and whistles. - John
From: Donkey on 22 Aug 2005 18:07 JGCASEY wrote: > > > When Beta and VHS went head to head I was told > Beta was a better product. If for arguments > sake this was the case Beta still failed as VHS > apparently had more movie titles which was the > whole point of video tape in the first place. > > And I think that would apply to operating systems > such as Linux vs. Windows or applications such as > MASM, TASM, NASM, FASM, RosAsm, GAS or HLA. In > the case of the list of assemblers read "tutorials" > instead of "titles". > > In my quest to get up to speed with Windows assembler > the cold reality is MASM has the examples. > > Now when I first learnt assembler for DOS with TASM > and then went onto MASM the translation was easy as > none of the books used the high level constructs > and directives I see in the MASM Window examples. > > Thus I get an example like this, > > . . . > > start: ; The CODE entry point to the program > > print chr$("Hey, this actually works.",13,10) > exit > ; > end start ; Tell MASM where the program ends > > Without any explanation of where the "print" instruction > came from or how to use it. > > As for Iczelion's tutorials they do assume a working > knowledge of MASM. So I wonder how many programmers > using NASM, FASM, RosASM etc actually learnt Windows > assembler using those assemblers? There are no beginner > tutorials for them so I suspect they learnt assembler > with MASM? > > > Although I think I get the "invoke" statement there are > other statements such as, > > LOCAL wc:WNDCLASSEX ; create local variables on stack > > that are not explained in a way I could translate this > to say FASM. > > and what I presume are directives of some kind, > > .WHILE TRUE ; Enter message loop > invoke GetMessage, ADDR msg,NULL,0,0 > .BREAK .IF (!eax) > invoke TranslateMessage, ADDR msg > invoke DispatchMessage, ADDR msg > .ENDW > > leaving me wondering what is being tested for being TRUE? > > Now I know the answers can be found scattered all over > the web somewhere. Indeed the obvious place to look > was Randy Hydes AoA. > > While looking through AoA these lines struck a cord, > > "A lot of so-called "advanced" assembly language > programmers get carried away with the idea that > they can create their own instructions via macro > definitions and they start creating macros for > every imaginable function under the sun. The COPY > macro presented earlier is a good example. The > 80x86 doesn't support a memory to memory move > operation. Fine, we'll create a macro that does > the job for us." > > "Soon, the assembly language program doesn't look > like 80x86 assembly language at all." > > Window examples don't look like the old assembly > language I learnt with DOS that is for sure! > > "Instead, a large number of the statements > are macro invocations. Now this may be great for > the programmer who has created all these macros > and intimately understands their operation. To > the 80x86 programmer who isn't familiar with > those macros, however, it's all gibberish." > > My thoughts exactly. Unless *fully* explained > they are all gibberish. > > That's why, and I direct this to RenĂ½ in particular, > I have to use MASM. > > I don't have the education or time to learn from > the intel documentation when there is an easier > way. Let experts like Randy Hyde explain it to > me with his AoA the same way I learnt DOS > assembler from the assembler books I have on my > shelf. I have to use the assembler they use. > > The only alternative is for those developing yet > another assembler is to realise that if they want > new blood they need to spend more time on tutorials > and less time on giving their product even more > bells and whistles. > > - > John > I tend to agree with you, MASM is definitely the assembler to start with because of ease of use, the wealth of tools available and ofcourse the tutorials. But once you have grasped the basics of assembly you might want to look at the other assemblers as they may be more finely tuned to your coding practices. Many have features that are missing from MASM and some have Linux versions as well. All in all though you would probably be fine just using MASM, after all it is the biggest and the best around. I use GoAsm, after quite a while with MASM, because I don't need that high level constructs or macro features but like the inline strings as well as the more powerful INVOKE and scoping. Donkey
From: hutch-- on 22 Aug 2005 18:53 John, Somewhere along the line you will have to make the decision as to whether you want to do enough work to learn 32 bit assembler or not. The things you face are learning the logic and details of Windows API calls and a message driven windowing system and the range of later processor instructions available in 32 bit code. The work I do in MASM is in part aimed at simplifying the entry into assembler programming and this is what the macros are for. The "print" macro is a direct take from console mode basic as its use is easy to understand and it save the beginner from learning console mode API calls just to display something on the screen. It is documented in both the older MASMLIB.HLP and the later HLHELP.HLP files and the actualy macro is contained in the main macros.asm file. The source code for the library module that the macro calls is in the m32lib directory and its directly accessible from the default editor that comes with masm32. You will have no problems with a range of other assemblers if you bother to learn how they work and learn the OS they are targetted at. In LINUX you have GGC GAS, NASM, YASM and FASM, all of which are competent and in Windows you have MASM, FASM, GoAsm, NASM as current capable assemblers. If you don't have the time to do all of the work to learn an assembler, it may be to your advantage to use a higher level language that does not have such a complex lead time. VC works fine, Delphi if you can suffer Pascal, PB for basic and a host of other languages that are far shorter learning curves than assembler programming. Regards, hutch at movsd dot com
From: JGCASEY on 23 Aug 2005 00:47 Donkey wrote: > I tend to agree with you, MASM is definitely the > assembler to start with because of ease of use, > the wealth of tools available and ofcourse the > tutorials. But once you have grasped the basics > of assembly you might want to look at the other > assemblers as they may be more finely tuned to > your coding practices. Many have features that > are missing from MASM and some have Linux versions > as well. All in all though you would probably > be fine just using MASM, after all it is the > biggest and the best around. I use GoAsm, after > quite a while with MASM, because I don't need > that high level constructs or macro features but > like the inline strings as well as the more > powerful INVOKE and scoping. > > Donkey I never considered GoAsm. I have just perused the GoAsm manual and Donkey's Stable :) But you still recommend spending a few months with MASM before attempting GoAsm? The little projects I want to do don't require high level constucts or even macros. John
From: JGCASEY on 23 Aug 2005 00:49
hutch-- wrote: hutch-- wrote: > John, > > Somewhere along the line you will have to make > the decision as to whether you want to do enough > work to learn 32 bit assembler or not. Yes I understand that Hutch. It wasn't about me. I was giving an interested "outsiders" point of view. Of course if they just want to keep assembler programming "in house" amongst the chosen ones who have paid their dues and can already program Windows assembler thanks to MASM (GAS?) than no more to be said :) Regardless of HLA being a preparser or assembler at least Randy Hyde is promoting and *educating* his potential users with tutorials. > The things you face are learning the logic and > details of Windows API calls and a message driven > windowing system and the range of later processor > instructions available in 32 bit code. > > The work I do in MASM is in part aimed at > simplifying the entry into assembler programming > and this is what the macros are for. The "print" > macro is a direct take from console mode basic > as its use is easy to understand and it save the > beginner from learning console mode API calls > just to display something on the screen. The "print" statement is easy to understand only in terms of what it does not in how it does it. It merely hides the machinations taking place underneath which is the very thing an assembler programmer needs to know so that later they can write their own macros or even more importantly convert to another assembler that may not have that particular macro. It only adds to the burden of really learning and understanding assembler. > It is documented in both the older MASMLIB.HLP > and the later HLHELP.HLP files and the actually > macro is contained in the main macros.asm file. > The source code for the library module that the > macro calls is in the m32lib directory and its > directly accessible from the default editor > that comes with masm32. Ok. Thanks for that information. > You will have no problems with a range of other > assemblers if you bother to learn how they work > and learn the OS they are targeted at. In LINUX > you have GGC GAS, NASM, YASM and FASM, all of > which are competent and in Windows you have MASM, > FASM, GoAsm, NASM as current capable assemblers. > > If you don't have the time to do all of the work > to learn an assembler, it may be to your advantage > to use a higher level language that does not have > such a complex lead time. VC works fine, Delphi if > you can suffer Pascal, PB for basic and a host of > other languages that are far shorter learning > curves than assembler programming. Well of course I do use HLLs. As someone who once used assembler I wanted to spend some time trying to understand Windows from an assembler point of view. MASM appears to be the best/fastest way of achieving that *because it has the examples and tutorials* lacking in the other assemblers. Like the VHS vs. Beta it may not be, according to some, the better product but it does have more of what a beginner needs. Regards, John |