Page 1 of 2

Microsoft Macro Assembler 1.0

PostPosted: Wed Sep 22, 2010 6:28 pm
by Vorticon
I've recently decided to learn 8088 assembly on my Jr, and so far it seems pretty straightforward given my assembly experience on the TI 99/4A platform. I'm using Compute!'s Beginner's Guide to Machine Language book which is great except that it uses as a base MASM 1.0 (or IBM ASM 1.0). I have MASM 5.1, and there are some significant differences apparently in the way code is setup. While I can convert the book examples into version 5, it's kind of a pain, and I would much rather use version 1 so as not to complicate my learning. Besides, V5.1 has a ton of documentation and options and quite frankly I am not in the mood to pour over all that documentation in order to use it effectively. I looked on ebay and a couple of schmucks are selling MASM 1.0 for over $200!!! :evil: I want to use the product, not frame it! :mrgreen:
This is a pattern I have seen over and over when it comes to early compilers and assemblers for a variety of computers, and I am not sure what kind of market pressure there is to drive prices so ridiculously high... I guess there must a be quite a few nut jobs like myself still interested in antiquated languages :lol:
All of a sudden MASM 5.1 is looking pretty good.

Re: Microsoft Macro Assembler 1.0

PostPosted: Wed Sep 22, 2010 6:44 pm
by Brutman
There is a college level textbook called "Assembly Language for Intel-Based Computers" by Kip Irvine that you should look for. I got my copy cheap on eBay, and it included MASM 6.1x. (It wasn't the very last version of MASM, but it was dang close.)

There will be a disconnect between the syntax older assemblers and the newer ones, but either way the concepts are the same. MASM 2.0 can be arranged if you need something that runs directly on the Jr.

As for the price of these old things, well, it has nothing to do with reality. The guy selling the version 2.0 of the BASIC compiler has been asking $200 or so for the copy without the diskettes and $225 or so for the copy with the diskettes. Needless to say, he has not had a buyer in the few years that I have been watching.

Re: Microsoft Macro Assembler 1.0

PostPosted: Wed Sep 22, 2010 9:36 pm
by Vorticon
I actually do have a more recent book on 8088 programming by a group of Russian guys titled "The Revolutionary Guide to Assembly Language" which has been on my bookshelf for almost a decade. I "rediscovered" it tonight and it's actually not bad at all. It does base itself of MASM 6.1, but it should be OK for 5.1 too. It's about 3 times the size of the Compute! book and far more detailed, so my dilemma would actually be whether I want to quickly get up to speed on 8088 assembly so I can incorporate machine language routine in my Pascal programs, or do I want to invest the time to get a much deeper look into the language. By the way, MASM 5.1 runs just fine on the Jr and could be used with only a floppy drive, although I have installed on my zip drive for convenience.
I think I'll stick with it for now, and see how far I get. I do want to eventually rewrite my Tsound routine in assembly :)

Re: Microsoft Macro Assembler 1.0

PostPosted: Thu Nov 04, 2010 5:50 pm
by Tyrop
Wow, how did you get MASM 5.1 on one disk to use on the PCjr? Are you using the editor? I unzipped the ZIP file it into 4 subdirectories and used the installer, but I had trouble installing it on a 1.44 meg floppy. I think it kept asking me to insert the Codeview disk and none of the 4 subdirectories worked.

Re: Microsoft Macro Assembler 1.0

PostPosted: Mon Nov 08, 2010 2:32 pm
by Vorticon
Actually you are correct. While the manual clearly specifies how to subdivide the MASM files into 3 separate floppies, upon closer inspection it does also say that you need to keep a disk with the source, object code, library and macro files in drive A and swap the other 2 disks which will contain Code View, the M editor, linker etc... from drive B. Therefore, one drive will not work here. Sorry about the confusion.


Re: Microsoft Macro Assembler 1.0

PostPosted: Mon Jan 03, 2011 12:59 am
by Retro
I still use Masm 1.2 ;)
Eschew bloatware!

Re: Microsoft Macro Assembler 1.0

PostPosted: Mon Feb 14, 2011 12:25 pm
by deathshadow60
Turbo Assembler 2 has a MASM mode that's much closer to MASM1 than MASM5 is... and MASM3 is similar too -- you can find both on winworldpc: ... ations/PC/

