Add interrupts module: INT 3 (CC breakpoint) vs INT 21h (DOS services)
NASM sources, DOSBox/FreeDOS Debug/Unicorn harness, captured output and 31 assertions backing the ankurm.com article "INT 3 vs INT 21h in 8086 Assembly". Co-Authored-By: Claude Sonnet 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01KqJyCidz3ZgRyHABv2GVJh
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
PASS int3 assembles to the single byte CC
|
||||
PASS NASM 'int 3' assembles to CD 03
|
||||
PASS int 21h assembles to CD 21
|
||||
PASS into assembles to CE
|
||||
PASS hello21 prints its string
|
||||
PASS AH=4Ch return code 7 visible as ERRORLEVEL
|
||||
PASS AH=30h reports a version
|
||||
PASS AH=2Ah/2Ch ranges ok
|
||||
PASS AH=02h+06h write AB
|
||||
PASS AH=01h returned 5A ('Z') and AH=0Ah counted 5 chars 'Ankur'
|
||||
PASS AH=25h/35h round trip
|
||||
PASS AH=48h/49h alloc+free ok
|
||||
PASS AH=48h 1 MB request fails CF=1 AX=0008
|
||||
PASS file I/O: 12 bytes read, LSEEK says 12
|
||||
PASS findfirst sees U.TXT size 12
|
||||
PASS reopening deleted file: CF=1 AX=0002
|
||||
PASS mkdir/rmdir ok
|
||||
PASS child exit code 7, termination type 0 via AH=4Dh
|
||||
PASS CC: return IP = trap + 1
|
||||
PASS CD 03: return IP = trap + 2
|
||||
PASS IF and TF are 0 inside the handler, IF back to 1 after IRET
|
||||
PASS IF pushed on the stack was 1
|
||||
PASS INT 3 with no handler: program survives under DOSBox
|
||||
PASS DEBUG + CC: 'Unexpected breakpoint interrupt' and IP=0104
|
||||
PASS DEBUG + CC: next instruction after trap is MOV AX,2222
|
||||
PASS DEBUG + CC: single-step then AX=2222
|
||||
PASS DEBUG + CD 03: no breakpoint message
|
||||
PASS DEBUG + CD 03: stops at IP=0104 inside the INT 03 instruction
|
||||
PASS DEBUG + CD 03: MOV AX,2222 never runs (AX stays 1111 after stepping)
|
||||
PASS Unicorn: CC patch trap return IP = site+1, resume gives CX=3
|
||||
PASS Unicorn: CD 03 patch trap return IP = site+2 and resume goes wrong
|
||||
Reference in New Issue
Block a user