personally - i have not had any problem in acheiving my aims with TASM v5 - which can be downloaded for free.
alot of protected mode tutorials are quite good but i find alot of them forget to mention the difference between 16bit mode and 32bit mode in regard to the gdt and idt.
when executing a 32bit code segment the gdt and idt can reside anywhere in the 4Gb linear memory (thats logical memory, not physical)
where as...
while executing a 16bit mode code segment the gdt and idt must reside within the 0FFFFFFh boundry. dont know why, dont ask me! it just causes a reset because it cant reference the idt to perform an exception call.
PS - theres no point in programming a protected mode system unless you fully incorporate paged memory. only then you will apreciate the full extent of protected mode memory management.
the OS that i have designed and written puts the GDT and IDT at the very far end of the 4Gb to make available a maximum segment size of 4Gb less 640k per task. how ever for 16bit code segments i designed and wrote a 32bit to 16bit mask capsul that would move the gdt and idt to within the 0FFFFFFh boundary before performing the task switch or far jump to 16bit code segment and ofcorse reverse the process on return from 16bit code segment. using page memory this is a very simple function to perform.
good luck on perfecting you protected mode system

any specific questions - just ask

straiph
"There are 10 types of people in this world, those who know binary and those who don't!"