3 ms·
Ah, debug. I used debug extensively for machine code programming on DOS. I couldn't afford MASM and certainly didn't have access to free assemblers. My first
by ataylor284_ 4y ago
Ah, debug. I used debug extensively for machine code programming on DOS. I couldn't afford MASM and certainly didn't have access to free assemblers. My first hello world program was almost exactly this.
However, I always ended my programs with INT 20 instead of RET, or INT 21 with AH = 0. RET worked both for standalone programs or in debug, but there was one exception: if you ran your code repeatedly in debug with G 100. It would work the first time, but IIRC the stack wasn't reinitialized to return to the correct place on subsequent G commands. I spent a lot of time typing, running and patching in a single session and INT 20 always worked correctly.
- neilv 4y agoEventually, Borland came out with the Turbo Debugger and Turbo Assembler, "only" $100, which was a steal compared to Microsoft tools.
- shric 4y agoAH = 0? I only recall AH = 4C? That would exit the program with AL being the exit value. I'm not aware of AH = 0? Sadly, I used to write these kinds of programs with a hex editor, so "B4 4C CD 21" is etched into my brain even though "CD 20" was shorter.
- ataylor284_ 4y ago4C is correct. My INT 21 function codes memory is a bit fuzzy.
- bonzini 4y agoAH=4C is new in MSDOS 2.0, AH=0 dates back to CP/M (the low DOS calls are compatible with CP/M, hence the use of FCBs for example) and always sets the exit status to 0.
- aricz 4y agoint 20h for .com, and ah=4ch; int 21h; for .exe