Holy ohmygoodness!!! Over 1 GB! I think that's the "best" yet!
Well... "align" is definitely broken (duh!). Besides exploding the file size, I don't think it's aligning stuff where you want. Replacing it with "align=32" (etc.) in the section declarations seems to work better. Here's the output with "[map]":
- NASM Map file ---------------------------------------------------------------
Source file: pmtest3a.asm
Output file: pmtest3a.com
-- Program origin -------------------------------------------------------------
00000100
-- Sections (summary) ---------------------------------------------------------
Vstart Start Stop Length Class Name
100 100 103 00000003 progbits .text
104 104 14A 00000046 progbits .gdt
160 160 196 00000036 progbits .data1
1A0 1A0 3A0 00000200 progbits .gs
3A0 3A0 4AA 0000010A progbits .s16
4AC 4AC 50C 00000060 progbits .s32
520 520 53A 0000001A progbits .s16code
540 540 548 00000008 progbits .ldt
560 560 57A 0000001A progbits .la
"[map all]" gives more info - might prove useful for debugging. By default, this spews to stdout - easily redirected. You can do "[map all pmtest3a.map]", too. Read all about it in the Friendly Manual.
Rather than (re)post your original code with the substitutions, I'll attach it. (I've been editing it in Linux - might have screwed up some line-endings - I think it's okay) See if it's producing what you had in mind...
Best,
Frank