Of course if bitsavers wasn't 404 I'd point you at the manual for TASM2, which has a section on working with MASM code in TASM and a decent how-to section.
-- edit --
the computer-refuge mirror is still up.

Grab the 2.0 quick reference, users guide and reference guide.

I also prefer TASM over M$ attempt as it has a smaller memory footprint and is just a wee bit faster to compile.

Re: Microsoft Macro Assembler 1.0

PostPosted: Tue Feb 15, 2011 6:41 am
by Vorticon
I have the Turbo Assembler that came with TP5, although I have not used it... The couple of assembly books I have for the 8088 reference MASM, and I don't want to complicate my life just yet :) Having cut my assembly teeth on the TMS9900, 8088 programming seems unnecessarily obtuse in comparison :mrgreen: All this talk about segments, the multiplicity of oddly named registers (on the 9900, you have R0 to R15 (16 bits each) ) etc... Sheesh!

Re: Microsoft Macro Assembler 1.0

PostPosted: Tue Feb 15, 2011 8:47 am
by deathshadow60
Vorticon wrote:Having cut my assembly teeth on the TMS9900, 8088 programming seems unnecessarily obtuse in comparison :mrgreen: All this talk about segments, the multiplicity of oddly named registers (on the 9900, you have R0 to R15 (16 bits each) ) etc... Sheesh!

I always found generic numbered registers confusing -- I could never keep straight which ones I was using for which. The intels the named registers at least had a role... AX, BX, CX and DX all serve different purposes so while you can use them as general purpose, the Accumulator (AX) does addition better, the base address (BX) is used for operators, the Counter (CX) is optimized for controlling loops or repetitive operations (like shifts), and the Data register (DX) is designed for handing IO ports. Clearly defined roles with clearly defined rules.

As to segments, you have to remember that the 9900 had a pathetically anemic tinkertoy 15 bit addressing scheme -- limiting the max RAM to 32k without paging and why I always laughed at the people who bitched about TI using the video controller on the 99's to address 8 bit memory... for a 16 bit processor it was already half neutered given it could address less max RAM than a 8 bit processor like the 6502 or Z80. 15 bits of address space was always a "What the?!?" when most 8 bit processors allowed the use of a 16 bit combined register to handle memory.

By comparison, the 20 bit addressing scheme of the 8088/80186 giving access to 1 megabyte of address space was a huge step up... but 20 bits CANNOT fit into 16 bit registers... and 32 bit registers were a ways off -- so they overlap a 'segment' register to an 'offset' register resulting in a 20 bit address made up of two overlapping 16 bit words. It's easy to wonder why they overlapped them today, but the reasoning becomes apparent if you think of it as the precursor to Selectors, which use those same segment registers to function.

Being able to state in one register a memory offest on a 16 byte boundary, then have values inside that based off a zero index can often be vastly superior to a flat 32 bit address space since it just simplifies calculating offsets. It's why for all the talk of 32 bit chips like the 68K and PPC being 'superior' for all their endless registers they actually had inferior performance when it came to the address space and protection mechanisms -- Something Intel came out ahead on ENTIRELY thanks to segments... or as they're called in protected mode, selectors.

Though for a lot of people the very concept is hard to wrap their head around.

GREAT example is the code segment -- by aligning code on a 16 byte boundary and pointing at it with a segment, so far as a 64k program is concerned it starts at address 0... meaning you can move it to ANY point in memory and not have to move the pointers around -- as opposed to older processors where if you compiled it to start at 0x1000h, it had to run at 0x1000h in the physical address space. You can then point the data segment at another point in memory as your stack, and place that at any physical address and still have your index register based off address zero.... Then you can leverage the extra segment and 32 bit segment:offset pairs to create a "heap" to make use of the rest of available ram -- exactly how the various turbo dialects did their memory management.

Re: Microsoft Macro Assembler 1.0

PostPosted: Tue Feb 15, 2011 11:04 pm
by Vorticon
Spoken like a professional programmer :) As a hobbyist programmer on the other hand, the 9900 assembly language was pretty easy to master and fit the bill for a machine that had a maximum RAM of 48K :mrgreen: I still say that in my case the 8088 learning curve seems steeper, and maybe it would have been easier had I not learned 9900 first...
Just for kicks, here's a video of Pacman on the TI.