JWasm v2.18, Jun 11 2024 debug.asm ; DEBUG.ASM Masm/JWasm assembler source for Debug/X. ; To assemble, use: ; jwasm -bin -Fo debug.com debug.asm ; ; To create DEBUGX, the DPMI aware version of debug, use: ; jwasm -D?DPMI=1 -bin -Fo debugx.com debug.asm ; ============================================================================ ; ; Copyright (c) 1995-2003 Paul Vojta ; ; Permission is hereby granted, free of charge, to any person obtaining a copy ; of this software and associated documentation files (the "Software"), to ; deal in the Software without restriction, including without limitation the ; rights to use, copy, modify, merge, publish, distribute, sublicense, and/or ; sell copies of the Software, and to permit persons to whom the Software is ; furnished to do so, subject to the following conditions: ; ; The above copyright notice and this permission notice shall be included in ; all copies or substantial portions of the Software. ; ; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ; PAUL VOJTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER ; IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN ; CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ; ; ============================================================================ ; ; Japheth: all extensions made by me are Public Domain. This does not ; affect other copyrights. ; This file is now best viewed with TAB size 4! ; ============================================================================ ; Revision history: ; 0.95e [11 January 2003] Fixed a bug in the assember. ; 0.95f [10 September 2003] Converted to NASM; fixed some syntax ; incompatibilities. ; 0.98 [27 October 2003] Added EMS commands and copyright conditions. ; ; The changes which were done by my, japheth, are described in ; HISTORY.TXT. ; ; To do: ; - allow to modify floating point registers ; - better syntax checks for A (so i.e. "mov ax,al" is rejected) ; - add MMX instructions for A and U ; - support loading *.HEX files ; - hide debug's IVT vectors 0,1,3 for d(i)? Alternately, init them only when the ; first G/P/T cmd is run, like MS Debug does for 1 & 3? = 2.50 VERSION textequ <2.50> option casemap:none option proc:private ; option noljmp ;enable to see the short jump extensions = 8 BS equ 8 = 9 TAB equ 9 = A LF equ 10 = D CR equ 13 = 20 TOLOWER equ 20h = DF TOUPPER equ 0dfh = DFDF TOUPPER_W equ (TOUPPER shl 8) or TOUPPER = 1C MNEMONOFS equ 28 ;offset in output line where mnemonics start (disassember) = 200 STACKSIZ equ 200h ;debug's stack size = 1 MCLOPT equ 1 ;1=accept /m cmdline opt ( disable IRQ checks for int 08-0F ) = 101 LINE_IN_LEN equ 257 ;length of line_in (including header stuff) ifndef FMTEXE = 0 FMTEXE equ 0 ;1=debugger binary has .EXE format endif ifndef DRIVER = 0 DRIVER equ 0 ;1=create a device driver (for CONFIG.SYS) variant endif ifndef BOOTDBG = 0 BOOTDBG equ 0 ;1=create a bootstrap binary (DebugB) endif ifndef RING0 = 0 RING0 equ 0 ;1=create a ring0 debugger variant (DebugR) endif ifndef ?DPMI = 0 ?DPMI equ 0 ;1=create a DPMI-aware variant (DebugX) endif ifndef LMODE = 0 LMODE equ 0 ;1=long mode version if RING0==1 - this will define a 64-bit segment ( requires JWasm ) endif ;--- default assembly-time values; may be overwritten below. = 0 DGCMD = 0 ; support DG cmd = 0 DICMD = 0 ; support DI cmd = 0 DLCMD = 0 ; support DL cmd = 1 DMCMD = 1 ; support DM cmd = 0 DPCMD = 0 ; support DP cmd (dump partition) = 0 DPCMDR0 = 0 ; support DP cmd (dump paging table, ring0 only) = 0 DTCMD = 0 ; support DT cmd = 0 DXCMD = 0 ; support DX cmd = 1 QCMD = 1 ; support Q cmd = 1 LCMD = 1 ; support L cmd = 1 WCMD = 1 ; support W cmd = 1 XCMDS = 1 ; support Xx cmds = 1 LCMDFILE = 1 ; support L cmd for files and N cmd = 1 WCMDFILE = 1 ; support W cmd for files and N cmd = 1 USESDA = 1 ; use SDA to get/set PSP in real-mode = 1 INT22 = 1 ; handle int 22h ( DOS program termination ) = 1 INT2324 = 1 ; switch int 23h & 24h for debugger/debuggee = 0 USEFP2STR = 0 ; 1=use FloatToStr() = 0 FLATSS = 0 ; always 0 except for DebugRL; flat stack needed for long mode ring0 variant. = 1 SKIPBPINDBG equ 1 ; 1=breakpoints occuring while in debug are reported, won't reenter debug if LMODE else = 40 CS32 equ 40h ; check just the default size in legacy endif = @VecAttr textequ <> ifndef V86M = 0 V86M equ 0 ; 1=support v86 mode ( for RING0 only ) endif if RING0 elseif ?DPMI else = "DEBUG" DBGNAME equ <"DEBUG"> = "Debug" DBGNAME2 equ <"Debug"> = 0 ?PM equ 0 = 0 VDD equ 0 = 0 NOEXTENDER equ 0 ifndef BCMD = 0 BCMD equ 0 endif if BCMD elseifndef USEHWBP = 0 USEHWBP equ 0 endif endif if DRIVER elseif RING0 elseif BOOTDBG endif ifndef USEUNREAL = 0 USEUNREAL equ 0 ;1=use "unreal" mode for DX cmd ( won't work in v86 ) endif ifndef MMXSUPP = 0 MMXSUPP equ 0 endif ifndef VXCHG = 0 VXCHG equ 0 ;1=support video swap so outputs remain separated endif ifndef ALTVID = 0 ALTVID equ 0 ;1=support alternate video adapter endif ifndef DICMD endif ifndef DXCMD endif ifndef VXCMD = 0 VXCMD = 0 endif if (DRIVER or BOOTDBG or RING0) else = 1 REDIRECT equ 1 ;stdin/stdout redirection endif = 9 SYSRQINT equ 9 ;if CATCHSYSREQ==1, defines the method (int 09h or int 15h) ifndef CATCHINT01 = 1 CATCHINT01 equ 1 ;catch INT 01 (single-step) = 1 NOEXC01INDBG equ 1 ;v2.01: ignore unexpected debug exceptions in debug itself endif ifndef CATCHINT03 = 1 CATCHINT03 equ 1 ;catch INT 03 (break) endif ifndef CATCHINT06 = 0 CATCHINT06 equ 0 ;catch exception 06h endif ifndef CATCHINT07 = 0 CATCHINT07 equ 0 ;catch exception 07h endif ifndef CATCHINT0C = 0 CATCHINT0C equ 0 ;catch exception 0Ch endif ifndef CATCHINT0D = 0 CATCHINT0D equ 0 ;catch exception 0Dh endif ifndef CATCHSYSREQ = 0 CATCHSYSREQ equ 0 ;catch int 09h/15h (sysreq) endif ifndef CATCHINT41 = 0 CATCHINT41 equ 0 ;hook int 41h endif ife ?DPMI = 0 CATCHEXC06 equ 0 = 0 CATCHEXC07 equ 0 = 0 CATCHEXC0C equ 0 endif if ?PM or CATCHINT07 else = 0 EXCCSIP equ 0 endif 00000000 PSPS struct 00000000 dw ? ;+00 00000002 ALASAP dw ? ;+02 Address of LAst Segment Allocated to Program 00000004 dw ?,?,? ;+04 0000000A TPIV dd ? ;+0A Terminate Program Interrupt Vector (int 22h) 0000000E CCIV dd ? ;+0E Control C Interrupt Vector (int 23h) 00000012 CEIV dd ? ;+12 Critical Error Interrupt Vector (int 24h) org 16h 00000016 PARENT dw ? ;+16 segment of parent PSP org 2Eh 0000002E SPSAV dd ? ;+2E Saved SS:SP in last DOS call org 5Ch 0000005C FCB1 db 16 dup (?) 0000006C FCB2 db 16 dup (?) org 80h 00000080 DTA db 128 dup (?);Program arguments; also used to store file name (N cmd) 00000100 PSPS ends ;--- attributes returned by int 21h, ax=4400h = 80 AT_DEVICE equ 80h ; is device (not file) ifdef _DEBUG else = ; @dprintf textequ <;> endif ;--- restore segment register (DS/ES) to DGROUP @RestoreSeg macro segm > if FLATSS > mov segm, cs:[wDgroup] > else > push ss > pop segm > endif > endm ;--- sizeprf is to make DEBUG's support for 32bit code as small as possible. ;--- for this to achieve a patch table is created in _IDATA which is filled ;--- by memory offsets where prefix bytes 66h or 67h are found. sizeprf macro > ife RING0 > curreip = $ > _IDATA segment > dw curreip > _IDATA ends > endif > db 66h > endm sizeprfX macro > if ?PM > sizeprf > endif > endm if VDD endif .8086 ;--- define segments. Usually, the debugger runs in the tiny memory model, ;--- that is, all segments are grouped into "physical segment" DGROUP, and ;--- CS=SS=DS=ES=DGROUP ( exception: RING0=1 && FLATSS=1 ). When other memory ;--- regions are to be accessed, preferably ES is temporary used then, in a ;--- few cases ( m/c cmds ) also DS. 0000 _TEXT segment dword public 'CODE' _TEXT ends if RING0 endif 0000 CONST segment readonly word public 'DATA' CONST ends 0000 ASMDATA segment word public 'DATA' 0000 asmtab label byte 0000 ASMDATA ends 0000 OTDATA segment word public 'DATA' 0000 OTDATA ends 0000 _DATA segment dword public 'DATA' 0000 _DATA ends if RING0 else 0000 _ITEXT segment word public 'I_CODE' endif 0000 _ITEXT ends 0000 _IDATA segment word public 'I_DATA' 0000 patches label word 0000 _IDATA ends DGROUP group _TEXT, CONST, ASMDATA, OTDATA, _DATA, _ITEXT, _IDATA if FMTEXE or DRIVER endif assume ds:DGROUP 0000 _TEXT segment if DRIVER else ife (RING0 or BOOTDBG) ife FMTEXE org 100h endif endif ife FMTEXE 0100 start: 0100 FFFFFFE9 0000r jmp initcode endif if RING0 endif endif 0103 _TEXT ends 0000 CONST segment ;--- cmds b,j,k,v,y and z don't exist yet 0000 cmdlist label word 0000 0000 dw a_cmd if BCMD else 0002 0000 dw cmd_error endif 0004 00000000 dw c_cmd, d_cmd 0008 0000000000000000 dw e_cmd, f_cmd, g_cmd, h_cmd 0010 000000000000 dw i_cmd, cmd_error, cmd_error ife RING0 0016 0000 dw l_cmd endif 0018 0000 dw m_cmd if LCMDFILE or WCMDFILE 001A 0000 dw n_cmd endif 001C 00000000 dw o_cmd, p_cmd if QCMD 0020 0000 dw q_cmd endif 0022 000000000000 dw r_cmd, s_cmd, t_cmd 0028 0000 dw u_cmd if VXCHG elseif VXCMD else 002A 0000 dw cmd_error endif if WCMD 002C 0000 dw w_cmd endif if XCMDS 002E 0000 dw x_cmd endif = 'x' ENDCMD equ <'x'> if ?DPMI endif 0030 CONST ends 0000 _DATA segment if FLATSS else 0000 0000 top_sp dw 0 ;debugger's SP top ( also end of debug's MCB ) 0002 0000 run_sp dw 0 ;debugger's SP when run() is executed endif 0004 0000 errret dw 0 ;return here if error ife (BOOTDBG or RING0) 0006 4000 spadjust dw 40h ;adjust sp by this amount for save 0008 0000 pspdbe dw 0 ;debuggee's program segment prefix (segment/selector) endif ;--- wDgroup contains the DGROUP segment, not translated! ;--- pspdbg contains the PSP, not translated ;--- pspdbgpm is the translated pspdbg (.EXE only) ;--- in protected-mode, the code usually uses [dssel] to set SS and DS 000A wDgroup label word ;pspdbg is the PSP segment or just the CS segment (Dgroup) if FMTEXE endif 000A 0000 pspdbg dw 0 ;debugger's PSP - always a segment if ?DPMI and FMTEXE endif if INT2324 000C 0000000000000000 run2324 dw 0,0,0,0 ;debuggee's interrupt vectors 23 and 24 (both modes) if ?DPMI endif endif if RING0 endif if VDD endif if INT2324 0014 0000000000000000 sav2324 dw 0,0,0,0 ;debugger's interrupt vectors 23 and 24 (real-mode only) endif if INT22 001C 00000000 psp22 dw 0,0 ;original terminate address in debugger's PSP 0020 0000 parent dw 0 ;original parent PSP in debugger's PSP (must be next) endif if DMCMD 0022 0000 wMCB dw 0 ;start of MCB chain (always segment) endif ife ( BOOTDBG or RING0 ) 0024 00000000 pInDOS dd 0 ;far16 address of InDOS flag (real mode) endif if ?DPMI endif if VXCHG endif if ALTVID ; exchange some video BIOS data fields for option /2. endif if USESDA 0028 00000000 pSDA dd 0 ;far16 address of DOS swappable data area (real-mode) if ?DPMI endif endif if INT2324 002C 00 hakstat db 0 ;whether we have hacked vectors 23/24 or not endif 002D 00 machine db 0 ;cpu (0=8086,1,2,3=80386,...) = 1 RM_386REGS equ 1 ;bit 0: 1=386 register display if RING0 else 002E 00 rmode db 0 ;flags for R command endif 002F 00 tmode db 0 ;bit 0: 1=ms-debug compatible trace mode if USEHWBP endif 0030 00 has_87 db 0 ;if there is a math coprocessor present 0031 00 mach_87 db 0 ;coprocessor (0=8087,1,2,3=80387,...) if MMXSUPP endif 0032 00 bInDbg db 0 ;1=debugger is running if MCLOPT and ( CATCHINT0C or CATCHINT0D ) endif if REDIRECT 0033 FFFFFF80 fStdin db AT_DEVICE;flags stdin 0034 FFFFFF80 fStdout db AT_DEVICE;flags stdout endif 0035 2D swchar db '-' ;switch character 0036 00 vpage db 0 ;video page the debugger is to use for BIOS output 0037 20 swch1 db ' ' ;switch character if it's a slash 0038 0000 promptlen dw 0 ;length of prompt if REDIRECT 003A 0200 bufnext dw line_in+2 ;if stdin=file: address of next available character 003C 0200 bufend dw line_in+2 ;if stdin=file: address + 1 of last valid character endif 003E 000000000000 a_addr dw 0,0,0 ;address for next A command 0044 000000000000 d_addr dw 0,0,0 ;address for last D command; must follow a_addr 004A 000000000000 u_addr dw 0,0,0 ;address for last U command; must follow d_addr if USEHWBP endif if DXCMD endif 0050 000000000000 eqladdr dw 0,0,0 ;optional '=' argument in G, P and T command ;run_cs dw 0 ;save original CS when running in G 0056 0000 lastcmd dw dmycmd 0058 run_intw label word 0058 0000 run_int db 0,0 ;interrupt type that stopped the running 005A 00 eqflag db 0 ;flag indicating presence of '=' argument 005B 00 bInit db 0 ;0=ensure a valid opcode is at debuggee's CS:IP if ?PM endif if LCMDFILE or WCMDFILE 005C 00 fileext db 0 ;file extension (0 if no file name) = 1 EXT_OTHER equ 1 = 2 EXT_COM equ 2 = 4 EXT_EXE equ 4 = 8 EXT_HEX equ 8 endif ife RING0 ;--- usepacket: ;--- 0: packet is not used (int 25h/26h, cx!=FFFF) ;--- 1: packet is used (int 25h/26h, cx==FFFF) ;--- 2: packet is used (int 21h, ax=7305h, cx==FFFF) 005D 00 usepacket db 0 00000000 PACKET struc 00000000 secno dd ? ;sector number 00000004 numsecs dw ? ;number of sectors to read 00000006 dstofs dw ? ;ofs transfer address 00000008 dstseg dw ? ;seg transfer address 0000000A PACKET ends if ?PM endif 005E align 2 005E 00000000000000000000 packet PACKET <0,0,0,0> if ?PM endif endif if RING0 ; vectors in intsave are either real-mode or - if RING0 == 1 - protected-mode else = DWORD INTVEC textequ endif ;--- order in intsave must match order in inttab 0068 intsave label dword 0068 00000000 oldi00 DWORD 0 ;saved vector i00 if RING0 or CATCHINT01 006C 00000000 oldi01 DWORD 0 ;saved vector i01 endif if RING0 or CATCHINT03 0070 00000000 oldi03 DWORD 0 ;saved vector i03 endif if CATCHINT06 endif if CATCHINT07 endif if CATCHINT0C endif if CATCHINT0D endif if RING0 endif if CATCHSYSREQ endif if INT22 0074 00000000 DWORD 0 ;saved vector i22 ( real-mode only ) endif if RING0 and CATCHINT41 endif if ?DPMI ;must be last endif if RING0 endif ;--- Parameter block for exec call. if LCMDFILE 00000000 EXECS struc 00000000 environ dw ? ; +0 environment segment 00000002 cmdtail dd ? ; +2 address of command tail to copy 00000006 fcb1 dd ? ;+6 address of first FCB to copy 0000000A fcb2 dd ? ;+10 address of second FCB to copy 0000000E sssp dd ? ;+14 initial SS:SP 00000012 csip dd ? ;+18 initial CS:IP 00000016 EXECS ends 0078 0000000000005C0000006C execblk EXECS {0,0,PSPS.FCB1,PSPS.FCB2,0,0} endif 00000000 REGS struct 00000000 rDI dw ?,? ;+00 edi ; must be in PUSHAD order 00000004 rSI dw ?,? ;+04 esi 00000008 rBP dw ?,? ;+08 ebp 0000000C dw ?,? ;+12 reserved 00000010 rBX dw ?,? ;+16 ebx 00000014 rDX dw ?,? ;+20 edx 00000018 rCX dw ?,? ;+24 ecx 0000001C rAX dw ?,? ;+28 eax 00000020 rDS dw ? ;+32 ds ; check run()/intrtn()/createdummytask() if this order changes! 00000022 rES dw ? ;+34 es 00000024 rFS dw ? ;+36 fs ; v2.0: order changed 00000026 rGS dw ? ;+38 gs 00000028 rSS dw ? ;+40 ss ; should start on a DWORD boundary ( in case AC is on ) 0000002A rCS dw ? ;+42 cs if ?PM endif 0000002C rSP dw ?,? ;+46 esp 00000030 rIP dw ?,? ;+50 eip 00000034 rFL dw ?,? ;+54 eflags if RING0 endif if ?DPMI;?PM endif 00000038 REGS ends ;--- Register save area. 008E 0000 align 4 ;--- must be DWORD aligned! 0090 0000000000000000000000 regs REGS <> 00C8 _DATA ends 0030 CONST segment ;--- table of interrupt initialization 00000000 INTITEM struct 00000000 bInt db ? 00000001 wOfs dw ? 00000003 INTITEM ends ;--- must match order in intsave 0030 inttab label INTITEM 0030 000000 INTITEM <00h, intr00> if CATCHINT01 0033 010000 INTITEM <01h, intr01> endif if CATCHINT03 0036 030000 INTITEM <03h, intr03> endif if CATCHINT06 endif if CATCHINT07 endif if CATCHINT0C endif if CATCHINT0D endif if RING0 endif if CATCHSYSREQ endif if INT22 0039 220000 INTITEM <22h, intr22dbg> endif if RING0 and CATCHINT41 endif = 4 NUMINTS = ( $ - inttab ) / sizeof INTITEM if ?DPMI endif ;--- register names for 'r'. One item is 2 bytes. ;--- regofs must follow regnames and order of items must match ;--- those in regnames. 003C 4158425843584458535042 regnames db 'AX','BX','CX','DX','SP','BP','SI','DI','IP','FL','DS','ES','SS','CS','FS','GS' = 10 NUMREGNAMES equ ($ - regnames) / 2 005C 1C001000180014002C0008 regofs dw regs.rAX, regs.rBX, regs.rCX, regs.rDX, regs.rSP, regs.rBP, regs.rSI, regs.rDI, regs.rIP, regs.rFL,regs.rDS, regs.rES, regs.rSS, regs.rCS, regs.rFS, regs.rGS ;--- arrays flgbits, flgnams and flgnons must be consecutive 007C 000800040002FFFFFF80004 flgbits dw 800h,400h,200h,80h,40h,10h,4,1 008C 4E5655504449504C4E5A4E flgnams db 'NV','UP','DI','PL','NZ','NA','PO','NC' 009C 4F56444E45494E475A5241 flgnons db 'OV','DN','EI','NG','ZR','AC','PE','CY' ;--- Instruction set information needed for the 'p' command. ;--- arrays ppbytes and ppinfo must be consecutive! 00AC 6667262E363E6465FFFFFFF ppbytes db 66h,67h,26h,2eh,36h,3eh,64h,65h,0f2h,0f3h ;prefixes 00B6 FFFFFFACFFFFFFADFFFFFFA db 0ach,0adh,0aah,0abh,0a4h,0a5h ;lods,stos,movs 00BC FFFFFFA6FFFFFFA7FFFFFFA db 0a6h,0a7h,0aeh,0afh ;cmps,scas 00C0 6C6D6E6F db 6ch,6dh,6eh,6fh ;ins,outs 00C4 FFFFFFCCFFFFFFCD db 0cch,0cdh ;int instructions 00C6 FFFFFFE0FFFFFFE1FFFFFFE db 0e0h,0e1h,0e2h ;loop instructions 00C9 FFFFFFE8 db 0e8h ;call rel16/32 00CA FFFFFF9A db 09ah ;call far seg16:16/32 ; (This last one is done explicitly by the code.) ; db 0ffh ;ff/2 or ff/3: indirect call ; Info for the above, respectively. ; 80h = prefix; ; 81h = address size prefix. ; 82h = operand size prefix; ; If the high bit is not set, the next highest bit (40h) indicates that ; the instruction size depends on whether there is an address size prefix, ; and the remaining bits tell the number of additional bytes in the ; instruction. = 1 PP_ADRSIZ equ 01h = 2 PP_OPSIZ equ 02h = 80 PP_PREFIX equ 80h = 40 PP_VARSIZ equ 40h 00CB FFFFFF82FFFFFF81FFFFFF8 ppinfo db 82h,81h,80h,80h,80h,80h,80h,80h,80h,80h ;prefixes 00D5 000000000000 db 0,0,0,0,0,0 ;string instr 00DB 00000000 db 0,0,0,0 ;string instr 00DF 00000000 db 0,0,0,0 ;string instr 00E3 0001 db 0,1 ;INT instr 00E5 010101 db 1,1,1 ;LOOPx instr 00E8 42 db 42h ;near CALL instr 00E9 44 db 44h ;far CALL instr = 1F PPLEN equ $ - ppinfo ;--- Strings. ife (BOOTDBG or RING0) 00EA 21 db '!' ;additional prompt if InDos flag is set endif ifdef PROMPT else if RING0 and V86M else 00EB 2D prompt1 db '-' ;main prompt endif endif 00EC 3A prompt2 db ':' ;prompt for register value if ?PM endif 00ED 44656275672076322E3530 helpmsg db "Debug", ' v','2.50',CR,LF 00FA 617373656D626C65094120 db 'assemble', TAB, 'A [address]',CR,LF if BCMD endif 0110 636F6D7061726509094320 db 'compare', TAB, TAB, 'C range address',CR,LF 012A 64756D70090944205B7261 db 'dump', TAB, TAB, 'D [range]',CR,LF if DGCMD endif if DICMD endif if DLCMD endif if DMCMD 013B 64756D70204D4342206368 db 'dump MCB chain', TAB, 'DM',CR,LF endif if DPCMD elseif DPCMDR0 endif if DTCMD endif if DXCMD endif 014E 656E746572090945206164 db 'enter', TAB, TAB, 'E address [list]',CR,LF 0167 66696C6C0909462072616E db 'fill', TAB, TAB, 'F range list',CR,LF 017B 676F090947205B3D616464 db 'go', TAB, TAB, 'G [=address] [breakpts]',CR,LF 0198 686578206164642F737562 db 'hex add/sub', TAB, 'H value1 value2',CR,LF 01B5 696E7075740909495B577C db 'input', TAB, TAB, 'I[W|D] port',CR,LF if LCMDFILE 01C9 6C6F61642070726F677261 db 'load program', TAB, 'L [address]',CR,LF endif if BOOTDBG elseife RING0 01E3 6C6F616420736563746F72 db 'load sectors', TAB, 'L address drive sector count',CR,LF endif 020E 6D6F766509094D2072616E db 'move', TAB, TAB, 'M range address',CR,LF 0225 3830783836206D6F646509 db '80x86 mode', TAB, 'M [x] (x=0..6)',CR,LF 0240 73657420465055206D6F64 db 'set FPU mode', TAB, 'MC [2|N] (2=287,N=no FPU)',CR,LF if LCMDFILE or WCMDFILE 0268 736574206E616D65094E20 db 'set name', TAB, 'N [[drive:][path]progname [arglist]]',CR,LF endif 0297 6F757470757409094F5B57 db 'output', TAB, TAB, 'O[W|D] port value',CR,LF 02B2 70726F6365656409095020 db 'proceed', TAB, TAB, 'P [=address] [count]',CR,LF if QCMD 02D1 717569740909510D0A db 'quit', TAB, TAB, 'Q',CR,LF if ?DPMI endif endif 02DA 7265676973746572095220 db 'register', TAB, 'R [register [value]]',CR,LF if ?DPMI endif if MMXSUPP endif 02F9 4650552072656769737465 db 'FPU register', TAB, 'RN',CR,LF 030A 746F67676C652033383620 db 'toggle 386 regs', TAB, 'RX',CR,LF 031E 7365617263680909532072 db 'search', TAB, TAB, 'S range list',CR,LF if ?DPMI eq 0 0334 helpmsg2 label byte endif if RING0 endif 0334 7472616365090954205B3D db 'trace', TAB, TAB, 'T [=address] [count]',CR,LF 0351 7472616365206D6F646509 db 'trace mode', TAB, 'TM [0|1]',CR,LF 0366 756E617373656D626C6509 db 'unassemble', TAB, 'U [range]',CR,LF if VXCHG endif if VXCMD endif if WCMDFILE 037C 77726974652070726F6772 db 'write program', TAB, 'W [address]',CR,LF endif if WCMD 0397 777269746520736563746F db 'write sectors', TAB, 'W address drive sector count',CR,LF endif if XCMDS 03C3 657870616E646564206D65 db 'expanded mem', TAB, 'XA/XD/XM/XR/XS,X? for help' endif if ?DPMI endif 03EA 0D0A crlf db CR,LF = B8 size_helpmsg2 equ $ - helpmsg2 03EC 24 db '$' 03ED 5B6D6F72655D presskey db '[more]' 03F3 5E204572726F72 errcarat db '^ Error' ife (BOOTDBG or RING0) 03FA 57726974652070726F7465 dskerr0 db 'Write protect error',0 040E 556E6B6E6F776E20756E69 dskerr1 db 'Unknown unit error',0 0421 4472697665206E6F742072 dskerr2 db 'Drive not ready',0 0431 556E6B6E6F776E20636F6D dskerr3 db 'Unknown command',0 0441 44617461206572726F7220 dskerr4 db 'Data error (CRC)',0 0452 5365656B206572726F7200 dskerr6 db 'Seek error',0 045D 556E6B6E6F776E206D6564 dskerr7 db 'Unknown media type',0 0470 536563746F72206E6F7420 dskerr8 db 'Sector not found',0 0481 556E6B6E6F776E20657272 dskerr9 db 'Unknown error',0 048F 5772697465206661756C74 dskerra db 'Write fault',0 049B 52656164206661756C7400 dskerrb db 'Read fault',0 04A6 47656E6572616C20666169 dskerrc db 'General failure',0 04B6 0014 dskerrs db dskerr0-dskerr0,dskerr1-dskerr0 04B8 2737 db dskerr2-dskerr0,dskerr3-dskerr0 04BA 47FFFFFF87 db dskerr4-dskerr0,dskerr9-dskerr0 04BC 5863 db dskerr6-dskerr0,dskerr7-dskerr0 04BE 76FFFFFF87 db dskerr8-dskerr0,dskerr9-dskerr0 04C0 FFFFFF95FFFFFFA1 db dskerra-dskerr0,dskerrb-dskerr0 04C2 FFFFFFAC db dskerrc-dskerr0 endif if LCMD or WCMD 04C3 205F5F5F5F696E67206472 szDrive db ' ____ing drive ' 04D2 0000 driveno db 0,0 ;drive# for L/W cmds endif 04D4 383038362F383800 msg8088 db '8086/88',0 04DC 78383600 msgx86 db 'x86',0 04E0 20776974686F757420636F no_copr db ' without coprocessor',0 04F5 207769746820636F70726F has_copr db ' with coprocessor',0 0507 20776974682032383700 has_287 db ' with 287',0 0511 3338362072656773206F00 regs386 db '386 regs o',0 051C 7472616365206D6F646520 tmodes db 'trace mode is ' 052A 3F202D20494E5473206172 tmodes2 db '? - INTs are ',0 0538 74726163656400 tmode1 db 'traced',0 053F 70726F63657373656400 tmode0 db 'processed',0 0549 2028756E757365642900 unused db ' (unused)',0 0553 5B6E65656473207838365D needsmsg db '[needs x86]' ;<--- modified (7 and 9) 055E 5B6E65656473206D617468 needsmath db '[needs math coprocessor]' 0576 5B6F62736F6C6574655D obsolete db '[obsolete]' ;--- exception 00-0E, Int 22h & SysReq messages 0580 446976696465206572726F int0msg db 'Divide error',CR,LF,'$' 058F 556E657870656374656420 int1msg db 'Unexpected single-step interrupt',CR,LF,'$' 05B2 556E657870656374656420 int3msg db 'Unexpected breakpoint interrupt',CR,LF,'$' if CATCHINT06 or CATCHEXC06 endif if CATCHINT07 or CATCHEXC07 endif if CATCHINT0C or CATCHEXC0C endif if CATCHINT0D or ?PM endif if ?PM endif if INT22 05D4 0D0A50726F6772616D2074 progtrm db CR,LF,'Program terminated normally (' 05F3 5F5F5F5F290D0A24 progexit db '____)',CR,LF,'$' endif if CATCHSYSREQ endif = 0 EXC00MSG equ offset int0msg - offset int0msg = F EXC01MSG equ offset int1msg - offset int0msg = 32 EXC03MSG equ offset int3msg - offset int0msg if CATCHINT06 or CATCHEXC06 endif if CATCHINT07 or CATCHEXC07 endif if CATCHINT0C or CATCHEXC0C endif if CATCHINT0D or ?PM endif if ?PM endif if INT22 = 54 INT22MSG equ offset progtrm - offset int0msg endif if CATCHSYSREQ endif if EXCCSIP endif if ?DPMI endif if RING0 endif 05FB 43616E2774207772697465 cantwritebp db "Can't write breakpoint",CR,LF,'$' if WCMDFILE 0614 45584520616E6420484558 nowhexe db 'EXE and HEX files cannot be written',CR,LF,'$' 063A 43616E6E6F742077726974 nownull db 'Cannot write: no file name given',CR,LF,'$' 065D 57726974696E672024 wwmsg1 db 'Writing $' 0666 2062797465730D0A24 wwmsg2 db ' bytes',CR,LF,'$' 066F 4469736B2066756C6C0D0A diskful db 'Disk full',CR,LF,'$' endif if LCMDFILE or WCMDFILE 067B 4572726F7220 openerr db 'Error ' 0681 5F5F5F5F206F70656E696E openerr1 db '____ opening file',CR,LF,'$' 0695 46696C65206E6F7420666F doserr2 db 'File not found',CR,LF,'$' 06A6 50617468206E6F7420666F doserr3 db 'Path not found',CR,LF,'$' 06B7 4163636573732064656E69 doserr5 db 'Access denied',CR,LF,'$' 06C7 496E73756666696369656E doserr8 db 'Insufficient memory',CR,LF,'$' endif if XCMDS ;--- EMS error strings ;emmname db 'EMMXXXX0' 06DD 454D53206E6F7420696E73 emsnot db 'EMS not installed',0 06EF 454D5320696E7465726E61 emserr1 db 'EMS internal error',0 0702 48616E646C65206E6F7420 emserr3 db 'Handle not found',0 0713 4E6F20667265652068616E emserr5 db 'No free handles',0 0723 546F74616C207061676573 emserr7 db 'Total pages exceeded',0 0738 4672656520706167657320 emserr8 db 'Free pages exceeded',0 074C 506172616D657465722065 emserr9 db 'Parameter error',0 075C 4C6F676963616C20706167 emserra db 'Logical page out of range',0 0776 506879736963616C207061 emserrb db 'Physical page out of range',0 0791 454D53206572726F7220 emserrx db 'EMS error ' 079B 5F5F00 emserrxa db '__',0 079E 0000000000000000000000 emserrs dw emserr1,emserr1,0,emserr3,0,emserr5,0,emserr7,emserr8,emserr9 07B2 00000000 dw emserra,emserrb 07B6 457870616E646564206D65 xhelpmsg db 'Expanded memory (EMS) commands:',CR,LF 07D7 2020416C6C6F6361746509 db ' Allocate', TAB, 'XA count',CR,LF 07EC 20204465616C6C6F636174 db ' Deallocate', TAB, 'XD handle',CR,LF 0804 20204D6170206D656D6F72 db ' Map memory', TAB, 'XM logical-page physical-page handle',CR,LF 0837 20205265616C6C6F636174 db ' Reallocate', TAB, 'XR handle count',CR,LF 0855 202053686F772073746174 db ' Show status', TAB, 'XS',CR,LF = B1 size_xhelpmsg equ $ - xhelpmsg ;--- strings used by XA, XD, XR and XM commands 0867 48616E646C652063726561 xaans db 'Handle created: ',0 0878 48616E646C65206465616C xdans db 'Handle deallocated: ',0 088D 48616E646C65207265616C xrans db 'Handle reallocated',0 08A0 4C6F676963616C20706167 xmans db 'Logical page ' = D xmans_pos1 equ $ - xmans 08AD 5F5F5F5F206D6170706564 db '____ mapped to physical page ' = 2A xmans_pos2 equ $ - xmans 08CA 5F5F00 db '__',0 ;--- strings used by XS command 08CD 48616E646C6520 xsstr1 db 'Handle ' 08D4 5F5F5F5F2068617320 xsstr1a db '____ has ' 08DD 5F5F5F5F20706167657320 xsstr1b db '____ pages allocated',CR,LF = 26 size_xsstr1 equ $ - xsstr1 08F3 706879732E207061676520 xsstr2 db 'phys. page ' 08FE 5F5F203D207365676D656E xsstr2a db '__ = segment ' 090B 5F5F5F5F2020 xsstr2b db '____ ' = 1E size_xsstr2 equ $ - xsstr2 0911 206F66206120746F74616C xsstr3 db ' of a total ',0 091E 20454D532000 xsstr3a db ' EMS ',0 0924 70616700 xsstrpg db 'pag',0 0928 68616E646C00 xsstrhd db 'handl',0 092E 6573206861766520626565 xsstr3b db 'es have been allocated',0 0945 6E6F206D61707061626C65 xsnopgs db 'no mappable pages',CR,LF,CR,LF,'$' endif 095B CONST ends 0103 _TEXT segment if RING0 endif if ?DPMI endif ;?DPMI if CATCHINT41 endif if INT22 ; intr22dbg - INT 22 (Program terminate) interrupt handler. ; This is for DEBUG itself: it's a catch-all for the various INT 23 ; and INT 24 calls that may occur unpredictably at any time. ; What we do is pretend to be a command interpreter (which we are, ; in a sense, just a different sort of command) by setting the PSP of ; our parent equal to our own PSP so that DOS does not free our memory ; when we quit. Therefore control ends up here when Control-Break or ; an Abort in Abort/Retry/Fail is selected. 0103 intr22dbg: 0103 FFFFFFFC cld ;reestablish things 0104 FFFFFF8CFFFFFFC8 mov ax,cs 0106 FFFFFF8EFFFFFFD8 mov ds,ax 0108 FFFFFF8EFFFFFFD0 mov ss,ax endif ;--- fall through to cmdloop! ;--- Begin main command loop. 010A cmdloop proc if FLATSS else 010A FFFFFF8B26 0000o mov sp,[top_sp] ;restore stack (this must be first) endif 010E FFFFFFC706 0000o 0000o mov [errret],offset cmdloop 0114 1E push ds 0115 07 pop es 0116 FFFFFF803E 0000o 01 cmp [bInDbg], 1 011B 7405 jz @F 011D FFFFFFB8070E mov ax, 0e07h 0120 FFFFFFCD10 int 10h 0122 @@: if LCMDFILE 0122 FFFFFFE8FFFFFFA30F call isdebuggeeloaded 0125 7503 jnz @F 0127 FFFFFFE8FFFFFFAB2B call createdummytask ;if no task is active, create a dummy one 012A @@: endif 012A FFFFFFB90100 mov cx,1 ife ?PM 012D FFFFFFBA 0000o mov dx,offset prompt1 endif ife (BOOTDBG or RING0) 0130 FFFFFFE8FFFFFF821D call InDos 0133 740A jz @F ife VXCHG 0135 FFFFFFB40F mov ah, 0Fh 0137 FFFFFFCD10 int 10h 0139 FFFFFF883E 0000o mov [vpage], bh ;ensure [vpage] is initialized if InDos is set endif 013D 4A dec dx ;if inside DOS, display a '!' before the real prompt 013E 41 inc cx 013F @@: endif 013F FFFFFFE8FFFFFFAA1D call getline ;prompted input 0142 3C0D cmp al,CR 0144 7507 jnz @F 0146 FFFFFF8B16 0000o mov dx, [lastcmd] 014A 4E dec si 014B FFFFFFEB27 jmp cmd4 014D @@: 014D 3C3B cmp al,';' 014F 74FFFFFFB9 je cmdloop ;if comment 0151 3C3F cmp al,'?' 0153 742C je printhelp ;if request for help 0155 0C20 or al,TOLOWER 0157 2C61 sub al,'a' 0159 3C17 cmp al,'x' - 'a' 015B 7720 ja errorj1 ;if not recognized 015D FFFFFF98 cbw 015E FFFFFF93 xchg bx,ax 015F FFFFFFE87D20 call skipcomma 0162 FFFFFFD1FFFFFFE3 shl bx,1 0164 FFFFFF8BFFFFFF97 0000o mov dx,[cmdlist+bx] 0168 FFFFFFC706 0000o 0000o mov [lastcmd],offset dmycmd 016E FFFFFF8A64FFFFFFFE mov ah,[si-2] ; v2.0: for easily detecting 2-byte cmds 0171 FFFFFF80FFFFFFCC20 or ah, TOLOWER 0174 cmd4: sizeprfX ;clear ecx - needed for cmds that call getrange 0174 33FFFFFFC9 xor cx,cx 0176 FFFFFFBF 0000o mov di,offset line_out 0179 FFFFFFFFFFFFFFD2 call dx 017B FFFFFFEBFFFFFF8D jmp cmdloop ;back to the top 017D errorj1: 017D FFFFFFE9241B jmp cmd_error 0180 cmdloop endp 0180 dmycmd: 0180 FFFFFFC3 ret 0181 printhelp: 0181 FFFFFFBA 0000o mov dx,offset helpmsg 0184 FFFFFFB94702 mov cx,offset helpmsg2 - offset helpmsg 0187 FFFFFFE8092B call stdout 018A FFFFFFE80C00 call waitkey 018D FFFFFFBA 0000o mov dx,offset helpmsg2 0190 FFFFFFB9FFFFFFB800 mov cx,size_helpmsg2 0193 FFFFFFE8FFFFFFFD2A call stdout 0196 FFFFFFE971FFFFFFFF jmp cmdloop ;done 0199 waitkey proc if REDIRECT 0199 FFFFFFF606 0000o FFFFFF test [fStdin], AT_DEVICE ;stdin a file? 019E 7427 jz nowait 01A0 FFFFFFF606 0000o FFFFFF test [fStdout], AT_DEVICE ;stdout a file? 01A5 7420 jz nowait endif 01A7 1E push ds ife RING0 01A8 FFFFFFB84000 mov ax,40h ;0040h is a bimodal segment/selector 01AB FFFFFF8EFFFFFFD8 mov ds,ax 01AD FFFFFF803EFFFFFF84001E cmp byte ptr ds:[84h],30 ;rows >= 30? endif 01B2 1F pop ds 01B3 7312 jnc nowait 01B5 FFFFFFBA 0000o mov dx,offset presskey 01B8 FFFFFFB90600 mov cx,sizeof presskey 01BB FFFFFFE8FFFFFFD52A call stdout ; mov ah,8 ;use DOS ; int 21h 01BE FFFFFFB400 mov ah,0 ;v1.27: use BIOS if RING0 else 01C0 FFFFFFCD16 int 16h endif 01C2 FFFFFFB00D mov al,CR 01C4 FFFFFFE8FFFFFFFA1C call stdoutal 01C7 nowait: 01C7 FFFFFFC3 ret 01C8 waitkey endp @movs macro dst, src > if RING0 and V86M > push src > call v86setofs > pop dst > else > mov dst, src > endif > endm @dispsegm macro segm > mov ax,segm > if RING0 and V86M > call chkdispsegm > else > call hexword > endif > endm include lineasm.inc C C ;--- A command - tiny assembler. C C ;--- todo: C ;--- 1. fix regression since v1.09: cmp [x], yy assumes word operand if no size given C ;--- 2. MS debug accepts call near/far [x], Debug rejects near [x], accepts far [x] C ;--- 3. MS debug accepts call near/far x (adding current cs as seg if far), Debug rejects both C C ;--- macros for asmtbl.inc C C ;--- mne macro, used for the assembler mnemonics table C C mne macro val2:REQ, dbytes:VARARG > C ASMDATA segment > C CURROFS = $ > C ifnb > C db dbytes > C endif > C ASMDATA ends > C dw CURROFS - asmtab > C MN_&val2 equ $ - mnlist > C tmpstr catstr ,@SubStr(val2,1,@SizeStr(val2)-1),,@SubStr(val2,@SizeStr(val2)),,<+80h> > C db tmpstr > C endm C C ;--- AGRP: num is the index into agroups, that finally defines the opcode (1 or 2 byte). C ;--- rfld, bits 0-2 of the final value, define bits 3-5 in ai.regmem. C C AGRP macro num,rfld > C exitm <240h + num*8 + rfld> > C endm C C variant macro opcode:req, key:req, lockb, machine > C ASMDATA segment > C ifnb > C db lockb > C endif > C ifnb > C db machine > C endif > C ainfo = (opcode) * ASMMOD + key > C db HIGH ainfo, LOW ainfo > C ASMDATA ends > C endm C C fpvariant macro opcode, key, addb, lockb, machine > C variant opcode, key, lockb, machine > C ASMDATA segment > C db addb > C ASMDATA ends > C endm C C endvariant macro > C ASMDATA segment > C db -1 > C ASMDATA ends > C endm C C ;--- opl macro, used to define operand list types C ;--- the macro defines an EQUate, OPLIST_XX, which C ;--- is refered to by array opindex. C ;--- v2.50: "terminating" 0 no longer required. C C opl macro index, value:VARARG > C OPLIST_&index equ $ - oplists > C ifnb > C db value > C endif > C endm C C ;--- flags for instruction operands. C ;--- First the sizes. C = 40 C OP_ALL equ 40h ;byte/word/dword operand (could be 30h but ...) = 50 C OP_1632 equ 50h ;word or dword operand = 60 C OP_8 equ 60h ;byte operand = 70 C OP_16 equ 70h ;word operand = 80 C OP_32 equ 80h ;dword operand = 90 C OP_64 equ 90h ;qword operand C = 40 C OP_SIZE equ OP_ALL ;the lowest of these C C ;--- These operand types need to be combined with a size flag.. C ;--- order must match items in asm_jmp1, bittab and dis_jmp1 C = 0 C OP_IMM equ 0 ;immediate = 2 C OP_RM equ 2 ;reg/mem = 4 C OP_M equ 4 ;mem (but not reg) = 6 C OP_R_MOD equ 6 ;register, determined from MOD R/M part = 8 C OP_MOFFS equ 8 ;memory offset; e.g., [1234] = A C OP_R equ 10 ;reg part of reg/mem byte = C C OP_R_ADD equ 12 ;register, determined from instruction byte = E C OP_AX equ 14 ;al or ax or eax C C ;--- These don't need a size. C ;--- order must match items in asm_jmp1, bittab and dis_optab. C ;--- additionally, order of OP_M64 - OP_FARMEM is used C ;--- in table asm_siznum C ;--- v2.50: value 0 was used to terminate an operand list ( macro opl ) C ;--- it's free now. C = 2 C OP_M64 equ 2 ; 0 qword memory (obsolete?) = 4 C OP_MFLOAT equ 4 ; 1 float memory = 6 C OP_MDOUBLE equ 6 ; 2 double-precision floating memory = 8 C OP_M80 equ 8 ; 3 tbyte memory = A C OP_MXX equ 10 ; 4 memory (size unknown) = C C OP_FARMEM equ 12 ; 5 memory far16/far32 pointer = E C OP_FARIMM equ 14 ; 6 far16/far32 immediate = 10 C OP_REL8 equ 16 ; 7 byte address relative to IP = 12 C OP_REL1632 equ 18 ; 8 word or dword address relative to IP = 14 C OP_1CHK equ 20 ; 9 check for ST(1) = 16 C OP_STI equ 22 ;10 ST(I) = 18 C OP_CR equ 24 ;11 CRx = 1A C OP_DR equ 26 ;12 DRx = 1C C OP_TR equ 28 ;13 TRx = 1E C OP_SEGREG equ 30 ;14 segment register = 20 C OP_IMMS8 equ 32 ;15 sign extended immediate byte = 22 C OP_IMM8 equ 34 ;16 immediate byte (other args may be (d)word) = 24 C OP_MMX equ 36 ;17 MMx = 26 C OP_SHOSIZ equ 38 ;18 set flag to always show the size C = 28 C OP_1 equ 40 ;19 1 (simple "string" ops from here on) = 2A C OP_3 equ 42 ;20 3 = 2C C OP_DX equ 44 ;21 DX = 2E C OP_CL equ 46 ;22 CL = 30 C OP_ST equ 48 ;23 ST (top of coprocessor stack) = 32 C OP_CS equ 50 ;24 CS = 34 C OP_DS equ 52 ;25 DS = 36 C OP_ES equ 54 ;26 ES = 38 C OP_FS equ 56 ;27 FS = 3A C OP_GS equ 58 ;28 GS = 3C C OP_SS equ 60 ;29 SS C = 28 C OP_STR equ OP_1 ;first "string" op C 095B C CONST segment C C ;--- Instructions that have an implicit operand subject to a segment override C ;--- (outsb/w, movsb/w, cmpsb/w, lodsb/w, xlat). C ;--- also used by disassembler C 095B 6E6FFFFFFFA4FFFFFFA5FFF C prfxtab db 06eh,06fh, 0a4h,0a5h, 0a6h,0a7h, 0ach,0adh, 0d7h = 9 C N_PRFXTAB equ $ - prfxtab C C ;--- Instructions that can be used with REP/REPE/REPNE. C ;--- also used by disassembler C 0964 6C6EFFFFFFA4FFFFFFAAFFF C replist db 06ch,06eh,0a4h,0aah,0ach ;REP (INSB, OUTSB, MOVSB, STOSB, LODSB) = 5 C N_REPNC equ $ - replist 0969 FFFFFFA6FFFFFFAE C db 0a6h,0aeh ;REPE/REPNE (CMPSB, SCASB) = 7 C N_REPALL equ $ - replist C C include C C ;--- This file was generated by mktables.exe. C C ;--- Operand type lists. C ;--- They were read from file INSTR.KEY. C C ;--- They are referenced thru table opindex. C 096B C oplists label byte C opl 00 ;void - for instructions without operands = 0 1C OPLIST_00 equ $ - oplists C opl 01,OP_ALL+OP_AX, OP_ALL+OP_IMM ; idx=1, ofs=Dh = 0 1C OPLIST_01 equ $ - oplists 096B 4E40 1C db OP_ALL+OP_AX,OP_ALL+OP_IMM C opl 02,OP_ALL+OP_RM, OP_ALL+OP_IMM ; idx=2, ofs=10h = 2 1C OPLIST_02 equ $ - oplists 096D 4240 1C db OP_ALL+OP_RM,OP_ALL+OP_IMM C opl 03,OP_1632+OP_RM, OP_IMMS8 ; idx=3, ofs=13h = 4 1C OPLIST_03 equ $ - oplists 096F 5220 1C db OP_1632+OP_RM,OP_IMMS8 C opl 04,OP_ALL+OP_RM, OP_ALL+OP_R ; idx=4, ofs=16h = 6 1C OPLIST_04 equ $ - oplists 0971 424A 1C db OP_ALL+OP_RM,OP_ALL+OP_R C opl 05,OP_ALL+OP_R, OP_ALL+OP_RM ; idx=5, ofs=19h = 8 1C OPLIST_05 equ $ - oplists 0973 4A42 1C db OP_ALL+OP_R,OP_ALL+OP_RM C opl 06,OP_16+OP_RM, OP_16+OP_R ; idx=6, ofs=1Ch = A 1C OPLIST_06 equ $ - oplists 0975 727A 1C db OP_16+OP_RM,OP_16+OP_R C opl 07,OP_1632+OP_R, OP_1632+OP_M ; idx=7, ofs=1Fh = C 1C OPLIST_07 equ $ - oplists 0977 5A54 1C db OP_1632+OP_R,OP_1632+OP_M C opl 08,OP_1632+OP_R, OP_1632+OP_RM ; idx=8, ofs=22h = E 1C OPLIST_08 equ $ - oplists 0979 5A52 1C db OP_1632+OP_R,OP_1632+OP_RM C opl 09,OP_32+OP_R_ADD ; idx=9, ofs=25h = 10 1C OPLIST_09 equ $ - oplists 097B FFFFFF8C 1C db OP_32+OP_R_ADD C opl 0A,OP_1632+OP_RM, OP_1632+OP_R ; idx=10, ofs=27h = 11 1C OPLIST_0A equ $ - oplists 097C 525A 1C db OP_1632+OP_RM,OP_1632+OP_R C opl 0B,OP_1632+OP_RM, OP_IMM8 ; idx=11, ofs=2Ah = 13 1C OPLIST_0B equ $ - oplists 097E 5222 1C db OP_1632+OP_RM,OP_IMM8 C opl 0C,OP_REL1632 ; idx=12, ofs=2Dh = 15 1C OPLIST_0C equ $ - oplists 0980 12 1C db OP_REL1632 C opl 0D,OP_FARIMM ; idx=13, ofs=2Fh = 16 1C OPLIST_0D equ $ - oplists 0981 0E 1C db OP_FARIMM C opl 0E,OP_FARMEM ; idx=14, ofs=31h = 17 1C OPLIST_0E equ $ - oplists 0982 0C 1C db OP_FARMEM C opl 0F,OP_M64 ; idx=15, ofs=33h = 18 1C OPLIST_0F equ $ - oplists 0983 02 1C db OP_M64 C opl 10,OP_ALL+OP_RM ; idx=16, ofs=35h = 19 1C OPLIST_10 equ $ - oplists 0984 42 1C db OP_ALL+OP_RM C opl 11,OP_1632+OP_R_ADD ; idx=17, ofs=37h = 1A 1C OPLIST_11 equ $ - oplists 0985 5C 1C db OP_1632+OP_R_ADD C opl 12,OP_16+OP_IMM, OP_IMM8 ; idx=18, ofs=39h = 1B 1C OPLIST_12 equ $ - oplists 0986 7022 1C db OP_16+OP_IMM,OP_IMM8 C opl 13,OP_MFLOAT ; idx=19, ofs=3Ch = 1D 1C OPLIST_13 equ $ - oplists 0988 04 1C db OP_MFLOAT C opl 14,OP_MDOUBLE ; idx=20, ofs=3Eh = 1E 1C OPLIST_14 equ $ - oplists 0989 06 1C db OP_MDOUBLE C opl 15,OP_ST, OP_STI ; idx=21, ofs=40h = 1F 1C OPLIST_15 equ $ - oplists 098A 3016 1C db OP_ST,OP_STI C opl 16,OP_STI, OP_ST ; idx=22, ofs=43h = 21 1C OPLIST_16 equ $ - oplists 098C 1630 1C db OP_STI,OP_ST C opl 17,OP_1CHK, OP_STI, OP_ST ; idx=23, ofs=46h = 23 1C OPLIST_17 equ $ - oplists 098E 141630 1C db OP_1CHK,OP_STI,OP_ST C opl 18,OP_32+OP_M ; idx=24, ofs=4Ah = 26 1C OPLIST_18 equ $ - oplists 0991 FFFFFF84 1C db OP_32+OP_M C opl 19,OP_16+OP_M ; idx=25, ofs=4Ch = 27 1C OPLIST_19 equ $ - oplists 0992 74 1C db OP_16+OP_M C opl 1A,OP_M80 ; idx=26, ofs=4Eh = 28 1C OPLIST_1A equ $ - oplists 0993 08 1C db OP_M80 C opl 1B,OP_STI ; idx=27, ofs=50h = 29 1C OPLIST_1B equ $ - oplists 0994 16 1C db OP_STI C opl 1C,OP_1CHK, OP_STI ; idx=28, ofs=52h = 2A 1C OPLIST_1C equ $ - oplists 0995 1416 1C db OP_1CHK,OP_STI C opl 1D,OP_MXX ; idx=29, ofs=55h = 2C 1C OPLIST_1D equ $ - oplists 0997 0A 1C db OP_MXX C opl 1E,OP_16+OP_AX ; idx=30, ofs=57h = 2D 1C OPLIST_1E equ $ - oplists 0998 7E 1C db OP_16+OP_AX C opl 1F,OP_1632+OP_R, OP_1632+OP_RM, OP_IMMS8 ; idx=31, ofs=59h = 2E 1C OPLIST_1F equ $ - oplists 0999 5A5220 1C db OP_1632+OP_R,OP_1632+OP_RM,OP_IMMS8 C opl 20,OP_1632+OP_R_MOD, OP_1632+OP_R, OP_IMMS8 ; idx=32, ofs=5Dh = 31 1C OPLIST_20 equ $ - oplists 099C 565A20 1C db OP_1632+OP_R_MOD,OP_1632+OP_R,OP_IMMS8 C opl 21,OP_1632+OP_R, OP_1632+OP_RM, OP_1632+OP_IMM ; idx=33, ofs=61h = 34 1C OPLIST_21 equ $ - oplists 099F 5A5250 1C db OP_1632+OP_R,OP_1632+OP_RM,OP_1632+OP_IMM C opl 22,OP_1632+OP_R_MOD, OP_1632+OP_R, OP_1632+OP_IMM ; idx=34, ofs=65h = 37 1C OPLIST_22 equ $ - oplists 09A2 565A50 1C db OP_1632+OP_R_MOD,OP_1632+OP_R,OP_1632+OP_IMM C opl 23,OP_ALL+OP_AX, OP_IMM8 ; idx=35, ofs=69h = 3A 1C OPLIST_23 equ $ - oplists 09A5 4E22 1C db OP_ALL+OP_AX,OP_IMM8 C opl 24,OP_ALL+OP_AX, OP_DX ; idx=36, ofs=6Ch = 3C 1C OPLIST_24 equ $ - oplists 09A7 4E2C 1C db OP_ALL+OP_AX,OP_DX C opl 25,OP_3 ; idx=37, ofs=6Fh = 3E 1C OPLIST_25 equ $ - oplists 09A9 2A 1C db OP_3 C opl 26,OP_IMM8 ; idx=38, ofs=71h = 3F 1C OPLIST_26 equ $ - oplists 09AA 22 1C db OP_IMM8 C opl 27,OP_REL8 ; idx=39, ofs=73h = 40 1C OPLIST_27 equ $ - oplists 09AB 10 1C db OP_REL8 C opl 28,OP_1632+OP_RM ; idx=40, ofs=75h = 41 1C OPLIST_28 equ $ - oplists 09AC 52 1C db OP_1632+OP_RM C opl 29,OP_16+OP_RM ; idx=41, ofs=77h = 42 1C OPLIST_29 equ $ - oplists 09AD 72 1C db OP_16+OP_RM C opl 2A,OP_1632+OP_RM, OP_SEGREG ; idx=42, ofs=79h = 43 1C OPLIST_2A equ $ - oplists 09AE 521E 1C db OP_1632+OP_RM,OP_SEGREG C opl 2B,OP_SEGREG, OP_1632+OP_RM ; idx=43, ofs=7Ch = 45 1C OPLIST_2B equ $ - oplists 09B0 1E52 1C db OP_SEGREG,OP_1632+OP_RM C opl 2C,OP_ALL+OP_AX, OP_ALL+OP_MOFFS ; idx=44, ofs=7Fh = 47 1C OPLIST_2C equ $ - oplists 09B2 4E48 1C db OP_ALL+OP_AX,OP_ALL+OP_MOFFS C opl 2D,OP_ALL+OP_MOFFS, OP_ALL+OP_AX ; idx=45, ofs=82h = 49 1C OPLIST_2D equ $ - oplists 09B4 484E 1C db OP_ALL+OP_MOFFS,OP_ALL+OP_AX C opl 2E,OP_8+OP_R_ADD, OP_8+OP_IMM ; idx=46, ofs=85h = 4B 1C OPLIST_2E equ $ - oplists 09B6 6C60 1C db OP_8+OP_R_ADD,OP_8+OP_IMM C opl 2F,OP_1632+OP_R_ADD, OP_1632+OP_IMM ; idx=47, ofs=88h = 4D 1C OPLIST_2F equ $ - oplists 09B8 5C50 1C db OP_1632+OP_R_ADD,OP_1632+OP_IMM C opl 30,OP_1632+OP_R, OP_SHOSIZ, OP_8+OP_RM ; idx=48, ofs=8Bh = 4F 1C OPLIST_30 equ $ - oplists 09BA 5A2662 1C db OP_1632+OP_R,OP_SHOSIZ,OP_8+OP_RM C opl 31,OP_1632+OP_R, OP_SHOSIZ, OP_16+OP_RM ; idx=49, ofs=8Fh = 52 1C OPLIST_31 equ $ - oplists 09BD 5A2672 1C db OP_1632+OP_R,OP_SHOSIZ,OP_16+OP_RM C opl 32,OP_IMM8, OP_ALL+OP_AX ; idx=50, ofs=93h = 55 1C OPLIST_32 equ $ - oplists 09C0 224E 1C db OP_IMM8,OP_ALL+OP_AX C opl 33,OP_DX, OP_ALL+OP_AX ; idx=51, ofs=96h = 57 1C OPLIST_33 equ $ - oplists 09C2 2C4E 1C db OP_DX,OP_ALL+OP_AX C opl 34,OP_1632+OP_M ; idx=52, ofs=99h = 59 1C OPLIST_34 equ $ - oplists 09C4 54 1C db OP_1632+OP_M C opl 35,OP_1632+OP_IMM ; idx=53, ofs=9Bh = 5A 1C OPLIST_35 equ $ - oplists 09C5 50 1C db OP_1632+OP_IMM C opl 36,OP_SHOSIZ, OP_IMMS8 ; idx=54, ofs=9Dh = 5B 1C OPLIST_36 equ $ - oplists 09C6 2620 1C db OP_SHOSIZ,OP_IMMS8 C opl 37,OP_ALL+OP_RM, OP_1 ; idx=55, ofs=A0h = 5D 1C OPLIST_37 equ $ - oplists 09C8 4228 1C db OP_ALL+OP_RM,OP_1 C opl 38,OP_ALL+OP_RM, OP_CL ; idx=56, ofs=A3h = 5F 1C OPLIST_38 equ $ - oplists 09CA 422E 1C db OP_ALL+OP_RM,OP_CL C opl 39,OP_ALL+OP_RM, OP_IMM8 ; idx=57, ofs=A6h = 61 1C OPLIST_39 equ $ - oplists 09CC 4222 1C db OP_ALL+OP_RM,OP_IMM8 C opl 3A,OP_16+OP_IMM ; idx=58, ofs=A9h = 63 1C OPLIST_3A equ $ - oplists 09CE 70 1C db OP_16+OP_IMM C opl 3B,OP_8+OP_RM ; idx=59, ofs=ABh = 64 1C OPLIST_3B equ $ - oplists 09CF 62 1C db OP_8+OP_RM C opl 3C,OP_1632+OP_RM, OP_1632+OP_R, OP_IMM8 ; idx=60, ofs=ADh = 65 1C OPLIST_3C equ $ - oplists 09D0 525A22 1C db OP_1632+OP_RM,OP_1632+OP_R,OP_IMM8 C opl 3D,OP_1632+OP_RM, OP_1632+OP_R, OP_CL ; idx=61, ofs=B1h = 68 1C OPLIST_3D equ $ - oplists 09D3 525A2E 1C db OP_1632+OP_RM,OP_1632+OP_R,OP_CL C opl 3E,OP_1632+OP_AX, OP_1632+OP_R_ADD ; idx=62, ofs=B5h = 6B 1C OPLIST_3E equ $ - oplists 09D6 5E5C 1C db OP_1632+OP_AX,OP_1632+OP_R_ADD C opl 3F,OP_1632+OP_R_ADD, OP_1632+OP_AX ; idx=63, ofs=B8h = 6D 1C OPLIST_3F equ $ - oplists 09D8 5C5E 1C db OP_1632+OP_R_ADD,OP_1632+OP_AX C opl 40,OP_ES ; idx=64, ofs=BBh = 6F 1C OPLIST_40 equ $ - oplists 09DA 36 1C db OP_ES C opl 41,OP_CS ; idx=65, ofs=BDh = 70 1C OPLIST_41 equ $ - oplists 09DB 32 1C db OP_CS C opl 42,OP_SS ; idx=66, ofs=BFh = 71 1C OPLIST_42 equ $ - oplists 09DC 3C 1C db OP_SS C opl 43,OP_DS ; idx=67, ofs=C1h = 72 1C OPLIST_43 equ $ - oplists 09DD 34 1C db OP_DS C opl 44,OP_FS ; idx=68, ofs=C3h = 73 1C OPLIST_44 equ $ - oplists 09DE 38 1C db OP_FS C opl 45,OP_GS ; idx=69, ofs=C5h = 74 1C OPLIST_45 equ $ - oplists 09DF 3A 1C db OP_GS C opl 46,OP_32+OP_R_MOD, OP_CR ; idx=70, ofs=C7h = 75 1C OPLIST_46 equ $ - oplists 09E0 FFFFFF8618 1C db OP_32+OP_R_MOD,OP_CR C opl 47,OP_CR, OP_32+OP_R_MOD ; idx=71, ofs=CAh = 77 1C OPLIST_47 equ $ - oplists 09E2 18FFFFFF86 1C db OP_CR,OP_32+OP_R_MOD C opl 48,OP_32+OP_R_MOD, OP_DR ; idx=72, ofs=CDh = 79 1C OPLIST_48 equ $ - oplists 09E4 FFFFFF861A 1C db OP_32+OP_R_MOD,OP_DR C opl 49,OP_DR, OP_32+OP_R_MOD ; idx=73, ofs=D0h = 7B 1C OPLIST_49 equ $ - oplists 09E6 1AFFFFFF86 1C db OP_DR,OP_32+OP_R_MOD C opl 4A,OP_32+OP_R_MOD, OP_TR ; idx=74, ofs=D3h = 7D 1C OPLIST_4A equ $ - oplists 09E8 FFFFFF861C 1C db OP_32+OP_R_MOD,OP_TR C opl 4B,OP_TR, OP_32+OP_R_MOD ; idx=75, ofs=D6h = 7F 1C OPLIST_4B equ $ - oplists 09EA 1CFFFFFF86 1C db OP_TR,OP_32+OP_R_MOD C ife MMXSUPP = 4C C ASMMOD EQU 76 C endif C C ;--- Assembler: data on groups. C ;--- If HiByte == 01, it's a "0F-prefix" group. C 09EC C agroups label word 09EC FFFFFF8300 C dw 083h ;0 09EE FFFFFF8000 C dw 080h ;1 09F0 FFFFFFBA01 C dw 1BAh ;2 09F2 FFFFFFFF00 C dw 0FFh ;3 09F4 FFFFFFC701 C dw 1C7h ;4 09F6 FFFFFFFE00 C dw 0FEh ;5 09F8 FFFFFFF600 C dw 0F6h ;6 09FA 0101 C dw 101h ;7 09FC 0001 C dw 100h ;8 09FE FFFFFFC600 C dw 0C6h ;9 0A00 FFFFFF8F00 C dw 08Fh ;10 0A02 FFFFFFD000 C dw 0D0h ;11 0A04 FFFFFFD200 C dw 0D2h ;12 0A06 FFFFFFC000 C dw 0C0h ;13 C C ;--- List of assembler mnemonics and data. C ;--- variant's 1. argument (=a): C ;--- if a < 0x100: one byte opcode. C ;--- if a >= 0x100 && a < 0x200: two byte "0F"-opcode. C ;--- if a >= 0x200 && a < 0x240: fp instruction. C ;--- if a >= 0x240: refers to agroups [macro AGRP() is used]. C ;--- variant's 2. argument is index for array opindex. C 0A08 C mnlist label byte C mne AAA ; ofs=0h 0000 1C ASMDATA segment 00000000 = 0 1C CURROFS = $ 0000 1C ASMDATA ends 0A08 0000 1C dw CURROFS - asmtab = 2 1C MN_AAA equ $ - mnlist = "AA",'A'+80h 1C tmpstr catstr ,,,,,<+80h> 0A0A 4141FFFFFFC1 1C db "AA",'A'+80h C variant 037h, 0 0000 1C ASMDATA segment = 1054 1C ainfo = (037h) * ASMMOD + 0 0000 1054 1C db HIGH ainfo, LOW ainfo 0002 1C ASMDATA ends C endvariant 0002 1C ASMDATA segment 0002 FFFFFFFF 1C db -1 0003 1C ASMDATA ends C mne AAD, ASM_AAX ; ofs=3h 0003 1C ASMDATA segment 00000003 = 3 1C CURROFS = $ 0003 FFFFFFF7 1C db ASM_AAX 0004 1C ASMDATA ends 0A0D 0300 1C dw CURROFS - asmtab = 7 1C MN_AAD equ $ - mnlist = "AA",'D'+80h 1C tmpstr catstr ,,,,,<+80h> 0A0F 4141FFFFFFC4 1C db "AA",'D'+80h C variant 0d5h, 38 0004 1C ASMDATA segment = 3F62 1C ainfo = (0d5h) * ASMMOD + 38 0004 3F62 1C db HIGH ainfo, LOW ainfo 0006 1C ASMDATA ends C endvariant 0006 1C ASMDATA segment 0006 FFFFFFFF 1C db -1 0007 1C ASMDATA ends C mne AAM, ASM_AAX ; ofs=7h 0007 1C ASMDATA segment 00000007 = 7 1C CURROFS = $ 0007 FFFFFFF7 1C db ASM_AAX 0008 1C ASMDATA ends 0A12 0700 1C dw CURROFS - asmtab = C 1C MN_AAM equ $ - mnlist = "AA",'M'+80h 1C tmpstr catstr ,,,,,<+80h> 0A14 4141FFFFFFCD 1C db "AA",'M'+80h C variant 0d4h, 38 0008 1C ASMDATA segment = 3F16 1C ainfo = (0d4h) * ASMMOD + 38 0008 3F16 1C db HIGH ainfo, LOW ainfo 000A 1C ASMDATA ends C endvariant 000A 1C ASMDATA segment 000A FFFFFFFF 1C db -1 000B 1C ASMDATA ends C mne AAS ; ofs=Bh 000B 1C ASMDATA segment 0000000B = B 1C CURROFS = $ 000B 1C ASMDATA ends 0A17 0B00 1C dw CURROFS - asmtab = 11 1C MN_AAS equ $ - mnlist = "AA",'S'+80h 1C tmpstr catstr ,,,,,<+80h> 0A19 4141FFFFFFD3 1C db "AA",'S'+80h C variant 03fh, 0 000B 1C ASMDATA segment = 12B4 1C ainfo = (03fh) * ASMMOD + 0 000B 12FFFFFFB4 1C db HIGH ainfo, LOW ainfo 000D 1C ASMDATA ends C endvariant 000D 1C ASMDATA segment 000D FFFFFFFF 1C db -1 000E 1C ASMDATA ends C mne ADC ; ofs=Eh 000E 1C ASMDATA segment 0000000E = E 1C CURROFS = $ 000E 1C ASMDATA ends 0A1C 0E00 1C dw CURROFS - asmtab = 16 1C MN_ADC equ $ - mnlist = "AD",'C'+80h 1C tmpstr catstr ,,,,,<+80h> 0A1E 4144FFFFFFC3 1C db "AD",'C'+80h C variant AGRP(0,2), 3, ASM_LOCKABLE 000E 1C ASMDATA segment 000E FFFFFFF4 1C db ASM_LOCKABLE = AB9B 1C ainfo = (240h + 0*8 + 2) * ASMMOD + 3 000F FFFFFFABFFFFFF9B 1C db HIGH ainfo, LOW ainfo 0011 1C ASMDATA ends C variant 014h, 1 0011 1C ASMDATA segment = 5F1 1C ainfo = (014h) * ASMMOD + 1 0011 05FFFFFFF1 1C db HIGH ainfo, LOW ainfo 0013 1C ASMDATA ends C variant AGRP(1,2), 2, ASM_LOCKABLE 0013 1C ASMDATA segment 0013 FFFFFFF4 1C db ASM_LOCKABLE = ADFA 1C ainfo = (240h + 1*8 + 2) * ASMMOD + 2 0014 FFFFFFADFFFFFFFA 1C db HIGH ainfo, LOW ainfo 0016 1C ASMDATA ends C variant 010h, 4, ASM_LOCKABLE 0016 1C ASMDATA segment 0016 FFFFFFF4 1C db ASM_LOCKABLE = 4C4 1C ainfo = (010h) * ASMMOD + 4 0017 04FFFFFFC4 1C db HIGH ainfo, LOW ainfo 0019 1C ASMDATA ends C variant 012h, 5 0019 1C ASMDATA segment = 55D 1C ainfo = (012h) * ASMMOD + 5 0019 055D 1C db HIGH ainfo, LOW ainfo 001B 1C ASMDATA ends C endvariant 001B 1C ASMDATA segment 001B FFFFFFFF 1C db -1 001C 1C ASMDATA ends C mne ADD ; ofs=1Ch 001C 1C ASMDATA segment 0000001C = 1C 1C CURROFS = $ 001C 1C ASMDATA ends 0A21 1C00 1C dw CURROFS - asmtab = 1B 1C MN_ADD equ $ - mnlist = "AD",'D'+80h 1C tmpstr catstr ,,,,,<+80h> 0A23 4144FFFFFFC4 1C db "AD",'D'+80h C variant AGRP(0,0), 3, ASM_LOCKABLE 001C 1C ASMDATA segment 001C FFFFFFF4 1C db ASM_LOCKABLE = AB03 1C ainfo = (240h + 0*8 + 0) * ASMMOD + 3 001D FFFFFFAB03 1C db HIGH ainfo, LOW ainfo 001F 1C ASMDATA ends C variant 004h, 1 001F 1C ASMDATA segment = 131 1C ainfo = (004h) * ASMMOD + 1 001F 0131 1C db HIGH ainfo, LOW ainfo 0021 1C ASMDATA ends C variant AGRP(1,0), 2, ASM_LOCKABLE 0021 1C ASMDATA segment 0021 FFFFFFF4 1C db ASM_LOCKABLE = AD62 1C ainfo = (240h + 1*8 + 0) * ASMMOD + 2 0022 FFFFFFAD62 1C db HIGH ainfo, LOW ainfo 0024 1C ASMDATA ends C variant 000h, 4, ASM_LOCKABLE 0024 1C ASMDATA segment 0024 FFFFFFF4 1C db ASM_LOCKABLE = 4 1C ainfo = (000h) * ASMMOD + 4 0025 0004 1C db HIGH ainfo, LOW ainfo 0027 1C ASMDATA ends C variant 002h, 5 0027 1C ASMDATA segment = 9D 1C ainfo = (002h) * ASMMOD + 5 0027 00FFFFFF9D 1C db HIGH ainfo, LOW ainfo 0029 1C ASMDATA ends C endvariant 0029 1C ASMDATA segment 0029 FFFFFFFF 1C db -1 002A 1C ASMDATA ends C mne AND ; ofs=2Ah 002A 1C ASMDATA segment 0000002A = 2A 1C CURROFS = $ 002A 1C ASMDATA ends 0A26 2A00 1C dw CURROFS - asmtab = 20 1C MN_AND equ $ - mnlist = "AN",'D'+80h 1C tmpstr catstr ,,,,,<+80h> 0A28 414EFFFFFFC4 1C db "AN",'D'+80h C variant AGRP(0,4), 3, ASM_LOCKABLE 002A 1C ASMDATA segment 002A FFFFFFF4 1C db ASM_LOCKABLE = AC33 1C ainfo = (240h + 0*8 + 4) * ASMMOD + 3 002B FFFFFFAC33 1C db HIGH ainfo, LOW ainfo 002D 1C ASMDATA ends C variant 024h, 1 002D 1C ASMDATA segment = AB1 1C ainfo = (024h) * ASMMOD + 1 002D 0AFFFFFFB1 1C db HIGH ainfo, LOW ainfo 002F 1C ASMDATA ends C variant AGRP(1,4), 2, ASM_LOCKABLE 002F 1C ASMDATA segment 002F FFFFFFF4 1C db ASM_LOCKABLE = AE92 1C ainfo = (240h + 1*8 + 4) * ASMMOD + 2 0030 FFFFFFAEFFFFFF92 1C db HIGH ainfo, LOW ainfo 0032 1C ASMDATA ends C variant 020h, 4, ASM_LOCKABLE 0032 1C ASMDATA segment 0032 FFFFFFF4 1C db ASM_LOCKABLE = 984 1C ainfo = (020h) * ASMMOD + 4 0033 09FFFFFF84 1C db HIGH ainfo, LOW ainfo 0035 1C ASMDATA ends C variant 022h, 5 0035 1C ASMDATA segment = A1D 1C ainfo = (022h) * ASMMOD + 5 0035 0A1D 1C db HIGH ainfo, LOW ainfo 0037 1C ASMDATA ends C endvariant 0037 1C ASMDATA segment 0037 FFFFFFFF 1C db -1 0038 1C ASMDATA ends C mne ARPL ; ofs=38h 0038 1C ASMDATA segment 00000038 = 38 1C CURROFS = $ 0038 1C ASMDATA ends 0A2B 3800 1C dw CURROFS - asmtab = 25 1C MN_ARPL equ $ - mnlist = "ARP",'L'+80h 1C tmpstr catstr ,,,,,<+80h> 0A2D 415250FFFFFFCC 1C db "ARP",'L'+80h C variant 063h, 6, , ASM_MACH2 0038 1C ASMDATA segment 0038 FFFFFFEF 1C db ASM_MACH2 = 1D6A 1C ainfo = (063h) * ASMMOD + 6 0039 1D6A 1C db HIGH ainfo, LOW ainfo 003B 1C ASMDATA ends C endvariant 003B 1C ASMDATA segment 003B FFFFFFFF 1C db -1 003C 1C ASMDATA ends C mne BOUND ; ofs=3Ch 003C 1C ASMDATA segment 0000003C = 3C 1C CURROFS = $ 003C 1C ASMDATA ends 0A31 3C00 1C dw CURROFS - asmtab = 2B 1C MN_BOUND equ $ - mnlist = "BOUN",'D'+80h 1C tmpstr catstr ,,,,,<+80h> 0A33 424F554EFFFFFFC4 1C db "BOUN",'D'+80h C variant 062h, 7, , ASM_MACH1 003C 1C ASMDATA segment 003C FFFFFFEE 1C db ASM_MACH1 = 1D1F 1C ainfo = (062h) * ASMMOD + 7 003D 1D1F 1C db HIGH ainfo, LOW ainfo 003F 1C ASMDATA ends C endvariant 003F 1C ASMDATA segment 003F FFFFFFFF 1C db -1 0040 1C ASMDATA ends C mne BSF ; ofs=40h 0040 1C ASMDATA segment 00000040 = 40 1C CURROFS = $ 0040 1C ASMDATA ends 0A38 4000 1C dw CURROFS - asmtab = 32 1C MN_BSF equ $ - mnlist = "BS",'F'+80h 1C tmpstr catstr ,,,,,<+80h> 0A3A 4253FFFFFFC6 1C db "BS",'F'+80h C variant 1bch, 8, , ASM_MACH3 0040 1C ASMDATA segment 0040 FFFFFFF0 1C db ASM_MACH3 = 83D8 1C ainfo = (1bch) * ASMMOD + 8 0041 FFFFFF83FFFFFFD8 1C db HIGH ainfo, LOW ainfo 0043 1C ASMDATA ends C endvariant 0043 1C ASMDATA segment 0043 FFFFFFFF 1C db -1 0044 1C ASMDATA ends C mne BSR ; ofs=44h 0044 1C ASMDATA segment 00000044 = 44 1C CURROFS = $ 0044 1C ASMDATA ends 0A3D 4400 1C dw CURROFS - asmtab = 37 1C MN_BSR equ $ - mnlist = "BS",'R'+80h 1C tmpstr catstr ,,,,,<+80h> 0A3F 4253FFFFFFD2 1C db "BS",'R'+80h C variant 1bdh, 8, , ASM_MACH3 0044 1C ASMDATA segment 0044 FFFFFFF0 1C db ASM_MACH3 = 8424 1C ainfo = (1bdh) * ASMMOD + 8 0045 FFFFFF8424 1C db HIGH ainfo, LOW ainfo 0047 1C ASMDATA ends C endvariant 0047 1C ASMDATA segment 0047 FFFFFFFF 1C db -1 0048 1C ASMDATA ends C mne BSWAP, ASM_D32 ; ofs=48h 0048 1C ASMDATA segment 00000048 = 48 1C CURROFS = $ 0048 FFFFFFF9 1C db ASM_D32 0049 1C ASMDATA ends 0A42 4800 1C dw CURROFS - asmtab = 3C 1C MN_BSWAP equ $ - mnlist = "BSWA",'P'+80h 1C tmpstr catstr ,,,

,,<+80h> 0B2F 434D4F564EFFFFFFD0 1C db "CMOVN",'P'+80h C variant 14bh, 8, , ASM_MACH6 00E1 1C ASMDATA segment 00E1 FFFFFFF3 1C db ASM_MACH6 = 624C 1C ainfo = (14bh) * ASMMOD + 8 00E2 624C 1C db HIGH ainfo, LOW ainfo 00E4 1C ASMDATA ends C endvariant 00E4 1C ASMDATA segment 00E4 FFFFFFFF 1C db -1 00E5 1C ASMDATA ends C mne CMOVNS ; ofs=E5h 00E5 1C ASMDATA segment 000000E5 = E5 1C CURROFS = $ 00E5 1C ASMDATA ends 0B35 FFFFFFE500 1C dw CURROFS - asmtab = 12F 1C MN_CMOVNS equ $ - mnlist = "CMOVN",'S'+80h 1C tmpstr catstr ,,,,,<+80h> 0B37 434D4F564EFFFFFFD3 1C db "CMOVN",'S'+80h C variant 149h, 8, , ASM_MACH6 00E5 1C ASMDATA segment 00E5 FFFFFFF3 1C db ASM_MACH6 = 61B4 1C ainfo = (149h) * ASMMOD + 8 00E6 61FFFFFFB4 1C db HIGH ainfo, LOW ainfo 00E8 1C ASMDATA ends C endvariant 00E8 1C ASMDATA segment 00E8 FFFFFFFF 1C db -1 00E9 1C ASMDATA ends C mne CMOVNZ ; ofs=E9h 00E9 1C ASMDATA segment 000000E9 = E9 1C CURROFS = $ 00E9 1C ASMDATA ends 0B3D FFFFFFE900 1C dw CURROFS - asmtab = 137 1C MN_CMOVNZ equ $ - mnlist = "CMOVN",'Z'+80h 1C tmpstr catstr ,,,,,<+80h> 0B3F 434D4F564EFFFFFFDA 1C db "CMOVN",'Z'+80h C variant 145h, 8, , ASM_MACH6 00E9 1C ASMDATA segment 00E9 FFFFFFF3 1C db ASM_MACH6 = 6084 1C ainfo = (145h) * ASMMOD + 8 00EA 60FFFFFF84 1C db HIGH ainfo, LOW ainfo 00EC 1C ASMDATA ends C endvariant 00EC 1C ASMDATA segment 00EC FFFFFFFF 1C db -1 00ED 1C ASMDATA ends C mne CMOVO ; ofs=EDh 00ED 1C ASMDATA segment 000000ED = ED 1C CURROFS = $ 00ED 1C ASMDATA ends 0B45 FFFFFFED00 1C dw CURROFS - asmtab = 13F 1C MN_CMOVO equ $ - mnlist = "CMOV",'O'+80h 1C tmpstr catstr ,,,,,<+80h> 0B47 434D4F56FFFFFFCF 1C db "CMOV",'O'+80h C variant 140h, 8, , ASM_MACH6 00ED 1C ASMDATA segment 00ED FFFFFFF3 1C db ASM_MACH6 = 5F08 1C ainfo = (140h) * ASMMOD + 8 00EE 5F08 1C db HIGH ainfo, LOW ainfo 00F0 1C ASMDATA ends C endvariant 00F0 1C ASMDATA segment 00F0 FFFFFFFF 1C db -1 00F1 1C ASMDATA ends C mne CMOVP ; ofs=F1h 00F1 1C ASMDATA segment 000000F1 = F1 1C CURROFS = $ 00F1 1C ASMDATA ends 0B4C FFFFFFF100 1C dw CURROFS - asmtab = 146 1C MN_CMOVP equ $ - mnlist = "CMOV",'P'+80h 1C tmpstr catstr ,,,

,,<+80h> 0B4E 434D4F56FFFFFFD0 1C db "CMOV",'P'+80h C variant 14ah, 8, , ASM_MACH6 00F1 1C ASMDATA segment 00F1 FFFFFFF3 1C db ASM_MACH6 = 6200 1C ainfo = (14ah) * ASMMOD + 8 00F2 6200 1C db HIGH ainfo, LOW ainfo 00F4 1C ASMDATA ends C endvariant 00F4 1C ASMDATA segment 00F4 FFFFFFFF 1C db -1 00F5 1C ASMDATA ends C mne CMOVPE ; ofs=F5h 00F5 1C ASMDATA segment 000000F5 = F5 1C CURROFS = $ 00F5 1C ASMDATA ends 0B53 FFFFFFF500 1C dw CURROFS - asmtab = 14D 1C MN_CMOVPE equ $ - mnlist = "CMOVP",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 0B55 434D4F5650FFFFFFC5 1C db "CMOVP",'E'+80h C variant 14ah, 8, , ASM_MACH6 00F5 1C ASMDATA segment 00F5 FFFFFFF3 1C db ASM_MACH6 = 6200 1C ainfo = (14ah) * ASMMOD + 8 00F6 6200 1C db HIGH ainfo, LOW ainfo 00F8 1C ASMDATA ends C endvariant 00F8 1C ASMDATA segment 00F8 FFFFFFFF 1C db -1 00F9 1C ASMDATA ends C mne CMOVPO ; ofs=F9h 00F9 1C ASMDATA segment 000000F9 = F9 1C CURROFS = $ 00F9 1C ASMDATA ends 0B5B FFFFFFF900 1C dw CURROFS - asmtab = 155 1C MN_CMOVPO equ $ - mnlist = "CMOVP",'O'+80h 1C tmpstr catstr ,,,,,<+80h> 0B5D 434D4F5650FFFFFFCF 1C db "CMOVP",'O'+80h C variant 14bh, 8, , ASM_MACH6 00F9 1C ASMDATA segment 00F9 FFFFFFF3 1C db ASM_MACH6 = 624C 1C ainfo = (14bh) * ASMMOD + 8 00FA 624C 1C db HIGH ainfo, LOW ainfo 00FC 1C ASMDATA ends C endvariant 00FC 1C ASMDATA segment 00FC FFFFFFFF 1C db -1 00FD 1C ASMDATA ends C mne CMOVS ; ofs=FDh 00FD 1C ASMDATA segment 000000FD = FD 1C CURROFS = $ 00FD 1C ASMDATA ends 0B63 FFFFFFFD00 1C dw CURROFS - asmtab = 15D 1C MN_CMOVS equ $ - mnlist = "CMOV",'S'+80h 1C tmpstr catstr ,,,,,<+80h> 0B65 434D4F56FFFFFFD3 1C db "CMOV",'S'+80h C variant 148h, 8, , ASM_MACH6 00FD 1C ASMDATA segment 00FD FFFFFFF3 1C db ASM_MACH6 = 6168 1C ainfo = (148h) * ASMMOD + 8 00FE 6168 1C db HIGH ainfo, LOW ainfo 0100 1C ASMDATA ends C endvariant 0100 1C ASMDATA segment 0100 FFFFFFFF 1C db -1 0101 1C ASMDATA ends C mne CMOVZ ; ofs=101h 0101 1C ASMDATA segment 00000101 = 101 1C CURROFS = $ 0101 1C ASMDATA ends 0B6A 0101 1C dw CURROFS - asmtab = 164 1C MN_CMOVZ equ $ - mnlist = "CMOV",'Z'+80h 1C tmpstr catstr ,,,,,<+80h> 0B6C 434D4F56FFFFFFDA 1C db "CMOV",'Z'+80h C variant 144h, 8, , ASM_MACH6 0101 1C ASMDATA segment 0101 FFFFFFF3 1C db ASM_MACH6 = 6038 1C ainfo = (144h) * ASMMOD + 8 0102 6038 1C db HIGH ainfo, LOW ainfo 0104 1C ASMDATA ends C endvariant 0104 1C ASMDATA segment 0104 FFFFFFFF 1C db -1 0105 1C ASMDATA ends C mne CMP ; ofs=105h 0105 1C ASMDATA segment 00000105 = 105 1C CURROFS = $ 0105 1C ASMDATA ends 0B71 0501 1C dw CURROFS - asmtab = 16B 1C MN_CMP equ $ - mnlist = "CM",'P'+80h 1C tmpstr catstr ,,,

,,<+80h> 0B73 434DFFFFFFD0 1C db "CM",'P'+80h C variant AGRP(0,7), 3 0105 1C ASMDATA segment = AD17 1C ainfo = (240h + 0*8 + 7) * ASMMOD + 3 0105 FFFFFFAD17 1C db HIGH ainfo, LOW ainfo 0107 1C ASMDATA ends C variant 03ch, 1 0107 1C ASMDATA segment = 11D1 1C ainfo = (03ch) * ASMMOD + 1 0107 11FFFFFFD1 1C db HIGH ainfo, LOW ainfo 0109 1C ASMDATA ends C variant AGRP(1,7), 2 0109 1C ASMDATA segment = AF76 1C ainfo = (240h + 1*8 + 7) * ASMMOD + 2 0109 FFFFFFAF76 1C db HIGH ainfo, LOW ainfo 010B 1C ASMDATA ends C variant 038h, 4 010B 1C ASMDATA segment = 10A4 1C ainfo = (038h) * ASMMOD + 4 010B 10FFFFFFA4 1C db HIGH ainfo, LOW ainfo 010D 1C ASMDATA ends C variant 03ah, 5 010D 1C ASMDATA segment = 113D 1C ainfo = (03ah) * ASMMOD + 5 010D 113D 1C db HIGH ainfo, LOW ainfo 010F 1C ASMDATA ends C endvariant 010F 1C ASMDATA segment 010F FFFFFFFF 1C db -1 0110 1C ASMDATA ends C mne CMPSB ; ofs=110h 0110 1C ASMDATA segment 00000110 = 110 1C CURROFS = $ 0110 1C ASMDATA ends 0B76 1001 1C dw CURROFS - asmtab = 170 1C MN_CMPSB equ $ - mnlist = "CMPS",'B'+80h 1C tmpstr catstr ,,,,,<+80h> 0B78 434D5053FFFFFFC2 1C db "CMPS",'B'+80h C variant 0a6h, 0 0110 1C ASMDATA segment = 3148 1C ainfo = (0a6h) * ASMMOD + 0 0110 3148 1C db HIGH ainfo, LOW ainfo 0112 1C ASMDATA ends C endvariant 0112 1C ASMDATA segment 0112 FFFFFFFF 1C db -1 0113 1C ASMDATA ends C mne CMPSW, ASM_D16 ; ofs=113h 0113 1C ASMDATA segment 00000113 = 113 1C CURROFS = $ 0113 FFFFFFF8 1C db ASM_D16 0114 1C ASMDATA ends 0B7D 1301 1C dw CURROFS - asmtab = 177 1C MN_CMPSW equ $ - mnlist = "CMPS",'W'+80h 1C tmpstr catstr ,,,,,<+80h> 0B7F 434D5053FFFFFFD7 1C db "CMPS",'W'+80h C mne CMPSD, ASM_D32 ; ofs=114h 0114 1C ASMDATA segment 00000114 = 114 1C CURROFS = $ 0114 FFFFFFF9 1C db ASM_D32 0115 1C ASMDATA ends 0B84 1401 1C dw CURROFS - asmtab = 17E 1C MN_CMPSD equ $ - mnlist = "CMPS",'D'+80h 1C tmpstr catstr ,,,,,<+80h> 0B86 434D5053FFFFFFC4 1C db "CMPS",'D'+80h C variant 0a7h, 0 0115 1C ASMDATA segment = 3194 1C ainfo = (0a7h) * ASMMOD + 0 0115 31FFFFFF94 1C db HIGH ainfo, LOW ainfo 0117 1C ASMDATA ends C endvariant 0117 1C ASMDATA segment 0117 FFFFFFFF 1C db -1 0118 1C ASMDATA ends C mne CMPXCHG ; ofs=118h 0118 1C ASMDATA segment 00000118 = 118 1C CURROFS = $ 0118 1C ASMDATA ends 0B8B 1801 1C dw CURROFS - asmtab = 185 1C MN_CMPXCHG equ $ - mnlist = "CMPXCH",'G'+80h 1C tmpstr catstr ,,,,,<+80h> 0B8D 434D50584348FFFFFFC7 1C db "CMPXCH",'G'+80h C variant 1b0h, 4, ASM_LOCKABLE, ASM_MACH4 0118 1C ASMDATA segment 0118 FFFFFFF4 1C db ASM_LOCKABLE 0119 FFFFFFF1 1C db ASM_MACH4 = 8044 1C ainfo = (1b0h) * ASMMOD + 4 011A FFFFFF8044 1C db HIGH ainfo, LOW ainfo 011C 1C ASMDATA ends C endvariant 011C 1C ASMDATA segment 011C FFFFFFFF 1C db -1 011D 1C ASMDATA ends C mne CMPXCHG8B ; ofs=11Dh 011D 1C ASMDATA segment 0000011D = 11D 1C CURROFS = $ 011D 1C ASMDATA ends 0B94 1D01 1C dw CURROFS - asmtab = 18E 1C MN_CMPXCHG8B equ $ - mnlist = "CMPXCHG8",'B'+80h 1C tmpstr catstr ,,,,,<+80h> 0B96 434D505843484738FFFFFFC 1C db "CMPXCHG8",'B'+80h C variant AGRP(4,1), 15, , ASM_MACH5 011D 1C ASMDATA segment 011D FFFFFFF2 1C db ASM_MACH5 = B4DB 1C ainfo = (240h + 4*8 + 1) * ASMMOD + 15 011E FFFFFFB4FFFFFFDB 1C db HIGH ainfo, LOW ainfo 0120 1C ASMDATA ends C endvariant 0120 1C ASMDATA segment 0120 FFFFFFFF 1C db -1 0121 1C ASMDATA ends C mne CPUID ; ofs=121h 0121 1C ASMDATA segment 00000121 = 121 1C CURROFS = $ 0121 1C ASMDATA ends 0B9F 2101 1C dw CURROFS - asmtab = 199 1C MN_CPUID equ $ - mnlist = "CPUI",'D'+80h 1C tmpstr catstr ,,,,,<+80h> 0BA1 43505549FFFFFFC4 1C db "CPUI",'D'+80h C variant 1a2h, 0, , ASM_MACH5 0121 1C ASMDATA segment 0121 FFFFFFF2 1C db ASM_MACH5 = 7C18 1C ainfo = (1a2h) * ASMMOD + 0 0122 7C18 1C db HIGH ainfo, LOW ainfo 0124 1C ASMDATA ends C endvariant 0124 1C ASMDATA segment 0124 FFFFFFFF 1C db -1 0125 1C ASMDATA ends C mne CWD, ASM_D16 ; ofs=125h 0125 1C ASMDATA segment 00000125 = 125 1C CURROFS = $ 0125 FFFFFFF8 1C db ASM_D16 0126 1C ASMDATA ends 0BA6 2501 1C dw CURROFS - asmtab = 1A0 1C MN_CWD equ $ - mnlist = "CW",'D'+80h 1C tmpstr catstr ,,,,,<+80h> 0BA8 4357FFFFFFC4 1C db "CW",'D'+80h C mne CDQ, ASM_D32 ; ofs=126h 0126 1C ASMDATA segment 00000126 = 126 1C CURROFS = $ 0126 FFFFFFF9 1C db ASM_D32 0127 1C ASMDATA ends 0BAB 2601 1C dw CURROFS - asmtab = 1A5 1C MN_CDQ equ $ - mnlist = "CD",'Q'+80h 1C tmpstr catstr ,,,,,<+80h> 0BAD 4344FFFFFFD1 1C db "CD",'Q'+80h C variant 099h, 0 0127 1C ASMDATA segment = 2D6C 1C ainfo = (099h) * ASMMOD + 0 0127 2D6C 1C db HIGH ainfo, LOW ainfo 0129 1C ASMDATA ends C endvariant 0129 1C ASMDATA segment 0129 FFFFFFFF 1C db -1 012A 1C ASMDATA ends C mne DAA ; ofs=12Ah 012A 1C ASMDATA segment 0000012A = 12A 1C CURROFS = $ 012A 1C ASMDATA ends 0BB0 2A01 1C dw CURROFS - asmtab = 1AA 1C MN_DAA equ $ - mnlist = "DA",'A'+80h 1C tmpstr catstr ,,,,,<+80h> 0BB2 4441FFFFFFC1 1C db "DA",'A'+80h C variant 027h, 0 012A 1C ASMDATA segment = B94 1C ainfo = (027h) * ASMMOD + 0 012A 0BFFFFFF94 1C db HIGH ainfo, LOW ainfo 012C 1C ASMDATA ends C endvariant 012C 1C ASMDATA segment 012C FFFFFFFF 1C db -1 012D 1C ASMDATA ends C mne DAS ; ofs=12Dh 012D 1C ASMDATA segment 0000012D = 12D 1C CURROFS = $ 012D 1C ASMDATA ends 0BB5 2D01 1C dw CURROFS - asmtab = 1AF 1C MN_DAS equ $ - mnlist = "DA",'S'+80h 1C tmpstr catstr ,,,,,<+80h> 0BB7 4441FFFFFFD3 1C db "DA",'S'+80h C variant 02fh, 0 012D 1C ASMDATA segment = DF4 1C ainfo = (02fh) * ASMMOD + 0 012D 0DFFFFFFF4 1C db HIGH ainfo, LOW ainfo 012F 1C ASMDATA ends C endvariant 012F 1C ASMDATA segment 012F FFFFFFFF 1C db -1 0130 1C ASMDATA ends C mne DB, ASM_DB ; ofs=130h 0130 1C ASMDATA segment 00000130 = 130 1C CURROFS = $ 0130 FFFFFFFE 1C db ASM_DB 0131 1C ASMDATA ends 0BBA 3001 1C dw CURROFS - asmtab = 1B4 1C MN_DB equ $ - mnlist = "D",'B'+80h 1C tmpstr catstr ,,,,,<+80h> 0BBC 44FFFFFFC2 1C db "D",'B'+80h C mne DD, ASM_DD ; ofs=132h 0131 1C ASMDATA segment 00000131 = 131 1C CURROFS = $ 0131 FFFFFFFC 1C db ASM_DD 0132 1C ASMDATA ends 0BBE 3101 1C dw CURROFS - asmtab = 1B8 1C MN_DD equ $ - mnlist = "D",'D'+80h 1C tmpstr catstr ,,,,,<+80h> 0BC0 44FFFFFFC4 1C db "D",'D'+80h C mne DEC ; ofs=134h 0132 1C ASMDATA segment 00000132 = 132 1C CURROFS = $ 0132 1C ASMDATA ends 0BC2 3201 1C dw CURROFS - asmtab = 1BC 1C MN_DEC equ $ - mnlist = "DE",'C'+80h 1C tmpstr catstr ,,,,,<+80h> 0BC4 4445FFFFFFC3 1C db "DE",'C'+80h C variant 048h, 17 0132 1C ASMDATA segment = 1571 1C ainfo = (048h) * ASMMOD + 17 0132 1571 1C db HIGH ainfo, LOW ainfo 0134 1C ASMDATA ends C variant AGRP(5,1), 16, ASM_LOCKABLE 0134 1C ASMDATA segment 0134 FFFFFFF4 1C db ASM_LOCKABLE = B73C 1C ainfo = (240h + 5*8 + 1) * ASMMOD + 16 0135 FFFFFFB73C 1C db HIGH ainfo, LOW ainfo 0137 1C ASMDATA ends C endvariant 0137 1C ASMDATA segment 0137 FFFFFFFF 1C db -1 0138 1C ASMDATA ends C mne DIV ; ofs=13Ah 0138 1C ASMDATA segment 00000138 = 138 1C CURROFS = $ 0138 1C ASMDATA ends 0BC7 3801 1C dw CURROFS - asmtab = 1C1 1C MN_DIV equ $ - mnlist = "DI",'V'+80h 1C tmpstr catstr ,,,,,<+80h> 0BC9 4449FFFFFFD6 1C db "DI",'V'+80h C variant AGRP(6,6), 16 0138 1C ASMDATA segment = BB18 1C ainfo = (240h + 6*8 + 6) * ASMMOD + 16 0138 FFFFFFBB18 1C db HIGH ainfo, LOW ainfo 013A 1C ASMDATA ends C endvariant 013A 1C ASMDATA segment 013A FFFFFFFF 1C db -1 013B 1C ASMDATA ends C mne DW, ASM_DW ; ofs=13Dh 013B 1C ASMDATA segment 0000013B = 13B 1C CURROFS = $ 013B FFFFFFFD 1C db ASM_DW 013C 1C ASMDATA ends 0BCC 3B01 1C dw CURROFS - asmtab = 1C6 1C MN_DW equ $ - mnlist = "D",'W'+80h 1C tmpstr catstr ,,,,,<+80h> 0BCE 44FFFFFFD7 1C db "D",'W'+80h C if MMXSUPP C endif C mne ENTER ; ofs=143h 013C 1C ASMDATA segment 0000013C = 13C 1C CURROFS = $ 013C 1C ASMDATA ends 0BD0 3C01 1C dw CURROFS - asmtab = 1CA 1C MN_ENTER equ $ - mnlist = "ENTE",'R'+80h 1C tmpstr catstr ,,,,,<+80h> 0BD2 454E5445FFFFFFD2 1C db "ENTE",'R'+80h C variant 0c8h, 18, , ASM_MACH1 013C 1C ASMDATA segment 013C FFFFFFEE 1C db ASM_MACH1 = 3B72 1C ainfo = (0c8h) * ASMMOD + 18 013D 3B72 1C db HIGH ainfo, LOW ainfo 013F 1C ASMDATA ends C endvariant 013F 1C ASMDATA segment 013F FFFFFFFF 1C db -1 0140 1C ASMDATA ends C mne F2XM1 ; ofs=147h 0140 1C ASMDATA segment 00000140 = 140 1C CURROFS = $ 0140 1C ASMDATA ends 0BD7 4001 1C dw CURROFS - asmtab = 1D1 1C MN_F2XM1 equ $ - mnlist = "F2XM",'1'+80h 1C tmpstr catstr ,,,<1>,,<+80h> 0BD9 4632584DFFFFFFB1 1C db "F2XM",'1'+80h C fpvariant 0d9h, 0, 0f0h 1C variant 0d9h, 0, , 0140 2C ASMDATA segment = 406C 2C ainfo = (0d9h) * ASMMOD + 0 0140 406C 2C db HIGH ainfo, LOW ainfo 0142 2C ASMDATA ends 0142 1C ASMDATA segment 0142 FFFFFFF0 1C db 0f0h 0143 1C ASMDATA ends C endvariant 0143 1C ASMDATA segment 0143 FFFFFFFF 1C db -1 0144 1C ASMDATA ends C mne FABS ; ofs=14Bh 0144 1C ASMDATA segment 00000144 = 144 1C CURROFS = $ 0144 1C ASMDATA ends 0BDE 4401 1C dw CURROFS - asmtab = 1D8 1C MN_FABS equ $ - mnlist = "FAB",'S'+80h 1C tmpstr catstr ,,,,,<+80h> 0BE0 464142FFFFFFD3 1C db "FAB",'S'+80h C fpvariant 0d9h, 0, 0e1h 1C variant 0d9h, 0, , 0144 2C ASMDATA segment = 406C 2C ainfo = (0d9h) * ASMMOD + 0 0144 406C 2C db HIGH ainfo, LOW ainfo 0146 2C ASMDATA ends 0146 1C ASMDATA segment 0146 FFFFFFE1 1C db 0e1h 0147 1C ASMDATA ends C endvariant 0147 1C ASMDATA segment 0147 FFFFFFFF 1C db -1 0148 1C ASMDATA ends C mne FADD ; ofs=14Fh 0148 1C ASMDATA segment 00000148 = 148 1C CURROFS = $ 0148 1C ASMDATA ends 0BE4 4801 1C dw CURROFS - asmtab = 1DE 1C MN_FADD equ $ - mnlist = "FAD",'D'+80h 1C tmpstr catstr ,,,,,<+80h> 0BE6 464144FFFFFFC4 1C db "FAD",'D'+80h C variant 200h, 19 0148 1C ASMDATA segment = 9813 1C ainfo = (200h) * ASMMOD + 19 0148 FFFFFF9813 1C db HIGH ainfo, LOW ainfo 014A 1C ASMDATA ends C variant 204h, 20 014A 1C ASMDATA segment = 9944 1C ainfo = (204h) * ASMMOD + 20 014A FFFFFF9944 1C db HIGH ainfo, LOW ainfo 014C 1C ASMDATA ends C fpvariant 0d8h, 21, 0c0h 1C variant 0d8h, 21, , 014C 2C ASMDATA segment = 4035 2C ainfo = (0d8h) * ASMMOD + 21 014C 4035 2C db HIGH ainfo, LOW ainfo 014E 2C ASMDATA ends 014E 1C ASMDATA segment 014E FFFFFFC0 1C db 0c0h 014F 1C ASMDATA ends C fpvariant 0dch, 22, 0c0h 1C variant 0dch, 22, , 014F 2C ASMDATA segment = 4166 2C ainfo = (0dch) * ASMMOD + 22 014F 4166 2C db HIGH ainfo, LOW ainfo 0151 2C ASMDATA ends 0151 1C ASMDATA segment 0151 FFFFFFC0 1C db 0c0h 0152 1C ASMDATA ends C endvariant 0152 1C ASMDATA segment 0152 FFFFFFFF 1C db -1 0153 1C ASMDATA ends C mne FADDP ; ofs=15Ah 0153 1C ASMDATA segment 00000153 = 153 1C CURROFS = $ 0153 1C ASMDATA ends 0BEA 5301 1C dw CURROFS - asmtab = 1E4 1C MN_FADDP equ $ - mnlist = "FADD",'P'+80h 1C tmpstr catstr ,,,

,,<+80h> 0BEC 46414444FFFFFFD0 1C db "FADD",'P'+80h C fpvariant 0deh, 23, 0c0h 1C variant 0deh, 23, , 0153 2C ASMDATA segment = 41FF 2C ainfo = (0deh) * ASMMOD + 23 0153 41FFFFFFFF 2C db HIGH ainfo, LOW ainfo 0155 2C ASMDATA ends 0155 1C ASMDATA segment 0155 FFFFFFC0 1C db 0c0h 0156 1C ASMDATA ends C fpvariant 0deh, 0, 0c1h 1C variant 0deh, 0, , 0156 2C ASMDATA segment = 41E8 2C ainfo = (0deh) * ASMMOD + 0 0156 41FFFFFFE8 2C db HIGH ainfo, LOW ainfo 0158 2C ASMDATA ends 0158 1C ASMDATA segment 0158 FFFFFFC1 1C db 0c1h 0159 1C ASMDATA ends C endvariant 0159 1C ASMDATA segment 0159 FFFFFFFF 1C db -1 015A 1C ASMDATA ends C mne FIADD ; ofs=161h 015A 1C ASMDATA segment 0000015A = 15A 1C CURROFS = $ 015A 1C ASMDATA ends 0BF1 5A01 1C dw CURROFS - asmtab = 1EB 1C MN_FIADD equ $ - mnlist = "FIAD",'D'+80h 1C tmpstr catstr ,,,,,<+80h> 0BF3 46494144FFFFFFC4 1C db "FIAD",'D'+80h C variant 202h, 24 015A 1C ASMDATA segment = 98B0 1C ainfo = (202h) * ASMMOD + 24 015A FFFFFF98FFFFFFB0 1C db HIGH ainfo, LOW ainfo 015C 1C ASMDATA ends C variant 206h, 25 015C 1C ASMDATA segment = 99E1 1C ainfo = (206h) * ASMMOD + 25 015C FFFFFF99FFFFFFE1 1C db HIGH ainfo, LOW ainfo 015E 1C ASMDATA ends C endvariant 015E 1C ASMDATA segment 015E FFFFFFFF 1C db -1 015F 1C ASMDATA ends C mne FBLD ; ofs=166h 015F 1C ASMDATA segment 0000015F = 15F 1C CURROFS = $ 015F 1C ASMDATA ends 0BF8 5F01 1C dw CURROFS - asmtab = 1F2 1C MN_FBLD equ $ - mnlist = "FBL",'D'+80h 1C tmpstr catstr ,,,,,<+80h> 0BFA 46424CFFFFFFC4 1C db "FBL",'D'+80h C variant 227h, 26 015F 1C ASMDATA segment = A3AE 1C ainfo = (227h) * ASMMOD + 26 015F FFFFFFA3FFFFFFAE 1C db HIGH ainfo, LOW ainfo 0161 1C ASMDATA ends C endvariant 0161 1C ASMDATA segment 0161 FFFFFFFF 1C db -1 0162 1C ASMDATA ends C mne FBSTP ; ofs=169h 0162 1C ASMDATA segment 00000162 = 162 1C CURROFS = $ 0162 1C ASMDATA ends 0BFE 6201 1C dw CURROFS - asmtab = 1F8 1C MN_FBSTP equ $ - mnlist = "FBST",'P'+80h 1C tmpstr catstr ,,,

,,<+80h> 0C00 46425354FFFFFFD0 1C db "FBST",'P'+80h C variant 237h, 26 0162 1C ASMDATA segment = A86E 1C ainfo = (237h) * ASMMOD + 26 0162 FFFFFFA86E 1C db HIGH ainfo, LOW ainfo 0164 1C ASMDATA ends C endvariant 0164 1C ASMDATA segment 0164 FFFFFFFF 1C db -1 0165 1C ASMDATA ends C mne FCHS ; ofs=16Ch 0165 1C ASMDATA segment 00000165 = 165 1C CURROFS = $ 0165 1C ASMDATA ends 0C05 6501 1C dw CURROFS - asmtab = 1FF 1C MN_FCHS equ $ - mnlist = "FCH",'S'+80h 1C tmpstr catstr ,,,,,<+80h> 0C07 464348FFFFFFD3 1C db "FCH",'S'+80h C fpvariant 0d9h, 0, 0e0h 1C variant 0d9h, 0, , 0165 2C ASMDATA segment = 406C 2C ainfo = (0d9h) * ASMMOD + 0 0165 406C 2C db HIGH ainfo, LOW ainfo 0167 2C ASMDATA ends 0167 1C ASMDATA segment 0167 FFFFFFE0 1C db 0e0h 0168 1C ASMDATA ends C endvariant 0168 1C ASMDATA segment 0168 FFFFFFFF 1C db -1 0169 1C ASMDATA ends C mne FCLEX, ASM_WAIT ; ofs=170h 0169 1C ASMDATA segment 00000169 = 169 1C CURROFS = $ 0169 FFFFFFFA 1C db ASM_WAIT 016A 1C ASMDATA ends 0C0B 6901 1C dw CURROFS - asmtab = 205 1C MN_FCLEX equ $ - mnlist = "FCLE",'X'+80h 1C tmpstr catstr ,,,,,<+80h> 0C0D 46434C45FFFFFFD8 1C db "FCLE",'X'+80h C mne FNCLEX ; ofs=171h 016A 1C ASMDATA segment 0000016A = 16A 1C CURROFS = $ 016A 1C ASMDATA ends 0C12 6A01 1C dw CURROFS - asmtab = 20C 1C MN_FNCLEX equ $ - mnlist = "FNCLE",'X'+80h 1C tmpstr catstr ,,,,,<+80h> 0C14 464E434C45FFFFFFD8 1C db "FNCLE",'X'+80h C fpvariant 0dbh, 0, 0e2h 1C variant 0dbh, 0, , 016A 2C ASMDATA segment = 4104 2C ainfo = (0dbh) * ASMMOD + 0 016A 4104 2C db HIGH ainfo, LOW ainfo 016C 2C ASMDATA ends 016C 1C ASMDATA segment 016C FFFFFFE2 1C db 0e2h 016D 1C ASMDATA ends C endvariant 016D 1C ASMDATA segment 016D FFFFFFFF 1C db -1 016E 1C ASMDATA ends C mne FCMOVA ; ofs=175h 016E 1C ASMDATA segment 0000016E = 16E 1C CURROFS = $ 016E 1C ASMDATA ends 0C1A 6E01 1C dw CURROFS - asmtab = 214 1C MN_FCMOVA equ $ - mnlist = "FCMOV",'A'+80h 1C tmpstr catstr ,,,,,<+80h> 0C1C 46434D4F56FFFFFFC1 1C db "FCMOV",'A'+80h C fpvariant 0dbh, 21, 0d0h, , ASM_MACH6 1C variant 0dbh, 21, , ASM_MACH6 016E 2C ASMDATA segment 016E FFFFFFF3 2C db ASM_MACH6 = 4119 2C ainfo = (0dbh) * ASMMOD + 21 016F 4119 2C db HIGH ainfo, LOW ainfo 0171 2C ASMDATA ends 0171 1C ASMDATA segment 0171 FFFFFFD0 1C db 0d0h 0172 1C ASMDATA ends C endvariant 0172 1C ASMDATA segment 0172 FFFFFFFF 1C db -1 0173 1C ASMDATA ends C mne FCMOVAE ; ofs=17Ah 0173 1C ASMDATA segment 00000173 = 173 1C CURROFS = $ 0173 1C ASMDATA ends 0C22 7301 1C dw CURROFS - asmtab = 21C 1C MN_FCMOVAE equ $ - mnlist = "FCMOVA",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 0C24 46434D4F5641FFFFFFC5 1C db "FCMOVA",'E'+80h C fpvariant 0dbh, 21, 0c0h, , ASM_MACH6 1C variant 0dbh, 21, , ASM_MACH6 0173 2C ASMDATA segment 0173 FFFFFFF3 2C db ASM_MACH6 = 4119 2C ainfo = (0dbh) * ASMMOD + 21 0174 4119 2C db HIGH ainfo, LOW ainfo 0176 2C ASMDATA ends 0176 1C ASMDATA segment 0176 FFFFFFC0 1C db 0c0h 0177 1C ASMDATA ends C endvariant 0177 1C ASMDATA segment 0177 FFFFFFFF 1C db -1 0178 1C ASMDATA ends C mne FCMOVB ; ofs=17Fh 0178 1C ASMDATA segment 00000178 = 178 1C CURROFS = $ 0178 1C ASMDATA ends 0C2B 7801 1C dw CURROFS - asmtab = 225 1C MN_FCMOVB equ $ - mnlist = "FCMOV",'B'+80h 1C tmpstr catstr ,,,,,<+80h> 0C2D 46434D4F56FFFFFFC2 1C db "FCMOV",'B'+80h C fpvariant 0dah, 21, 0c0h, , ASM_MACH6 1C variant 0dah, 21, , ASM_MACH6 0178 2C ASMDATA segment 0178 FFFFFFF3 2C db ASM_MACH6 = 40CD 2C ainfo = (0dah) * ASMMOD + 21 0179 40FFFFFFCD 2C db HIGH ainfo, LOW ainfo 017B 2C ASMDATA ends 017B 1C ASMDATA segment 017B FFFFFFC0 1C db 0c0h 017C 1C ASMDATA ends C endvariant 017C 1C ASMDATA segment 017C FFFFFFFF 1C db -1 017D 1C ASMDATA ends C mne FCMOVBE ; ofs=184h 017D 1C ASMDATA segment 0000017D = 17D 1C CURROFS = $ 017D 1C ASMDATA ends 0C33 7D01 1C dw CURROFS - asmtab = 22D 1C MN_FCMOVBE equ $ - mnlist = "FCMOVB",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 0C35 46434D4F5642FFFFFFC5 1C db "FCMOVB",'E'+80h C fpvariant 0dah, 21, 0d0h, , ASM_MACH6 1C variant 0dah, 21, , ASM_MACH6 017D 2C ASMDATA segment 017D FFFFFFF3 2C db ASM_MACH6 = 40CD 2C ainfo = (0dah) * ASMMOD + 21 017E 40FFFFFFCD 2C db HIGH ainfo, LOW ainfo 0180 2C ASMDATA ends 0180 1C ASMDATA segment 0180 FFFFFFD0 1C db 0d0h 0181 1C ASMDATA ends C endvariant 0181 1C ASMDATA segment 0181 FFFFFFFF 1C db -1 0182 1C ASMDATA ends C mne FCMOVE ; ofs=189h 0182 1C ASMDATA segment 00000182 = 182 1C CURROFS = $ 0182 1C ASMDATA ends 0C3C FFFFFF8201 1C dw CURROFS - asmtab = 236 1C MN_FCMOVE equ $ - mnlist = "FCMOV",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 0C3E 46434D4F56FFFFFFC5 1C db "FCMOV",'E'+80h C fpvariant 0dah, 21, 0c8h, , ASM_MACH6 1C variant 0dah, 21, , ASM_MACH6 0182 2C ASMDATA segment 0182 FFFFFFF3 2C db ASM_MACH6 = 40CD 2C ainfo = (0dah) * ASMMOD + 21 0183 40FFFFFFCD 2C db HIGH ainfo, LOW ainfo 0185 2C ASMDATA ends 0185 1C ASMDATA segment 0185 FFFFFFC8 1C db 0c8h 0186 1C ASMDATA ends C endvariant 0186 1C ASMDATA segment 0186 FFFFFFFF 1C db -1 0187 1C ASMDATA ends C mne FCMOVNA ; ofs=18Eh 0187 1C ASMDATA segment 00000187 = 187 1C CURROFS = $ 0187 1C ASMDATA ends 0C44 FFFFFF8701 1C dw CURROFS - asmtab = 23E 1C MN_FCMOVNA equ $ - mnlist = "FCMOVN",'A'+80h 1C tmpstr catstr ,,,,,<+80h> 0C46 46434D4F564EFFFFFFC1 1C db "FCMOVN",'A'+80h C fpvariant 0dah, 21, 0d0h, , ASM_MACH6 1C variant 0dah, 21, , ASM_MACH6 0187 2C ASMDATA segment 0187 FFFFFFF3 2C db ASM_MACH6 = 40CD 2C ainfo = (0dah) * ASMMOD + 21 0188 40FFFFFFCD 2C db HIGH ainfo, LOW ainfo 018A 2C ASMDATA ends 018A 1C ASMDATA segment 018A FFFFFFD0 1C db 0d0h 018B 1C ASMDATA ends C endvariant 018B 1C ASMDATA segment 018B FFFFFFFF 1C db -1 018C 1C ASMDATA ends C mne FCMOVNAE ; ofs=193h 018C 1C ASMDATA segment 0000018C = 18C 1C CURROFS = $ 018C 1C ASMDATA ends 0C4D FFFFFF8C01 1C dw CURROFS - asmtab = 247 1C MN_FCMOVNAE equ $ - mnlist = "FCMOVNA",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 0C4F 46434D4F564E41FFFFFFC5 1C db "FCMOVNA",'E'+80h C fpvariant 0dah, 21, 0c0h, , ASM_MACH6 1C variant 0dah, 21, , ASM_MACH6 018C 2C ASMDATA segment 018C FFFFFFF3 2C db ASM_MACH6 = 40CD 2C ainfo = (0dah) * ASMMOD + 21 018D 40FFFFFFCD 2C db HIGH ainfo, LOW ainfo 018F 2C ASMDATA ends 018F 1C ASMDATA segment 018F FFFFFFC0 1C db 0c0h 0190 1C ASMDATA ends C endvariant 0190 1C ASMDATA segment 0190 FFFFFFFF 1C db -1 0191 1C ASMDATA ends C mne FCMOVNB ; ofs=198h 0191 1C ASMDATA segment 00000191 = 191 1C CURROFS = $ 0191 1C ASMDATA ends 0C57 FFFFFF9101 1C dw CURROFS - asmtab = 251 1C MN_FCMOVNB equ $ - mnlist = "FCMOVN",'B'+80h 1C tmpstr catstr ,,,,,<+80h> 0C59 46434D4F564EFFFFFFC2 1C db "FCMOVN",'B'+80h C fpvariant 0dbh, 21, 0c0h, , ASM_MACH6 1C variant 0dbh, 21, , ASM_MACH6 0191 2C ASMDATA segment 0191 FFFFFFF3 2C db ASM_MACH6 = 4119 2C ainfo = (0dbh) * ASMMOD + 21 0192 4119 2C db HIGH ainfo, LOW ainfo 0194 2C ASMDATA ends 0194 1C ASMDATA segment 0194 FFFFFFC0 1C db 0c0h 0195 1C ASMDATA ends C endvariant 0195 1C ASMDATA segment 0195 FFFFFFFF 1C db -1 0196 1C ASMDATA ends C mne FCMOVNBE ; ofs=19Dh 0196 1C ASMDATA segment 00000196 = 196 1C CURROFS = $ 0196 1C ASMDATA ends 0C60 FFFFFF9601 1C dw CURROFS - asmtab = 25A 1C MN_FCMOVNBE equ $ - mnlist = "FCMOVNB",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 0C62 46434D4F564E42FFFFFFC5 1C db "FCMOVNB",'E'+80h C fpvariant 0dbh, 21, 0d0h, , ASM_MACH6 1C variant 0dbh, 21, , ASM_MACH6 0196 2C ASMDATA segment 0196 FFFFFFF3 2C db ASM_MACH6 = 4119 2C ainfo = (0dbh) * ASMMOD + 21 0197 4119 2C db HIGH ainfo, LOW ainfo 0199 2C ASMDATA ends 0199 1C ASMDATA segment 0199 FFFFFFD0 1C db 0d0h 019A 1C ASMDATA ends C endvariant 019A 1C ASMDATA segment 019A FFFFFFFF 1C db -1 019B 1C ASMDATA ends C mne FCMOVNE ; ofs=1A2h 019B 1C ASMDATA segment 0000019B = 19B 1C CURROFS = $ 019B 1C ASMDATA ends 0C6A FFFFFF9B01 1C dw CURROFS - asmtab = 264 1C MN_FCMOVNE equ $ - mnlist = "FCMOVN",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 0C6C 46434D4F564EFFFFFFC5 1C db "FCMOVN",'E'+80h C fpvariant 0dbh, 21, 0c8h, , ASM_MACH6 1C variant 0dbh, 21, , ASM_MACH6 019B 2C ASMDATA segment 019B FFFFFFF3 2C db ASM_MACH6 = 4119 2C ainfo = (0dbh) * ASMMOD + 21 019C 4119 2C db HIGH ainfo, LOW ainfo 019E 2C ASMDATA ends 019E 1C ASMDATA segment 019E FFFFFFC8 1C db 0c8h 019F 1C ASMDATA ends C endvariant 019F 1C ASMDATA segment 019F FFFFFFFF 1C db -1 01A0 1C ASMDATA ends C mne FCMOVNU ; ofs=1A7h 01A0 1C ASMDATA segment 000001A0 = 1A0 1C CURROFS = $ 01A0 1C ASMDATA ends 0C73 FFFFFFA001 1C dw CURROFS - asmtab = 26D 1C MN_FCMOVNU equ $ - mnlist = "FCMOVN",'U'+80h 1C tmpstr catstr ,,,,,<+80h> 0C75 46434D4F564EFFFFFFD5 1C db "FCMOVN",'U'+80h C fpvariant 0dbh, 21, 0d8h, , ASM_MACH6 1C variant 0dbh, 21, , ASM_MACH6 01A0 2C ASMDATA segment 01A0 FFFFFFF3 2C db ASM_MACH6 = 4119 2C ainfo = (0dbh) * ASMMOD + 21 01A1 4119 2C db HIGH ainfo, LOW ainfo 01A3 2C ASMDATA ends 01A3 1C ASMDATA segment 01A3 FFFFFFD8 1C db 0d8h 01A4 1C ASMDATA ends C endvariant 01A4 1C ASMDATA segment 01A4 FFFFFFFF 1C db -1 01A5 1C ASMDATA ends C mne FCMOVNZ ; ofs=1ACh 01A5 1C ASMDATA segment 000001A5 = 1A5 1C CURROFS = $ 01A5 1C ASMDATA ends 0C7C FFFFFFA501 1C dw CURROFS - asmtab = 276 1C MN_FCMOVNZ equ $ - mnlist = "FCMOVN",'Z'+80h 1C tmpstr catstr ,,,,,<+80h> 0C7E 46434D4F564EFFFFFFDA 1C db "FCMOVN",'Z'+80h C fpvariant 0dbh, 21, 0c8h, , ASM_MACH6 1C variant 0dbh, 21, , ASM_MACH6 01A5 2C ASMDATA segment 01A5 FFFFFFF3 2C db ASM_MACH6 = 4119 2C ainfo = (0dbh) * ASMMOD + 21 01A6 4119 2C db HIGH ainfo, LOW ainfo 01A8 2C ASMDATA ends 01A8 1C ASMDATA segment 01A8 FFFFFFC8 1C db 0c8h 01A9 1C ASMDATA ends C endvariant 01A9 1C ASMDATA segment 01A9 FFFFFFFF 1C db -1 01AA 1C ASMDATA ends C mne FCMOVU ; ofs=1B1h 01AA 1C ASMDATA segment 000001AA = 1AA 1C CURROFS = $ 01AA 1C ASMDATA ends 0C85 FFFFFFAA01 1C dw CURROFS - asmtab = 27F 1C MN_FCMOVU equ $ - mnlist = "FCMOV",'U'+80h 1C tmpstr catstr ,,,,,<+80h> 0C87 46434D4F56FFFFFFD5 1C db "FCMOV",'U'+80h C fpvariant 0dah, 21, 0d8h, , ASM_MACH6 1C variant 0dah, 21, , ASM_MACH6 01AA 2C ASMDATA segment 01AA FFFFFFF3 2C db ASM_MACH6 = 40CD 2C ainfo = (0dah) * ASMMOD + 21 01AB 40FFFFFFCD 2C db HIGH ainfo, LOW ainfo 01AD 2C ASMDATA ends 01AD 1C ASMDATA segment 01AD FFFFFFD8 1C db 0d8h 01AE 1C ASMDATA ends C endvariant 01AE 1C ASMDATA segment 01AE FFFFFFFF 1C db -1 01AF 1C ASMDATA ends C mne FCMOVZ ; ofs=1B6h 01AF 1C ASMDATA segment 000001AF = 1AF 1C CURROFS = $ 01AF 1C ASMDATA ends 0C8D FFFFFFAF01 1C dw CURROFS - asmtab = 287 1C MN_FCMOVZ equ $ - mnlist = "FCMOV",'Z'+80h 1C tmpstr catstr ,,,,,<+80h> 0C8F 46434D4F56FFFFFFDA 1C db "FCMOV",'Z'+80h C fpvariant 0dah, 21, 0c8h, , ASM_MACH6 1C variant 0dah, 21, , ASM_MACH6 01AF 2C ASMDATA segment 01AF FFFFFFF3 2C db ASM_MACH6 = 40CD 2C ainfo = (0dah) * ASMMOD + 21 01B0 40FFFFFFCD 2C db HIGH ainfo, LOW ainfo 01B2 2C ASMDATA ends 01B2 1C ASMDATA segment 01B2 FFFFFFC8 1C db 0c8h 01B3 1C ASMDATA ends C endvariant 01B3 1C ASMDATA segment 01B3 FFFFFFFF 1C db -1 01B4 1C ASMDATA ends C mne FCOM ; ofs=1BBh 01B4 1C ASMDATA segment 000001B4 = 1B4 1C CURROFS = $ 01B4 1C ASMDATA ends 0C95 FFFFFFB401 1C dw CURROFS - asmtab = 28F 1C MN_FCOM equ $ - mnlist = "FCO",'M'+80h 1C tmpstr catstr ,,,,,<+80h> 0C97 46434FFFFFFFCD 1C db "FCO",'M'+80h C variant 210h, 19 01B4 1C ASMDATA segment = 9CD3 1C ainfo = (210h) * ASMMOD + 19 01B4 FFFFFF9CFFFFFFD3 1C db HIGH ainfo, LOW ainfo 01B6 1C ASMDATA ends C variant 214h, 20 01B6 1C ASMDATA segment = 9E04 1C ainfo = (214h) * ASMMOD + 20 01B6 FFFFFF9E04 1C db HIGH ainfo, LOW ainfo 01B8 1C ASMDATA ends C fpvariant 0d8h, 28, 0d0h 1C variant 0d8h, 28, , 01B8 2C ASMDATA segment = 403C 2C ainfo = (0d8h) * ASMMOD + 28 01B8 403C 2C db HIGH ainfo, LOW ainfo 01BA 2C ASMDATA ends 01BA 1C ASMDATA segment 01BA FFFFFFD0 1C db 0d0h 01BB 1C ASMDATA ends C fpvariant 0d8h, 0, 0d1h 1C variant 0d8h, 0, , 01BB 2C ASMDATA segment = 4020 2C ainfo = (0d8h) * ASMMOD + 0 01BB 4020 2C db HIGH ainfo, LOW ainfo 01BD 2C ASMDATA ends 01BD 1C ASMDATA segment 01BD FFFFFFD1 1C db 0d1h 01BE 1C ASMDATA ends C endvariant 01BE 1C ASMDATA segment 01BE FFFFFFFF 1C db -1 01BF 1C ASMDATA ends C mne FCOMI ; ofs=1C6h 01BF 1C ASMDATA segment 000001BF = 1BF 1C CURROFS = $ 01BF 1C ASMDATA ends 0C9B FFFFFFBF01 1C dw CURROFS - asmtab = 295 1C MN_FCOMI equ $ - mnlist = "FCOM",'I'+80h 1C tmpstr catstr ,,,,,<+80h> 0C9D 46434F4DFFFFFFC9 1C db "FCOM",'I'+80h C fpvariant 0dbh, 28, 0f0h, , ASM_MACH6 1C variant 0dbh, 28, , ASM_MACH6 01BF 2C ASMDATA segment 01BF FFFFFFF3 2C db ASM_MACH6 = 4120 2C ainfo = (0dbh) * ASMMOD + 28 01C0 4120 2C db HIGH ainfo, LOW ainfo 01C2 2C ASMDATA ends 01C2 1C ASMDATA segment 01C2 FFFFFFF0 1C db 0f0h 01C3 1C ASMDATA ends C fpvariant 0dbh, 0, 0f1h, , ASM_MACH6 1C variant 0dbh, 0, , ASM_MACH6 01C3 2C ASMDATA segment 01C3 FFFFFFF3 2C db ASM_MACH6 = 4104 2C ainfo = (0dbh) * ASMMOD + 0 01C4 4104 2C db HIGH ainfo, LOW ainfo 01C6 2C ASMDATA ends 01C6 1C ASMDATA segment 01C6 FFFFFFF1 1C db 0f1h 01C7 1C ASMDATA ends C endvariant 01C7 1C ASMDATA segment 01C7 FFFFFFFF 1C db -1 01C8 1C ASMDATA ends C mne FCOMIP ; ofs=1CFh 01C8 1C ASMDATA segment 000001C8 = 1C8 1C CURROFS = $ 01C8 1C ASMDATA ends 0CA2 FFFFFFC801 1C dw CURROFS - asmtab = 29C 1C MN_FCOMIP equ $ - mnlist = "FCOMI",'P'+80h 1C tmpstr catstr ,,,

,,<+80h> 0CA4 46434F4D49FFFFFFD0 1C db "FCOMI",'P'+80h C fpvariant 0dfh, 28, 0f0h, , ASM_MACH6 1C variant 0dfh, 28, , ASM_MACH6 01C8 2C ASMDATA segment 01C8 FFFFFFF3 2C db ASM_MACH6 = 4250 2C ainfo = (0dfh) * ASMMOD + 28 01C9 4250 2C db HIGH ainfo, LOW ainfo 01CB 2C ASMDATA ends 01CB 1C ASMDATA segment 01CB FFFFFFF0 1C db 0f0h 01CC 1C ASMDATA ends C fpvariant 0dfh, 0, 0f1h, , ASM_MACH6 1C variant 0dfh, 0, , ASM_MACH6 01CC 2C ASMDATA segment 01CC FFFFFFF3 2C db ASM_MACH6 = 4234 2C ainfo = (0dfh) * ASMMOD + 0 01CD 4234 2C db HIGH ainfo, LOW ainfo 01CF 2C ASMDATA ends 01CF 1C ASMDATA segment 01CF FFFFFFF1 1C db 0f1h 01D0 1C ASMDATA ends C endvariant 01D0 1C ASMDATA segment 01D0 FFFFFFFF 1C db -1 01D1 1C ASMDATA ends C mne FCOMP ; ofs=1D8h 01D1 1C ASMDATA segment 000001D1 = 1D1 1C CURROFS = $ 01D1 1C ASMDATA ends 0CAA FFFFFFD101 1C dw CURROFS - asmtab = 2A4 1C MN_FCOMP equ $ - mnlist = "FCOM",'P'+80h 1C tmpstr catstr ,,,

,,<+80h> 0CAC 46434F4DFFFFFFD0 1C db "FCOM",'P'+80h C variant 218h, 19 01D1 1C ASMDATA segment = 9F33 1C ainfo = (218h) * ASMMOD + 19 01D1 FFFFFF9F33 1C db HIGH ainfo, LOW ainfo 01D3 1C ASMDATA ends C variant 21ch, 20 01D3 1C ASMDATA segment = A064 1C ainfo = (21ch) * ASMMOD + 20 01D3 FFFFFFA064 1C db HIGH ainfo, LOW ainfo 01D5 1C ASMDATA ends C fpvariant 0d8h, 28, 0d8h 1C variant 0d8h, 28, , 01D5 2C ASMDATA segment = 403C 2C ainfo = (0d8h) * ASMMOD + 28 01D5 403C 2C db HIGH ainfo, LOW ainfo 01D7 2C ASMDATA ends 01D7 1C ASMDATA segment 01D7 FFFFFFD8 1C db 0d8h 01D8 1C ASMDATA ends C fpvariant 0d8h, 0, 0d9h 1C variant 0d8h, 0, , 01D8 2C ASMDATA segment = 4020 2C ainfo = (0d8h) * ASMMOD + 0 01D8 4020 2C db HIGH ainfo, LOW ainfo 01DA 2C ASMDATA ends 01DA 1C ASMDATA segment 01DA FFFFFFD9 1C db 0d9h 01DB 1C ASMDATA ends C endvariant 01DB 1C ASMDATA segment 01DB FFFFFFFF 1C db -1 01DC 1C ASMDATA ends C mne FCOMPP ; ofs=1E3h 01DC 1C ASMDATA segment 000001DC = 1DC 1C CURROFS = $ 01DC 1C ASMDATA ends 0CB1 FFFFFFDC01 1C dw CURROFS - asmtab = 2AB 1C MN_FCOMPP equ $ - mnlist = "FCOMP",'P'+80h 1C tmpstr catstr ,,,

,,<+80h> 0CB3 46434F4D50FFFFFFD0 1C db "FCOMP",'P'+80h C fpvariant 0deh, 0, 0d9h 1C variant 0deh, 0, , 01DC 2C ASMDATA segment = 41E8 2C ainfo = (0deh) * ASMMOD + 0 01DC 41FFFFFFE8 2C db HIGH ainfo, LOW ainfo 01DE 2C ASMDATA ends 01DE 1C ASMDATA segment 01DE FFFFFFD9 1C db 0d9h 01DF 1C ASMDATA ends C endvariant 01DF 1C ASMDATA segment 01DF FFFFFFFF 1C db -1 01E0 1C ASMDATA ends C mne FCOS ; ofs=1E7h 01E0 1C ASMDATA segment 000001E0 = 1E0 1C CURROFS = $ 01E0 1C ASMDATA ends 0CB9 FFFFFFE001 1C dw CURROFS - asmtab = 2B3 1C MN_FCOS equ $ - mnlist = "FCO",'S'+80h 1C tmpstr catstr ,,,,,<+80h> 0CBB 46434FFFFFFFD3 1C db "FCO",'S'+80h C fpvariant 0d9h, 0, 0ffh, , ASM_MACH3 1C variant 0d9h, 0, , ASM_MACH3 01E0 2C ASMDATA segment 01E0 FFFFFFF0 2C db ASM_MACH3 = 406C 2C ainfo = (0d9h) * ASMMOD + 0 01E1 406C 2C db HIGH ainfo, LOW ainfo 01E3 2C ASMDATA ends 01E3 1C ASMDATA segment 01E3 FFFFFFFF 1C db 0ffh 01E4 1C ASMDATA ends C endvariant 01E4 1C ASMDATA segment 01E4 FFFFFFFF 1C db -1 01E5 1C ASMDATA ends C mne FDECSTP ; ofs=1ECh 01E5 1C ASMDATA segment 000001E5 = 1E5 1C CURROFS = $ 01E5 1C ASMDATA ends 0CBF FFFFFFE501 1C dw CURROFS - asmtab = 2B9 1C MN_FDECSTP equ $ - mnlist = "FDECST",'P'+80h 1C tmpstr catstr ,,,

,,<+80h> 0CC1 464445435354FFFFFFD0 1C db "FDECST",'P'+80h C fpvariant 0d9h, 0, 0f6h 1C variant 0d9h, 0, , 01E5 2C ASMDATA segment = 406C 2C ainfo = (0d9h) * ASMMOD + 0 01E5 406C 2C db HIGH ainfo, LOW ainfo 01E7 2C ASMDATA ends 01E7 1C ASMDATA segment 01E7 FFFFFFF6 1C db 0f6h 01E8 1C ASMDATA ends C endvariant 01E8 1C ASMDATA segment 01E8 FFFFFFFF 1C db -1 01E9 1C ASMDATA ends C mne FDISI, ASM_WAIT ; ofs=1F0h 01E9 1C ASMDATA segment 000001E9 = 1E9 1C CURROFS = $ 01E9 FFFFFFFA 1C db ASM_WAIT 01EA 1C ASMDATA ends 0CC8 FFFFFFE901 1C dw CURROFS - asmtab = 2C2 1C MN_FDISI equ $ - mnlist = "FDIS",'I'+80h 1C tmpstr catstr ,,,,,<+80h> 0CCA 46444953FFFFFFC9 1C db "FDIS",'I'+80h C mne FNDISI ; ofs=1F1h 01EA 1C ASMDATA segment 000001EA = 1EA 1C CURROFS = $ 01EA 1C ASMDATA ends 0CCF FFFFFFEA01 1C dw CURROFS - asmtab = 2C9 1C MN_FNDISI equ $ - mnlist = "FNDIS",'I'+80h 1C tmpstr catstr ,,,,,<+80h> 0CD1 464E444953FFFFFFC9 1C db "FNDIS",'I'+80h C fpvariant 0dbh, 0, 0e1h 1C variant 0dbh, 0, , 01EA 2C ASMDATA segment = 4104 2C ainfo = (0dbh) * ASMMOD + 0 01EA 4104 2C db HIGH ainfo, LOW ainfo 01EC 2C ASMDATA ends 01EC 1C ASMDATA segment 01EC FFFFFFE1 1C db 0e1h 01ED 1C ASMDATA ends C endvariant 01ED 1C ASMDATA segment 01ED FFFFFFFF 1C db -1 01EE 1C ASMDATA ends C mne FDIV ; ofs=1F5h 01EE 1C ASMDATA segment 000001EE = 1EE 1C CURROFS = $ 01EE 1C ASMDATA ends 0CD7 FFFFFFEE01 1C dw CURROFS - asmtab = 2D1 1C MN_FDIV equ $ - mnlist = "FDI",'V'+80h 1C tmpstr catstr ,,,,,<+80h> 0CD9 464449FFFFFFD6 1C db "FDI",'V'+80h C variant 230h, 19 01EE 1C ASMDATA segment = A653 1C ainfo = (230h) * ASMMOD + 19 01EE FFFFFFA653 1C db HIGH ainfo, LOW ainfo 01F0 1C ASMDATA ends C variant 234h, 20 01F0 1C ASMDATA segment = A784 1C ainfo = (234h) * ASMMOD + 20 01F0 FFFFFFA7FFFFFF84 1C db HIGH ainfo, LOW ainfo 01F2 1C ASMDATA ends C fpvariant 0d8h, 21, 0f0h 1C variant 0d8h, 21, , 01F2 2C ASMDATA segment = 4035 2C ainfo = (0d8h) * ASMMOD + 21 01F2 4035 2C db HIGH ainfo, LOW ainfo 01F4 2C ASMDATA ends 01F4 1C ASMDATA segment 01F4 FFFFFFF0 1C db 0f0h 01F5 1C ASMDATA ends C fpvariant 0dch, 22, 0f8h 1C variant 0dch, 22, , 01F5 2C ASMDATA segment = 4166 2C ainfo = (0dch) * ASMMOD + 22 01F5 4166 2C db HIGH ainfo, LOW ainfo 01F7 2C ASMDATA ends 01F7 1C ASMDATA segment 01F7 FFFFFFF8 1C db 0f8h 01F8 1C ASMDATA ends C endvariant 01F8 1C ASMDATA segment 01F8 FFFFFFFF 1C db -1 01F9 1C ASMDATA ends C mne FDIVP ; ofs=200h 01F9 1C ASMDATA segment 000001F9 = 1F9 1C CURROFS = $ 01F9 1C ASMDATA ends 0CDD FFFFFFF901 1C dw CURROFS - asmtab = 2D7 1C MN_FDIVP equ $ - mnlist = "FDIV",'P'+80h 1C tmpstr catstr ,,,

,,<+80h> 0CDF 46444956FFFFFFD0 1C db "FDIV",'P'+80h C fpvariant 0deh, 23, 0f8h 1C variant 0deh, 23, , 01F9 2C ASMDATA segment = 41FF 2C ainfo = (0deh) * ASMMOD + 23 01F9 41FFFFFFFF 2C db HIGH ainfo, LOW ainfo 01FB 2C ASMDATA ends 01FB 1C ASMDATA segment 01FB FFFFFFF8 1C db 0f8h 01FC 1C ASMDATA ends C fpvariant 0deh, 0, 0f9h 1C variant 0deh, 0, , 01FC 2C ASMDATA segment = 41E8 2C ainfo = (0deh) * ASMMOD + 0 01FC 41FFFFFFE8 2C db HIGH ainfo, LOW ainfo 01FE 2C ASMDATA ends 01FE 1C ASMDATA segment 01FE FFFFFFF9 1C db 0f9h 01FF 1C ASMDATA ends C endvariant 01FF 1C ASMDATA segment 01FF FFFFFFFF 1C db -1 0200 1C ASMDATA ends C mne FIDIV ; ofs=207h 0200 1C ASMDATA segment 00000200 = 200 1C CURROFS = $ 0200 1C ASMDATA ends 0CE4 0002 1C dw CURROFS - asmtab = 2DE 1C MN_FIDIV equ $ - mnlist = "FIDI",'V'+80h 1C tmpstr catstr ,,,,,<+80h> 0CE6 46494449FFFFFFD6 1C db "FIDI",'V'+80h C variant 232h, 24 0200 1C ASMDATA segment = A6F0 1C ainfo = (232h) * ASMMOD + 24 0200 FFFFFFA6FFFFFFF0 1C db HIGH ainfo, LOW ainfo 0202 1C ASMDATA ends C variant 236h, 25 0202 1C ASMDATA segment = A821 1C ainfo = (236h) * ASMMOD + 25 0202 FFFFFFA821 1C db HIGH ainfo, LOW ainfo 0204 1C ASMDATA ends C endvariant 0204 1C ASMDATA segment 0204 FFFFFFFF 1C db -1 0205 1C ASMDATA ends C mne FDIVR ; ofs=20Ch 0205 1C ASMDATA segment 00000205 = 205 1C CURROFS = $ 0205 1C ASMDATA ends 0CEB 0502 1C dw CURROFS - asmtab = 2E5 1C MN_FDIVR equ $ - mnlist = "FDIV",'R'+80h 1C tmpstr catstr ,,,,,<+80h> 0CED 46444956FFFFFFD2 1C db "FDIV",'R'+80h C variant 238h, 19 0205 1C ASMDATA segment = A8B3 1C ainfo = (238h) * ASMMOD + 19 0205 FFFFFFA8FFFFFFB3 1C db HIGH ainfo, LOW ainfo 0207 1C ASMDATA ends C variant 23ch, 20 0207 1C ASMDATA segment = A9E4 1C ainfo = (23ch) * ASMMOD + 20 0207 FFFFFFA9FFFFFFE4 1C db HIGH ainfo, LOW ainfo 0209 1C ASMDATA ends C fpvariant 0d8h, 21, 0f8h 1C variant 0d8h, 21, , 0209 2C ASMDATA segment = 4035 2C ainfo = (0d8h) * ASMMOD + 21 0209 4035 2C db HIGH ainfo, LOW ainfo 020B 2C ASMDATA ends 020B 1C ASMDATA segment 020B FFFFFFF8 1C db 0f8h 020C 1C ASMDATA ends C fpvariant 0dch, 22, 0f0h 1C variant 0dch, 22, , 020C 2C ASMDATA segment = 4166 2C ainfo = (0dch) * ASMMOD + 22 020C 4166 2C db HIGH ainfo, LOW ainfo 020E 2C ASMDATA ends 020E 1C ASMDATA segment 020E FFFFFFF0 1C db 0f0h 020F 1C ASMDATA ends C endvariant 020F 1C ASMDATA segment 020F FFFFFFFF 1C db -1 0210 1C ASMDATA ends C mne FDIVRP ; ofs=217h 0210 1C ASMDATA segment 00000210 = 210 1C CURROFS = $ 0210 1C ASMDATA ends 0CF2 1002 1C dw CURROFS - asmtab = 2EC 1C MN_FDIVRP equ $ - mnlist = "FDIVR",'P'+80h 1C tmpstr catstr ,,,

,,<+80h> 0CF4 4644495652FFFFFFD0 1C db "FDIVR",'P'+80h C fpvariant 0deh, 23, 0f0h 1C variant 0deh, 23, , 0210 2C ASMDATA segment = 41FF 2C ainfo = (0deh) * ASMMOD + 23 0210 41FFFFFFFF 2C db HIGH ainfo, LOW ainfo 0212 2C ASMDATA ends 0212 1C ASMDATA segment 0212 FFFFFFF0 1C db 0f0h 0213 1C ASMDATA ends C fpvariant 0deh, 0, 0f1h 1C variant 0deh, 0, , 0213 2C ASMDATA segment = 41E8 2C ainfo = (0deh) * ASMMOD + 0 0213 41FFFFFFE8 2C db HIGH ainfo, LOW ainfo 0215 2C ASMDATA ends 0215 1C ASMDATA segment 0215 FFFFFFF1 1C db 0f1h 0216 1C ASMDATA ends C endvariant 0216 1C ASMDATA segment 0216 FFFFFFFF 1C db -1 0217 1C ASMDATA ends C mne FIDIVR ; ofs=21Eh 0217 1C ASMDATA segment 00000217 = 217 1C CURROFS = $ 0217 1C ASMDATA ends 0CFA 1702 1C dw CURROFS - asmtab = 2F4 1C MN_FIDIVR equ $ - mnlist = "FIDIV",'R'+80h 1C tmpstr catstr ,,,,,<+80h> 0CFC 4649444956FFFFFFD2 1C db "FIDIV",'R'+80h C variant 23ah, 24 0217 1C ASMDATA segment = A950 1C ainfo = (23ah) * ASMMOD + 24 0217 FFFFFFA950 1C db HIGH ainfo, LOW ainfo 0219 1C ASMDATA ends C variant 23eh, 25 0219 1C ASMDATA segment = AA81 1C ainfo = (23eh) * ASMMOD + 25 0219 FFFFFFAAFFFFFF81 1C db HIGH ainfo, LOW ainfo 021B 1C ASMDATA ends C endvariant 021B 1C ASMDATA segment 021B FFFFFFFF 1C db -1 021C 1C ASMDATA ends C mne FENI, ASM_WAIT ; ofs=223h 021C 1C ASMDATA segment 0000021C = 21C 1C CURROFS = $ 021C FFFFFFFA 1C db ASM_WAIT 021D 1C ASMDATA ends 0D02 1C02 1C dw CURROFS - asmtab = 2FC 1C MN_FENI equ $ - mnlist = "FEN",'I'+80h 1C tmpstr catstr ,,,,,<+80h> 0D04 46454EFFFFFFC9 1C db "FEN",'I'+80h C mne FNENI ; ofs=224h 021D 1C ASMDATA segment 0000021D = 21D 1C CURROFS = $ 021D 1C ASMDATA ends 0D08 1D02 1C dw CURROFS - asmtab = 302 1C MN_FNENI equ $ - mnlist = "FNEN",'I'+80h 1C tmpstr catstr ,,,,,<+80h> 0D0A 464E454EFFFFFFC9 1C db "FNEN",'I'+80h C fpvariant 0dbh, 0, 0e0h 1C variant 0dbh, 0, , 021D 2C ASMDATA segment = 4104 2C ainfo = (0dbh) * ASMMOD + 0 021D 4104 2C db HIGH ainfo, LOW ainfo 021F 2C ASMDATA ends 021F 1C ASMDATA segment 021F FFFFFFE0 1C db 0e0h 0220 1C ASMDATA ends C endvariant 0220 1C ASMDATA segment 0220 FFFFFFFF 1C db -1 0221 1C ASMDATA ends C mne FFREE ; ofs=228h 0221 1C ASMDATA segment 00000221 = 221 1C CURROFS = $ 0221 1C ASMDATA ends 0D0F 2102 1C dw CURROFS - asmtab = 309 1C MN_FFREE equ $ - mnlist = "FFRE",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 0D11 46465245FFFFFFC5 1C db "FFRE",'E'+80h C fpvariant 0ddh, 27, 0c0h 1C variant 0ddh, 27, , 0221 2C ASMDATA segment = 41B7 2C ainfo = (0ddh) * ASMMOD + 27 0221 41FFFFFFB7 2C db HIGH ainfo, LOW ainfo 0223 2C ASMDATA ends 0223 1C ASMDATA segment 0223 FFFFFFC0 1C db 0c0h 0224 1C ASMDATA ends C endvariant 0224 1C ASMDATA segment 0224 FFFFFFFF 1C db -1 0225 1C ASMDATA ends C mne FICOM ; ofs=22Ch 0225 1C ASMDATA segment 00000225 = 225 1C CURROFS = $ 0225 1C ASMDATA ends 0D16 2502 1C dw CURROFS - asmtab = 310 1C MN_FICOM equ $ - mnlist = "FICO",'M'+80h 1C tmpstr catstr ,,,,,<+80h> 0D18 4649434FFFFFFFCD 1C db "FICO",'M'+80h C variant 212h, 24 0225 1C ASMDATA segment = 9D70 1C ainfo = (212h) * ASMMOD + 24 0225 FFFFFF9D70 1C db HIGH ainfo, LOW ainfo 0227 1C ASMDATA ends C variant 216h, 25 0227 1C ASMDATA segment = 9EA1 1C ainfo = (216h) * ASMMOD + 25 0227 FFFFFF9EFFFFFFA1 1C db HIGH ainfo, LOW ainfo 0229 1C ASMDATA ends C endvariant 0229 1C ASMDATA segment 0229 FFFFFFFF 1C db -1 022A 1C ASMDATA ends C mne FICOMP ; ofs=231h 022A 1C ASMDATA segment 0000022A = 22A 1C CURROFS = $ 022A 1C ASMDATA ends 0D1D 2A02 1C dw CURROFS - asmtab = 317 1C MN_FICOMP equ $ - mnlist = "FICOM",'P'+80h 1C tmpstr catstr ,,,

,,<+80h> 0D1F 4649434F4DFFFFFFD0 1C db "FICOM",'P'+80h C variant 21ah, 24 022A 1C ASMDATA segment = 9FD0 1C ainfo = (21ah) * ASMMOD + 24 022A FFFFFF9FFFFFFFD0 1C db HIGH ainfo, LOW ainfo 022C 1C ASMDATA ends C variant 21eh, 25 022C 1C ASMDATA segment = A101 1C ainfo = (21eh) * ASMMOD + 25 022C FFFFFFA101 1C db HIGH ainfo, LOW ainfo 022E 1C ASMDATA ends C endvariant 022E 1C ASMDATA segment 022E FFFFFFFF 1C db -1 022F 1C ASMDATA ends C mne FILD ; ofs=236h 022F 1C ASMDATA segment 0000022F = 22F 1C CURROFS = $ 022F 1C ASMDATA ends 0D25 2F02 1C dw CURROFS - asmtab = 31F 1C MN_FILD equ $ - mnlist = "FIL",'D'+80h 1C tmpstr catstr ,,,,,<+80h> 0D27 46494CFFFFFFC4 1C db "FIL",'D'+80h C variant 203h, 24 022F 1C ASMDATA segment = 98FC 1C ainfo = (203h) * ASMMOD + 24 022F FFFFFF98FFFFFFFC 1C db HIGH ainfo, LOW ainfo 0231 1C ASMDATA ends C variant 207h, 25 0231 1C ASMDATA segment = 9A2D 1C ainfo = (207h) * ASMMOD + 25 0231 FFFFFF9A2D 1C db HIGH ainfo, LOW ainfo 0233 1C ASMDATA ends C variant 22fh, 15 0233 1C ASMDATA segment = A603 1C ainfo = (22fh) * ASMMOD + 15 0233 FFFFFFA603 1C db HIGH ainfo, LOW ainfo 0235 1C ASMDATA ends C endvariant 0235 1C ASMDATA segment 0235 FFFFFFFF 1C db -1 0236 1C ASMDATA ends C mne FINCSTP ; ofs=23Dh 0236 1C ASMDATA segment 00000236 = 236 1C CURROFS = $ 0236 1C ASMDATA ends 0D2B 3602 1C dw CURROFS - asmtab = 325 1C MN_FINCSTP equ $ - mnlist = "FINCST",'P'+80h 1C tmpstr catstr ,,,

,,<+80h> 0D2D 46494E435354FFFFFFD0 1C db "FINCST",'P'+80h C fpvariant 0d9h, 0, 0f7h 1C variant 0d9h, 0, , 0236 2C ASMDATA segment = 406C 2C ainfo = (0d9h) * ASMMOD + 0 0236 406C 2C db HIGH ainfo, LOW ainfo 0238 2C ASMDATA ends 0238 1C ASMDATA segment 0238 FFFFFFF7 1C db 0f7h 0239 1C ASMDATA ends C endvariant 0239 1C ASMDATA segment 0239 FFFFFFFF 1C db -1 023A 1C ASMDATA ends C mne FINIT, ASM_WAIT ; ofs=241h 023A 1C ASMDATA segment 0000023A = 23A 1C CURROFS = $ 023A FFFFFFFA 1C db ASM_WAIT 023B 1C ASMDATA ends 0D34 3A02 1C dw CURROFS - asmtab = 32E 1C MN_FINIT equ $ - mnlist = "FINI",'T'+80h 1C tmpstr catstr ,,,,,<+80h> 0D36 46494E49FFFFFFD4 1C db "FINI",'T'+80h C mne FNINIT ; ofs=242h 023B 1C ASMDATA segment 0000023B = 23B 1C CURROFS = $ 023B 1C ASMDATA ends 0D3B 3B02 1C dw CURROFS - asmtab = 335 1C MN_FNINIT equ $ - mnlist = "FNINI",'T'+80h 1C tmpstr catstr ,,,,,<+80h> 0D3D 464E494E49FFFFFFD4 1C db "FNINI",'T'+80h C fpvariant 0dbh, 0, 0e3h 1C variant 0dbh, 0, , 023B 2C ASMDATA segment = 4104 2C ainfo = (0dbh) * ASMMOD + 0 023B 4104 2C db HIGH ainfo, LOW ainfo 023D 2C ASMDATA ends 023D 1C ASMDATA segment 023D FFFFFFE3 1C db 0e3h 023E 1C ASMDATA ends C endvariant 023E 1C ASMDATA segment 023E FFFFFFFF 1C db -1 023F 1C ASMDATA ends C mne FIST ; ofs=246h 023F 1C ASMDATA segment 0000023F = 23F 1C CURROFS = $ 023F 1C ASMDATA ends 0D43 3F02 1C dw CURROFS - asmtab = 33D 1C MN_FIST equ $ - mnlist = "FIS",'T'+80h 1C tmpstr catstr ,,,,,<+80h> 0D45 464953FFFFFFD4 1C db "FIS",'T'+80h C variant 213h, 24 023F 1C ASMDATA segment = 9DBC 1C ainfo = (213h) * ASMMOD + 24 023F FFFFFF9DFFFFFFBC 1C db HIGH ainfo, LOW ainfo 0241 1C ASMDATA ends C variant 217h, 25 0241 1C ASMDATA segment = 9EED 1C ainfo = (217h) * ASMMOD + 25 0241 FFFFFF9EFFFFFFED 1C db HIGH ainfo, LOW ainfo 0243 1C ASMDATA ends C endvariant 0243 1C ASMDATA segment 0243 FFFFFFFF 1C db -1 0244 1C ASMDATA ends C mne FISTP ; ofs=24Bh 0244 1C ASMDATA segment 00000244 = 244 1C CURROFS = $ 0244 1C ASMDATA ends 0D49 4402 1C dw CURROFS - asmtab = 343 1C MN_FISTP equ $ - mnlist = "FIST",'P'+80h 1C tmpstr catstr ,,,

,,<+80h> 0D4B 46495354FFFFFFD0 1C db "FIST",'P'+80h C variant 21bh, 24 0244 1C ASMDATA segment = A01C 1C ainfo = (21bh) * ASMMOD + 24 0244 FFFFFFA01C 1C db HIGH ainfo, LOW ainfo 0246 1C ASMDATA ends C variant 21fh, 25 0246 1C ASMDATA segment = A14D 1C ainfo = (21fh) * ASMMOD + 25 0246 FFFFFFA14D 1C db HIGH ainfo, LOW ainfo 0248 1C ASMDATA ends C variant 23fh, 15 0248 1C ASMDATA segment = AAC3 1C ainfo = (23fh) * ASMMOD + 15 0248 FFFFFFAAFFFFFFC3 1C db HIGH ainfo, LOW ainfo 024A 1C ASMDATA ends C endvariant 024A 1C ASMDATA segment 024A FFFFFFFF 1C db -1 024B 1C ASMDATA ends C mne FLD ; ofs=252h 024B 1C ASMDATA segment 0000024B = 24B 1C CURROFS = $ 024B 1C ASMDATA ends 0D50 4B02 1C dw CURROFS - asmtab = 34A 1C MN_FLD equ $ - mnlist = "FL",'D'+80h 1C tmpstr catstr ,,,,,<+80h> 0D52 464CFFFFFFC4 1C db "FL",'D'+80h C variant 201h, 19 024B 1C ASMDATA segment = 985F 1C ainfo = (201h) * ASMMOD + 19 024B FFFFFF985F 1C db HIGH ainfo, LOW ainfo 024D 1C ASMDATA ends C variant 205h, 20 024D 1C ASMDATA segment = 9990 1C ainfo = (205h) * ASMMOD + 20 024D FFFFFF99FFFFFF90 1C db HIGH ainfo, LOW ainfo 024F 1C ASMDATA ends C variant 22bh, 26 024F 1C ASMDATA segment = A4DE 1C ainfo = (22bh) * ASMMOD + 26 024F FFFFFFA4FFFFFFDE 1C db HIGH ainfo, LOW ainfo 0251 1C ASMDATA ends C fpvariant 0d9h, 27, 0c0h 1C variant 0d9h, 27, , 0251 2C ASMDATA segment = 4087 2C ainfo = (0d9h) * ASMMOD + 27 0251 40FFFFFF87 2C db HIGH ainfo, LOW ainfo 0253 2C ASMDATA ends 0253 1C ASMDATA segment 0253 FFFFFFC0 1C db 0c0h 0254 1C ASMDATA ends C endvariant 0254 1C ASMDATA segment 0254 FFFFFFFF 1C db -1 0255 1C ASMDATA ends C mne FLD1 ; ofs=25Ch 0255 1C ASMDATA segment 00000255 = 255 1C CURROFS = $ 0255 1C ASMDATA ends 0D55 5502 1C dw CURROFS - asmtab = 34F 1C MN_FLD1 equ $ - mnlist = "FLD",'1'+80h 1C tmpstr catstr ,,,<1>,,<+80h> 0D57 464C44FFFFFFB1 1C db "FLD",'1'+80h C fpvariant 0d9h, 0, 0e8h 1C variant 0d9h, 0, , 0255 2C ASMDATA segment = 406C 2C ainfo = (0d9h) * ASMMOD + 0 0255 406C 2C db HIGH ainfo, LOW ainfo 0257 2C ASMDATA ends 0257 1C ASMDATA segment 0257 FFFFFFE8 1C db 0e8h 0258 1C ASMDATA ends C endvariant 0258 1C ASMDATA segment 0258 FFFFFFFF 1C db -1 0259 1C ASMDATA ends C mne FLDL2T ; ofs=260h 0259 1C ASMDATA segment 00000259 = 259 1C CURROFS = $ 0259 1C ASMDATA ends 0D5B 5902 1C dw CURROFS - asmtab = 355 1C MN_FLDL2T equ $ - mnlist = "FLDL2",'T'+80h 1C tmpstr catstr ,,,,,<+80h> 0D5D 464C444C32FFFFFFD4 1C db "FLDL2",'T'+80h C fpvariant 0d9h, 0, 0e9h 1C variant 0d9h, 0, , 0259 2C ASMDATA segment = 406C 2C ainfo = (0d9h) * ASMMOD + 0 0259 406C 2C db HIGH ainfo, LOW ainfo 025B 2C ASMDATA ends 025B 1C ASMDATA segment 025B FFFFFFE9 1C db 0e9h 025C 1C ASMDATA ends C endvariant 025C 1C ASMDATA segment 025C FFFFFFFF 1C db -1 025D 1C ASMDATA ends C mne FLDL2E ; ofs=264h 025D 1C ASMDATA segment 0000025D = 25D 1C CURROFS = $ 025D 1C ASMDATA ends 0D63 5D02 1C dw CURROFS - asmtab = 35D 1C MN_FLDL2E equ $ - mnlist = "FLDL2",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 0D65 464C444C32FFFFFFC5 1C db "FLDL2",'E'+80h C fpvariant 0d9h, 0, 0eah 1C variant 0d9h, 0, , 025D 2C ASMDATA segment = 406C 2C ainfo = (0d9h) * ASMMOD + 0 025D 406C 2C db HIGH ainfo, LOW ainfo 025F 2C ASMDATA ends 025F 1C ASMDATA segment 025F FFFFFFEA 1C db 0eah 0260 1C ASMDATA ends C endvariant 0260 1C ASMDATA segment 0260 FFFFFFFF 1C db -1 0261 1C ASMDATA ends C mne FLDPI ; ofs=268h 0261 1C ASMDATA segment 00000261 = 261 1C CURROFS = $ 0261 1C ASMDATA ends 0D6B 6102 1C dw CURROFS - asmtab = 365 1C MN_FLDPI equ $ - mnlist = "FLDP",'I'+80h 1C tmpstr catstr ,,,,,<+80h> 0D6D 464C4450FFFFFFC9 1C db "FLDP",'I'+80h C fpvariant 0d9h, 0, 0ebh 1C variant 0d9h, 0, , 0261 2C ASMDATA segment = 406C 2C ainfo = (0d9h) * ASMMOD + 0 0261 406C 2C db HIGH ainfo, LOW ainfo 0263 2C ASMDATA ends 0263 1C ASMDATA segment 0263 FFFFFFEB 1C db 0ebh 0264 1C ASMDATA ends C endvariant 0264 1C ASMDATA segment 0264 FFFFFFFF 1C db -1 0265 1C ASMDATA ends C mne FLDLG2 ; ofs=26Ch 0265 1C ASMDATA segment 00000265 = 265 1C CURROFS = $ 0265 1C ASMDATA ends 0D72 6502 1C dw CURROFS - asmtab = 36C 1C MN_FLDLG2 equ $ - mnlist = "FLDLG",'2'+80h 1C tmpstr catstr ,,,<2>,,<+80h> 0D74 464C444C47FFFFFFB2 1C db "FLDLG",'2'+80h C fpvariant 0d9h, 0, 0ech 1C variant 0d9h, 0, , 0265 2C ASMDATA segment = 406C 2C ainfo = (0d9h) * ASMMOD + 0 0265 406C 2C db HIGH ainfo, LOW ainfo 0267 2C ASMDATA ends 0267 1C ASMDATA segment 0267 FFFFFFEC 1C db 0ech 0268 1C ASMDATA ends C endvariant 0268 1C ASMDATA segment 0268 FFFFFFFF 1C db -1 0269 1C ASMDATA ends C mne FLDLN2 ; ofs=270h 0269 1C ASMDATA segment 00000269 = 269 1C CURROFS = $ 0269 1C ASMDATA ends 0D7A 6902 1C dw CURROFS - asmtab = 374 1C MN_FLDLN2 equ $ - mnlist = "FLDLN",'2'+80h 1C tmpstr catstr ,,,<2>,,<+80h> 0D7C 464C444C4EFFFFFFB2 1C db "FLDLN",'2'+80h C fpvariant 0d9h, 0, 0edh 1C variant 0d9h, 0, , 0269 2C ASMDATA segment = 406C 2C ainfo = (0d9h) * ASMMOD + 0 0269 406C 2C db HIGH ainfo, LOW ainfo 026B 2C ASMDATA ends 026B 1C ASMDATA segment 026B FFFFFFED 1C db 0edh 026C 1C ASMDATA ends C endvariant 026C 1C ASMDATA segment 026C FFFFFFFF 1C db -1 026D 1C ASMDATA ends C mne FLDZ ; ofs=274h 026D 1C ASMDATA segment 0000026D = 26D 1C CURROFS = $ 026D 1C ASMDATA ends 0D82 6D02 1C dw CURROFS - asmtab = 37C 1C MN_FLDZ equ $ - mnlist = "FLD",'Z'+80h 1C tmpstr catstr ,,,,,<+80h> 0D84 464C44FFFFFFDA 1C db "FLD",'Z'+80h C fpvariant 0d9h, 0, 0eeh 1C variant 0d9h, 0, , 026D 2C ASMDATA segment = 406C 2C ainfo = (0d9h) * ASMMOD + 0 026D 406C 2C db HIGH ainfo, LOW ainfo 026F 2C ASMDATA ends 026F 1C ASMDATA segment 026F FFFFFFEE 1C db 0eeh 0270 1C ASMDATA ends C endvariant 0270 1C ASMDATA segment 0270 FFFFFFFF 1C db -1 0271 1C ASMDATA ends C mne FLDCW, ASM_WAIT ; ofs=278h 0271 1C ASMDATA segment 00000271 = 271 1C CURROFS = $ 0271 FFFFFFFA 1C db ASM_WAIT 0272 1C ASMDATA ends 0D88 7102 1C dw CURROFS - asmtab = 382 1C MN_FLDCW equ $ - mnlist = "FLDC",'W'+80h 1C tmpstr catstr ,,,,,<+80h> 0D8A 464C4443FFFFFFD7 1C db "FLDC",'W'+80h C mne FNLDCW ; ofs=279h 0272 1C ASMDATA segment 00000272 = 272 1C CURROFS = $ 0272 1C ASMDATA ends 0D8F 7202 1C dw CURROFS - asmtab = 389 1C MN_FNLDCW equ $ - mnlist = "FNLDC",'W'+80h 1C tmpstr catstr ,,,,,<+80h> 0D91 464E4C4443FFFFFFD7 1C db "FNLDC",'W'+80h C variant 229h, 25 0272 1C ASMDATA segment = A445 1C ainfo = (229h) * ASMMOD + 25 0272 FFFFFFA445 1C db HIGH ainfo, LOW ainfo 0274 1C ASMDATA ends C endvariant 0274 1C ASMDATA segment 0274 FFFFFFFF 1C db -1 0275 1C ASMDATA ends C mne FLDENV ; ofs=27Ch 0275 1C ASMDATA segment 00000275 = 275 1C CURROFS = $ 0275 1C ASMDATA ends 0D97 7502 1C dw CURROFS - asmtab = 391 1C MN_FLDENV equ $ - mnlist = "FLDEN",'V'+80h 1C tmpstr catstr ,,,,,<+80h> 0D99 464C44454EFFFFFFD6 1C db "FLDEN",'V'+80h C variant 221h, 29 0275 1C ASMDATA segment = A1E9 1C ainfo = (221h) * ASMMOD + 29 0275 FFFFFFA1FFFFFFE9 1C db HIGH ainfo, LOW ainfo 0277 1C ASMDATA ends C endvariant 0277 1C ASMDATA segment 0277 FFFFFFFF 1C db -1 0278 1C ASMDATA ends C mne FLDENVW, ASM_D16 ; ofs=27Fh 0278 1C ASMDATA segment 00000278 = 278 1C CURROFS = $ 0278 FFFFFFF8 1C db ASM_D16 0279 1C ASMDATA ends 0D9F 7802 1C dw CURROFS - asmtab = 399 1C MN_FLDENVW equ $ - mnlist = "FLDENV",'W'+80h 1C tmpstr catstr ,,,,,<+80h> 0DA1 464C44454E56FFFFFFD7 1C db "FLDENV",'W'+80h C mne FLDENVD, ASM_D32 ; ofs=280h 0279 1C ASMDATA segment 00000279 = 279 1C CURROFS = $ 0279 FFFFFFF9 1C db ASM_D32 027A 1C ASMDATA ends 0DA8 7902 1C dw CURROFS - asmtab = 3A2 1C MN_FLDENVD equ $ - mnlist = "FLDENV",'D'+80h 1C tmpstr catstr ,,,,,<+80h> 0DAA 464C44454E56FFFFFFC4 1C db "FLDENV",'D'+80h C variant 221h, 29 027A 1C ASMDATA segment = A1E9 1C ainfo = (221h) * ASMMOD + 29 027A FFFFFFA1FFFFFFE9 1C db HIGH ainfo, LOW ainfo 027C 1C ASMDATA ends C endvariant 027C 1C ASMDATA segment 027C FFFFFFFF 1C db -1 027D 1C ASMDATA ends C mne FMUL ; ofs=284h 027D 1C ASMDATA segment 0000027D = 27D 1C CURROFS = $ 027D 1C ASMDATA ends 0DB1 7D02 1C dw CURROFS - asmtab = 3AB 1C MN_FMUL equ $ - mnlist = "FMU",'L'+80h 1C tmpstr catstr ,,,,,<+80h> 0DB3 464D55FFFFFFCC 1C db "FMU",'L'+80h C variant 208h, 19 027D 1C ASMDATA segment = 9A73 1C ainfo = (208h) * ASMMOD + 19 027D FFFFFF9A73 1C db HIGH ainfo, LOW ainfo 027F 1C ASMDATA ends C variant 20ch, 20 027F 1C ASMDATA segment = 9BA4 1C ainfo = (20ch) * ASMMOD + 20 027F FFFFFF9BFFFFFFA4 1C db HIGH ainfo, LOW ainfo 0281 1C ASMDATA ends C fpvariant 0d8h, 21, 0c8h 1C variant 0d8h, 21, , 0281 2C ASMDATA segment = 4035 2C ainfo = (0d8h) * ASMMOD + 21 0281 4035 2C db HIGH ainfo, LOW ainfo 0283 2C ASMDATA ends 0283 1C ASMDATA segment 0283 FFFFFFC8 1C db 0c8h 0284 1C ASMDATA ends C fpvariant 0dch, 22, 0c8h 1C variant 0dch, 22, , 0284 2C ASMDATA segment = 4166 2C ainfo = (0dch) * ASMMOD + 22 0284 4166 2C db HIGH ainfo, LOW ainfo 0286 2C ASMDATA ends 0286 1C ASMDATA segment 0286 FFFFFFC8 1C db 0c8h 0287 1C ASMDATA ends C endvariant 0287 1C ASMDATA segment 0287 FFFFFFFF 1C db -1 0288 1C ASMDATA ends C mne FMULP ; ofs=28Fh 0288 1C ASMDATA segment 00000288 = 288 1C CURROFS = $ 0288 1C ASMDATA ends 0DB7 FFFFFF8802 1C dw CURROFS - asmtab = 3B1 1C MN_FMULP equ $ - mnlist = "FMUL",'P'+80h 1C tmpstr catstr ,,,

,,<+80h> 0DB9 464D554CFFFFFFD0 1C db "FMUL",'P'+80h C fpvariant 0deh, 23, 0c8h 1C variant 0deh, 23, , 0288 2C ASMDATA segment = 41FF 2C ainfo = (0deh) * ASMMOD + 23 0288 41FFFFFFFF 2C db HIGH ainfo, LOW ainfo 028A 2C ASMDATA ends 028A 1C ASMDATA segment 028A FFFFFFC8 1C db 0c8h 028B 1C ASMDATA ends C fpvariant 0deh, 0, 0c9h 1C variant 0deh, 0, , 028B 2C ASMDATA segment = 41E8 2C ainfo = (0deh) * ASMMOD + 0 028B 41FFFFFFE8 2C db HIGH ainfo, LOW ainfo 028D 2C ASMDATA ends 028D 1C ASMDATA segment 028D FFFFFFC9 1C db 0c9h 028E 1C ASMDATA ends C endvariant 028E 1C ASMDATA segment 028E FFFFFFFF 1C db -1 028F 1C ASMDATA ends C mne FIMUL ; ofs=296h 028F 1C ASMDATA segment 0000028F = 28F 1C CURROFS = $ 028F 1C ASMDATA ends 0DBE FFFFFF8F02 1C dw CURROFS - asmtab = 3B8 1C MN_FIMUL equ $ - mnlist = "FIMU",'L'+80h 1C tmpstr catstr ,,,,,<+80h> 0DC0 46494D55FFFFFFCC 1C db "FIMU",'L'+80h C variant 20ah, 24 028F 1C ASMDATA segment = 9B10 1C ainfo = (20ah) * ASMMOD + 24 028F FFFFFF9B10 1C db HIGH ainfo, LOW ainfo 0291 1C ASMDATA ends C variant 20eh, 25 0291 1C ASMDATA segment = 9C41 1C ainfo = (20eh) * ASMMOD + 25 0291 FFFFFF9C41 1C db HIGH ainfo, LOW ainfo 0293 1C ASMDATA ends C endvariant 0293 1C ASMDATA segment 0293 FFFFFFFF 1C db -1 0294 1C ASMDATA ends C mne FNOP ; ofs=29Bh 0294 1C ASMDATA segment 00000294 = 294 1C CURROFS = $ 0294 1C ASMDATA ends 0DC5 FFFFFF9402 1C dw CURROFS - asmtab = 3BF 1C MN_FNOP equ $ - mnlist = "FNO",'P'+80h 1C tmpstr catstr ,,,

,,<+80h> 0DC7 464E4FFFFFFFD0 1C db "FNO",'P'+80h C fpvariant 0d9h, 0, 0d0h 1C variant 0d9h, 0, , 0294 2C ASMDATA segment = 406C 2C ainfo = (0d9h) * ASMMOD + 0 0294 406C 2C db HIGH ainfo, LOW ainfo 0296 2C ASMDATA ends 0296 1C ASMDATA segment 0296 FFFFFFD0 1C db 0d0h 0297 1C ASMDATA ends C endvariant 0297 1C ASMDATA segment 0297 FFFFFFFF 1C db -1 0298 1C ASMDATA ends C mne FPATAN ; ofs=29Fh 0298 1C ASMDATA segment 00000298 = 298 1C CURROFS = $ 0298 1C ASMDATA ends 0DCB FFFFFF9802 1C dw CURROFS - asmtab = 3C5 1C MN_FPATAN equ $ - mnlist = "FPATA",'N'+80h 1C tmpstr catstr ,,,,,<+80h> 0DCD 4650415441FFFFFFCE 1C db "FPATA",'N'+80h C fpvariant 0d9h, 0, 0f3h 1C variant 0d9h, 0, , 0298 2C ASMDATA segment = 406C 2C ainfo = (0d9h) * ASMMOD + 0 0298 406C 2C db HIGH ainfo, LOW ainfo 029A 2C ASMDATA ends 029A 1C ASMDATA segment 029A FFFFFFF3 1C db 0f3h 029B 1C ASMDATA ends C endvariant 029B 1C ASMDATA segment 029B FFFFFFFF 1C db -1 029C 1C ASMDATA ends C mne FPREM ; ofs=2A3h 029C 1C ASMDATA segment 0000029C = 29C 1C CURROFS = $ 029C 1C ASMDATA ends 0DD3 FFFFFF9C02 1C dw CURROFS - asmtab = 3CD 1C MN_FPREM equ $ - mnlist = "FPRE",'M'+80h 1C tmpstr catstr ,,,,,<+80h> 0DD5 46505245FFFFFFCD 1C db "FPRE",'M'+80h C fpvariant 0d9h, 0, 0f8h 1C variant 0d9h, 0, , 029C 2C ASMDATA segment = 406C 2C ainfo = (0d9h) * ASMMOD + 0 029C 406C 2C db HIGH ainfo, LOW ainfo 029E 2C ASMDATA ends 029E 1C ASMDATA segment 029E FFFFFFF8 1C db 0f8h 029F 1C ASMDATA ends C endvariant 029F 1C ASMDATA segment 029F FFFFFFFF 1C db -1 02A0 1C ASMDATA ends C mne FPREM1 ; ofs=2A7h 02A0 1C ASMDATA segment 000002A0 = 2A0 1C CURROFS = $ 02A0 1C ASMDATA ends 0DDA FFFFFFA002 1C dw CURROFS - asmtab = 3D4 1C MN_FPREM1 equ $ - mnlist = "FPREM",'1'+80h 1C tmpstr catstr ,,,<1>,,<+80h> 0DDC 465052454DFFFFFFB1 1C db "FPREM",'1'+80h C fpvariant 0d9h, 0, 0f5h, , ASM_MACH3 1C variant 0d9h, 0, , ASM_MACH3 02A0 2C ASMDATA segment 02A0 FFFFFFF0 2C db ASM_MACH3 = 406C 2C ainfo = (0d9h) * ASMMOD + 0 02A1 406C 2C db HIGH ainfo, LOW ainfo 02A3 2C ASMDATA ends 02A3 1C ASMDATA segment 02A3 FFFFFFF5 1C db 0f5h 02A4 1C ASMDATA ends C endvariant 02A4 1C ASMDATA segment 02A4 FFFFFFFF 1C db -1 02A5 1C ASMDATA ends C mne FPTAN ; ofs=2ACh 02A5 1C ASMDATA segment 000002A5 = 2A5 1C CURROFS = $ 02A5 1C ASMDATA ends 0DE2 FFFFFFA502 1C dw CURROFS - asmtab = 3DC 1C MN_FPTAN equ $ - mnlist = "FPTA",'N'+80h 1C tmpstr catstr ,,,,,<+80h> 0DE4 46505441FFFFFFCE 1C db "FPTA",'N'+80h C fpvariant 0d9h, 0, 0f2h 1C variant 0d9h, 0, , 02A5 2C ASMDATA segment = 406C 2C ainfo = (0d9h) * ASMMOD + 0 02A5 406C 2C db HIGH ainfo, LOW ainfo 02A7 2C ASMDATA ends 02A7 1C ASMDATA segment 02A7 FFFFFFF2 1C db 0f2h 02A8 1C ASMDATA ends C endvariant 02A8 1C ASMDATA segment 02A8 FFFFFFFF 1C db -1 02A9 1C ASMDATA ends C mne FRNDINT ; ofs=2B0h 02A9 1C ASMDATA segment 000002A9 = 2A9 1C CURROFS = $ 02A9 1C ASMDATA ends 0DE9 FFFFFFA902 1C dw CURROFS - asmtab = 3E3 1C MN_FRNDINT equ $ - mnlist = "FRNDIN",'T'+80h 1C tmpstr catstr ,,,,,<+80h> 0DEB 46524E44494EFFFFFFD4 1C db "FRNDIN",'T'+80h C fpvariant 0d9h, 0, 0fch 1C variant 0d9h, 0, , 02A9 2C ASMDATA segment = 406C 2C ainfo = (0d9h) * ASMMOD + 0 02A9 406C 2C db HIGH ainfo, LOW ainfo 02AB 2C ASMDATA ends 02AB 1C ASMDATA segment 02AB FFFFFFFC 1C db 0fch 02AC 1C ASMDATA ends C endvariant 02AC 1C ASMDATA segment 02AC FFFFFFFF 1C db -1 02AD 1C ASMDATA ends C mne FRSTOR ; ofs=2B4h 02AD 1C ASMDATA segment 000002AD = 2AD 1C CURROFS = $ 02AD 1C ASMDATA ends 0DF2 FFFFFFAD02 1C dw CURROFS - asmtab = 3EC 1C MN_FRSTOR equ $ - mnlist = "FRSTO",'R'+80h 1C tmpstr catstr ,,,,,<+80h> 0DF4 465253544FFFFFFFD2 1C db "FRSTO",'R'+80h C variant 225h, 29 02AD 1C ASMDATA segment = A319 1C ainfo = (225h) * ASMMOD + 29 02AD FFFFFFA319 1C db HIGH ainfo, LOW ainfo 02AF 1C ASMDATA ends C endvariant 02AF 1C ASMDATA segment 02AF FFFFFFFF 1C db -1 02B0 1C ASMDATA ends C mne FRSTORW, ASM_D16 ; ofs=2B7h 02B0 1C ASMDATA segment 000002B0 = 2B0 1C CURROFS = $ 02B0 FFFFFFF8 1C db ASM_D16 02B1 1C ASMDATA ends 0DFA FFFFFFB002 1C dw CURROFS - asmtab = 3F4 1C MN_FRSTORW equ $ - mnlist = "FRSTOR",'W'+80h 1C tmpstr catstr ,,,,,<+80h> 0DFC 465253544F52FFFFFFD7 1C db "FRSTOR",'W'+80h C mne FRSTORD, ASM_D32 ; ofs=2B8h 02B1 1C ASMDATA segment 000002B1 = 2B1 1C CURROFS = $ 02B1 FFFFFFF9 1C db ASM_D32 02B2 1C ASMDATA ends 0E03 FFFFFFB102 1C dw CURROFS - asmtab = 3FD 1C MN_FRSTORD equ $ - mnlist = "FRSTOR",'D'+80h 1C tmpstr catstr ,,,,,<+80h> 0E05 465253544F52FFFFFFC4 1C db "FRSTOR",'D'+80h C variant 225h, 29 02B2 1C ASMDATA segment = A319 1C ainfo = (225h) * ASMMOD + 29 02B2 FFFFFFA319 1C db HIGH ainfo, LOW ainfo 02B4 1C ASMDATA ends C endvariant 02B4 1C ASMDATA segment 02B4 FFFFFFFF 1C db -1 02B5 1C ASMDATA ends C mne FSAVE, ASM_WAIT ; ofs=2BCh 02B5 1C ASMDATA segment 000002B5 = 2B5 1C CURROFS = $ 02B5 FFFFFFFA 1C db ASM_WAIT 02B6 1C ASMDATA ends 0E0C FFFFFFB502 1C dw CURROFS - asmtab = 406 1C MN_FSAVE equ $ - mnlist = "FSAV",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 0E0E 46534156FFFFFFC5 1C db "FSAV",'E'+80h C mne FNSAVE ; ofs=2BDh 02B6 1C ASMDATA segment 000002B6 = 2B6 1C CURROFS = $ 02B6 1C ASMDATA ends 0E13 FFFFFFB602 1C dw CURROFS - asmtab = 40D 1C MN_FNSAVE equ $ - mnlist = "FNSAV",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 0E15 464E534156FFFFFFC5 1C db "FNSAV",'E'+80h C variant 235h, 29 02B6 1C ASMDATA segment = A7D9 1C ainfo = (235h) * ASMMOD + 29 02B6 FFFFFFA7FFFFFFD9 1C db HIGH ainfo, LOW ainfo 02B8 1C ASMDATA ends C endvariant 02B8 1C ASMDATA segment 02B8 FFFFFFFF 1C db -1 02B9 1C ASMDATA ends C mne FSAVEW, ASM_D16 ; ofs=2C0h 02B9 1C ASMDATA segment 000002B9 = 2B9 1C CURROFS = $ 02B9 FFFFFFF8 1C db ASM_D16 02BA 1C ASMDATA ends 0E1B FFFFFFB902 1C dw CURROFS - asmtab = 415 1C MN_FSAVEW equ $ - mnlist = "FSAVE",'W'+80h 1C tmpstr catstr ,,,,,<+80h> 0E1D 4653415645FFFFFFD7 1C db "FSAVE",'W'+80h C mne FSAVED, ASM_D32 ; ofs=2C1h 02BA 1C ASMDATA segment 000002BA = 2BA 1C CURROFS = $ 02BA FFFFFFF9 1C db ASM_D32 02BB 1C ASMDATA ends 0E23 FFFFFFBA02 1C dw CURROFS - asmtab = 41D 1C MN_FSAVED equ $ - mnlist = "FSAVE",'D'+80h 1C tmpstr catstr ,,,,,<+80h> 0E25 4653415645FFFFFFC4 1C db "FSAVE",'D'+80h C variant 235h, 29 02BB 1C ASMDATA segment = A7D9 1C ainfo = (235h) * ASMMOD + 29 02BB FFFFFFA7FFFFFFD9 1C db HIGH ainfo, LOW ainfo 02BD 1C ASMDATA ends C endvariant 02BD 1C ASMDATA segment 02BD FFFFFFFF 1C db -1 02BE 1C ASMDATA ends C mne FSCALE ; ofs=2C5h 02BE 1C ASMDATA segment 000002BE = 2BE 1C CURROFS = $ 02BE 1C ASMDATA ends 0E2B FFFFFFBE02 1C dw CURROFS - asmtab = 425 1C MN_FSCALE equ $ - mnlist = "FSCAL",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 0E2D 465343414CFFFFFFC5 1C db "FSCAL",'E'+80h C fpvariant 0d9h, 0, 0fdh 1C variant 0d9h, 0, , 02BE 2C ASMDATA segment = 406C 2C ainfo = (0d9h) * ASMMOD + 0 02BE 406C 2C db HIGH ainfo, LOW ainfo 02C0 2C ASMDATA ends 02C0 1C ASMDATA segment 02C0 FFFFFFFD 1C db 0fdh 02C1 1C ASMDATA ends C endvariant 02C1 1C ASMDATA segment 02C1 FFFFFFFF 1C db -1 02C2 1C ASMDATA ends C mne FSETPM, ASM_WAIT ; ofs=2C9h 02C2 1C ASMDATA segment 000002C2 = 2C2 1C CURROFS = $ 02C2 FFFFFFFA 1C db ASM_WAIT 02C3 1C ASMDATA ends 0E33 FFFFFFC202 1C dw CURROFS - asmtab = 42D 1C MN_FSETPM equ $ - mnlist = "FSETP",'M'+80h 1C tmpstr catstr ,,,,,<+80h> 0E35 4653455450FFFFFFCD 1C db "FSETP",'M'+80h C mne FNSETPM ; ofs=2CAh 02C3 1C ASMDATA segment 000002C3 = 2C3 1C CURROFS = $ 02C3 1C ASMDATA ends 0E3B FFFFFFC302 1C dw CURROFS - asmtab = 435 1C MN_FNSETPM equ $ - mnlist = "FNSETP",'M'+80h 1C tmpstr catstr ,,,,,<+80h> 0E3D 464E53455450FFFFFFCD 1C db "FNSETP",'M'+80h C fpvariant 0dbh, 0, 0e4h, , ASM_MACH2 1C variant 0dbh, 0, , ASM_MACH2 02C3 2C ASMDATA segment 02C3 FFFFFFEF 2C db ASM_MACH2 = 4104 2C ainfo = (0dbh) * ASMMOD + 0 02C4 4104 2C db HIGH ainfo, LOW ainfo 02C6 2C ASMDATA ends 02C6 1C ASMDATA segment 02C6 FFFFFFE4 1C db 0e4h 02C7 1C ASMDATA ends C endvariant 02C7 1C ASMDATA segment 02C7 FFFFFFFF 1C db -1 02C8 1C ASMDATA ends C mne FSIN ; ofs=2CFh 02C8 1C ASMDATA segment 000002C8 = 2C8 1C CURROFS = $ 02C8 1C ASMDATA ends 0E44 FFFFFFC802 1C dw CURROFS - asmtab = 43E 1C MN_FSIN equ $ - mnlist = "FSI",'N'+80h 1C tmpstr catstr ,,,,,<+80h> 0E46 465349FFFFFFCE 1C db "FSI",'N'+80h C fpvariant 0d9h, 0, 0feh, , ASM_MACH3 1C variant 0d9h, 0, , ASM_MACH3 02C8 2C ASMDATA segment 02C8 FFFFFFF0 2C db ASM_MACH3 = 406C 2C ainfo = (0d9h) * ASMMOD + 0 02C9 406C 2C db HIGH ainfo, LOW ainfo 02CB 2C ASMDATA ends 02CB 1C ASMDATA segment 02CB FFFFFFFE 1C db 0feh 02CC 1C ASMDATA ends C endvariant 02CC 1C ASMDATA segment 02CC FFFFFFFF 1C db -1 02CD 1C ASMDATA ends C mne FSINCOS ; ofs=2D4h 02CD 1C ASMDATA segment 000002CD = 2CD 1C CURROFS = $ 02CD 1C ASMDATA ends 0E4A FFFFFFCD02 1C dw CURROFS - asmtab = 444 1C MN_FSINCOS equ $ - mnlist = "FSINCO",'S'+80h 1C tmpstr catstr ,,,,,<+80h> 0E4C 4653494E434FFFFFFFD3 1C db "FSINCO",'S'+80h C fpvariant 0d9h, 0, 0fbh, , ASM_MACH3 1C variant 0d9h, 0, , ASM_MACH3 02CD 2C ASMDATA segment 02CD FFFFFFF0 2C db ASM_MACH3 = 406C 2C ainfo = (0d9h) * ASMMOD + 0 02CE 406C 2C db HIGH ainfo, LOW ainfo 02D0 2C ASMDATA ends 02D0 1C ASMDATA segment 02D0 FFFFFFFB 1C db 0fbh 02D1 1C ASMDATA ends C endvariant 02D1 1C ASMDATA segment 02D1 FFFFFFFF 1C db -1 02D2 1C ASMDATA ends C mne FSQRT ; ofs=2D9h 02D2 1C ASMDATA segment 000002D2 = 2D2 1C CURROFS = $ 02D2 1C ASMDATA ends 0E53 FFFFFFD202 1C dw CURROFS - asmtab = 44D 1C MN_FSQRT equ $ - mnlist = "FSQR",'T'+80h 1C tmpstr catstr ,,,,,<+80h> 0E55 46535152FFFFFFD4 1C db "FSQR",'T'+80h C fpvariant 0d9h, 0, 0fah 1C variant 0d9h, 0, , 02D2 2C ASMDATA segment = 406C 2C ainfo = (0d9h) * ASMMOD + 0 02D2 406C 2C db HIGH ainfo, LOW ainfo 02D4 2C ASMDATA ends 02D4 1C ASMDATA segment 02D4 FFFFFFFA 1C db 0fah 02D5 1C ASMDATA ends C endvariant 02D5 1C ASMDATA segment 02D5 FFFFFFFF 1C db -1 02D6 1C ASMDATA ends C mne FST ; ofs=2DDh 02D6 1C ASMDATA segment 000002D6 = 2D6 1C CURROFS = $ 02D6 1C ASMDATA ends 0E5A FFFFFFD602 1C dw CURROFS - asmtab = 454 1C MN_FST equ $ - mnlist = "FS",'T'+80h 1C tmpstr catstr ,,,,,<+80h> 0E5C 4653FFFFFFD4 1C db "FS",'T'+80h C variant 211h, 19 02D6 1C ASMDATA segment = 9D1F 1C ainfo = (211h) * ASMMOD + 19 02D6 FFFFFF9D1F 1C db HIGH ainfo, LOW ainfo 02D8 1C ASMDATA ends C variant 215h, 20 02D8 1C ASMDATA segment = 9E50 1C ainfo = (215h) * ASMMOD + 20 02D8 FFFFFF9E50 1C db HIGH ainfo, LOW ainfo 02DA 1C ASMDATA ends C fpvariant 0ddh, 27, 0d0h 1C variant 0ddh, 27, , 02DA 2C ASMDATA segment = 41B7 2C ainfo = (0ddh) * ASMMOD + 27 02DA 41FFFFFFB7 2C db HIGH ainfo, LOW ainfo 02DC 2C ASMDATA ends 02DC 1C ASMDATA segment 02DC FFFFFFD0 1C db 0d0h 02DD 1C ASMDATA ends C endvariant 02DD 1C ASMDATA segment 02DD FFFFFFFF 1C db -1 02DE 1C ASMDATA ends C mne FSTP ; ofs=2E5h 02DE 1C ASMDATA segment 000002DE = 2DE 1C CURROFS = $ 02DE 1C ASMDATA ends 0E5F FFFFFFDE02 1C dw CURROFS - asmtab = 459 1C MN_FSTP equ $ - mnlist = "FST",'P'+80h 1C tmpstr catstr ,,,

,,<+80h> 0E61 465354FFFFFFD0 1C db "FST",'P'+80h C variant 219h, 19 02DE 1C ASMDATA segment = 9F7F 1C ainfo = (219h) * ASMMOD + 19 02DE FFFFFF9F7F 1C db HIGH ainfo, LOW ainfo 02E0 1C ASMDATA ends C variant 21dh, 20 02E0 1C ASMDATA segment = A0B0 1C ainfo = (21dh) * ASMMOD + 20 02E0 FFFFFFA0FFFFFFB0 1C db HIGH ainfo, LOW ainfo 02E2 1C ASMDATA ends C variant 23bh, 26 02E2 1C ASMDATA segment = A99E 1C ainfo = (23bh) * ASMMOD + 26 02E2 FFFFFFA9FFFFFF9E 1C db HIGH ainfo, LOW ainfo 02E4 1C ASMDATA ends C fpvariant 0ddh, 27, 0d8h 1C variant 0ddh, 27, , 02E4 2C ASMDATA segment = 41B7 2C ainfo = (0ddh) * ASMMOD + 27 02E4 41FFFFFFB7 2C db HIGH ainfo, LOW ainfo 02E6 2C ASMDATA ends 02E6 1C ASMDATA segment 02E6 FFFFFFD8 1C db 0d8h 02E7 1C ASMDATA ends C endvariant 02E7 1C ASMDATA segment 02E7 FFFFFFFF 1C db -1 02E8 1C ASMDATA ends C mne FSTCW, ASM_WAIT ; ofs=2EFh 02E8 1C ASMDATA segment 000002E8 = 2E8 1C CURROFS = $ 02E8 FFFFFFFA 1C db ASM_WAIT 02E9 1C ASMDATA ends 0E65 FFFFFFE802 1C dw CURROFS - asmtab = 45F 1C MN_FSTCW equ $ - mnlist = "FSTC",'W'+80h 1C tmpstr catstr ,,,,,<+80h> 0E67 46535443FFFFFFD7 1C db "FSTC",'W'+80h C mne FNSTCW ; ofs=2F0h 02E9 1C ASMDATA segment 000002E9 = 2E9 1C CURROFS = $ 02E9 1C ASMDATA ends 0E6C FFFFFFE902 1C dw CURROFS - asmtab = 466 1C MN_FNSTCW equ $ - mnlist = "FNSTC",'W'+80h 1C tmpstr catstr ,,,,,<+80h> 0E6E 464E535443FFFFFFD7 1C db "FNSTC",'W'+80h C variant 239h, 25 02E9 1C ASMDATA segment = A905 1C ainfo = (239h) * ASMMOD + 25 02E9 FFFFFFA905 1C db HIGH ainfo, LOW ainfo 02EB 1C ASMDATA ends C endvariant 02EB 1C ASMDATA segment 02EB FFFFFFFF 1C db -1 02EC 1C ASMDATA ends C mne FSTENV, ASM_WAIT ; ofs=2F3h 02EC 1C ASMDATA segment 000002EC = 2EC 1C CURROFS = $ 02EC FFFFFFFA 1C db ASM_WAIT 02ED 1C ASMDATA ends 0E74 FFFFFFEC02 1C dw CURROFS - asmtab = 46E 1C MN_FSTENV equ $ - mnlist = "FSTEN",'V'+80h 1C tmpstr catstr ,,,,,<+80h> 0E76 465354454EFFFFFFD6 1C db "FSTEN",'V'+80h C mne FNSTENV ; ofs=2F4h 02ED 1C ASMDATA segment 000002ED = 2ED 1C CURROFS = $ 02ED 1C ASMDATA ends 0E7C FFFFFFED02 1C dw CURROFS - asmtab = 476 1C MN_FNSTENV equ $ - mnlist = "FNSTEN",'V'+80h 1C tmpstr catstr ,,,,,<+80h> 0E7E 464E5354454EFFFFFFD6 1C db "FNSTEN",'V'+80h C variant 231h, 29 02ED 1C ASMDATA segment = A6A9 1C ainfo = (231h) * ASMMOD + 29 02ED FFFFFFA6FFFFFFA9 1C db HIGH ainfo, LOW ainfo 02EF 1C ASMDATA ends C endvariant 02EF 1C ASMDATA segment 02EF FFFFFFFF 1C db -1 02F0 1C ASMDATA ends C mne FSTENVW, ASM_D16 ; ofs=2F7h 02F0 1C ASMDATA segment 000002F0 = 2F0 1C CURROFS = $ 02F0 FFFFFFF8 1C db ASM_D16 02F1 1C ASMDATA ends 0E85 FFFFFFF002 1C dw CURROFS - asmtab = 47F 1C MN_FSTENVW equ $ - mnlist = "FSTENV",'W'+80h 1C tmpstr catstr ,,,,,<+80h> 0E87 465354454E56FFFFFFD7 1C db "FSTENV",'W'+80h C mne FSTENVD, ASM_D32 ; ofs=2F8h 02F1 1C ASMDATA segment 000002F1 = 2F1 1C CURROFS = $ 02F1 FFFFFFF9 1C db ASM_D32 02F2 1C ASMDATA ends 0E8E FFFFFFF102 1C dw CURROFS - asmtab = 488 1C MN_FSTENVD equ $ - mnlist = "FSTENV",'D'+80h 1C tmpstr catstr ,,,,,<+80h> 0E90 465354454E56FFFFFFC4 1C db "FSTENV",'D'+80h C variant 231h, 29 02F2 1C ASMDATA segment = A6A9 1C ainfo = (231h) * ASMMOD + 29 02F2 FFFFFFA6FFFFFFA9 1C db HIGH ainfo, LOW ainfo 02F4 1C ASMDATA ends C endvariant 02F4 1C ASMDATA segment 02F4 FFFFFFFF 1C db -1 02F5 1C ASMDATA ends C mne FSTSW, ASM_WAIT ; ofs=2FCh 02F5 1C ASMDATA segment 000002F5 = 2F5 1C CURROFS = $ 02F5 FFFFFFFA 1C db ASM_WAIT 02F6 1C ASMDATA ends 0E97 FFFFFFF502 1C dw CURROFS - asmtab = 491 1C MN_FSTSW equ $ - mnlist = "FSTS",'W'+80h 1C tmpstr catstr ,,,,,<+80h> 0E99 46535453FFFFFFD7 1C db "FSTS",'W'+80h C mne FNSTSW ; ofs=2FDh 02F6 1C ASMDATA segment 000002F6 = 2F6 1C CURROFS = $ 02F6 1C ASMDATA ends 0E9E FFFFFFF602 1C dw CURROFS - asmtab = 498 1C MN_FNSTSW equ $ - mnlist = "FNSTS",'W'+80h 1C tmpstr catstr ,,,,,<+80h> 0EA0 464E535453FFFFFFD7 1C db "FNSTS",'W'+80h C fpvariant 0dfh, 30, 0e0h 1C variant 0dfh, 30, , 02F6 2C ASMDATA segment = 4252 2C ainfo = (0dfh) * ASMMOD + 30 02F6 4252 2C db HIGH ainfo, LOW ainfo 02F8 2C ASMDATA ends 02F8 1C ASMDATA segment 02F8 FFFFFFE0 1C db 0e0h 02F9 1C ASMDATA ends C variant 23dh, 25 02F9 1C ASMDATA segment = AA35 1C ainfo = (23dh) * ASMMOD + 25 02F9 FFFFFFAA35 1C db HIGH ainfo, LOW ainfo 02FB 1C ASMDATA ends C endvariant 02FB 1C ASMDATA segment 02FB FFFFFFFF 1C db -1 02FC 1C ASMDATA ends C mne FSUB ; ofs=303h 02FC 1C ASMDATA segment 000002FC = 2FC 1C CURROFS = $ 02FC 1C ASMDATA ends 0EA6 FFFFFFFC02 1C dw CURROFS - asmtab = 4A0 1C MN_FSUB equ $ - mnlist = "FSU",'B'+80h 1C tmpstr catstr ,,,,,<+80h> 0EA8 465355FFFFFFC2 1C db "FSU",'B'+80h C variant 220h, 19 02FC 1C ASMDATA segment = A193 1C ainfo = (220h) * ASMMOD + 19 02FC FFFFFFA1FFFFFF93 1C db HIGH ainfo, LOW ainfo 02FE 1C ASMDATA ends C variant 224h, 20 02FE 1C ASMDATA segment = A2C4 1C ainfo = (224h) * ASMMOD + 20 02FE FFFFFFA2FFFFFFC4 1C db HIGH ainfo, LOW ainfo 0300 1C ASMDATA ends C fpvariant 0d8h, 21, 0e0h 1C variant 0d8h, 21, , 0300 2C ASMDATA segment = 4035 2C ainfo = (0d8h) * ASMMOD + 21 0300 4035 2C db HIGH ainfo, LOW ainfo 0302 2C ASMDATA ends 0302 1C ASMDATA segment 0302 FFFFFFE0 1C db 0e0h 0303 1C ASMDATA ends C fpvariant 0dch, 22, 0e8h 1C variant 0dch, 22, , 0303 2C ASMDATA segment = 4166 2C ainfo = (0dch) * ASMMOD + 22 0303 4166 2C db HIGH ainfo, LOW ainfo 0305 2C ASMDATA ends 0305 1C ASMDATA segment 0305 FFFFFFE8 1C db 0e8h 0306 1C ASMDATA ends C endvariant 0306 1C ASMDATA segment 0306 FFFFFFFF 1C db -1 0307 1C ASMDATA ends C mne FSUBP ; ofs=30Eh 0307 1C ASMDATA segment 00000307 = 307 1C CURROFS = $ 0307 1C ASMDATA ends 0EAC 0703 1C dw CURROFS - asmtab = 4A6 1C MN_FSUBP equ $ - mnlist = "FSUB",'P'+80h 1C tmpstr catstr ,,,

,,<+80h> 0EAE 46535542FFFFFFD0 1C db "FSUB",'P'+80h C fpvariant 0deh, 23, 0e8h 1C variant 0deh, 23, , 0307 2C ASMDATA segment = 41FF 2C ainfo = (0deh) * ASMMOD + 23 0307 41FFFFFFFF 2C db HIGH ainfo, LOW ainfo 0309 2C ASMDATA ends 0309 1C ASMDATA segment 0309 FFFFFFE8 1C db 0e8h 030A 1C ASMDATA ends C fpvariant 0deh, 0, 0e9h 1C variant 0deh, 0, , 030A 2C ASMDATA segment = 41E8 2C ainfo = (0deh) * ASMMOD + 0 030A 41FFFFFFE8 2C db HIGH ainfo, LOW ainfo 030C 2C ASMDATA ends 030C 1C ASMDATA segment 030C FFFFFFE9 1C db 0e9h 030D 1C ASMDATA ends C endvariant 030D 1C ASMDATA segment 030D FFFFFFFF 1C db -1 030E 1C ASMDATA ends C mne FISUB ; ofs=315h 030E 1C ASMDATA segment 0000030E = 30E 1C CURROFS = $ 030E 1C ASMDATA ends 0EB3 0E03 1C dw CURROFS - asmtab = 4AD 1C MN_FISUB equ $ - mnlist = "FISU",'B'+80h 1C tmpstr catstr ,,,,,<+80h> 0EB5 46495355FFFFFFC2 1C db "FISU",'B'+80h C variant 222h, 24 030E 1C ASMDATA segment = A230 1C ainfo = (222h) * ASMMOD + 24 030E FFFFFFA230 1C db HIGH ainfo, LOW ainfo 0310 1C ASMDATA ends C variant 226h, 25 0310 1C ASMDATA segment = A361 1C ainfo = (226h) * ASMMOD + 25 0310 FFFFFFA361 1C db HIGH ainfo, LOW ainfo 0312 1C ASMDATA ends C endvariant 0312 1C ASMDATA segment 0312 FFFFFFFF 1C db -1 0313 1C ASMDATA ends C mne FSUBR ; ofs=31Ah 0313 1C ASMDATA segment 00000313 = 313 1C CURROFS = $ 0313 1C ASMDATA ends 0EBA 1303 1C dw CURROFS - asmtab = 4B4 1C MN_FSUBR equ $ - mnlist = "FSUB",'R'+80h 1C tmpstr catstr ,,,,,<+80h> 0EBC 46535542FFFFFFD2 1C db "FSUB",'R'+80h C variant 228h, 19 0313 1C ASMDATA segment = A3F3 1C ainfo = (228h) * ASMMOD + 19 0313 FFFFFFA3FFFFFFF3 1C db HIGH ainfo, LOW ainfo 0315 1C ASMDATA ends C variant 22ch, 20 0315 1C ASMDATA segment = A524 1C ainfo = (22ch) * ASMMOD + 20 0315 FFFFFFA524 1C db HIGH ainfo, LOW ainfo 0317 1C ASMDATA ends C fpvariant 0d8h, 21, 0e8h 1C variant 0d8h, 21, , 0317 2C ASMDATA segment = 4035 2C ainfo = (0d8h) * ASMMOD + 21 0317 4035 2C db HIGH ainfo, LOW ainfo 0319 2C ASMDATA ends 0319 1C ASMDATA segment 0319 FFFFFFE8 1C db 0e8h 031A 1C ASMDATA ends C fpvariant 0dch, 22, 0e0h 1C variant 0dch, 22, , 031A 2C ASMDATA segment = 4166 2C ainfo = (0dch) * ASMMOD + 22 031A 4166 2C db HIGH ainfo, LOW ainfo 031C 2C ASMDATA ends 031C 1C ASMDATA segment 031C FFFFFFE0 1C db 0e0h 031D 1C ASMDATA ends C endvariant 031D 1C ASMDATA segment 031D FFFFFFFF 1C db -1 031E 1C ASMDATA ends C mne FSUBRP ; ofs=325h 031E 1C ASMDATA segment 0000031E = 31E 1C CURROFS = $ 031E 1C ASMDATA ends 0EC1 1E03 1C dw CURROFS - asmtab = 4BB 1C MN_FSUBRP equ $ - mnlist = "FSUBR",'P'+80h 1C tmpstr catstr ,,,

,,<+80h> 0EC3 4653554252FFFFFFD0 1C db "FSUBR",'P'+80h C fpvariant 0deh, 23, 0e0h 1C variant 0deh, 23, , 031E 2C ASMDATA segment = 41FF 2C ainfo = (0deh) * ASMMOD + 23 031E 41FFFFFFFF 2C db HIGH ainfo, LOW ainfo 0320 2C ASMDATA ends 0320 1C ASMDATA segment 0320 FFFFFFE0 1C db 0e0h 0321 1C ASMDATA ends C fpvariant 0deh, 0, 0e1h 1C variant 0deh, 0, , 0321 2C ASMDATA segment = 41E8 2C ainfo = (0deh) * ASMMOD + 0 0321 41FFFFFFE8 2C db HIGH ainfo, LOW ainfo 0323 2C ASMDATA ends 0323 1C ASMDATA segment 0323 FFFFFFE1 1C db 0e1h 0324 1C ASMDATA ends C endvariant 0324 1C ASMDATA segment 0324 FFFFFFFF 1C db -1 0325 1C ASMDATA ends C mne FISUBR ; ofs=32Ch 0325 1C ASMDATA segment 00000325 = 325 1C CURROFS = $ 0325 1C ASMDATA ends 0EC9 2503 1C dw CURROFS - asmtab = 4C3 1C MN_FISUBR equ $ - mnlist = "FISUB",'R'+80h 1C tmpstr catstr ,,,,,<+80h> 0ECB 4649535542FFFFFFD2 1C db "FISUB",'R'+80h C variant 22ah, 24 0325 1C ASMDATA segment = A490 1C ainfo = (22ah) * ASMMOD + 24 0325 FFFFFFA4FFFFFF90 1C db HIGH ainfo, LOW ainfo 0327 1C ASMDATA ends C variant 22eh, 25 0327 1C ASMDATA segment = A5C1 1C ainfo = (22eh) * ASMMOD + 25 0327 FFFFFFA5FFFFFFC1 1C db HIGH ainfo, LOW ainfo 0329 1C ASMDATA ends C endvariant 0329 1C ASMDATA segment 0329 FFFFFFFF 1C db -1 032A 1C ASMDATA ends C mne FTST ; ofs=331h 032A 1C ASMDATA segment 0000032A = 32A 1C CURROFS = $ 032A 1C ASMDATA ends 0ED1 2A03 1C dw CURROFS - asmtab = 4CB 1C MN_FTST equ $ - mnlist = "FTS",'T'+80h 1C tmpstr catstr ,,,,,<+80h> 0ED3 465453FFFFFFD4 1C db "FTS",'T'+80h C fpvariant 0d9h, 0, 0e4h 1C variant 0d9h, 0, , 032A 2C ASMDATA segment = 406C 2C ainfo = (0d9h) * ASMMOD + 0 032A 406C 2C db HIGH ainfo, LOW ainfo 032C 2C ASMDATA ends 032C 1C ASMDATA segment 032C FFFFFFE4 1C db 0e4h 032D 1C ASMDATA ends C endvariant 032D 1C ASMDATA segment 032D FFFFFFFF 1C db -1 032E 1C ASMDATA ends C mne FUCOM ; ofs=335h 032E 1C ASMDATA segment 0000032E = 32E 1C CURROFS = $ 032E 1C ASMDATA ends 0ED7 2E03 1C dw CURROFS - asmtab = 4D1 1C MN_FUCOM equ $ - mnlist = "FUCO",'M'+80h 1C tmpstr catstr ,,,,,<+80h> 0ED9 4655434FFFFFFFCD 1C db "FUCO",'M'+80h C fpvariant 0ddh, 28, 0e0h, , ASM_MACH3 1C variant 0ddh, 28, , ASM_MACH3 032E 2C ASMDATA segment 032E FFFFFFF0 2C db ASM_MACH3 = 41B8 2C ainfo = (0ddh) * ASMMOD + 28 032F 41FFFFFFB8 2C db HIGH ainfo, LOW ainfo 0331 2C ASMDATA ends 0331 1C ASMDATA segment 0331 FFFFFFE0 1C db 0e0h 0332 1C ASMDATA ends C fpvariant 0ddh, 0, 0e1h, , ASM_MACH3 1C variant 0ddh, 0, , ASM_MACH3 0332 2C ASMDATA segment 0332 FFFFFFF0 2C db ASM_MACH3 = 419C 2C ainfo = (0ddh) * ASMMOD + 0 0333 41FFFFFF9C 2C db HIGH ainfo, LOW ainfo 0335 2C ASMDATA ends 0335 1C ASMDATA segment 0335 FFFFFFE1 1C db 0e1h 0336 1C ASMDATA ends C endvariant 0336 1C ASMDATA segment 0336 FFFFFFFF 1C db -1 0337 1C ASMDATA ends C mne FUCOMI ; ofs=33Eh 0337 1C ASMDATA segment 00000337 = 337 1C CURROFS = $ 0337 1C ASMDATA ends 0EDE 3703 1C dw CURROFS - asmtab = 4D8 1C MN_FUCOMI equ $ - mnlist = "FUCOM",'I'+80h 1C tmpstr catstr ,,,,,<+80h> 0EE0 4655434F4DFFFFFFC9 1C db "FUCOM",'I'+80h C fpvariant 0dbh, 28, 0e8h, , ASM_MACH6 1C variant 0dbh, 28, , ASM_MACH6 0337 2C ASMDATA segment 0337 FFFFFFF3 2C db ASM_MACH6 = 4120 2C ainfo = (0dbh) * ASMMOD + 28 0338 4120 2C db HIGH ainfo, LOW ainfo 033A 2C ASMDATA ends 033A 1C ASMDATA segment 033A FFFFFFE8 1C db 0e8h 033B 1C ASMDATA ends C fpvariant 0dbh, 0, 0e9h, , ASM_MACH6 1C variant 0dbh, 0, , ASM_MACH6 033B 2C ASMDATA segment 033B FFFFFFF3 2C db ASM_MACH6 = 4104 2C ainfo = (0dbh) * ASMMOD + 0 033C 4104 2C db HIGH ainfo, LOW ainfo 033E 2C ASMDATA ends 033E 1C ASMDATA segment 033E FFFFFFE9 1C db 0e9h 033F 1C ASMDATA ends C endvariant 033F 1C ASMDATA segment 033F FFFFFFFF 1C db -1 0340 1C ASMDATA ends C mne FUCOMIP ; ofs=347h 0340 1C ASMDATA segment 00000340 = 340 1C CURROFS = $ 0340 1C ASMDATA ends 0EE6 4003 1C dw CURROFS - asmtab = 4E0 1C MN_FUCOMIP equ $ - mnlist = "FUCOMI",'P'+80h 1C tmpstr catstr ,,,

,,<+80h> 0EE8 4655434F4D49FFFFFFD0 1C db "FUCOMI",'P'+80h C fpvariant 0dfh, 28, 0e8h, , ASM_MACH6 1C variant 0dfh, 28, , ASM_MACH6 0340 2C ASMDATA segment 0340 FFFFFFF3 2C db ASM_MACH6 = 4250 2C ainfo = (0dfh) * ASMMOD + 28 0341 4250 2C db HIGH ainfo, LOW ainfo 0343 2C ASMDATA ends 0343 1C ASMDATA segment 0343 FFFFFFE8 1C db 0e8h 0344 1C ASMDATA ends C fpvariant 0dfh, 0, 0e9h, , ASM_MACH6 1C variant 0dfh, 0, , ASM_MACH6 0344 2C ASMDATA segment 0344 FFFFFFF3 2C db ASM_MACH6 = 4234 2C ainfo = (0dfh) * ASMMOD + 0 0345 4234 2C db HIGH ainfo, LOW ainfo 0347 2C ASMDATA ends 0347 1C ASMDATA segment 0347 FFFFFFE9 1C db 0e9h 0348 1C ASMDATA ends C endvariant 0348 1C ASMDATA segment 0348 FFFFFFFF 1C db -1 0349 1C ASMDATA ends C mne FUCOMP ; ofs=350h 0349 1C ASMDATA segment 00000349 = 349 1C CURROFS = $ 0349 1C ASMDATA ends 0EEF 4903 1C dw CURROFS - asmtab = 4E9 1C MN_FUCOMP equ $ - mnlist = "FUCOM",'P'+80h 1C tmpstr catstr ,,,

,,<+80h> 0EF1 4655434F4DFFFFFFD0 1C db "FUCOM",'P'+80h C fpvariant 0ddh, 28, 0e8h, , ASM_MACH3 1C variant 0ddh, 28, , ASM_MACH3 0349 2C ASMDATA segment 0349 FFFFFFF0 2C db ASM_MACH3 = 41B8 2C ainfo = (0ddh) * ASMMOD + 28 034A 41FFFFFFB8 2C db HIGH ainfo, LOW ainfo 034C 2C ASMDATA ends 034C 1C ASMDATA segment 034C FFFFFFE8 1C db 0e8h 034D 1C ASMDATA ends C fpvariant 0ddh, 0, 0e9h, , ASM_MACH3 1C variant 0ddh, 0, , ASM_MACH3 034D 2C ASMDATA segment 034D FFFFFFF0 2C db ASM_MACH3 = 419C 2C ainfo = (0ddh) * ASMMOD + 0 034E 41FFFFFF9C 2C db HIGH ainfo, LOW ainfo 0350 2C ASMDATA ends 0350 1C ASMDATA segment 0350 FFFFFFE9 1C db 0e9h 0351 1C ASMDATA ends C endvariant 0351 1C ASMDATA segment 0351 FFFFFFFF 1C db -1 0352 1C ASMDATA ends C mne FUCOMPP ; ofs=359h 0352 1C ASMDATA segment 00000352 = 352 1C CURROFS = $ 0352 1C ASMDATA ends 0EF7 5203 1C dw CURROFS - asmtab = 4F1 1C MN_FUCOMPP equ $ - mnlist = "FUCOMP",'P'+80h 1C tmpstr catstr ,,,

,,<+80h> 0EF9 4655434F4D50FFFFFFD0 1C db "FUCOMP",'P'+80h C fpvariant 0dah, 0, 0e9h, , ASM_MACH3 1C variant 0dah, 0, , ASM_MACH3 0352 2C ASMDATA segment 0352 FFFFFFF0 2C db ASM_MACH3 = 40B8 2C ainfo = (0dah) * ASMMOD + 0 0353 40FFFFFFB8 2C db HIGH ainfo, LOW ainfo 0355 2C ASMDATA ends 0355 1C ASMDATA segment 0355 FFFFFFE9 1C db 0e9h 0356 1C ASMDATA ends C endvariant 0356 1C ASMDATA segment 0356 FFFFFFFF 1C db -1 0357 1C ASMDATA ends C mne FWAIT ; ofs=35Eh 0357 1C ASMDATA segment 00000357 = 357 1C CURROFS = $ 0357 1C ASMDATA ends 0F00 5703 1C dw CURROFS - asmtab = 4FA 1C MN_FWAIT equ $ - mnlist = "FWAI",'T'+80h 1C tmpstr catstr ,,,,,<+80h> 0F02 46574149FFFFFFD4 1C db "FWAI",'T'+80h C variant 09bh, 0 0357 1C ASMDATA segment = 2E04 1C ainfo = (09bh) * ASMMOD + 0 0357 2E04 1C db HIGH ainfo, LOW ainfo 0359 1C ASMDATA ends C endvariant 0359 1C ASMDATA segment 0359 FFFFFFFF 1C db -1 035A 1C ASMDATA ends C mne FXAM ; ofs=361h 035A 1C ASMDATA segment 0000035A = 35A 1C CURROFS = $ 035A 1C ASMDATA ends 0F07 5A03 1C dw CURROFS - asmtab = 501 1C MN_FXAM equ $ - mnlist = "FXA",'M'+80h 1C tmpstr catstr ,,,,,<+80h> 0F09 465841FFFFFFCD 1C db "FXA",'M'+80h C fpvariant 0d9h, 0, 0e5h 1C variant 0d9h, 0, , 035A 2C ASMDATA segment = 406C 2C ainfo = (0d9h) * ASMMOD + 0 035A 406C 2C db HIGH ainfo, LOW ainfo 035C 2C ASMDATA ends 035C 1C ASMDATA segment 035C FFFFFFE5 1C db 0e5h 035D 1C ASMDATA ends C endvariant 035D 1C ASMDATA segment 035D FFFFFFFF 1C db -1 035E 1C ASMDATA ends C mne FXCH ; ofs=365h 035E 1C ASMDATA segment 0000035E = 35E 1C CURROFS = $ 035E 1C ASMDATA ends 0F0D 5E03 1C dw CURROFS - asmtab = 507 1C MN_FXCH equ $ - mnlist = "FXC",'H'+80h 1C tmpstr catstr ,,,,,<+80h> 0F0F 465843FFFFFFC8 1C db "FXC",'H'+80h C fpvariant 0d9h, 28, 0c8h 1C variant 0d9h, 28, , 035E 2C ASMDATA segment = 4088 2C ainfo = (0d9h) * ASMMOD + 28 035E 40FFFFFF88 2C db HIGH ainfo, LOW ainfo 0360 2C ASMDATA ends 0360 1C ASMDATA segment 0360 FFFFFFC8 1C db 0c8h 0361 1C ASMDATA ends C fpvariant 0d9h, 0, 0c9h 1C variant 0d9h, 0, , 0361 2C ASMDATA segment = 406C 2C ainfo = (0d9h) * ASMMOD + 0 0361 406C 2C db HIGH ainfo, LOW ainfo 0363 2C ASMDATA ends 0363 1C ASMDATA segment 0363 FFFFFFC9 1C db 0c9h 0364 1C ASMDATA ends C endvariant 0364 1C ASMDATA segment 0364 FFFFFFFF 1C db -1 0365 1C ASMDATA ends C mne FXTRACT ; ofs=36Ch 0365 1C ASMDATA segment 00000365 = 365 1C CURROFS = $ 0365 1C ASMDATA ends 0F13 6503 1C dw CURROFS - asmtab = 50D 1C MN_FXTRACT equ $ - mnlist = "FXTRAC",'T'+80h 1C tmpstr catstr ,,,,,<+80h> 0F15 465854524143FFFFFFD4 1C db "FXTRAC",'T'+80h C fpvariant 0d9h, 0, 0f4h 1C variant 0d9h, 0, , 0365 2C ASMDATA segment = 406C 2C ainfo = (0d9h) * ASMMOD + 0 0365 406C 2C db HIGH ainfo, LOW ainfo 0367 2C ASMDATA ends 0367 1C ASMDATA segment 0367 FFFFFFF4 1C db 0f4h 0368 1C ASMDATA ends C endvariant 0368 1C ASMDATA segment 0368 FFFFFFFF 1C db -1 0369 1C ASMDATA ends C mne FYL2X ; ofs=370h 0369 1C ASMDATA segment 00000369 = 369 1C CURROFS = $ 0369 1C ASMDATA ends 0F1C 6903 1C dw CURROFS - asmtab = 516 1C MN_FYL2X equ $ - mnlist = "FYL2",'X'+80h 1C tmpstr catstr ,,,,,<+80h> 0F1E 46594C32FFFFFFD8 1C db "FYL2",'X'+80h C fpvariant 0d9h, 0, 0f1h 1C variant 0d9h, 0, , 0369 2C ASMDATA segment = 406C 2C ainfo = (0d9h) * ASMMOD + 0 0369 406C 2C db HIGH ainfo, LOW ainfo 036B 2C ASMDATA ends 036B 1C ASMDATA segment 036B FFFFFFF1 1C db 0f1h 036C 1C ASMDATA ends C endvariant 036C 1C ASMDATA segment 036C FFFFFFFF 1C db -1 036D 1C ASMDATA ends C mne FYL2XP1 ; ofs=374h 036D 1C ASMDATA segment 0000036D = 36D 1C CURROFS = $ 036D 1C ASMDATA ends 0F23 6D03 1C dw CURROFS - asmtab = 51D 1C MN_FYL2XP1 equ $ - mnlist = "FYL2XP",'1'+80h 1C tmpstr catstr ,,,<1>,,<+80h> 0F25 46594C325850FFFFFFB1 1C db "FYL2XP",'1'+80h C fpvariant 0d9h, 0, 0f9h 1C variant 0d9h, 0, , 036D 2C ASMDATA segment = 406C 2C ainfo = (0d9h) * ASMMOD + 0 036D 406C 2C db HIGH ainfo, LOW ainfo 036F 2C ASMDATA ends 036F 1C ASMDATA segment 036F FFFFFFF9 1C db 0f9h 0370 1C ASMDATA ends C endvariant 0370 1C ASMDATA segment 0370 FFFFFFFF 1C db -1 0371 1C ASMDATA ends C mne HLT ; ofs=378h 0371 1C ASMDATA segment 00000371 = 371 1C CURROFS = $ 0371 1C ASMDATA ends 0F2C 7103 1C dw CURROFS - asmtab = 526 1C MN_HLT equ $ - mnlist = "HL",'T'+80h 1C tmpstr catstr ,,,,,<+80h> 0F2E 484CFFFFFFD4 1C db "HL",'T'+80h C variant 0f4h, 0 0371 1C ASMDATA segment = 4870 1C ainfo = (0f4h) * ASMMOD + 0 0371 4870 1C db HIGH ainfo, LOW ainfo 0373 1C ASMDATA ends C endvariant 0373 1C ASMDATA segment 0373 FFFFFFFF 1C db -1 0374 1C ASMDATA ends C mne IDIV ; ofs=37Bh 0374 1C ASMDATA segment 00000374 = 374 1C CURROFS = $ 0374 1C ASMDATA ends 0F31 7403 1C dw CURROFS - asmtab = 52B 1C MN_IDIV equ $ - mnlist = "IDI",'V'+80h 1C tmpstr catstr ,,,,,<+80h> 0F33 494449FFFFFFD6 1C db "IDI",'V'+80h C variant AGRP(6,7), 16 0374 1C ASMDATA segment = BB64 1C ainfo = (240h + 6*8 + 7) * ASMMOD + 16 0374 FFFFFFBB64 1C db HIGH ainfo, LOW ainfo 0376 1C ASMDATA ends C endvariant 0376 1C ASMDATA segment 0376 FFFFFFFF 1C db -1 0377 1C ASMDATA ends C mne IMUL ; ofs=37Eh 0377 1C ASMDATA segment 00000377 = 377 1C CURROFS = $ 0377 1C ASMDATA ends 0F37 7703 1C dw CURROFS - asmtab = 531 1C MN_IMUL equ $ - mnlist = "IMU",'L'+80h 1C tmpstr catstr ,,,,,<+80h> 0F39 494D55FFFFFFCC 1C db "IMU",'L'+80h C variant AGRP(6,5), 16 0377 1C ASMDATA segment = BACC 1C ainfo = (240h + 6*8 + 5) * ASMMOD + 16 0377 FFFFFFBAFFFFFFCC 1C db HIGH ainfo, LOW ainfo 0379 1C ASMDATA ends C variant 1afh, 8, , ASM_MACH3 0379 1C ASMDATA segment 0379 FFFFFFF0 1C db ASM_MACH3 = 7FFC 1C ainfo = (1afh) * ASMMOD + 8 037A 7FFFFFFFFC 1C db HIGH ainfo, LOW ainfo 037C 1C ASMDATA ends C variant 06bh, 31, , ASM_MACH1 037C 1C ASMDATA segment 037C FFFFFFEE 1C db ASM_MACH1 = 1FE3 1C ainfo = (06bh) * ASMMOD + 31 037D 1FFFFFFFE3 1C db HIGH ainfo, LOW ainfo 037F 1C ASMDATA ends C variant 06bh, 32, , ASM_MACH1 037F 1C ASMDATA segment 037F FFFFFFEE 1C db ASM_MACH1 = 1FE4 1C ainfo = (06bh) * ASMMOD + 32 0380 1FFFFFFFE4 1C db HIGH ainfo, LOW ainfo 0382 1C ASMDATA ends C variant 069h, 33, , ASM_MACH1 0382 1C ASMDATA segment 0382 FFFFFFEE 1C db ASM_MACH1 = 1F4D 1C ainfo = (069h) * ASMMOD + 33 0383 1F4D 1C db HIGH ainfo, LOW ainfo 0385 1C ASMDATA ends C variant 069h, 34, , ASM_MACH1 0385 1C ASMDATA segment 0385 FFFFFFEE 1C db ASM_MACH1 = 1F4E 1C ainfo = (069h) * ASMMOD + 34 0386 1F4E 1C db HIGH ainfo, LOW ainfo 0388 1C ASMDATA ends C endvariant 0388 1C ASMDATA segment 0388 FFFFFFFF 1C db -1 0389 1C ASMDATA ends C mne IN ; ofs=390h 0389 1C ASMDATA segment 00000389 = 389 1C CURROFS = $ 0389 1C ASMDATA ends 0F3D FFFFFF8903 1C dw CURROFS - asmtab = 537 1C MN_IN equ $ - mnlist = "I",'N'+80h 1C tmpstr catstr ,,,,,<+80h> 0F3F 49FFFFFFCE 1C db "I",'N'+80h C variant 0e4h, 35 0389 1C ASMDATA segment = 43D3 1C ainfo = (0e4h) * ASMMOD + 35 0389 43FFFFFFD3 1C db HIGH ainfo, LOW ainfo 038B 1C ASMDATA ends C variant 0ech, 36 038B 1C ASMDATA segment = 4634 1C ainfo = (0ech) * ASMMOD + 36 038B 4634 1C db HIGH ainfo, LOW ainfo 038D 1C ASMDATA ends C endvariant 038D 1C ASMDATA segment 038D FFFFFFFF 1C db -1 038E 1C ASMDATA ends C mne INC ; ofs=395h 038E 1C ASMDATA segment 0000038E = 38E 1C CURROFS = $ 038E 1C ASMDATA ends 0F41 FFFFFF8E03 1C dw CURROFS - asmtab = 53B 1C MN_INC equ $ - mnlist = "IN",'C'+80h 1C tmpstr catstr ,,,,,<+80h> 0F43 494EFFFFFFC3 1C db "IN",'C'+80h C variant 040h, 17 038E 1C ASMDATA segment = 1311 1C ainfo = (040h) * ASMMOD + 17 038E 1311 1C db HIGH ainfo, LOW ainfo 0390 1C ASMDATA ends C variant AGRP(5,0), 16, ASM_LOCKABLE 0390 1C ASMDATA segment 0390 FFFFFFF4 1C db ASM_LOCKABLE = B6F0 1C ainfo = (240h + 5*8 + 0) * ASMMOD + 16 0391 FFFFFFB6FFFFFFF0 1C db HIGH ainfo, LOW ainfo 0393 1C ASMDATA ends C endvariant 0393 1C ASMDATA segment 0393 FFFFFFFF 1C db -1 0394 1C ASMDATA ends C mne INSB ; ofs=39Bh 0394 1C ASMDATA segment 00000394 = 394 1C CURROFS = $ 0394 1C ASMDATA ends 0F46 FFFFFF9403 1C dw CURROFS - asmtab = 540 1C MN_INSB equ $ - mnlist = "INS",'B'+80h 1C tmpstr catstr ,,,,,<+80h> 0F48 494E53FFFFFFC2 1C db "INS",'B'+80h C variant 06ch, 0, , ASM_MACH1 0394 1C ASMDATA segment 0394 FFFFFFEE 1C db ASM_MACH1 = 2010 1C ainfo = (06ch) * ASMMOD + 0 0395 2010 1C db HIGH ainfo, LOW ainfo 0397 1C ASMDATA ends C endvariant 0397 1C ASMDATA segment 0397 FFFFFFFF 1C db -1 0398 1C ASMDATA ends C mne INSW, ASM_D16 ; ofs=39Fh 0398 1C ASMDATA segment 00000398 = 398 1C CURROFS = $ 0398 FFFFFFF8 1C db ASM_D16 0399 1C ASMDATA ends 0F4C FFFFFF9803 1C dw CURROFS - asmtab = 546 1C MN_INSW equ $ - mnlist = "INS",'W'+80h 1C tmpstr catstr ,,,,,<+80h> 0F4E 494E53FFFFFFD7 1C db "INS",'W'+80h C mne INSD, ASM_D32 ; ofs=3A0h 0399 1C ASMDATA segment 00000399 = 399 1C CURROFS = $ 0399 FFFFFFF9 1C db ASM_D32 039A 1C ASMDATA ends 0F52 FFFFFF9903 1C dw CURROFS - asmtab = 54C 1C MN_INSD equ $ - mnlist = "INS",'D'+80h 1C tmpstr catstr ,,,,,<+80h> 0F54 494E53FFFFFFC4 1C db "INS",'D'+80h C variant 06dh, 0, , ASM_MACH1 039A 1C ASMDATA segment 039A FFFFFFEE 1C db ASM_MACH1 = 205C 1C ainfo = (06dh) * ASMMOD + 0 039B 205C 1C db HIGH ainfo, LOW ainfo 039D 1C ASMDATA ends C endvariant 039D 1C ASMDATA segment 039D FFFFFFFF 1C db -1 039E 1C ASMDATA ends C mne INT ; ofs=3A5h 039E 1C ASMDATA segment 0000039E = 39E 1C CURROFS = $ 039E 1C ASMDATA ends 0F58 FFFFFF9E03 1C dw CURROFS - asmtab = 552 1C MN_INT equ $ - mnlist = "IN",'T'+80h 1C tmpstr catstr ,,,,,<+80h> 0F5A 494EFFFFFFD4 1C db "IN",'T'+80h C variant 0cch, 37 039E 1C ASMDATA segment = 3CB5 1C ainfo = (0cch) * ASMMOD + 37 039E 3CFFFFFFB5 1C db HIGH ainfo, LOW ainfo 03A0 1C ASMDATA ends C variant 0cdh, 38 03A0 1C ASMDATA segment = 3D02 1C ainfo = (0cdh) * ASMMOD + 38 03A0 3D02 1C db HIGH ainfo, LOW ainfo 03A2 1C ASMDATA ends C endvariant 03A2 1C ASMDATA segment 03A2 FFFFFFFF 1C db -1 03A3 1C ASMDATA ends C mne INTO ; ofs=3AAh 03A3 1C ASMDATA segment 000003A3 = 3A3 1C CURROFS = $ 03A3 1C ASMDATA ends 0F5D FFFFFFA303 1C dw CURROFS - asmtab = 557 1C MN_INTO equ $ - mnlist = "INT",'O'+80h 1C tmpstr catstr ,,,,,<+80h> 0F5F 494E54FFFFFFCF 1C db "INT",'O'+80h C variant 0ceh, 0 03A3 1C ASMDATA segment = 3D28 1C ainfo = (0ceh) * ASMMOD + 0 03A3 3D28 1C db HIGH ainfo, LOW ainfo 03A5 1C ASMDATA ends C endvariant 03A5 1C ASMDATA segment 03A5 FFFFFFFF 1C db -1 03A6 1C ASMDATA ends C mne INVD ; ofs=3ADh 03A6 1C ASMDATA segment 000003A6 = 3A6 1C CURROFS = $ 03A6 1C ASMDATA ends 0F63 FFFFFFA603 1C dw CURROFS - asmtab = 55D 1C MN_INVD equ $ - mnlist = "INV",'D'+80h 1C tmpstr catstr ,,,,,<+80h> 0F65 494E56FFFFFFC4 1C db "INV",'D'+80h C variant 108h, 0, , ASM_MACH4 03A6 1C ASMDATA segment 03A6 FFFFFFF1 1C db ASM_MACH4 = 4E60 1C ainfo = (108h) * ASMMOD + 0 03A7 4E60 1C db HIGH ainfo, LOW ainfo 03A9 1C ASMDATA ends C endvariant 03A9 1C ASMDATA segment 03A9 FFFFFFFF 1C db -1 03AA 1C ASMDATA ends C mne INVLPG ; ofs=3B1h 03AA 1C ASMDATA segment 000003AA = 3AA 1C CURROFS = $ 03AA 1C ASMDATA ends 0F69 FFFFFFAA03 1C dw CURROFS - asmtab = 563 1C MN_INVLPG equ $ - mnlist = "INVLP",'G'+80h 1C tmpstr catstr ,,,,,<+80h> 0F6B 494E564C50FFFFFFC7 1C db "INVLP",'G'+80h C variant AGRP(7,7), 29, , ASM_MACH4 03AA 1C ASMDATA segment 03AA FFFFFFF1 1C db ASM_MACH4 = BDD1 1C ainfo = (240h + 7*8 + 7) * ASMMOD + 29 03AB FFFFFFBDFFFFFFD1 1C db HIGH ainfo, LOW ainfo 03AD 1C ASMDATA ends C endvariant 03AD 1C ASMDATA segment 03AD FFFFFFFF 1C db -1 03AE 1C ASMDATA ends C mne IRET, ASM_D16 ; ofs=3B5h 03AE 1C ASMDATA segment 000003AE = 3AE 1C CURROFS = $ 03AE FFFFFFF8 1C db ASM_D16 03AF 1C ASMDATA ends 0F71 FFFFFFAE03 1C dw CURROFS - asmtab = 56B 1C MN_IRET equ $ - mnlist = "IRE",'T'+80h 1C tmpstr catstr ,,,,,<+80h> 0F73 495245FFFFFFD4 1C db "IRE",'T'+80h C mne IRETD, ASM_D32 ; ofs=3B6h 03AF 1C ASMDATA segment 000003AF = 3AF 1C CURROFS = $ 03AF FFFFFFF9 1C db ASM_D32 03B0 1C ASMDATA ends 0F77 FFFFFFAF03 1C dw CURROFS - asmtab = 571 1C MN_IRETD equ $ - mnlist = "IRET",'D'+80h 1C tmpstr catstr ,,,,,<+80h> 0F79 49524554FFFFFFC4 1C db "IRET",'D'+80h C variant 0cfh, 0 03B0 1C ASMDATA segment = 3D74 1C ainfo = (0cfh) * ASMMOD + 0 03B0 3D74 1C db HIGH ainfo, LOW ainfo 03B2 1C ASMDATA ends C endvariant 03B2 1C ASMDATA segment 03B2 FFFFFFFF 1C db -1 03B3 1C ASMDATA ends C mne JA ; ofs=3BAh 03B3 1C ASMDATA segment 000003B3 = 3B3 1C CURROFS = $ 03B3 1C ASMDATA ends 0F7E FFFFFFB303 1C dw CURROFS - asmtab = 578 1C MN_JA equ $ - mnlist = "J",'A'+80h 1C tmpstr catstr ,,,,,<+80h> 0F80 4AFFFFFFC1 1C db "J",'A'+80h C variant 077h, 39 03B3 1C ASMDATA segment = 237B 1C ainfo = (077h) * ASMMOD + 39 03B3 237B 1C db HIGH ainfo, LOW ainfo 03B5 1C ASMDATA ends C variant 187h, 12, , ASM_MACH3 03B5 1C ASMDATA segment 03B5 FFFFFFF0 1C db ASM_MACH3 = 7420 1C ainfo = (187h) * ASMMOD + 12 03B6 7420 1C db HIGH ainfo, LOW ainfo 03B8 1C ASMDATA ends C endvariant 03B8 1C ASMDATA segment 03B8 FFFFFFFF 1C db -1 03B9 1C ASMDATA ends C mne JAE ; ofs=3C0h 03B9 1C ASMDATA segment 000003B9 = 3B9 1C CURROFS = $ 03B9 1C ASMDATA ends 0F82 FFFFFFB903 1C dw CURROFS - asmtab = 57C 1C MN_JAE equ $ - mnlist = "JA",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 0F84 4A41FFFFFFC5 1C db "JA",'E'+80h C variant 073h, 39 03B9 1C ASMDATA segment = 224B 1C ainfo = (073h) * ASMMOD + 39 03B9 224B 1C db HIGH ainfo, LOW ainfo 03BB 1C ASMDATA ends C variant 183h, 12, , ASM_MACH3 03BB 1C ASMDATA segment 03BB FFFFFFF0 1C db ASM_MACH3 = 72F0 1C ainfo = (183h) * ASMMOD + 12 03BC 72FFFFFFF0 1C db HIGH ainfo, LOW ainfo 03BE 1C ASMDATA ends C endvariant 03BE 1C ASMDATA segment 03BE FFFFFFFF 1C db -1 03BF 1C ASMDATA ends C mne JB ; ofs=3C6h 03BF 1C ASMDATA segment 000003BF = 3BF 1C CURROFS = $ 03BF 1C ASMDATA ends 0F87 FFFFFFBF03 1C dw CURROFS - asmtab = 581 1C MN_JB equ $ - mnlist = "J",'B'+80h 1C tmpstr catstr ,,,,,<+80h> 0F89 4AFFFFFFC2 1C db "J",'B'+80h C variant 072h, 39 03BF 1C ASMDATA segment = 21FF 1C ainfo = (072h) * ASMMOD + 39 03BF 21FFFFFFFF 1C db HIGH ainfo, LOW ainfo 03C1 1C ASMDATA ends C variant 182h, 12, , ASM_MACH3 03C1 1C ASMDATA segment 03C1 FFFFFFF0 1C db ASM_MACH3 = 72A4 1C ainfo = (182h) * ASMMOD + 12 03C2 72FFFFFFA4 1C db HIGH ainfo, LOW ainfo 03C4 1C ASMDATA ends C endvariant 03C4 1C ASMDATA segment 03C4 FFFFFFFF 1C db -1 03C5 1C ASMDATA ends C mne JBE ; ofs=3CCh 03C5 1C ASMDATA segment 000003C5 = 3C5 1C CURROFS = $ 03C5 1C ASMDATA ends 0F8B FFFFFFC503 1C dw CURROFS - asmtab = 585 1C MN_JBE equ $ - mnlist = "JB",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 0F8D 4A42FFFFFFC5 1C db "JB",'E'+80h C variant 076h, 39 03C5 1C ASMDATA segment = 232F 1C ainfo = (076h) * ASMMOD + 39 03C5 232F 1C db HIGH ainfo, LOW ainfo 03C7 1C ASMDATA ends C variant 186h, 12, , ASM_MACH3 03C7 1C ASMDATA segment 03C7 FFFFFFF0 1C db ASM_MACH3 = 73D4 1C ainfo = (186h) * ASMMOD + 12 03C8 73FFFFFFD4 1C db HIGH ainfo, LOW ainfo 03CA 1C ASMDATA ends C endvariant 03CA 1C ASMDATA segment 03CA FFFFFFFF 1C db -1 03CB 1C ASMDATA ends C mne JC ; ofs=3D2h 03CB 1C ASMDATA segment 000003CB = 3CB 1C CURROFS = $ 03CB 1C ASMDATA ends 0F90 FFFFFFCB03 1C dw CURROFS - asmtab = 58A 1C MN_JC equ $ - mnlist = "J",'C'+80h 1C tmpstr catstr ,,,,,<+80h> 0F92 4AFFFFFFC3 1C db "J",'C'+80h C variant 072h, 39 03CB 1C ASMDATA segment = 21FF 1C ainfo = (072h) * ASMMOD + 39 03CB 21FFFFFFFF 1C db HIGH ainfo, LOW ainfo 03CD 1C ASMDATA ends C variant 182h, 12, , ASM_MACH3 03CD 1C ASMDATA segment 03CD FFFFFFF0 1C db ASM_MACH3 = 72A4 1C ainfo = (182h) * ASMMOD + 12 03CE 72FFFFFFA4 1C db HIGH ainfo, LOW ainfo 03D0 1C ASMDATA ends C endvariant 03D0 1C ASMDATA segment 03D0 FFFFFFFF 1C db -1 03D1 1C ASMDATA ends C mne JCXZ, ASM_D16 ; ofs=3D8h 03D1 1C ASMDATA segment 000003D1 = 3D1 1C CURROFS = $ 03D1 FFFFFFF8 1C db ASM_D16 03D2 1C ASMDATA ends 0F94 FFFFFFD103 1C dw CURROFS - asmtab = 58E 1C MN_JCXZ equ $ - mnlist = "JCX",'Z'+80h 1C tmpstr catstr ,,,,,<+80h> 0F96 4A4358FFFFFFDA 1C db "JCX",'Z'+80h C mne JECXZ, ASM_D32 ; ofs=3D9h 03D2 1C ASMDATA segment 000003D2 = 3D2 1C CURROFS = $ 03D2 FFFFFFF9 1C db ASM_D32 03D3 1C ASMDATA ends 0F9A FFFFFFD203 1C dw CURROFS - asmtab = 594 1C MN_JECXZ equ $ - mnlist = "JECX",'Z'+80h 1C tmpstr catstr ,,,,,<+80h> 0F9C 4A454358FFFFFFDA 1C db "JECX",'Z'+80h C variant 0e3h, 39 03D3 1C ASMDATA segment = 438B 1C ainfo = (0e3h) * ASMMOD + 39 03D3 43FFFFFF8B 1C db HIGH ainfo, LOW ainfo 03D5 1C ASMDATA ends C endvariant 03D5 1C ASMDATA segment 03D5 FFFFFFFF 1C db -1 03D6 1C ASMDATA ends C mne JE ; ofs=3DDh 03D6 1C ASMDATA segment 000003D6 = 3D6 1C CURROFS = $ 03D6 1C ASMDATA ends 0FA1 FFFFFFD603 1C dw CURROFS - asmtab = 59B 1C MN_JE equ $ - mnlist = "J",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 0FA3 4AFFFFFFC5 1C db "J",'E'+80h C variant 074h, 39 03D6 1C ASMDATA segment = 2297 1C ainfo = (074h) * ASMMOD + 39 03D6 22FFFFFF97 1C db HIGH ainfo, LOW ainfo 03D8 1C ASMDATA ends C variant 184h, 12, , ASM_MACH3 03D8 1C ASMDATA segment 03D8 FFFFFFF0 1C db ASM_MACH3 = 733C 1C ainfo = (184h) * ASMMOD + 12 03D9 733C 1C db HIGH ainfo, LOW ainfo 03DB 1C ASMDATA ends C endvariant 03DB 1C ASMDATA segment 03DB FFFFFFFF 1C db -1 03DC 1C ASMDATA ends C mne JG ; ofs=3E3h 03DC 1C ASMDATA segment 000003DC = 3DC 1C CURROFS = $ 03DC 1C ASMDATA ends 0FA5 FFFFFFDC03 1C dw CURROFS - asmtab = 59F 1C MN_JG equ $ - mnlist = "J",'G'+80h 1C tmpstr catstr ,,,,,<+80h> 0FA7 4AFFFFFFC7 1C db "J",'G'+80h C variant 07fh, 39 03DC 1C ASMDATA segment = 25DB 1C ainfo = (07fh) * ASMMOD + 39 03DC 25FFFFFFDB 1C db HIGH ainfo, LOW ainfo 03DE 1C ASMDATA ends C variant 18fh, 12, , ASM_MACH3 03DE 1C ASMDATA segment 03DE FFFFFFF0 1C db ASM_MACH3 = 7680 1C ainfo = (18fh) * ASMMOD + 12 03DF 76FFFFFF80 1C db HIGH ainfo, LOW ainfo 03E1 1C ASMDATA ends C endvariant 03E1 1C ASMDATA segment 03E1 FFFFFFFF 1C db -1 03E2 1C ASMDATA ends C mne JGE ; ofs=3E9h 03E2 1C ASMDATA segment 000003E2 = 3E2 1C CURROFS = $ 03E2 1C ASMDATA ends 0FA9 FFFFFFE203 1C dw CURROFS - asmtab = 5A3 1C MN_JGE equ $ - mnlist = "JG",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 0FAB 4A47FFFFFFC5 1C db "JG",'E'+80h C variant 07dh, 39 03E2 1C ASMDATA segment = 2543 1C ainfo = (07dh) * ASMMOD + 39 03E2 2543 1C db HIGH ainfo, LOW ainfo 03E4 1C ASMDATA ends C variant 18dh, 12, , ASM_MACH3 03E4 1C ASMDATA segment 03E4 FFFFFFF0 1C db ASM_MACH3 = 75E8 1C ainfo = (18dh) * ASMMOD + 12 03E5 75FFFFFFE8 1C db HIGH ainfo, LOW ainfo 03E7 1C ASMDATA ends C endvariant 03E7 1C ASMDATA segment 03E7 FFFFFFFF 1C db -1 03E8 1C ASMDATA ends C mne JL ; ofs=3EFh 03E8 1C ASMDATA segment 000003E8 = 3E8 1C CURROFS = $ 03E8 1C ASMDATA ends 0FAE FFFFFFE803 1C dw CURROFS - asmtab = 5A8 1C MN_JL equ $ - mnlist = "J",'L'+80h 1C tmpstr catstr ,,,,,<+80h> 0FB0 4AFFFFFFCC 1C db "J",'L'+80h C variant 07ch, 39 03E8 1C ASMDATA segment = 24F7 1C ainfo = (07ch) * ASMMOD + 39 03E8 24FFFFFFF7 1C db HIGH ainfo, LOW ainfo 03EA 1C ASMDATA ends C variant 18ch, 12, , ASM_MACH3 03EA 1C ASMDATA segment 03EA FFFFFFF0 1C db ASM_MACH3 = 759C 1C ainfo = (18ch) * ASMMOD + 12 03EB 75FFFFFF9C 1C db HIGH ainfo, LOW ainfo 03ED 1C ASMDATA ends C endvariant 03ED 1C ASMDATA segment 03ED FFFFFFFF 1C db -1 03EE 1C ASMDATA ends C mne JLE ; ofs=3F5h 03EE 1C ASMDATA segment 000003EE = 3EE 1C CURROFS = $ 03EE 1C ASMDATA ends 0FB2 FFFFFFEE03 1C dw CURROFS - asmtab = 5AC 1C MN_JLE equ $ - mnlist = "JL",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 0FB4 4A4CFFFFFFC5 1C db "JL",'E'+80h C variant 07eh, 39 03EE 1C ASMDATA segment = 258F 1C ainfo = (07eh) * ASMMOD + 39 03EE 25FFFFFF8F 1C db HIGH ainfo, LOW ainfo 03F0 1C ASMDATA ends C variant 18eh, 12, , ASM_MACH3 03F0 1C ASMDATA segment 03F0 FFFFFFF0 1C db ASM_MACH3 = 7634 1C ainfo = (18eh) * ASMMOD + 12 03F1 7634 1C db HIGH ainfo, LOW ainfo 03F3 1C ASMDATA ends C endvariant 03F3 1C ASMDATA segment 03F3 FFFFFFFF 1C db -1 03F4 1C ASMDATA ends C mne JNA ; ofs=3FBh 03F4 1C ASMDATA segment 000003F4 = 3F4 1C CURROFS = $ 03F4 1C ASMDATA ends 0FB7 FFFFFFF403 1C dw CURROFS - asmtab = 5B1 1C MN_JNA equ $ - mnlist = "JN",'A'+80h 1C tmpstr catstr ,,,,,<+80h> 0FB9 4A4EFFFFFFC1 1C db "JN",'A'+80h C variant 076h, 39 03F4 1C ASMDATA segment = 232F 1C ainfo = (076h) * ASMMOD + 39 03F4 232F 1C db HIGH ainfo, LOW ainfo 03F6 1C ASMDATA ends C variant 186h, 12, , ASM_MACH3 03F6 1C ASMDATA segment 03F6 FFFFFFF0 1C db ASM_MACH3 = 73D4 1C ainfo = (186h) * ASMMOD + 12 03F7 73FFFFFFD4 1C db HIGH ainfo, LOW ainfo 03F9 1C ASMDATA ends C endvariant 03F9 1C ASMDATA segment 03F9 FFFFFFFF 1C db -1 03FA 1C ASMDATA ends C mne JNAE ; ofs=401h 03FA 1C ASMDATA segment 000003FA = 3FA 1C CURROFS = $ 03FA 1C ASMDATA ends 0FBC FFFFFFFA03 1C dw CURROFS - asmtab = 5B6 1C MN_JNAE equ $ - mnlist = "JNA",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 0FBE 4A4E41FFFFFFC5 1C db "JNA",'E'+80h C variant 072h, 39 03FA 1C ASMDATA segment = 21FF 1C ainfo = (072h) * ASMMOD + 39 03FA 21FFFFFFFF 1C db HIGH ainfo, LOW ainfo 03FC 1C ASMDATA ends C variant 182h, 12, , ASM_MACH3 03FC 1C ASMDATA segment 03FC FFFFFFF0 1C db ASM_MACH3 = 72A4 1C ainfo = (182h) * ASMMOD + 12 03FD 72FFFFFFA4 1C db HIGH ainfo, LOW ainfo 03FF 1C ASMDATA ends C endvariant 03FF 1C ASMDATA segment 03FF FFFFFFFF 1C db -1 0400 1C ASMDATA ends C mne JNB ; ofs=407h 0400 1C ASMDATA segment 00000400 = 400 1C CURROFS = $ 0400 1C ASMDATA ends 0FC2 0004 1C dw CURROFS - asmtab = 5BC 1C MN_JNB equ $ - mnlist = "JN",'B'+80h 1C tmpstr catstr ,,,,,<+80h> 0FC4 4A4EFFFFFFC2 1C db "JN",'B'+80h C variant 073h, 39 0400 1C ASMDATA segment = 224B 1C ainfo = (073h) * ASMMOD + 39 0400 224B 1C db HIGH ainfo, LOW ainfo 0402 1C ASMDATA ends C variant 183h, 12, , ASM_MACH3 0402 1C ASMDATA segment 0402 FFFFFFF0 1C db ASM_MACH3 = 72F0 1C ainfo = (183h) * ASMMOD + 12 0403 72FFFFFFF0 1C db HIGH ainfo, LOW ainfo 0405 1C ASMDATA ends C endvariant 0405 1C ASMDATA segment 0405 FFFFFFFF 1C db -1 0406 1C ASMDATA ends C mne JNBE ; ofs=40Dh 0406 1C ASMDATA segment 00000406 = 406 1C CURROFS = $ 0406 1C ASMDATA ends 0FC7 0604 1C dw CURROFS - asmtab = 5C1 1C MN_JNBE equ $ - mnlist = "JNB",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 0FC9 4A4E42FFFFFFC5 1C db "JNB",'E'+80h C variant 077h, 39 0406 1C ASMDATA segment = 237B 1C ainfo = (077h) * ASMMOD + 39 0406 237B 1C db HIGH ainfo, LOW ainfo 0408 1C ASMDATA ends C variant 187h, 12, , ASM_MACH3 0408 1C ASMDATA segment 0408 FFFFFFF0 1C db ASM_MACH3 = 7420 1C ainfo = (187h) * ASMMOD + 12 0409 7420 1C db HIGH ainfo, LOW ainfo 040B 1C ASMDATA ends C endvariant 040B 1C ASMDATA segment 040B FFFFFFFF 1C db -1 040C 1C ASMDATA ends C mne JNC ; ofs=413h 040C 1C ASMDATA segment 0000040C = 40C 1C CURROFS = $ 040C 1C ASMDATA ends 0FCD 0C04 1C dw CURROFS - asmtab = 5C7 1C MN_JNC equ $ - mnlist = "JN",'C'+80h 1C tmpstr catstr ,,,,,<+80h> 0FCF 4A4EFFFFFFC3 1C db "JN",'C'+80h C variant 073h, 39 040C 1C ASMDATA segment = 224B 1C ainfo = (073h) * ASMMOD + 39 040C 224B 1C db HIGH ainfo, LOW ainfo 040E 1C ASMDATA ends C variant 183h, 12, , ASM_MACH3 040E 1C ASMDATA segment 040E FFFFFFF0 1C db ASM_MACH3 = 72F0 1C ainfo = (183h) * ASMMOD + 12 040F 72FFFFFFF0 1C db HIGH ainfo, LOW ainfo 0411 1C ASMDATA ends C endvariant 0411 1C ASMDATA segment 0411 FFFFFFFF 1C db -1 0412 1C ASMDATA ends C mne JNE ; ofs=419h 0412 1C ASMDATA segment 00000412 = 412 1C CURROFS = $ 0412 1C ASMDATA ends 0FD2 1204 1C dw CURROFS - asmtab = 5CC 1C MN_JNE equ $ - mnlist = "JN",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 0FD4 4A4EFFFFFFC5 1C db "JN",'E'+80h C variant 075h, 39 0412 1C ASMDATA segment = 22E3 1C ainfo = (075h) * ASMMOD + 39 0412 22FFFFFFE3 1C db HIGH ainfo, LOW ainfo 0414 1C ASMDATA ends C variant 185h, 12, , ASM_MACH3 0414 1C ASMDATA segment 0414 FFFFFFF0 1C db ASM_MACH3 = 7388 1C ainfo = (185h) * ASMMOD + 12 0415 73FFFFFF88 1C db HIGH ainfo, LOW ainfo 0417 1C ASMDATA ends C endvariant 0417 1C ASMDATA segment 0417 FFFFFFFF 1C db -1 0418 1C ASMDATA ends C mne JNG ; ofs=41Fh 0418 1C ASMDATA segment 00000418 = 418 1C CURROFS = $ 0418 1C ASMDATA ends 0FD7 1804 1C dw CURROFS - asmtab = 5D1 1C MN_JNG equ $ - mnlist = "JN",'G'+80h 1C tmpstr catstr ,,,,,<+80h> 0FD9 4A4EFFFFFFC7 1C db "JN",'G'+80h C variant 07eh, 39 0418 1C ASMDATA segment = 258F 1C ainfo = (07eh) * ASMMOD + 39 0418 25FFFFFF8F 1C db HIGH ainfo, LOW ainfo 041A 1C ASMDATA ends C variant 18eh, 12, , ASM_MACH3 041A 1C ASMDATA segment 041A FFFFFFF0 1C db ASM_MACH3 = 7634 1C ainfo = (18eh) * ASMMOD + 12 041B 7634 1C db HIGH ainfo, LOW ainfo 041D 1C ASMDATA ends C endvariant 041D 1C ASMDATA segment 041D FFFFFFFF 1C db -1 041E 1C ASMDATA ends C mne JNGE ; ofs=425h 041E 1C ASMDATA segment 0000041E = 41E 1C CURROFS = $ 041E 1C ASMDATA ends 0FDC 1E04 1C dw CURROFS - asmtab = 5D6 1C MN_JNGE equ $ - mnlist = "JNG",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 0FDE 4A4E47FFFFFFC5 1C db "JNG",'E'+80h C variant 07ch, 39 041E 1C ASMDATA segment = 24F7 1C ainfo = (07ch) * ASMMOD + 39 041E 24FFFFFFF7 1C db HIGH ainfo, LOW ainfo 0420 1C ASMDATA ends C variant 18ch, 12, , ASM_MACH3 0420 1C ASMDATA segment 0420 FFFFFFF0 1C db ASM_MACH3 = 759C 1C ainfo = (18ch) * ASMMOD + 12 0421 75FFFFFF9C 1C db HIGH ainfo, LOW ainfo 0423 1C ASMDATA ends C endvariant 0423 1C ASMDATA segment 0423 FFFFFFFF 1C db -1 0424 1C ASMDATA ends C mne JNL ; ofs=42Bh 0424 1C ASMDATA segment 00000424 = 424 1C CURROFS = $ 0424 1C ASMDATA ends 0FE2 2404 1C dw CURROFS - asmtab = 5DC 1C MN_JNL equ $ - mnlist = "JN",'L'+80h 1C tmpstr catstr ,,,,,<+80h> 0FE4 4A4EFFFFFFCC 1C db "JN",'L'+80h C variant 07dh, 39 0424 1C ASMDATA segment = 2543 1C ainfo = (07dh) * ASMMOD + 39 0424 2543 1C db HIGH ainfo, LOW ainfo 0426 1C ASMDATA ends C variant 18dh, 12, , ASM_MACH3 0426 1C ASMDATA segment 0426 FFFFFFF0 1C db ASM_MACH3 = 75E8 1C ainfo = (18dh) * ASMMOD + 12 0427 75FFFFFFE8 1C db HIGH ainfo, LOW ainfo 0429 1C ASMDATA ends C endvariant 0429 1C ASMDATA segment 0429 FFFFFFFF 1C db -1 042A 1C ASMDATA ends C mne JNLE ; ofs=431h 042A 1C ASMDATA segment 0000042A = 42A 1C CURROFS = $ 042A 1C ASMDATA ends 0FE7 2A04 1C dw CURROFS - asmtab = 5E1 1C MN_JNLE equ $ - mnlist = "JNL",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 0FE9 4A4E4CFFFFFFC5 1C db "JNL",'E'+80h C variant 07fh, 39 042A 1C ASMDATA segment = 25DB 1C ainfo = (07fh) * ASMMOD + 39 042A 25FFFFFFDB 1C db HIGH ainfo, LOW ainfo 042C 1C ASMDATA ends C variant 18fh, 12, , ASM_MACH3 042C 1C ASMDATA segment 042C FFFFFFF0 1C db ASM_MACH3 = 7680 1C ainfo = (18fh) * ASMMOD + 12 042D 76FFFFFF80 1C db HIGH ainfo, LOW ainfo 042F 1C ASMDATA ends C endvariant 042F 1C ASMDATA segment 042F FFFFFFFF 1C db -1 0430 1C ASMDATA ends C mne JNO ; ofs=437h 0430 1C ASMDATA segment 00000430 = 430 1C CURROFS = $ 0430 1C ASMDATA ends 0FED 3004 1C dw CURROFS - asmtab = 5E7 1C MN_JNO equ $ - mnlist = "JN",'O'+80h 1C tmpstr catstr ,,,,,<+80h> 0FEF 4A4EFFFFFFCF 1C db "JN",'O'+80h C variant 071h, 39 0430 1C ASMDATA segment = 21B3 1C ainfo = (071h) * ASMMOD + 39 0430 21FFFFFFB3 1C db HIGH ainfo, LOW ainfo 0432 1C ASMDATA ends C variant 181h, 12, , ASM_MACH3 0432 1C ASMDATA segment 0432 FFFFFFF0 1C db ASM_MACH3 = 7258 1C ainfo = (181h) * ASMMOD + 12 0433 7258 1C db HIGH ainfo, LOW ainfo 0435 1C ASMDATA ends C endvariant 0435 1C ASMDATA segment 0435 FFFFFFFF 1C db -1 0436 1C ASMDATA ends C mne JNP ; ofs=43Dh 0436 1C ASMDATA segment 00000436 = 436 1C CURROFS = $ 0436 1C ASMDATA ends 0FF2 3604 1C dw CURROFS - asmtab = 5EC 1C MN_JNP equ $ - mnlist = "JN",'P'+80h 1C tmpstr catstr ,,,

,,<+80h> 0FF4 4A4EFFFFFFD0 1C db "JN",'P'+80h C variant 07bh, 39 0436 1C ASMDATA segment = 24AB 1C ainfo = (07bh) * ASMMOD + 39 0436 24FFFFFFAB 1C db HIGH ainfo, LOW ainfo 0438 1C ASMDATA ends C variant 18bh, 12, , ASM_MACH3 0438 1C ASMDATA segment 0438 FFFFFFF0 1C db ASM_MACH3 = 7550 1C ainfo = (18bh) * ASMMOD + 12 0439 7550 1C db HIGH ainfo, LOW ainfo 043B 1C ASMDATA ends C endvariant 043B 1C ASMDATA segment 043B FFFFFFFF 1C db -1 043C 1C ASMDATA ends C mne JNS ; ofs=443h 043C 1C ASMDATA segment 0000043C = 43C 1C CURROFS = $ 043C 1C ASMDATA ends 0FF7 3C04 1C dw CURROFS - asmtab = 5F1 1C MN_JNS equ $ - mnlist = "JN",'S'+80h 1C tmpstr catstr ,,,,,<+80h> 0FF9 4A4EFFFFFFD3 1C db "JN",'S'+80h C variant 079h, 39 043C 1C ASMDATA segment = 2413 1C ainfo = (079h) * ASMMOD + 39 043C 2413 1C db HIGH ainfo, LOW ainfo 043E 1C ASMDATA ends C variant 189h, 12, , ASM_MACH3 043E 1C ASMDATA segment 043E FFFFFFF0 1C db ASM_MACH3 = 74B8 1C ainfo = (189h) * ASMMOD + 12 043F 74FFFFFFB8 1C db HIGH ainfo, LOW ainfo 0441 1C ASMDATA ends C endvariant 0441 1C ASMDATA segment 0441 FFFFFFFF 1C db -1 0442 1C ASMDATA ends C mne JNZ ; ofs=449h 0442 1C ASMDATA segment 00000442 = 442 1C CURROFS = $ 0442 1C ASMDATA ends 0FFC 4204 1C dw CURROFS - asmtab = 5F6 1C MN_JNZ equ $ - mnlist = "JN",'Z'+80h 1C tmpstr catstr ,,,,,<+80h> 0FFE 4A4EFFFFFFDA 1C db "JN",'Z'+80h C variant 075h, 39 0442 1C ASMDATA segment = 22E3 1C ainfo = (075h) * ASMMOD + 39 0442 22FFFFFFE3 1C db HIGH ainfo, LOW ainfo 0444 1C ASMDATA ends C variant 185h, 12, , ASM_MACH3 0444 1C ASMDATA segment 0444 FFFFFFF0 1C db ASM_MACH3 = 7388 1C ainfo = (185h) * ASMMOD + 12 0445 73FFFFFF88 1C db HIGH ainfo, LOW ainfo 0447 1C ASMDATA ends C endvariant 0447 1C ASMDATA segment 0447 FFFFFFFF 1C db -1 0448 1C ASMDATA ends C mne JO ; ofs=44Fh 0448 1C ASMDATA segment 00000448 = 448 1C CURROFS = $ 0448 1C ASMDATA ends 1001 4804 1C dw CURROFS - asmtab = 5FB 1C MN_JO equ $ - mnlist = "J",'O'+80h 1C tmpstr catstr ,,,,,<+80h> 1003 4AFFFFFFCF 1C db "J",'O'+80h C variant 070h, 39 0448 1C ASMDATA segment = 2167 1C ainfo = (070h) * ASMMOD + 39 0448 2167 1C db HIGH ainfo, LOW ainfo 044A 1C ASMDATA ends C variant 180h, 12, , ASM_MACH3 044A 1C ASMDATA segment 044A FFFFFFF0 1C db ASM_MACH3 = 720C 1C ainfo = (180h) * ASMMOD + 12 044B 720C 1C db HIGH ainfo, LOW ainfo 044D 1C ASMDATA ends C endvariant 044D 1C ASMDATA segment 044D FFFFFFFF 1C db -1 044E 1C ASMDATA ends C mne JP ; ofs=455h 044E 1C ASMDATA segment 0000044E = 44E 1C CURROFS = $ 044E 1C ASMDATA ends 1005 4E04 1C dw CURROFS - asmtab = 5FF 1C MN_JP equ $ - mnlist = "J",'P'+80h 1C tmpstr catstr ,,,

,,<+80h> 1007 4AFFFFFFD0 1C db "J",'P'+80h C variant 07ah, 39 044E 1C ASMDATA segment = 245F 1C ainfo = (07ah) * ASMMOD + 39 044E 245F 1C db HIGH ainfo, LOW ainfo 0450 1C ASMDATA ends C variant 18ah, 12, , ASM_MACH3 0450 1C ASMDATA segment 0450 FFFFFFF0 1C db ASM_MACH3 = 7504 1C ainfo = (18ah) * ASMMOD + 12 0451 7504 1C db HIGH ainfo, LOW ainfo 0453 1C ASMDATA ends C endvariant 0453 1C ASMDATA segment 0453 FFFFFFFF 1C db -1 0454 1C ASMDATA ends C mne JPE ; ofs=45Bh 0454 1C ASMDATA segment 00000454 = 454 1C CURROFS = $ 0454 1C ASMDATA ends 1009 5404 1C dw CURROFS - asmtab = 603 1C MN_JPE equ $ - mnlist = "JP",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 100B 4A50FFFFFFC5 1C db "JP",'E'+80h C variant 07ah, 39 0454 1C ASMDATA segment = 245F 1C ainfo = (07ah) * ASMMOD + 39 0454 245F 1C db HIGH ainfo, LOW ainfo 0456 1C ASMDATA ends C variant 18ah, 12, , ASM_MACH3 0456 1C ASMDATA segment 0456 FFFFFFF0 1C db ASM_MACH3 = 7504 1C ainfo = (18ah) * ASMMOD + 12 0457 7504 1C db HIGH ainfo, LOW ainfo 0459 1C ASMDATA ends C endvariant 0459 1C ASMDATA segment 0459 FFFFFFFF 1C db -1 045A 1C ASMDATA ends C mne JPO ; ofs=461h 045A 1C ASMDATA segment 0000045A = 45A 1C CURROFS = $ 045A 1C ASMDATA ends 100E 5A04 1C dw CURROFS - asmtab = 608 1C MN_JPO equ $ - mnlist = "JP",'O'+80h 1C tmpstr catstr ,,,,,<+80h> 1010 4A50FFFFFFCF 1C db "JP",'O'+80h C variant 07bh, 39 045A 1C ASMDATA segment = 24AB 1C ainfo = (07bh) * ASMMOD + 39 045A 24FFFFFFAB 1C db HIGH ainfo, LOW ainfo 045C 1C ASMDATA ends C variant 18bh, 12, , ASM_MACH3 045C 1C ASMDATA segment 045C FFFFFFF0 1C db ASM_MACH3 = 7550 1C ainfo = (18bh) * ASMMOD + 12 045D 7550 1C db HIGH ainfo, LOW ainfo 045F 1C ASMDATA ends C endvariant 045F 1C ASMDATA segment 045F FFFFFFFF 1C db -1 0460 1C ASMDATA ends C mne JS ; ofs=467h 0460 1C ASMDATA segment 00000460 = 460 1C CURROFS = $ 0460 1C ASMDATA ends 1013 6004 1C dw CURROFS - asmtab = 60D 1C MN_JS equ $ - mnlist = "J",'S'+80h 1C tmpstr catstr ,,,,,<+80h> 1015 4AFFFFFFD3 1C db "J",'S'+80h C variant 078h, 39 0460 1C ASMDATA segment = 23C7 1C ainfo = (078h) * ASMMOD + 39 0460 23FFFFFFC7 1C db HIGH ainfo, LOW ainfo 0462 1C ASMDATA ends C variant 188h, 12, , ASM_MACH3 0462 1C ASMDATA segment 0462 FFFFFFF0 1C db ASM_MACH3 = 746C 1C ainfo = (188h) * ASMMOD + 12 0463 746C 1C db HIGH ainfo, LOW ainfo 0465 1C ASMDATA ends C endvariant 0465 1C ASMDATA segment 0465 FFFFFFFF 1C db -1 0466 1C ASMDATA ends C mne JZ ; ofs=46Dh 0466 1C ASMDATA segment 00000466 = 466 1C CURROFS = $ 0466 1C ASMDATA ends 1017 6604 1C dw CURROFS - asmtab = 611 1C MN_JZ equ $ - mnlist = "J",'Z'+80h 1C tmpstr catstr ,,,,,<+80h> 1019 4AFFFFFFDA 1C db "J",'Z'+80h C variant 074h, 39 0466 1C ASMDATA segment = 2297 1C ainfo = (074h) * ASMMOD + 39 0466 22FFFFFF97 1C db HIGH ainfo, LOW ainfo 0468 1C ASMDATA ends C variant 184h, 12, , ASM_MACH3 0468 1C ASMDATA segment 0468 FFFFFFF0 1C db ASM_MACH3 = 733C 1C ainfo = (184h) * ASMMOD + 12 0469 733C 1C db HIGH ainfo, LOW ainfo 046B 1C ASMDATA ends C endvariant 046B 1C ASMDATA segment 046B FFFFFFFF 1C db -1 046C 1C ASMDATA ends C mne JMP ; ofs=473h 046C 1C ASMDATA segment 0000046C = 46C 1C CURROFS = $ 046C 1C ASMDATA ends 101B 6C04 1C dw CURROFS - asmtab = 615 1C MN_JMP equ $ - mnlist = "JM",'P'+80h 1C tmpstr catstr ,,,

,,<+80h> 101D 4A4DFFFFFFD0 1C db "JM",'P'+80h C variant 0ebh, 39 046C 1C ASMDATA segment = 45EB 1C ainfo = (0ebh) * ASMMOD + 39 046C 45FFFFFFEB 1C db HIGH ainfo, LOW ainfo 046E 1C ASMDATA ends C variant 0e9h, 12 046E 1C ASMDATA segment = 4538 1C ainfo = (0e9h) * ASMMOD + 12 046E 4538 1C db HIGH ainfo, LOW ainfo 0470 1C ASMDATA ends C variant AGRP(3,4), 40 0470 1C ASMDATA segment = B378 1C ainfo = (240h + 3*8 + 4) * ASMMOD + 40 0470 FFFFFFB378 1C db HIGH ainfo, LOW ainfo 0472 1C ASMDATA ends C variant AGRP(3,5), 14 0472 1C ASMDATA segment = B3AA 1C ainfo = (240h + 3*8 + 5) * ASMMOD + 14 0472 FFFFFFB3FFFFFFAA 1C db HIGH ainfo, LOW ainfo 0474 1C ASMDATA ends C variant 0eah, 13 0474 1C ASMDATA segment = 4585 1C ainfo = (0eah) * ASMMOD + 13 0474 45FFFFFF85 1C db HIGH ainfo, LOW ainfo 0476 1C ASMDATA ends C endvariant 0476 1C ASMDATA segment 0476 FFFFFFFF 1C db -1 0477 1C ASMDATA ends C mne LAHF ; ofs=47Eh 0477 1C ASMDATA segment 00000477 = 477 1C CURROFS = $ 0477 1C ASMDATA ends 1020 7704 1C dw CURROFS - asmtab = 61A 1C MN_LAHF equ $ - mnlist = "LAH",'F'+80h 1C tmpstr catstr ,,,,,<+80h> 1022 4C4148FFFFFFC6 1C db "LAH",'F'+80h C variant 09fh, 0 0477 1C ASMDATA segment = 2F34 1C ainfo = (09fh) * ASMMOD + 0 0477 2F34 1C db HIGH ainfo, LOW ainfo 0479 1C ASMDATA ends C endvariant 0479 1C ASMDATA segment 0479 FFFFFFFF 1C db -1 047A 1C ASMDATA ends C mne LAR ; ofs=481h 047A 1C ASMDATA segment 0000047A = 47A 1C CURROFS = $ 047A 1C ASMDATA ends 1026 7A04 1C dw CURROFS - asmtab = 620 1C MN_LAR equ $ - mnlist = "LA",'R'+80h 1C tmpstr catstr ,,,,,<+80h> 1028 4C41FFFFFFD2 1C db "LA",'R'+80h C variant 102h, 8, , ASM_MACH2 047A 1C ASMDATA segment 047A FFFFFFEF 1C db ASM_MACH2 = 4CA0 1C ainfo = (102h) * ASMMOD + 8 047B 4CFFFFFFA0 1C db HIGH ainfo, LOW ainfo 047D 1C ASMDATA ends C endvariant 047D 1C ASMDATA segment 047D FFFFFFFF 1C db -1 047E 1C ASMDATA ends C mne LDS ; ofs=485h 047E 1C ASMDATA segment 0000047E = 47E 1C CURROFS = $ 047E 1C ASMDATA ends 102B 7E04 1C dw CURROFS - asmtab = 625 1C MN_LDS equ $ - mnlist = "LD",'S'+80h 1C tmpstr catstr ,,,,,<+80h> 102D 4C44FFFFFFD3 1C db "LD",'S'+80h C variant 0c5h, 7 047E 1C ASMDATA segment = 3A83 1C ainfo = (0c5h) * ASMMOD + 7 047E 3AFFFFFF83 1C db HIGH ainfo, LOW ainfo 0480 1C ASMDATA ends C endvariant 0480 1C ASMDATA segment 0480 FFFFFFFF 1C db -1 0481 1C ASMDATA ends C mne LSS ; ofs=488h 0481 1C ASMDATA segment 00000481 = 481 1C CURROFS = $ 0481 1C ASMDATA ends 1030 FFFFFF8104 1C dw CURROFS - asmtab = 62A 1C MN_LSS equ $ - mnlist = "LS",'S'+80h 1C tmpstr catstr ,,,,,<+80h> 1032 4C53FFFFFFD3 1C db "LS",'S'+80h C variant 1b2h, 7, , ASM_MACH3 0481 1C ASMDATA segment 0481 FFFFFFF0 1C db ASM_MACH3 = 80DF 1C ainfo = (1b2h) * ASMMOD + 7 0482 FFFFFF80FFFFFFDF 1C db HIGH ainfo, LOW ainfo 0484 1C ASMDATA ends C endvariant 0484 1C ASMDATA segment 0484 FFFFFFFF 1C db -1 0485 1C ASMDATA ends C mne LES ; ofs=48Ch 0485 1C ASMDATA segment 00000485 = 485 1C CURROFS = $ 0485 1C ASMDATA ends 1035 FFFFFF8504 1C dw CURROFS - asmtab = 62F 1C MN_LES equ $ - mnlist = "LE",'S'+80h 1C tmpstr catstr ,,,,,<+80h> 1037 4C45FFFFFFD3 1C db "LE",'S'+80h C variant 0c4h, 7 0485 1C ASMDATA segment = 3A37 1C ainfo = (0c4h) * ASMMOD + 7 0485 3A37 1C db HIGH ainfo, LOW ainfo 0487 1C ASMDATA ends C endvariant 0487 1C ASMDATA segment 0487 FFFFFFFF 1C db -1 0488 1C ASMDATA ends C mne LFS ; ofs=48Fh 0488 1C ASMDATA segment 00000488 = 488 1C CURROFS = $ 0488 1C ASMDATA ends 103A FFFFFF8804 1C dw CURROFS - asmtab = 634 1C MN_LFS equ $ - mnlist = "LF",'S'+80h 1C tmpstr catstr ,,,,,<+80h> 103C 4C46FFFFFFD3 1C db "LF",'S'+80h C variant 1b4h, 7, , ASM_MACH3 0488 1C ASMDATA segment 0488 FFFFFFF0 1C db ASM_MACH3 = 8177 1C ainfo = (1b4h) * ASMMOD + 7 0489 FFFFFF8177 1C db HIGH ainfo, LOW ainfo 048B 1C ASMDATA ends C endvariant 048B 1C ASMDATA segment 048B FFFFFFFF 1C db -1 048C 1C ASMDATA ends C mne LGS ; ofs=493h 048C 1C ASMDATA segment 0000048C = 48C 1C CURROFS = $ 048C 1C ASMDATA ends 103F FFFFFF8C04 1C dw CURROFS - asmtab = 639 1C MN_LGS equ $ - mnlist = "LG",'S'+80h 1C tmpstr catstr ,,,,,<+80h> 1041 4C47FFFFFFD3 1C db "LG",'S'+80h C variant 1b5h, 7, , ASM_MACH3 048C 1C ASMDATA segment 048C FFFFFFF0 1C db ASM_MACH3 = 81C3 1C ainfo = (1b5h) * ASMMOD + 7 048D FFFFFF81FFFFFFC3 1C db HIGH ainfo, LOW ainfo 048F 1C ASMDATA ends C endvariant 048F 1C ASMDATA segment 048F FFFFFFFF 1C db -1 0490 1C ASMDATA ends C mne LEA ; ofs=497h 0490 1C ASMDATA segment 00000490 = 490 1C CURROFS = $ 0490 1C ASMDATA ends 1044 FFFFFF9004 1C dw CURROFS - asmtab = 63E 1C MN_LEA equ $ - mnlist = "LE",'A'+80h 1C tmpstr catstr ,,,,,<+80h> 1046 4C45FFFFFFC1 1C db "LE",'A'+80h C variant 08dh, 7 0490 1C ASMDATA segment = 29E3 1C ainfo = (08dh) * ASMMOD + 7 0490 29FFFFFFE3 1C db HIGH ainfo, LOW ainfo 0492 1C ASMDATA ends C endvariant 0492 1C ASMDATA segment 0492 FFFFFFFF 1C db -1 0493 1C ASMDATA ends C mne LEAVE ; ofs=49Ah 0493 1C ASMDATA segment 00000493 = 493 1C CURROFS = $ 0493 1C ASMDATA ends 1049 FFFFFF9304 1C dw CURROFS - asmtab = 643 1C MN_LEAVE equ $ - mnlist = "LEAV",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 104B 4C454156FFFFFFC5 1C db "LEAV",'E'+80h C variant 0c9h, 0, , ASM_MACH1 0493 1C ASMDATA segment 0493 FFFFFFEE 1C db ASM_MACH1 = 3BAC 1C ainfo = (0c9h) * ASMMOD + 0 0494 3BFFFFFFAC 1C db HIGH ainfo, LOW ainfo 0496 1C ASMDATA ends C endvariant 0496 1C ASMDATA segment 0496 FFFFFFFF 1C db -1 0497 1C ASMDATA ends C mne LGDT ; ofs=49Eh 0497 1C ASMDATA segment 00000497 = 497 1C CURROFS = $ 0497 1C ASMDATA ends 1050 FFFFFF9704 1C dw CURROFS - asmtab = 64A 1C MN_LGDT equ $ - mnlist = "LGD",'T'+80h 1C tmpstr catstr ,,,,,<+80h> 1052 4C4744FFFFFFD4 1C db "LGD",'T'+80h C variant AGRP(7,2), 29, , ASM_MACH2 0497 1C ASMDATA segment 0497 FFFFFFEF 1C db ASM_MACH2 = BC55 1C ainfo = (240h + 7*8 + 2) * ASMMOD + 29 0498 FFFFFFBC55 1C db HIGH ainfo, LOW ainfo 049A 1C ASMDATA ends C endvariant 049A 1C ASMDATA segment 049A FFFFFFFF 1C db -1 049B 1C ASMDATA ends C mne LIDT ; ofs=4A2h 049B 1C ASMDATA segment 0000049B = 49B 1C CURROFS = $ 049B 1C ASMDATA ends 1056 FFFFFF9B04 1C dw CURROFS - asmtab = 650 1C MN_LIDT equ $ - mnlist = "LID",'T'+80h 1C tmpstr catstr ,,,,,<+80h> 1058 4C4944FFFFFFD4 1C db "LID",'T'+80h C variant AGRP(7,3), 29, , ASM_MACH2 049B 1C ASMDATA segment 049B FFFFFFEF 1C db ASM_MACH2 = BCA1 1C ainfo = (240h + 7*8 + 3) * ASMMOD + 29 049C FFFFFFBCFFFFFFA1 1C db HIGH ainfo, LOW ainfo 049E 1C ASMDATA ends C endvariant 049E 1C ASMDATA segment 049E FFFFFFFF 1C db -1 049F 1C ASMDATA ends C mne LLDT ; ofs=4A6h 049F 1C ASMDATA segment 0000049F = 49F 1C CURROFS = $ 049F 1C ASMDATA ends 105C FFFFFF9F04 1C dw CURROFS - asmtab = 656 1C MN_LLDT equ $ - mnlist = "LLD",'T'+80h 1C tmpstr catstr ,,,,,<+80h> 105E 4C4C44FFFFFFD4 1C db "LLD",'T'+80h C variant AGRP(8,2), 41, , ASM_MACH2 049F 1C ASMDATA segment 049F FFFFFFEF 1C db ASM_MACH2 = BEC1 1C ainfo = (240h + 8*8 + 2) * ASMMOD + 41 04A0 FFFFFFBEFFFFFFC1 1C db HIGH ainfo, LOW ainfo 04A2 1C ASMDATA ends C endvariant 04A2 1C ASMDATA segment 04A2 FFFFFFFF 1C db -1 04A3 1C ASMDATA ends C mne LMSW ; ofs=4AAh 04A3 1C ASMDATA segment 000004A3 = 4A3 1C CURROFS = $ 04A3 1C ASMDATA ends 1062 FFFFFFA304 1C dw CURROFS - asmtab = 65C 1C MN_LMSW equ $ - mnlist = "LMS",'W'+80h 1C tmpstr catstr ,,,,,<+80h> 1064 4C4D53FFFFFFD7 1C db "LMS",'W'+80h C variant AGRP(7,6), 41, , ASM_MACH2 04A3 1C ASMDATA segment 04A3 FFFFFFEF 1C db ASM_MACH2 = BD91 1C ainfo = (240h + 7*8 + 6) * ASMMOD + 41 04A4 FFFFFFBDFFFFFF91 1C db HIGH ainfo, LOW ainfo 04A6 1C ASMDATA ends C endvariant 04A6 1C ASMDATA segment 04A6 FFFFFFFF 1C db -1 04A7 1C ASMDATA ends C mne LOCK, ASM_LOCKREP, 0f0h ; ofs=4AEh 04A7 1C ASMDATA segment 000004A7 = 4A7 1C CURROFS = $ 04A7 FFFFFFF5FFFFFFF0 1C db ASM_LOCKREP,0f0h 04A9 1C ASMDATA ends 1068 FFFFFFA704 1C dw CURROFS - asmtab = 662 1C MN_LOCK equ $ - mnlist = "LOC",'K'+80h 1C tmpstr catstr ,,,,,<+80h> 106A 4C4F43FFFFFFCB 1C db "LOC",'K'+80h C mne LODSB ; ofs=4B0h 04A9 1C ASMDATA segment 000004A9 = 4A9 1C CURROFS = $ 04A9 1C ASMDATA ends 106E FFFFFFA904 1C dw CURROFS - asmtab = 668 1C MN_LODSB equ $ - mnlist = "LODS",'B'+80h 1C tmpstr catstr ,,,,,<+80h> 1070 4C4F4453FFFFFFC2 1C db "LODS",'B'+80h C variant 0ach, 0 04A9 1C ASMDATA segment = 3310 1C ainfo = (0ach) * ASMMOD + 0 04A9 3310 1C db HIGH ainfo, LOW ainfo 04AB 1C ASMDATA ends C endvariant 04AB 1C ASMDATA segment 04AB FFFFFFFF 1C db -1 04AC 1C ASMDATA ends C mne LODSW, ASM_D16 ; ofs=4B3h 04AC 1C ASMDATA segment 000004AC = 4AC 1C CURROFS = $ 04AC FFFFFFF8 1C db ASM_D16 04AD 1C ASMDATA ends 1075 FFFFFFAC04 1C dw CURROFS - asmtab = 66F 1C MN_LODSW equ $ - mnlist = "LODS",'W'+80h 1C tmpstr catstr ,,,,,<+80h> 1077 4C4F4453FFFFFFD7 1C db "LODS",'W'+80h C mne LODSD, ASM_D32 ; ofs=4B4h 04AD 1C ASMDATA segment 000004AD = 4AD 1C CURROFS = $ 04AD FFFFFFF9 1C db ASM_D32 04AE 1C ASMDATA ends 107C FFFFFFAD04 1C dw CURROFS - asmtab = 676 1C MN_LODSD equ $ - mnlist = "LODS",'D'+80h 1C tmpstr catstr ,,,,,<+80h> 107E 4C4F4453FFFFFFC4 1C db "LODS",'D'+80h C variant 0adh, 0 04AE 1C ASMDATA segment = 335C 1C ainfo = (0adh) * ASMMOD + 0 04AE 335C 1C db HIGH ainfo, LOW ainfo 04B0 1C ASMDATA ends C endvariant 04B0 1C ASMDATA segment 04B0 FFFFFFFF 1C db -1 04B1 1C ASMDATA ends C mne LOOP ; ofs=4B8h 04B1 1C ASMDATA segment 000004B1 = 4B1 1C CURROFS = $ 04B1 1C ASMDATA ends 1083 FFFFFFB104 1C dw CURROFS - asmtab = 67D 1C MN_LOOP equ $ - mnlist = "LOO",'P'+80h 1C tmpstr catstr ,,,

,,<+80h> 1085 4C4F4FFFFFFFD0 1C db "LOO",'P'+80h C variant 0e2h, 39 04B1 1C ASMDATA segment = 433F 1C ainfo = (0e2h) * ASMMOD + 39 04B1 433F 1C db HIGH ainfo, LOW ainfo 04B3 1C ASMDATA ends C endvariant 04B3 1C ASMDATA segment 04B3 FFFFFFFF 1C db -1 04B4 1C ASMDATA ends C mne LOOPW, ASM_D16 ; ofs=4BBh 04B4 1C ASMDATA segment 000004B4 = 4B4 1C CURROFS = $ 04B4 FFFFFFF8 1C db ASM_D16 04B5 1C ASMDATA ends 1089 FFFFFFB404 1C dw CURROFS - asmtab = 683 1C MN_LOOPW equ $ - mnlist = "LOOP",'W'+80h 1C tmpstr catstr ,,,,,<+80h> 108B 4C4F4F50FFFFFFD7 1C db "LOOP",'W'+80h C mne LOOPD, ASM_D32 ; ofs=4BCh 04B5 1C ASMDATA segment 000004B5 = 4B5 1C CURROFS = $ 04B5 FFFFFFF9 1C db ASM_D32 04B6 1C ASMDATA ends 1090 FFFFFFB504 1C dw CURROFS - asmtab = 68A 1C MN_LOOPD equ $ - mnlist = "LOOP",'D'+80h 1C tmpstr catstr ,,,,,<+80h> 1092 4C4F4F50FFFFFFC4 1C db "LOOP",'D'+80h C variant 0e2h, 39 04B6 1C ASMDATA segment = 433F 1C ainfo = (0e2h) * ASMMOD + 39 04B6 433F 1C db HIGH ainfo, LOW ainfo 04B8 1C ASMDATA ends C endvariant 04B8 1C ASMDATA segment 04B8 FFFFFFFF 1C db -1 04B9 1C ASMDATA ends C mne LOOPZ ; ofs=4C0h 04B9 1C ASMDATA segment 000004B9 = 4B9 1C CURROFS = $ 04B9 1C ASMDATA ends 1097 FFFFFFB904 1C dw CURROFS - asmtab = 691 1C MN_LOOPZ equ $ - mnlist = "LOOP",'Z'+80h 1C tmpstr catstr ,,,,,<+80h> 1099 4C4F4F50FFFFFFDA 1C db "LOOP",'Z'+80h C variant 0e1h, 39 04B9 1C ASMDATA segment = 42F3 1C ainfo = (0e1h) * ASMMOD + 39 04B9 42FFFFFFF3 1C db HIGH ainfo, LOW ainfo 04BB 1C ASMDATA ends C endvariant 04BB 1C ASMDATA segment 04BB FFFFFFFF 1C db -1 04BC 1C ASMDATA ends C mne LOOPE ; ofs=4C3h 04BC 1C ASMDATA segment 000004BC = 4BC 1C CURROFS = $ 04BC 1C ASMDATA ends 109E FFFFFFBC04 1C dw CURROFS - asmtab = 698 1C MN_LOOPE equ $ - mnlist = "LOOP",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 10A0 4C4F4F50FFFFFFC5 1C db "LOOP",'E'+80h C variant 0e1h, 39 04BC 1C ASMDATA segment = 42F3 1C ainfo = (0e1h) * ASMMOD + 39 04BC 42FFFFFFF3 1C db HIGH ainfo, LOW ainfo 04BE 1C ASMDATA ends C endvariant 04BE 1C ASMDATA segment 04BE FFFFFFFF 1C db -1 04BF 1C ASMDATA ends C mne LOOPEW, ASM_D16 ; ofs=4C6h 04BF 1C ASMDATA segment 000004BF = 4BF 1C CURROFS = $ 04BF FFFFFFF8 1C db ASM_D16 04C0 1C ASMDATA ends 10A5 FFFFFFBF04 1C dw CURROFS - asmtab = 69F 1C MN_LOOPEW equ $ - mnlist = "LOOPE",'W'+80h 1C tmpstr catstr ,,,,,<+80h> 10A7 4C4F4F5045FFFFFFD7 1C db "LOOPE",'W'+80h C mne LOOPED, ASM_D32 ; ofs=4C7h 04C0 1C ASMDATA segment 000004C0 = 4C0 1C CURROFS = $ 04C0 FFFFFFF9 1C db ASM_D32 04C1 1C ASMDATA ends 10AD FFFFFFC004 1C dw CURROFS - asmtab = 6A7 1C MN_LOOPED equ $ - mnlist = "LOOPE",'D'+80h 1C tmpstr catstr ,,,,,<+80h> 10AF 4C4F4F5045FFFFFFC4 1C db "LOOPE",'D'+80h C variant 0e1h, 39 04C1 1C ASMDATA segment = 42F3 1C ainfo = (0e1h) * ASMMOD + 39 04C1 42FFFFFFF3 1C db HIGH ainfo, LOW ainfo 04C3 1C ASMDATA ends C endvariant 04C3 1C ASMDATA segment 04C3 FFFFFFFF 1C db -1 04C4 1C ASMDATA ends C mne LOOPZW, ASM_D16 ; ofs=4CBh 04C4 1C ASMDATA segment 000004C4 = 4C4 1C CURROFS = $ 04C4 FFFFFFF8 1C db ASM_D16 04C5 1C ASMDATA ends 10B5 FFFFFFC404 1C dw CURROFS - asmtab = 6AF 1C MN_LOOPZW equ $ - mnlist = "LOOPZ",'W'+80h 1C tmpstr catstr ,,,,,<+80h> 10B7 4C4F4F505AFFFFFFD7 1C db "LOOPZ",'W'+80h C mne LOOPZD, ASM_D32 ; ofs=4CCh 04C5 1C ASMDATA segment 000004C5 = 4C5 1C CURROFS = $ 04C5 FFFFFFF9 1C db ASM_D32 04C6 1C ASMDATA ends 10BD FFFFFFC504 1C dw CURROFS - asmtab = 6B7 1C MN_LOOPZD equ $ - mnlist = "LOOPZ",'D'+80h 1C tmpstr catstr ,,,,,<+80h> 10BF 4C4F4F505AFFFFFFC4 1C db "LOOPZ",'D'+80h C variant 0e1h, 39 04C6 1C ASMDATA segment = 42F3 1C ainfo = (0e1h) * ASMMOD + 39 04C6 42FFFFFFF3 1C db HIGH ainfo, LOW ainfo 04C8 1C ASMDATA ends C endvariant 04C8 1C ASMDATA segment 04C8 FFFFFFFF 1C db -1 04C9 1C ASMDATA ends C mne LOOPNZ ; ofs=4D0h 04C9 1C ASMDATA segment 000004C9 = 4C9 1C CURROFS = $ 04C9 1C ASMDATA ends 10C5 FFFFFFC904 1C dw CURROFS - asmtab = 6BF 1C MN_LOOPNZ equ $ - mnlist = "LOOPN",'Z'+80h 1C tmpstr catstr ,,,,,<+80h> 10C7 4C4F4F504EFFFFFFDA 1C db "LOOPN",'Z'+80h C variant 0e0h, 39 04C9 1C ASMDATA segment = 42A7 1C ainfo = (0e0h) * ASMMOD + 39 04C9 42FFFFFFA7 1C db HIGH ainfo, LOW ainfo 04CB 1C ASMDATA ends C endvariant 04CB 1C ASMDATA segment 04CB FFFFFFFF 1C db -1 04CC 1C ASMDATA ends C mne LOOPNE ; ofs=4D3h 04CC 1C ASMDATA segment 000004CC = 4CC 1C CURROFS = $ 04CC 1C ASMDATA ends 10CD FFFFFFCC04 1C dw CURROFS - asmtab = 6C7 1C MN_LOOPNE equ $ - mnlist = "LOOPN",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 10CF 4C4F4F504EFFFFFFC5 1C db "LOOPN",'E'+80h C variant 0e0h, 39 04CC 1C ASMDATA segment = 42A7 1C ainfo = (0e0h) * ASMMOD + 39 04CC 42FFFFFFA7 1C db HIGH ainfo, LOW ainfo 04CE 1C ASMDATA ends C endvariant 04CE 1C ASMDATA segment 04CE FFFFFFFF 1C db -1 04CF 1C ASMDATA ends C mne LOOPNEW, ASM_D16 ; ofs=4D6h 04CF 1C ASMDATA segment 000004CF = 4CF 1C CURROFS = $ 04CF FFFFFFF8 1C db ASM_D16 04D0 1C ASMDATA ends 10D5 FFFFFFCF04 1C dw CURROFS - asmtab = 6CF 1C MN_LOOPNEW equ $ - mnlist = "LOOPNE",'W'+80h 1C tmpstr catstr ,,,,,<+80h> 10D7 4C4F4F504E45FFFFFFD7 1C db "LOOPNE",'W'+80h C mne LOOPNED, ASM_D32 ; ofs=4D7h 04D0 1C ASMDATA segment 000004D0 = 4D0 1C CURROFS = $ 04D0 FFFFFFF9 1C db ASM_D32 04D1 1C ASMDATA ends 10DE FFFFFFD004 1C dw CURROFS - asmtab = 6D8 1C MN_LOOPNED equ $ - mnlist = "LOOPNE",'D'+80h 1C tmpstr catstr ,,,,,<+80h> 10E0 4C4F4F504E45FFFFFFC4 1C db "LOOPNE",'D'+80h C variant 0e0h, 39 04D1 1C ASMDATA segment = 42A7 1C ainfo = (0e0h) * ASMMOD + 39 04D1 42FFFFFFA7 1C db HIGH ainfo, LOW ainfo 04D3 1C ASMDATA ends C endvariant 04D3 1C ASMDATA segment 04D3 FFFFFFFF 1C db -1 04D4 1C ASMDATA ends C mne LOOPNZW, ASM_D16 ; ofs=4DBh 04D4 1C ASMDATA segment 000004D4 = 4D4 1C CURROFS = $ 04D4 FFFFFFF8 1C db ASM_D16 04D5 1C ASMDATA ends 10E7 FFFFFFD404 1C dw CURROFS - asmtab = 6E1 1C MN_LOOPNZW equ $ - mnlist = "LOOPNZ",'W'+80h 1C tmpstr catstr ,,,,,<+80h> 10E9 4C4F4F504E5AFFFFFFD7 1C db "LOOPNZ",'W'+80h C mne LOOPNZD, ASM_D32 ; ofs=4DCh 04D5 1C ASMDATA segment 000004D5 = 4D5 1C CURROFS = $ 04D5 FFFFFFF9 1C db ASM_D32 04D6 1C ASMDATA ends 10F0 FFFFFFD504 1C dw CURROFS - asmtab = 6EA 1C MN_LOOPNZD equ $ - mnlist = "LOOPNZ",'D'+80h 1C tmpstr catstr ,,,,,<+80h> 10F2 4C4F4F504E5AFFFFFFC4 1C db "LOOPNZ",'D'+80h C variant 0e0h, 39 04D6 1C ASMDATA segment = 42A7 1C ainfo = (0e0h) * ASMMOD + 39 04D6 42FFFFFFA7 1C db HIGH ainfo, LOW ainfo 04D8 1C ASMDATA ends C endvariant 04D8 1C ASMDATA segment 04D8 FFFFFFFF 1C db -1 04D9 1C ASMDATA ends C mne LSL ; ofs=4E0h 04D9 1C ASMDATA segment 000004D9 = 4D9 1C CURROFS = $ 04D9 1C ASMDATA ends 10F9 FFFFFFD904 1C dw CURROFS - asmtab = 6F3 1C MN_LSL equ $ - mnlist = "LS",'L'+80h 1C tmpstr catstr ,,,,,<+80h> 10FB 4C53FFFFFFCC 1C db "LS",'L'+80h C variant 103h, 8, , ASM_MACH2 04D9 1C ASMDATA segment 04D9 FFFFFFEF 1C db ASM_MACH2 = 4CEC 1C ainfo = (103h) * ASMMOD + 8 04DA 4CFFFFFFEC 1C db HIGH ainfo, LOW ainfo 04DC 1C ASMDATA ends C endvariant 04DC 1C ASMDATA segment 04DC FFFFFFFF 1C db -1 04DD 1C ASMDATA ends C mne LTR ; ofs=4E4h 04DD 1C ASMDATA segment 000004DD = 4DD 1C CURROFS = $ 04DD 1C ASMDATA ends 10FE FFFFFFDD04 1C dw CURROFS - asmtab = 6F8 1C MN_LTR equ $ - mnlist = "LT",'R'+80h 1C tmpstr catstr ,,,,,<+80h> 1100 4C54FFFFFFD2 1C db "LT",'R'+80h C variant AGRP(8,3), 41, , ASM_MACH2 04DD 1C ASMDATA segment 04DD FFFFFFEF 1C db ASM_MACH2 = BF0D 1C ainfo = (240h + 8*8 + 3) * ASMMOD + 41 04DE FFFFFFBF0D 1C db HIGH ainfo, LOW ainfo 04E0 1C ASMDATA ends C endvariant 04E0 1C ASMDATA segment 04E0 FFFFFFFF 1C db -1 04E1 1C ASMDATA ends C mne MOV ; ofs=4E8h 04E1 1C ASMDATA segment 000004E1 = 4E1 1C CURROFS = $ 04E1 1C ASMDATA ends 1103 FFFFFFE104 1C dw CURROFS - asmtab = 6FD 1C MN_MOV equ $ - mnlist = "MO",'V'+80h 1C tmpstr catstr ,,,,,<+80h> 1105 4D4FFFFFFFD6 1C db "MO",'V'+80h C variant 0a0h, 44 04E1 1C ASMDATA segment = 2FAC 1C ainfo = (0a0h) * ASMMOD + 44 04E1 2FFFFFFFAC 1C db HIGH ainfo, LOW ainfo 04E3 1C ASMDATA ends C variant 0a2h, 45 04E3 1C ASMDATA segment = 3045 1C ainfo = (0a2h) * ASMMOD + 45 04E3 3045 1C db HIGH ainfo, LOW ainfo 04E5 1C ASMDATA ends C variant 088h, 4 04E5 1C ASMDATA segment = 2864 1C ainfo = (088h) * ASMMOD + 4 04E5 2864 1C db HIGH ainfo, LOW ainfo 04E7 1C ASMDATA ends C variant 08ah, 5 04E7 1C ASMDATA segment = 28FD 1C ainfo = (08ah) * ASMMOD + 5 04E7 28FFFFFFFD 1C db HIGH ainfo, LOW ainfo 04E9 1C ASMDATA ends C variant 08ch, 42 04E9 1C ASMDATA segment = 29BA 1C ainfo = (08ch) * ASMMOD + 42 04E9 29FFFFFFBA 1C db HIGH ainfo, LOW ainfo 04EB 1C ASMDATA ends C variant 08eh, 43 04EB 1C ASMDATA segment = 2A53 1C ainfo = (08eh) * ASMMOD + 43 04EB 2A53 1C db HIGH ainfo, LOW ainfo 04ED 1C ASMDATA ends C variant 0b0h, 46 04ED 1C ASMDATA segment = 346E 1C ainfo = (0b0h) * ASMMOD + 46 04ED 346E 1C db HIGH ainfo, LOW ainfo 04EF 1C ASMDATA ends C variant 0b8h, 47 04EF 1C ASMDATA segment = 36CF 1C ainfo = (0b8h) * ASMMOD + 47 04EF 36FFFFFFCF 1C db HIGH ainfo, LOW ainfo 04F1 1C ASMDATA ends C variant AGRP(9,0), 2 04F1 1C ASMDATA segment = C062 1C ainfo = (240h + 9*8 + 0) * ASMMOD + 2 04F1 FFFFFFC062 1C db HIGH ainfo, LOW ainfo 04F3 1C ASMDATA ends C variant 120h, 70, , ASM_MACH3 04F3 1C ASMDATA segment 04F3 FFFFFFF0 1C db ASM_MACH3 = 55C6 1C ainfo = (120h) * ASMMOD + 70 04F4 55FFFFFFC6 1C db HIGH ainfo, LOW ainfo 04F6 1C ASMDATA ends C variant 122h, 71, , ASM_MACH3 04F6 1C ASMDATA segment 04F6 FFFFFFF0 1C db ASM_MACH3 = 565F 1C ainfo = (122h) * ASMMOD + 71 04F7 565F 1C db HIGH ainfo, LOW ainfo 04F9 1C ASMDATA ends C variant 121h, 72, , ASM_MACH3 04F9 1C ASMDATA segment 04F9 FFFFFFF0 1C db ASM_MACH3 = 5614 1C ainfo = (121h) * ASMMOD + 72 04FA 5614 1C db HIGH ainfo, LOW ainfo 04FC 1C ASMDATA ends C variant 123h, 73, , ASM_MACH3 04FC 1C ASMDATA segment 04FC FFFFFFF0 1C db ASM_MACH3 = 56AD 1C ainfo = (123h) * ASMMOD + 73 04FD 56FFFFFFAD 1C db HIGH ainfo, LOW ainfo 04FF 1C ASMDATA ends C variant 124h, 74, , ASM_MACH3 04FF 1C ASMDATA segment 04FF FFFFFFF0 1C db ASM_MACH3 = 56FA 1C ainfo = (124h) * ASMMOD + 74 0500 56FFFFFFFA 1C db HIGH ainfo, LOW ainfo 0502 1C ASMDATA ends C variant 126h, 75, , ASM_MACH3 0502 1C ASMDATA segment 0502 FFFFFFF0 1C db ASM_MACH3 = 5793 1C ainfo = (126h) * ASMMOD + 75 0503 57FFFFFF93 1C db HIGH ainfo, LOW ainfo 0505 1C ASMDATA ends C endvariant 0505 1C ASMDATA segment 0505 FFFFFFFF 1C db -1 0506 1C ASMDATA ends C if MMXSUPP C endif C mne MOVSB ; ofs=51Bh 0506 1C ASMDATA segment 00000506 = 506 1C CURROFS = $ 0506 1C ASMDATA ends 1108 0605 1C dw CURROFS - asmtab = 702 1C MN_MOVSB equ $ - mnlist = "MOVS",'B'+80h 1C tmpstr catstr ,,,,,<+80h> 110A 4D4F5653FFFFFFC2 1C db "MOVS",'B'+80h C variant 0a4h, 0 0506 1C ASMDATA segment = 30B0 1C ainfo = (0a4h) * ASMMOD + 0 0506 30FFFFFFB0 1C db HIGH ainfo, LOW ainfo 0508 1C ASMDATA ends C endvariant 0508 1C ASMDATA segment 0508 FFFFFFFF 1C db -1 0509 1C ASMDATA ends C mne MOVSW, ASM_D16 ; ofs=51Eh 0509 1C ASMDATA segment 00000509 = 509 1C CURROFS = $ 0509 FFFFFFF8 1C db ASM_D16 050A 1C ASMDATA ends 110F 0905 1C dw CURROFS - asmtab = 709 1C MN_MOVSW equ $ - mnlist = "MOVS",'W'+80h 1C tmpstr catstr ,,,,,<+80h> 1111 4D4F5653FFFFFFD7 1C db "MOVS",'W'+80h C mne MOVSD, ASM_D32 ; ofs=51Fh 050A 1C ASMDATA segment 0000050A = 50A 1C CURROFS = $ 050A FFFFFFF9 1C db ASM_D32 050B 1C ASMDATA ends 1116 0A05 1C dw CURROFS - asmtab = 710 1C MN_MOVSD equ $ - mnlist = "MOVS",'D'+80h 1C tmpstr catstr ,,,,,<+80h> 1118 4D4F5653FFFFFFC4 1C db "MOVS",'D'+80h C variant 0a5h, 0 050B 1C ASMDATA segment = 30FC 1C ainfo = (0a5h) * ASMMOD + 0 050B 30FFFFFFFC 1C db HIGH ainfo, LOW ainfo 050D 1C ASMDATA ends C endvariant 050D 1C ASMDATA segment 050D FFFFFFFF 1C db -1 050E 1C ASMDATA ends C mne MOVSX ; ofs=523h 050E 1C ASMDATA segment 0000050E = 50E 1C CURROFS = $ 050E 1C ASMDATA ends 111D 0E05 1C dw CURROFS - asmtab = 717 1C MN_MOVSX equ $ - mnlist = "MOVS",'X'+80h 1C tmpstr catstr ,,,,,<+80h> 111F 4D4F5653FFFFFFD8 1C db "MOVS",'X'+80h C variant 1beh, 48, , ASM_MACH3 050E 1C ASMDATA segment 050E FFFFFFF0 1C db ASM_MACH3 = 8498 1C ainfo = (1beh) * ASMMOD + 48 050F FFFFFF84FFFFFF98 1C db HIGH ainfo, LOW ainfo 0511 1C ASMDATA ends C variant 1bfh, 49, , ASM_MACH3 0511 1C ASMDATA segment 0511 FFFFFFF0 1C db ASM_MACH3 = 84E5 1C ainfo = (1bfh) * ASMMOD + 49 0512 FFFFFF84FFFFFFE5 1C db HIGH ainfo, LOW ainfo 0514 1C ASMDATA ends C endvariant 0514 1C ASMDATA segment 0514 FFFFFFFF 1C db -1 0515 1C ASMDATA ends C mne MOVZX ; ofs=52Ah 0515 1C ASMDATA segment 00000515 = 515 1C CURROFS = $ 0515 1C ASMDATA ends 1124 1505 1C dw CURROFS - asmtab = 71E 1C MN_MOVZX equ $ - mnlist = "MOVZ",'X'+80h 1C tmpstr catstr ,,,,,<+80h> 1126 4D4F565AFFFFFFD8 1C db "MOVZ",'X'+80h C variant 1b6h, 48, , ASM_MACH3 0515 1C ASMDATA segment 0515 FFFFFFF0 1C db ASM_MACH3 = 8238 1C ainfo = (1b6h) * ASMMOD + 48 0516 FFFFFF8238 1C db HIGH ainfo, LOW ainfo 0518 1C ASMDATA ends C variant 1b7h, 49, , ASM_MACH3 0518 1C ASMDATA segment 0518 FFFFFFF0 1C db ASM_MACH3 = 8285 1C ainfo = (1b7h) * ASMMOD + 49 0519 FFFFFF82FFFFFF85 1C db HIGH ainfo, LOW ainfo 051B 1C ASMDATA ends C endvariant 051B 1C ASMDATA segment 051B FFFFFFFF 1C db -1 051C 1C ASMDATA ends C mne MUL ; ofs=531h 051C 1C ASMDATA segment 0000051C = 51C 1C CURROFS = $ 051C 1C ASMDATA ends 112B 1C05 1C dw CURROFS - asmtab = 725 1C MN_MUL equ $ - mnlist = "MU",'L'+80h 1C tmpstr catstr ,,,,,<+80h> 112D 4D55FFFFFFCC 1C db "MU",'L'+80h C variant AGRP(6,4), 16 051C 1C ASMDATA segment = BA80 1C ainfo = (240h + 6*8 + 4) * ASMMOD + 16 051C FFFFFFBAFFFFFF80 1C db HIGH ainfo, LOW ainfo 051E 1C ASMDATA ends C endvariant 051E 1C ASMDATA segment 051E FFFFFFFF 1C db -1 051F 1C ASMDATA ends C mne NEG ; ofs=534h 051F 1C ASMDATA segment 0000051F = 51F 1C CURROFS = $ 051F 1C ASMDATA ends 1130 1F05 1C dw CURROFS - asmtab = 72A 1C MN_NEG equ $ - mnlist = "NE",'G'+80h 1C tmpstr catstr ,,,,,<+80h> 1132 4E45FFFFFFC7 1C db "NE",'G'+80h C variant AGRP(6,3), 16, ASM_LOCKABLE 051F 1C ASMDATA segment 051F FFFFFFF4 1C db ASM_LOCKABLE = BA34 1C ainfo = (240h + 6*8 + 3) * ASMMOD + 16 0520 FFFFFFBA34 1C db HIGH ainfo, LOW ainfo 0522 1C ASMDATA ends C endvariant 0522 1C ASMDATA segment 0522 FFFFFFFF 1C db -1 0523 1C ASMDATA ends C mne NOP ; ofs=538h 0523 1C ASMDATA segment 00000523 = 523 1C CURROFS = $ 0523 1C ASMDATA ends 1135 2305 1C dw CURROFS - asmtab = 72F 1C MN_NOP equ $ - mnlist = "NO",'P'+80h 1C tmpstr catstr ,,,

,,<+80h> 1137 4E4FFFFFFFD0 1C db "NO",'P'+80h C variant 090h, 0 0523 1C ASMDATA segment = 2AC0 1C ainfo = (090h) * ASMMOD + 0 0523 2AFFFFFFC0 1C db HIGH ainfo, LOW ainfo 0525 1C ASMDATA ends C endvariant 0525 1C ASMDATA segment 0525 FFFFFFFF 1C db -1 0526 1C ASMDATA ends C mne NOT ; ofs=53Bh 0526 1C ASMDATA segment 00000526 = 526 1C CURROFS = $ 0526 1C ASMDATA ends 113A 2605 1C dw CURROFS - asmtab = 734 1C MN_NOT equ $ - mnlist = "NO",'T'+80h 1C tmpstr catstr ,,,,,<+80h> 113C 4E4FFFFFFFD4 1C db "NO",'T'+80h C variant AGRP(6,2), 16, ASM_LOCKABLE 0526 1C ASMDATA segment 0526 FFFFFFF4 1C db ASM_LOCKABLE = B9E8 1C ainfo = (240h + 6*8 + 2) * ASMMOD + 16 0527 FFFFFFB9FFFFFFE8 1C db HIGH ainfo, LOW ainfo 0529 1C ASMDATA ends C endvariant 0529 1C ASMDATA segment 0529 FFFFFFFF 1C db -1 052A 1C ASMDATA ends C mne OR ; ofs=53Fh 052A 1C ASMDATA segment 0000052A = 52A 1C CURROFS = $ 052A 1C ASMDATA ends 113F 2A05 1C dw CURROFS - asmtab = 739 1C MN_OR equ $ - mnlist = "O",'R'+80h 1C tmpstr catstr ,,,,,<+80h> 1141 4FFFFFFFD2 1C db "O",'R'+80h C variant AGRP(0,1), 3, ASM_LOCKABLE 052A 1C ASMDATA segment 052A FFFFFFF4 1C db ASM_LOCKABLE = AB4F 1C ainfo = (240h + 0*8 + 1) * ASMMOD + 3 052B FFFFFFAB4F 1C db HIGH ainfo, LOW ainfo 052D 1C ASMDATA ends C variant 00ch, 1 052D 1C ASMDATA segment = 391 1C ainfo = (00ch) * ASMMOD + 1 052D 03FFFFFF91 1C db HIGH ainfo, LOW ainfo 052F 1C ASMDATA ends C variant AGRP(1,1), 2, ASM_LOCKABLE 052F 1C ASMDATA segment 052F FFFFFFF4 1C db ASM_LOCKABLE = ADAE 1C ainfo = (240h + 1*8 + 1) * ASMMOD + 2 0530 FFFFFFADFFFFFFAE 1C db HIGH ainfo, LOW ainfo 0532 1C ASMDATA ends C variant 008h, 4, ASM_LOCKABLE 0532 1C ASMDATA segment 0532 FFFFFFF4 1C db ASM_LOCKABLE = 264 1C ainfo = (008h) * ASMMOD + 4 0533 0264 1C db HIGH ainfo, LOW ainfo 0535 1C ASMDATA ends C variant 00ah, 5 0535 1C ASMDATA segment = 2FD 1C ainfo = (00ah) * ASMMOD + 5 0535 02FFFFFFFD 1C db HIGH ainfo, LOW ainfo 0537 1C ASMDATA ends C endvariant 0537 1C ASMDATA segment 0537 FFFFFFFF 1C db -1 0538 1C ASMDATA ends C mne ORG, ASM_ORG ; ofs=54Dh 0538 1C ASMDATA segment 00000538 = 538 1C CURROFS = $ 0538 FFFFFFFB 1C db ASM_ORG 0539 1C ASMDATA ends 1143 3805 1C dw CURROFS - asmtab = 73D 1C MN_ORG equ $ - mnlist = "OR",'G'+80h 1C tmpstr catstr ,,,,,<+80h> 1145 4F52FFFFFFC7 1C db "OR",'G'+80h C mne OUT ; ofs=54Fh 0539 1C ASMDATA segment 00000539 = 539 1C CURROFS = $ 0539 1C ASMDATA ends 1148 3905 1C dw CURROFS - asmtab = 742 1C MN_OUT equ $ - mnlist = "OU",'T'+80h 1C tmpstr catstr ,,,,,<+80h> 114A 4F55FFFFFFD4 1C db "OU",'T'+80h C variant 0e6h, 50 0539 1C ASMDATA segment = 447A 1C ainfo = (0e6h) * ASMMOD + 50 0539 447A 1C db HIGH ainfo, LOW ainfo 053B 1C ASMDATA ends C variant 0eeh, 51 053B 1C ASMDATA segment = 46DB 1C ainfo = (0eeh) * ASMMOD + 51 053B 46FFFFFFDB 1C db HIGH ainfo, LOW ainfo 053D 1C ASMDATA ends C endvariant 053D 1C ASMDATA segment 053D FFFFFFFF 1C db -1 053E 1C ASMDATA ends C mne OUTSB ; ofs=554h 053E 1C ASMDATA segment 0000053E = 53E 1C CURROFS = $ 053E 1C ASMDATA ends 114D 3E05 1C dw CURROFS - asmtab = 747 1C MN_OUTSB equ $ - mnlist = "OUTS",'B'+80h 1C tmpstr catstr ,,,,,<+80h> 114F 4F555453FFFFFFC2 1C db "OUTS",'B'+80h C variant 06eh, 0, , ASM_MACH1 053E 1C ASMDATA segment 053E FFFFFFEE 1C db ASM_MACH1 = 20A8 1C ainfo = (06eh) * ASMMOD + 0 053F 20FFFFFFA8 1C db HIGH ainfo, LOW ainfo 0541 1C ASMDATA ends C endvariant 0541 1C ASMDATA segment 0541 FFFFFFFF 1C db -1 0542 1C ASMDATA ends C mne OUTSW, ASM_D16 ; ofs=558h 0542 1C ASMDATA segment 00000542 = 542 1C CURROFS = $ 0542 FFFFFFF8 1C db ASM_D16 0543 1C ASMDATA ends 1154 4205 1C dw CURROFS - asmtab = 74E 1C MN_OUTSW equ $ - mnlist = "OUTS",'W'+80h 1C tmpstr catstr ,,,,,<+80h> 1156 4F555453FFFFFFD7 1C db "OUTS",'W'+80h C mne OUTSD, ASM_D32 ; ofs=559h 0543 1C ASMDATA segment 00000543 = 543 1C CURROFS = $ 0543 FFFFFFF9 1C db ASM_D32 0544 1C ASMDATA ends 115B 4305 1C dw CURROFS - asmtab = 755 1C MN_OUTSD equ $ - mnlist = "OUTS",'D'+80h 1C tmpstr catstr ,,,,,<+80h> 115D 4F555453FFFFFFC4 1C db "OUTS",'D'+80h C variant 06fh, 0, , ASM_MACH1 0544 1C ASMDATA segment 0544 FFFFFFEE 1C db ASM_MACH1 = 20F4 1C ainfo = (06fh) * ASMMOD + 0 0545 20FFFFFFF4 1C db HIGH ainfo, LOW ainfo 0547 1C ASMDATA ends C endvariant 0547 1C ASMDATA segment 0547 FFFFFFFF 1C db -1 0548 1C ASMDATA ends C mne POP ; ofs=55Eh 0548 1C ASMDATA segment 00000548 = 548 1C CURROFS = $ 0548 1C ASMDATA ends 1162 4805 1C dw CURROFS - asmtab = 75C 1C MN_POP equ $ - mnlist = "PO",'P'+80h 1C tmpstr catstr ,,,

,,<+80h> 1164 504FFFFFFFD0 1C db "PO",'P'+80h C variant AGRP(10,0), 52 0548 1C ASMDATA segment = C2F4 1C ainfo = (240h + 10*8 + 0) * ASMMOD + 52 0548 FFFFFFC2FFFFFFF4 1C db HIGH ainfo, LOW ainfo 054A 1C ASMDATA ends C variant 058h, 17 054A 1C ASMDATA segment = 1A31 1C ainfo = (058h) * ASMMOD + 17 054A 1A31 1C db HIGH ainfo, LOW ainfo 054C 1C ASMDATA ends C variant 01fh, 67 054C 1C ASMDATA segment = 977 1C ainfo = (01fh) * ASMMOD + 67 054C 0977 1C db HIGH ainfo, LOW ainfo 054E 1C ASMDATA ends C variant 007h, 64 054E 1C ASMDATA segment = 254 1C ainfo = (007h) * ASMMOD + 64 054E 0254 1C db HIGH ainfo, LOW ainfo 0550 1C ASMDATA ends C variant 017h, 66 0550 1C ASMDATA segment = 716 1C ainfo = (017h) * ASMMOD + 66 0550 0716 1C db HIGH ainfo, LOW ainfo 0552 1C ASMDATA ends C variant 1a1h, 68, , ASM_MACH3 0552 1C ASMDATA segment 0552 FFFFFFF0 1C db ASM_MACH3 = 7C10 1C ainfo = (1a1h) * ASMMOD + 68 0553 7C10 1C db HIGH ainfo, LOW ainfo 0555 1C ASMDATA ends C variant 1a9h, 69, , ASM_MACH3 0555 1C ASMDATA segment 0555 FFFFFFF0 1C db ASM_MACH3 = 7E71 1C ainfo = (1a9h) * ASMMOD + 69 0556 7E71 1C db HIGH ainfo, LOW ainfo 0558 1C ASMDATA ends C endvariant 0558 1C ASMDATA segment 0558 FFFFFFFF 1C db -1 0559 1C ASMDATA ends C mne POPA, ASM_D16 ; ofs=56Fh 0559 1C ASMDATA segment 00000559 = 559 1C CURROFS = $ 0559 FFFFFFF8 1C db ASM_D16 055A 1C ASMDATA ends 1167 5905 1C dw CURROFS - asmtab = 761 1C MN_POPA equ $ - mnlist = "POP",'A'+80h 1C tmpstr catstr ,,,,,<+80h> 1169 504F50FFFFFFC1 1C db "POP",'A'+80h C mne POPAD, ASM_D32 ; ofs=570h 055A 1C ASMDATA segment 0000055A = 55A 1C CURROFS = $ 055A FFFFFFF9 1C db ASM_D32 055B 1C ASMDATA ends 116D 5A05 1C dw CURROFS - asmtab = 767 1C MN_POPAD equ $ - mnlist = "POPA",'D'+80h 1C tmpstr catstr ,,,,,<+80h> 116F 504F5041FFFFFFC4 1C db "POPA",'D'+80h C variant 061h, 0, , ASM_MACH1 055B 1C ASMDATA segment 055B FFFFFFEE 1C db ASM_MACH1 = 1CCC 1C ainfo = (061h) * ASMMOD + 0 055C 1CFFFFFFCC 1C db HIGH ainfo, LOW ainfo 055E 1C ASMDATA ends C endvariant 055E 1C ASMDATA segment 055E FFFFFFFF 1C db -1 055F 1C ASMDATA ends C mne POPF, ASM_D16 ; ofs=575h 055F 1C ASMDATA segment 0000055F = 55F 1C CURROFS = $ 055F FFFFFFF8 1C db ASM_D16 0560 1C ASMDATA ends 1174 5F05 1C dw CURROFS - asmtab = 76E 1C MN_POPF equ $ - mnlist = "POP",'F'+80h 1C tmpstr catstr ,,,,,<+80h> 1176 504F50FFFFFFC6 1C db "POP",'F'+80h C mne POPFD, ASM_D32 ; ofs=576h 0560 1C ASMDATA segment 00000560 = 560 1C CURROFS = $ 0560 FFFFFFF9 1C db ASM_D32 0561 1C ASMDATA ends 117A 6005 1C dw CURROFS - asmtab = 774 1C MN_POPFD equ $ - mnlist = "POPF",'D'+80h 1C tmpstr catstr ,,,,,<+80h> 117C 504F5046FFFFFFC4 1C db "POPF",'D'+80h C variant 09dh, 0 0561 1C ASMDATA segment = 2E9C 1C ainfo = (09dh) * ASMMOD + 0 0561 2EFFFFFF9C 1C db HIGH ainfo, LOW ainfo 0563 1C ASMDATA ends C endvariant 0563 1C ASMDATA segment 0563 FFFFFFFF 1C db -1 0564 1C ASMDATA ends C mne PUSH ; ofs=57Ah 0564 1C ASMDATA segment 00000564 = 564 1C CURROFS = $ 0564 1C ASMDATA ends 1181 6405 1C dw CURROFS - asmtab = 77B 1C MN_PUSH equ $ - mnlist = "PUS",'H'+80h 1C tmpstr catstr ,,,,,<+80h> 1183 505553FFFFFFC8 1C db "PUS",'H'+80h C variant 050h, 17 0564 1C ASMDATA segment = 17D1 1C ainfo = (050h) * ASMMOD + 17 0564 17FFFFFFD1 1C db HIGH ainfo, LOW ainfo 0566 1C ASMDATA ends C variant AGRP(3,6), 40 0566 1C ASMDATA segment = B410 1C ainfo = (240h + 3*8 + 6) * ASMMOD + 40 0566 FFFFFFB410 1C db HIGH ainfo, LOW ainfo 0568 1C ASMDATA ends C variant 06ah, 54, , ASM_MACH1 0568 1C ASMDATA segment 0568 FFFFFFEE 1C db ASM_MACH1 = 1FAE 1C ainfo = (06ah) * ASMMOD + 54 0569 1FFFFFFFAE 1C db HIGH ainfo, LOW ainfo 056B 1C ASMDATA ends C variant 068h, 53, , ASM_MACH1 056B 1C ASMDATA segment 056B FFFFFFEE 1C db ASM_MACH1 = 1F15 1C ainfo = (068h) * ASMMOD + 53 056C 1F15 1C db HIGH ainfo, LOW ainfo 056E 1C ASMDATA ends C variant 00eh, 65 056E 1C ASMDATA segment = 469 1C ainfo = (00eh) * ASMMOD + 65 056E 0469 1C db HIGH ainfo, LOW ainfo 0570 1C ASMDATA ends C variant 016h, 66 0570 1C ASMDATA segment = 6CA 1C ainfo = (016h) * ASMMOD + 66 0570 06FFFFFFCA 1C db HIGH ainfo, LOW ainfo 0572 1C ASMDATA ends C variant 01eh, 67 0572 1C ASMDATA segment = 92B 1C ainfo = (01eh) * ASMMOD + 67 0572 092B 1C db HIGH ainfo, LOW ainfo 0574 1C ASMDATA ends C variant 006h, 64 0574 1C ASMDATA segment = 208 1C ainfo = (006h) * ASMMOD + 64 0574 0208 1C db HIGH ainfo, LOW ainfo 0576 1C ASMDATA ends C variant 1a0h, 68, , ASM_MACH3 0576 1C ASMDATA segment 0576 FFFFFFF0 1C db ASM_MACH3 = 7BC4 1C ainfo = (1a0h) * ASMMOD + 68 0577 7BFFFFFFC4 1C db HIGH ainfo, LOW ainfo 0579 1C ASMDATA ends C variant 1a8h, 69, , ASM_MACH3 0579 1C ASMDATA segment 0579 FFFFFFF0 1C db ASM_MACH3 = 7E25 1C ainfo = (1a8h) * ASMMOD + 69 057A 7E25 1C db HIGH ainfo, LOW ainfo 057C 1C ASMDATA ends C endvariant 057C 1C ASMDATA segment 057C FFFFFFFF 1C db -1 057D 1C ASMDATA ends C mne PUSHA, ASM_D16 ; ofs=593h 057D 1C ASMDATA segment 0000057D = 57D 1C CURROFS = $ 057D FFFFFFF8 1C db ASM_D16 057E 1C ASMDATA ends 1187 7D05 1C dw CURROFS - asmtab = 781 1C MN_PUSHA equ $ - mnlist = "PUSH",'A'+80h 1C tmpstr catstr ,,,,,<+80h> 1189 50555348FFFFFFC1 1C db "PUSH",'A'+80h C mne PUSHAD, ASM_D32 ; ofs=594h 057E 1C ASMDATA segment 0000057E = 57E 1C CURROFS = $ 057E FFFFFFF9 1C db ASM_D32 057F 1C ASMDATA ends 118E 7E05 1C dw CURROFS - asmtab = 788 1C MN_PUSHAD equ $ - mnlist = "PUSHA",'D'+80h 1C tmpstr catstr ,,,,,<+80h> 1190 5055534841FFFFFFC4 1C db "PUSHA",'D'+80h C variant 060h, 0, , ASM_MACH1 057F 1C ASMDATA segment 057F FFFFFFEE 1C db ASM_MACH1 = 1C80 1C ainfo = (060h) * ASMMOD + 0 0580 1CFFFFFF80 1C db HIGH ainfo, LOW ainfo 0582 1C ASMDATA ends C endvariant 0582 1C ASMDATA segment 0582 FFFFFFFF 1C db -1 0583 1C ASMDATA ends C mne PUSHF, ASM_D16 ; ofs=599h 0583 1C ASMDATA segment 00000583 = 583 1C CURROFS = $ 0583 FFFFFFF8 1C db ASM_D16 0584 1C ASMDATA ends 1196 FFFFFF8305 1C dw CURROFS - asmtab = 790 1C MN_PUSHF equ $ - mnlist = "PUSH",'F'+80h 1C tmpstr catstr ,,,,,<+80h> 1198 50555348FFFFFFC6 1C db "PUSH",'F'+80h C mne PUSHFD, ASM_D32 ; ofs=59Ah 0584 1C ASMDATA segment 00000584 = 584 1C CURROFS = $ 0584 FFFFFFF9 1C db ASM_D32 0585 1C ASMDATA ends 119D FFFFFF8405 1C dw CURROFS - asmtab = 797 1C MN_PUSHFD equ $ - mnlist = "PUSHF",'D'+80h 1C tmpstr catstr ,,,,,<+80h> 119F 5055534846FFFFFFC4 1C db "PUSHF",'D'+80h C variant 09ch, 0 0585 1C ASMDATA segment = 2E50 1C ainfo = (09ch) * ASMMOD + 0 0585 2E50 1C db HIGH ainfo, LOW ainfo 0587 1C ASMDATA ends C endvariant 0587 1C ASMDATA segment 0587 FFFFFFFF 1C db -1 0588 1C ASMDATA ends C mne RCL ; ofs=59Eh 0588 1C ASMDATA segment 00000588 = 588 1C CURROFS = $ 0588 1C ASMDATA ends 11A5 FFFFFF8805 1C dw CURROFS - asmtab = 79F 1C MN_RCL equ $ - mnlist = "RC",'L'+80h 1C tmpstr catstr ,,,,,<+80h> 11A7 5243FFFFFFCC 1C db "RC",'L'+80h C variant AGRP(11,2), 55 0588 1C ASMDATA segment = C5EF 1C ainfo = (240h + 11*8 + 2) * ASMMOD + 55 0588 FFFFFFC5FFFFFFEF 1C db HIGH ainfo, LOW ainfo 058A 1C ASMDATA ends C variant AGRP(12,2), 56 058A 1C ASMDATA segment = C850 1C ainfo = (240h + 12*8 + 2) * ASMMOD + 56 058A FFFFFFC850 1C db HIGH ainfo, LOW ainfo 058C 1C ASMDATA ends C variant AGRP(13,2), 57, , ASM_MACH1 058C 1C ASMDATA segment 058C FFFFFFEE 1C db ASM_MACH1 = CAB1 1C ainfo = (240h + 13*8 + 2) * ASMMOD + 57 058D FFFFFFCAFFFFFFB1 1C db HIGH ainfo, LOW ainfo 058F 1C ASMDATA ends C endvariant 058F 1C ASMDATA segment 058F FFFFFFFF 1C db -1 0590 1C ASMDATA ends C mne RCR ; ofs=5A6h 0590 1C ASMDATA segment 00000590 = 590 1C CURROFS = $ 0590 1C ASMDATA ends 11AA FFFFFF9005 1C dw CURROFS - asmtab = 7A4 1C MN_RCR equ $ - mnlist = "RC",'R'+80h 1C tmpstr catstr ,,,,,<+80h> 11AC 5243FFFFFFD2 1C db "RC",'R'+80h C variant AGRP(11,3), 55 0590 1C ASMDATA segment = C63B 1C ainfo = (240h + 11*8 + 3) * ASMMOD + 55 0590 FFFFFFC63B 1C db HIGH ainfo, LOW ainfo 0592 1C ASMDATA ends C variant AGRP(12,3), 56 0592 1C ASMDATA segment = C89C 1C ainfo = (240h + 12*8 + 3) * ASMMOD + 56 0592 FFFFFFC8FFFFFF9C 1C db HIGH ainfo, LOW ainfo 0594 1C ASMDATA ends C variant AGRP(13,3), 57, , ASM_MACH1 0594 1C ASMDATA segment 0594 FFFFFFEE 1C db ASM_MACH1 = CAFD 1C ainfo = (240h + 13*8 + 3) * ASMMOD + 57 0595 FFFFFFCAFFFFFFFD 1C db HIGH ainfo, LOW ainfo 0597 1C ASMDATA ends C endvariant 0597 1C ASMDATA segment 0597 FFFFFFFF 1C db -1 0598 1C ASMDATA ends C mne ROL ; ofs=5AEh 0598 1C ASMDATA segment 00000598 = 598 1C CURROFS = $ 0598 1C ASMDATA ends 11AF FFFFFF9805 1C dw CURROFS - asmtab = 7A9 1C MN_ROL equ $ - mnlist = "RO",'L'+80h 1C tmpstr catstr ,,,,,<+80h> 11B1 524FFFFFFFCC 1C db "RO",'L'+80h C variant AGRP(11,0), 55 0598 1C ASMDATA segment = C557 1C ainfo = (240h + 11*8 + 0) * ASMMOD + 55 0598 FFFFFFC557 1C db HIGH ainfo, LOW ainfo 059A 1C ASMDATA ends C variant AGRP(12,0), 56 059A 1C ASMDATA segment = C7B8 1C ainfo = (240h + 12*8 + 0) * ASMMOD + 56 059A FFFFFFC7FFFFFFB8 1C db HIGH ainfo, LOW ainfo 059C 1C ASMDATA ends C variant AGRP(13,0), 57, , ASM_MACH1 059C 1C ASMDATA segment 059C FFFFFFEE 1C db ASM_MACH1 = CA19 1C ainfo = (240h + 13*8 + 0) * ASMMOD + 57 059D FFFFFFCA19 1C db HIGH ainfo, LOW ainfo 059F 1C ASMDATA ends C endvariant 059F 1C ASMDATA segment 059F FFFFFFFF 1C db -1 05A0 1C ASMDATA ends C mne ROR ; ofs=5B6h 05A0 1C ASMDATA segment 000005A0 = 5A0 1C CURROFS = $ 05A0 1C ASMDATA ends 11B4 FFFFFFA005 1C dw CURROFS - asmtab = 7AE 1C MN_ROR equ $ - mnlist = "RO",'R'+80h 1C tmpstr catstr ,,,,,<+80h> 11B6 524FFFFFFFD2 1C db "RO",'R'+80h C variant AGRP(11,1), 55 05A0 1C ASMDATA segment = C5A3 1C ainfo = (240h + 11*8 + 1) * ASMMOD + 55 05A0 FFFFFFC5FFFFFFA3 1C db HIGH ainfo, LOW ainfo 05A2 1C ASMDATA ends C variant AGRP(12,1), 56 05A2 1C ASMDATA segment = C804 1C ainfo = (240h + 12*8 + 1) * ASMMOD + 56 05A2 FFFFFFC804 1C db HIGH ainfo, LOW ainfo 05A4 1C ASMDATA ends C variant AGRP(13,1), 57, , ASM_MACH1 05A4 1C ASMDATA segment 05A4 FFFFFFEE 1C db ASM_MACH1 = CA65 1C ainfo = (240h + 13*8 + 1) * ASMMOD + 57 05A5 FFFFFFCA65 1C db HIGH ainfo, LOW ainfo 05A7 1C ASMDATA ends C endvariant 05A7 1C ASMDATA segment 05A7 FFFFFFFF 1C db -1 05A8 1C ASMDATA ends C mne RDMSR ; ofs=5BEh 05A8 1C ASMDATA segment 000005A8 = 5A8 1C CURROFS = $ 05A8 1C ASMDATA ends 11B9 FFFFFFA805 1C dw CURROFS - asmtab = 7B3 1C MN_RDMSR equ $ - mnlist = "RDMS",'R'+80h 1C tmpstr catstr ,,,,,<+80h> 11BB 52444D53FFFFFFD2 1C db "RDMS",'R'+80h C variant 132h, 0, , ASM_MACH5 05A8 1C ASMDATA segment 05A8 FFFFFFF2 1C db ASM_MACH5 = 5AD8 1C ainfo = (132h) * ASMMOD + 0 05A9 5AFFFFFFD8 1C db HIGH ainfo, LOW ainfo 05AB 1C ASMDATA ends C endvariant 05AB 1C ASMDATA segment 05AB FFFFFFFF 1C db -1 05AC 1C ASMDATA ends C mne RDTSC ; ofs=5C2h 05AC 1C ASMDATA segment 000005AC = 5AC 1C CURROFS = $ 05AC 1C ASMDATA ends 11C0 FFFFFFAC05 1C dw CURROFS - asmtab = 7BA 1C MN_RDTSC equ $ - mnlist = "RDTS",'C'+80h 1C tmpstr catstr ,,,,,<+80h> 11C2 52445453FFFFFFC3 1C db "RDTS",'C'+80h C variant 131h, 0, , ASM_MACH5 05AC 1C ASMDATA segment 05AC FFFFFFF2 1C db ASM_MACH5 = 5A8C 1C ainfo = (131h) * ASMMOD + 0 05AD 5AFFFFFF8C 1C db HIGH ainfo, LOW ainfo 05AF 1C ASMDATA ends C endvariant 05AF 1C ASMDATA segment 05AF FFFFFFFF 1C db -1 05B0 1C ASMDATA ends C mne REP, ASM_LOCKREP, 0f3h ; ofs=5C6h 05B0 1C ASMDATA segment 000005B0 = 5B0 1C CURROFS = $ 05B0 FFFFFFF5FFFFFFF3 1C db ASM_LOCKREP,0f3h 05B2 1C ASMDATA ends 11C7 FFFFFFB005 1C dw CURROFS - asmtab = 7C1 1C MN_REP equ $ - mnlist = "RE",'P'+80h 1C tmpstr catstr ,,,

,,<+80h> 11C9 5245FFFFFFD0 1C db "RE",'P'+80h C mne REPE, ASM_LOCKREP, 0f3h ; ofs=5C8h 05B2 1C ASMDATA segment 000005B2 = 5B2 1C CURROFS = $ 05B2 FFFFFFF5FFFFFFF3 1C db ASM_LOCKREP,0f3h 05B4 1C ASMDATA ends 11CC FFFFFFB205 1C dw CURROFS - asmtab = 7C6 1C MN_REPE equ $ - mnlist = "REP",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 11CE 524550FFFFFFC5 1C db "REP",'E'+80h C mne REPNE, ASM_LOCKREP, 0f2h ; ofs=5CAh 05B4 1C ASMDATA segment 000005B4 = 5B4 1C CURROFS = $ 05B4 FFFFFFF5FFFFFFF2 1C db ASM_LOCKREP,0f2h 05B6 1C ASMDATA ends 11D2 FFFFFFB405 1C dw CURROFS - asmtab = 7CC 1C MN_REPNE equ $ - mnlist = "REPN",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 11D4 5245504EFFFFFFC5 1C db "REPN",'E'+80h C mne RET ; ofs=5CCh 05B6 1C ASMDATA segment 000005B6 = 5B6 1C CURROFS = $ 05B6 1C ASMDATA ends 11D9 FFFFFFB605 1C dw CURROFS - asmtab = 7D3 1C MN_RET equ $ - mnlist = "RE",'T'+80h 1C tmpstr catstr ,,,,,<+80h> 11DB 5245FFFFFFD4 1C db "RE",'T'+80h C variant 0c3h, 0 05B6 1C ASMDATA segment = 39E4 1C ainfo = (0c3h) * ASMMOD + 0 05B6 39FFFFFFE4 1C db HIGH ainfo, LOW ainfo 05B8 1C ASMDATA ends C variant 0c2h, 58 05B8 1C ASMDATA segment = 39D2 1C ainfo = (0c2h) * ASMMOD + 58 05B8 39FFFFFFD2 1C db HIGH ainfo, LOW ainfo 05BA 1C ASMDATA ends C endvariant 05BA 1C ASMDATA segment 05BA FFFFFFFF 1C db -1 05BB 1C ASMDATA ends C mne RETF, ASM_D16 ; ofs=5D1h 05BB 1C ASMDATA segment 000005BB = 5BB 1C CURROFS = $ 05BB FFFFFFF8 1C db ASM_D16 05BC 1C ASMDATA ends 11DE FFFFFFBB05 1C dw CURROFS - asmtab = 7D8 1C MN_RETF equ $ - mnlist = "RET",'F'+80h 1C tmpstr catstr ,,,,,<+80h> 11E0 524554FFFFFFC6 1C db "RET",'F'+80h C mne RETFD, ASM_D32 ; ofs=5D2h 05BC 1C ASMDATA segment 000005BC = 5BC 1C CURROFS = $ 05BC FFFFFFF9 1C db ASM_D32 05BD 1C ASMDATA ends 11E4 FFFFFFBC05 1C dw CURROFS - asmtab = 7DE 1C MN_RETFD equ $ - mnlist = "RETF",'D'+80h 1C tmpstr catstr ,,,,,<+80h> 11E6 52455446FFFFFFC4 1C db "RETF",'D'+80h C variant 0cbh, 0 05BD 1C ASMDATA segment = 3C44 1C ainfo = (0cbh) * ASMMOD + 0 05BD 3C44 1C db HIGH ainfo, LOW ainfo 05BF 1C ASMDATA ends C variant 0cah, 58 05BF 1C ASMDATA segment = 3C32 1C ainfo = (0cah) * ASMMOD + 58 05BF 3C32 1C db HIGH ainfo, LOW ainfo 05C1 1C ASMDATA ends C endvariant 05C1 1C ASMDATA segment 05C1 FFFFFFFF 1C db -1 05C2 1C ASMDATA ends C mne RSM ; ofs=5D8h 05C2 1C ASMDATA segment 000005C2 = 5C2 1C CURROFS = $ 05C2 1C ASMDATA ends 11EB FFFFFFC205 1C dw CURROFS - asmtab = 7E5 1C MN_RSM equ $ - mnlist = "RS",'M'+80h 1C tmpstr catstr ,,,,,<+80h> 11ED 5253FFFFFFCD 1C db "RS",'M'+80h C variant 1aah, 0, , ASM_MACH5 05C2 1C ASMDATA segment 05C2 FFFFFFF2 1C db ASM_MACH5 = 7E78 1C ainfo = (1aah) * ASMMOD + 0 05C3 7E78 1C db HIGH ainfo, LOW ainfo 05C5 1C ASMDATA ends C endvariant 05C5 1C ASMDATA segment 05C5 FFFFFFFF 1C db -1 05C6 1C ASMDATA ends C mne SAHF ; ofs=5DCh 05C6 1C ASMDATA segment 000005C6 = 5C6 1C CURROFS = $ 05C6 1C ASMDATA ends 11F0 FFFFFFC605 1C dw CURROFS - asmtab = 7EA 1C MN_SAHF equ $ - mnlist = "SAH",'F'+80h 1C tmpstr catstr ,,,,,<+80h> 11F2 534148FFFFFFC6 1C db "SAH",'F'+80h C variant 09eh, 0 05C6 1C ASMDATA segment = 2EE8 1C ainfo = (09eh) * ASMMOD + 0 05C6 2EFFFFFFE8 1C db HIGH ainfo, LOW ainfo 05C8 1C ASMDATA ends C endvariant 05C8 1C ASMDATA segment 05C8 FFFFFFFF 1C db -1 05C9 1C ASMDATA ends C mne SAL ; ofs=5DFh 05C9 1C ASMDATA segment 000005C9 = 5C9 1C CURROFS = $ 05C9 1C ASMDATA ends 11F6 FFFFFFC905 1C dw CURROFS - asmtab = 7F0 1C MN_SAL equ $ - mnlist = "SA",'L'+80h 1C tmpstr catstr ,,,,,<+80h> 11F8 5341FFFFFFCC 1C db "SA",'L'+80h C variant AGRP(11,4), 55 05C9 1C ASMDATA segment = C687 1C ainfo = (240h + 11*8 + 4) * ASMMOD + 55 05C9 FFFFFFC6FFFFFF87 1C db HIGH ainfo, LOW ainfo 05CB 1C ASMDATA ends C variant AGRP(12,4), 56 05CB 1C ASMDATA segment = C8E8 1C ainfo = (240h + 12*8 + 4) * ASMMOD + 56 05CB FFFFFFC8FFFFFFE8 1C db HIGH ainfo, LOW ainfo 05CD 1C ASMDATA ends C variant AGRP(13,4), 57, , ASM_MACH1 05CD 1C ASMDATA segment 05CD FFFFFFEE 1C db ASM_MACH1 = CB49 1C ainfo = (240h + 13*8 + 4) * ASMMOD + 57 05CE FFFFFFCB49 1C db HIGH ainfo, LOW ainfo 05D0 1C ASMDATA ends C endvariant 05D0 1C ASMDATA segment 05D0 FFFFFFFF 1C db -1 05D1 1C ASMDATA ends C mne SAR ; ofs=5E7h 05D1 1C ASMDATA segment 000005D1 = 5D1 1C CURROFS = $ 05D1 1C ASMDATA ends 11FB FFFFFFD105 1C dw CURROFS - asmtab = 7F5 1C MN_SAR equ $ - mnlist = "SA",'R'+80h 1C tmpstr catstr ,,,,,<+80h> 11FD 5341FFFFFFD2 1C db "SA",'R'+80h C variant AGRP(11,7), 55 05D1 1C ASMDATA segment = C76B 1C ainfo = (240h + 11*8 + 7) * ASMMOD + 55 05D1 FFFFFFC76B 1C db HIGH ainfo, LOW ainfo 05D3 1C ASMDATA ends C variant AGRP(12,7), 56 05D3 1C ASMDATA segment = C9CC 1C ainfo = (240h + 12*8 + 7) * ASMMOD + 56 05D3 FFFFFFC9FFFFFFCC 1C db HIGH ainfo, LOW ainfo 05D5 1C ASMDATA ends C variant AGRP(13,7), 57, , ASM_MACH1 05D5 1C ASMDATA segment 05D5 FFFFFFEE 1C db ASM_MACH1 = CC2D 1C ainfo = (240h + 13*8 + 7) * ASMMOD + 57 05D6 FFFFFFCC2D 1C db HIGH ainfo, LOW ainfo 05D8 1C ASMDATA ends C endvariant 05D8 1C ASMDATA segment 05D8 FFFFFFFF 1C db -1 05D9 1C ASMDATA ends C mne SEG ; ofs=5EFh 05D9 1C ASMDATA segment 000005D9 = 5D9 1C CURROFS = $ 05D9 1C ASMDATA ends 1200 FFFFFFD905 1C dw CURROFS - asmtab = 7FA 1C MN_SEG equ $ - mnlist = "SE",'G'+80h 1C tmpstr catstr ,,,,,<+80h> 1202 5345FFFFFFC7 1C db "SE",'G'+80h C variant 026h, 64 05D9 1C ASMDATA segment = B88 1C ainfo = (026h) * ASMMOD + 64 05D9 0BFFFFFF88 1C db HIGH ainfo, LOW ainfo 05DB 1C ASMDATA ends C variant 02eh, 65 05DB 1C ASMDATA segment = DE9 1C ainfo = (02eh) * ASMMOD + 65 05DB 0DFFFFFFE9 1C db HIGH ainfo, LOW ainfo 05DD 1C ASMDATA ends C variant 036h, 66 05DD 1C ASMDATA segment = 104A 1C ainfo = (036h) * ASMMOD + 66 05DD 104A 1C db HIGH ainfo, LOW ainfo 05DF 1C ASMDATA ends C variant 03eh, 67 05DF 1C ASMDATA segment = 12AB 1C ainfo = (03eh) * ASMMOD + 67 05DF 12FFFFFFAB 1C db HIGH ainfo, LOW ainfo 05E1 1C ASMDATA ends C variant 064h, 68 05E1 1C ASMDATA segment = 1DF4 1C ainfo = (064h) * ASMMOD + 68 05E1 1DFFFFFFF4 1C db HIGH ainfo, LOW ainfo 05E3 1C ASMDATA ends C variant 065h, 69 05E3 1C ASMDATA segment = 1E41 1C ainfo = (065h) * ASMMOD + 69 05E3 1E41 1C db HIGH ainfo, LOW ainfo 05E5 1C ASMDATA ends C endvariant 05E5 1C ASMDATA segment 05E5 FFFFFFFF 1C db -1 05E6 1C ASMDATA ends C mne ES, ASM_SEG, 026h ; ofs=5FCh 05E6 1C ASMDATA segment 000005E6 = 5E6 1C CURROFS = $ 05E6 FFFFFFF626 1C db ASM_SEG,026h 05E8 1C ASMDATA ends 1205 FFFFFFE605 1C dw CURROFS - asmtab = 7FF 1C MN_ES equ $ - mnlist = "E",'S'+80h 1C tmpstr catstr ,,,,,<+80h> 1207 45FFFFFFD3 1C db "E",'S'+80h C mne CS, ASM_SEG, 02eh ; ofs=5FEh 05E8 1C ASMDATA segment 000005E8 = 5E8 1C CURROFS = $ 05E8 FFFFFFF62E 1C db ASM_SEG,02eh 05EA 1C ASMDATA ends 1209 FFFFFFE805 1C dw CURROFS - asmtab = 803 1C MN_CS equ $ - mnlist = "C",'S'+80h 1C tmpstr catstr ,,,,,<+80h> 120B 43FFFFFFD3 1C db "C",'S'+80h C mne SS, ASM_SEG, 036h ; ofs=600h 05EA 1C ASMDATA segment 000005EA = 5EA 1C CURROFS = $ 05EA FFFFFFF636 1C db ASM_SEG,036h 05EC 1C ASMDATA ends 120D FFFFFFEA05 1C dw CURROFS - asmtab = 807 1C MN_SS equ $ - mnlist = "S",'S'+80h 1C tmpstr catstr ,,,,,<+80h> 120F 53FFFFFFD3 1C db "S",'S'+80h C mne DS, ASM_SEG, 03eh ; ofs=602h 05EC 1C ASMDATA segment 000005EC = 5EC 1C CURROFS = $ 05EC FFFFFFF63E 1C db ASM_SEG,03eh 05EE 1C ASMDATA ends 1211 FFFFFFEC05 1C dw CURROFS - asmtab = 80B 1C MN_DS equ $ - mnlist = "D",'S'+80h 1C tmpstr catstr ,,,,,<+80h> 1213 44FFFFFFD3 1C db "D",'S'+80h C mne FS, ASM_SEG, 064h ; ofs=604h 05EE 1C ASMDATA segment 000005EE = 5EE 1C CURROFS = $ 05EE FFFFFFF664 1C db ASM_SEG,064h 05F0 1C ASMDATA ends 1215 FFFFFFEE05 1C dw CURROFS - asmtab = 80F 1C MN_FS equ $ - mnlist = "F",'S'+80h 1C tmpstr catstr ,,,,,<+80h> 1217 46FFFFFFD3 1C db "F",'S'+80h C mne GS, ASM_SEG, 065h ; ofs=606h 05F0 1C ASMDATA segment 000005F0 = 5F0 1C CURROFS = $ 05F0 FFFFFFF665 1C db ASM_SEG,065h 05F2 1C ASMDATA ends 1219 FFFFFFF005 1C dw CURROFS - asmtab = 813 1C MN_GS equ $ - mnlist = "G",'S'+80h 1C tmpstr catstr ,,,,,<+80h> 121B 47FFFFFFD3 1C db "G",'S'+80h C mne SHL ; ofs=608h 05F2 1C ASMDATA segment 000005F2 = 5F2 1C CURROFS = $ 05F2 1C ASMDATA ends 121D FFFFFFF205 1C dw CURROFS - asmtab = 817 1C MN_SHL equ $ - mnlist = "SH",'L'+80h 1C tmpstr catstr ,,,,,<+80h> 121F 5348FFFFFFCC 1C db "SH",'L'+80h C variant AGRP(11,4), 55 05F2 1C ASMDATA segment = C687 1C ainfo = (240h + 11*8 + 4) * ASMMOD + 55 05F2 FFFFFFC6FFFFFF87 1C db HIGH ainfo, LOW ainfo 05F4 1C ASMDATA ends C variant AGRP(12,4), 56 05F4 1C ASMDATA segment = C8E8 1C ainfo = (240h + 12*8 + 4) * ASMMOD + 56 05F4 FFFFFFC8FFFFFFE8 1C db HIGH ainfo, LOW ainfo 05F6 1C ASMDATA ends C variant AGRP(13,4), 57, , ASM_MACH1 05F6 1C ASMDATA segment 05F6 FFFFFFEE 1C db ASM_MACH1 = CB49 1C ainfo = (240h + 13*8 + 4) * ASMMOD + 57 05F7 FFFFFFCB49 1C db HIGH ainfo, LOW ainfo 05F9 1C ASMDATA ends C endvariant 05F9 1C ASMDATA segment 05F9 FFFFFFFF 1C db -1 05FA 1C ASMDATA ends C mne SHR ; ofs=610h 05FA 1C ASMDATA segment 000005FA = 5FA 1C CURROFS = $ 05FA 1C ASMDATA ends 1222 FFFFFFFA05 1C dw CURROFS - asmtab = 81C 1C MN_SHR equ $ - mnlist = "SH",'R'+80h 1C tmpstr catstr ,,,,,<+80h> 1224 5348FFFFFFD2 1C db "SH",'R'+80h C variant AGRP(11,5), 55 05FA 1C ASMDATA segment = C6D3 1C ainfo = (240h + 11*8 + 5) * ASMMOD + 55 05FA FFFFFFC6FFFFFFD3 1C db HIGH ainfo, LOW ainfo 05FC 1C ASMDATA ends C variant AGRP(12,5), 56 05FC 1C ASMDATA segment = C934 1C ainfo = (240h + 12*8 + 5) * ASMMOD + 56 05FC FFFFFFC934 1C db HIGH ainfo, LOW ainfo 05FE 1C ASMDATA ends C variant AGRP(13,5), 57, , ASM_MACH1 05FE 1C ASMDATA segment 05FE FFFFFFEE 1C db ASM_MACH1 = CB95 1C ainfo = (240h + 13*8 + 5) * ASMMOD + 57 05FF FFFFFFCBFFFFFF95 1C db HIGH ainfo, LOW ainfo 0601 1C ASMDATA ends C endvariant 0601 1C ASMDATA segment 0601 FFFFFFFF 1C db -1 0602 1C ASMDATA ends C mne SBB ; ofs=618h 0602 1C ASMDATA segment 00000602 = 602 1C CURROFS = $ 0602 1C ASMDATA ends 1227 0206 1C dw CURROFS - asmtab = 821 1C MN_SBB equ $ - mnlist = "SB",'B'+80h 1C tmpstr catstr ,,,,,<+80h> 1229 5342FFFFFFC2 1C db "SB",'B'+80h C variant AGRP(0,3), 3, ASM_LOCKABLE 0602 1C ASMDATA segment 0602 FFFFFFF4 1C db ASM_LOCKABLE = ABE7 1C ainfo = (240h + 0*8 + 3) * ASMMOD + 3 0603 FFFFFFABFFFFFFE7 1C db HIGH ainfo, LOW ainfo 0605 1C ASMDATA ends C variant 01ch, 1 0605 1C ASMDATA segment = 851 1C ainfo = (01ch) * ASMMOD + 1 0605 0851 1C db HIGH ainfo, LOW ainfo 0607 1C ASMDATA ends C variant AGRP(1,3), 2, ASM_LOCKABLE 0607 1C ASMDATA segment 0607 FFFFFFF4 1C db ASM_LOCKABLE = AE46 1C ainfo = (240h + 1*8 + 3) * ASMMOD + 2 0608 FFFFFFAE46 1C db HIGH ainfo, LOW ainfo 060A 1C ASMDATA ends C variant 018h, 4, ASM_LOCKABLE 060A 1C ASMDATA segment 060A FFFFFFF4 1C db ASM_LOCKABLE = 724 1C ainfo = (018h) * ASMMOD + 4 060B 0724 1C db HIGH ainfo, LOW ainfo 060D 1C ASMDATA ends C variant 01ah, 5 060D 1C ASMDATA segment = 7BD 1C ainfo = (01ah) * ASMMOD + 5 060D 07FFFFFFBD 1C db HIGH ainfo, LOW ainfo 060F 1C ASMDATA ends C endvariant 060F 1C ASMDATA segment 060F FFFFFFFF 1C db -1 0610 1C ASMDATA ends C mne SCASB ; ofs=626h 0610 1C ASMDATA segment 00000610 = 610 1C CURROFS = $ 0610 1C ASMDATA ends 122C 1006 1C dw CURROFS - asmtab = 826 1C MN_SCASB equ $ - mnlist = "SCAS",'B'+80h 1C tmpstr catstr ,,,,,<+80h> 122E 53434153FFFFFFC2 1C db "SCAS",'B'+80h C variant 0aeh, 0 0610 1C ASMDATA segment = 33A8 1C ainfo = (0aeh) * ASMMOD + 0 0610 33FFFFFFA8 1C db HIGH ainfo, LOW ainfo 0612 1C ASMDATA ends C endvariant 0612 1C ASMDATA segment 0612 FFFFFFFF 1C db -1 0613 1C ASMDATA ends C mne SCASW, ASM_D16 ; ofs=629h 0613 1C ASMDATA segment 00000613 = 613 1C CURROFS = $ 0613 FFFFFFF8 1C db ASM_D16 0614 1C ASMDATA ends 1233 1306 1C dw CURROFS - asmtab = 82D 1C MN_SCASW equ $ - mnlist = "SCAS",'W'+80h 1C tmpstr catstr ,,,,,<+80h> 1235 53434153FFFFFFD7 1C db "SCAS",'W'+80h C mne SCASD, ASM_D32 ; ofs=62Ah 0614 1C ASMDATA segment 00000614 = 614 1C CURROFS = $ 0614 FFFFFFF9 1C db ASM_D32 0615 1C ASMDATA ends 123A 1406 1C dw CURROFS - asmtab = 834 1C MN_SCASD equ $ - mnlist = "SCAS",'D'+80h 1C tmpstr catstr ,,,,,<+80h> 123C 53434153FFFFFFC4 1C db "SCAS",'D'+80h C variant 0afh, 0 0615 1C ASMDATA segment = 33F4 1C ainfo = (0afh) * ASMMOD + 0 0615 33FFFFFFF4 1C db HIGH ainfo, LOW ainfo 0617 1C ASMDATA ends C endvariant 0617 1C ASMDATA segment 0617 FFFFFFFF 1C db -1 0618 1C ASMDATA ends C mne SETA ; ofs=62Eh 0618 1C ASMDATA segment 00000618 = 618 1C CURROFS = $ 0618 1C ASMDATA ends 1241 1806 1C dw CURROFS - asmtab = 83B 1C MN_SETA equ $ - mnlist = "SET",'A'+80h 1C tmpstr catstr ,,,,,<+80h> 1243 534554FFFFFFC1 1C db "SET",'A'+80h C variant 197h, 59, , ASM_MACH3 0618 1C ASMDATA segment 0618 FFFFFFF0 1C db ASM_MACH3 = 790F 1C ainfo = (197h) * ASMMOD + 59 0619 790F 1C db HIGH ainfo, LOW ainfo 061B 1C ASMDATA ends C endvariant 061B 1C ASMDATA segment 061B FFFFFFFF 1C db -1 061C 1C ASMDATA ends C mne SETAE ; ofs=632h 061C 1C ASMDATA segment 0000061C = 61C 1C CURROFS = $ 061C 1C ASMDATA ends 1247 1C06 1C dw CURROFS - asmtab = 841 1C MN_SETAE equ $ - mnlist = "SETA",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 1249 53455441FFFFFFC5 1C db "SETA",'E'+80h C variant 193h, 59, , ASM_MACH3 061C 1C ASMDATA segment 061C FFFFFFF0 1C db ASM_MACH3 = 77DF 1C ainfo = (193h) * ASMMOD + 59 061D 77FFFFFFDF 1C db HIGH ainfo, LOW ainfo 061F 1C ASMDATA ends C endvariant 061F 1C ASMDATA segment 061F FFFFFFFF 1C db -1 0620 1C ASMDATA ends C mne SETB ; ofs=636h 0620 1C ASMDATA segment 00000620 = 620 1C CURROFS = $ 0620 1C ASMDATA ends 124E 2006 1C dw CURROFS - asmtab = 848 1C MN_SETB equ $ - mnlist = "SET",'B'+80h 1C tmpstr catstr ,,,,,<+80h> 1250 534554FFFFFFC2 1C db "SET",'B'+80h C variant 192h, 59, , ASM_MACH3 0620 1C ASMDATA segment 0620 FFFFFFF0 1C db ASM_MACH3 = 7793 1C ainfo = (192h) * ASMMOD + 59 0621 77FFFFFF93 1C db HIGH ainfo, LOW ainfo 0623 1C ASMDATA ends C endvariant 0623 1C ASMDATA segment 0623 FFFFFFFF 1C db -1 0624 1C ASMDATA ends C mne SETBE ; ofs=63Ah 0624 1C ASMDATA segment 00000624 = 624 1C CURROFS = $ 0624 1C ASMDATA ends 1254 2406 1C dw CURROFS - asmtab = 84E 1C MN_SETBE equ $ - mnlist = "SETB",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 1256 53455442FFFFFFC5 1C db "SETB",'E'+80h C variant 196h, 59, , ASM_MACH3 0624 1C ASMDATA segment 0624 FFFFFFF0 1C db ASM_MACH3 = 78C3 1C ainfo = (196h) * ASMMOD + 59 0625 78FFFFFFC3 1C db HIGH ainfo, LOW ainfo 0627 1C ASMDATA ends C endvariant 0627 1C ASMDATA segment 0627 FFFFFFFF 1C db -1 0628 1C ASMDATA ends C mne SETC ; ofs=63Eh 0628 1C ASMDATA segment 00000628 = 628 1C CURROFS = $ 0628 1C ASMDATA ends 125B 2806 1C dw CURROFS - asmtab = 855 1C MN_SETC equ $ - mnlist = "SET",'C'+80h 1C tmpstr catstr ,,,,,<+80h> 125D 534554FFFFFFC3 1C db "SET",'C'+80h C variant 192h, 59, , ASM_MACH3 0628 1C ASMDATA segment 0628 FFFFFFF0 1C db ASM_MACH3 = 7793 1C ainfo = (192h) * ASMMOD + 59 0629 77FFFFFF93 1C db HIGH ainfo, LOW ainfo 062B 1C ASMDATA ends C endvariant 062B 1C ASMDATA segment 062B FFFFFFFF 1C db -1 062C 1C ASMDATA ends C mne SETE ; ofs=642h 062C 1C ASMDATA segment 0000062C = 62C 1C CURROFS = $ 062C 1C ASMDATA ends 1261 2C06 1C dw CURROFS - asmtab = 85B 1C MN_SETE equ $ - mnlist = "SET",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 1263 534554FFFFFFC5 1C db "SET",'E'+80h C variant 194h, 59, , ASM_MACH3 062C 1C ASMDATA segment 062C FFFFFFF0 1C db ASM_MACH3 = 782B 1C ainfo = (194h) * ASMMOD + 59 062D 782B 1C db HIGH ainfo, LOW ainfo 062F 1C ASMDATA ends C endvariant 062F 1C ASMDATA segment 062F FFFFFFFF 1C db -1 0630 1C ASMDATA ends C mne SETG ; ofs=646h 0630 1C ASMDATA segment 00000630 = 630 1C CURROFS = $ 0630 1C ASMDATA ends 1267 3006 1C dw CURROFS - asmtab = 861 1C MN_SETG equ $ - mnlist = "SET",'G'+80h 1C tmpstr catstr ,,,,,<+80h> 1269 534554FFFFFFC7 1C db "SET",'G'+80h C variant 19fh, 59, , ASM_MACH3 0630 1C ASMDATA segment 0630 FFFFFFF0 1C db ASM_MACH3 = 7B6F 1C ainfo = (19fh) * ASMMOD + 59 0631 7B6F 1C db HIGH ainfo, LOW ainfo 0633 1C ASMDATA ends C endvariant 0633 1C ASMDATA segment 0633 FFFFFFFF 1C db -1 0634 1C ASMDATA ends C mne SETGE ; ofs=64Ah 0634 1C ASMDATA segment 00000634 = 634 1C CURROFS = $ 0634 1C ASMDATA ends 126D 3406 1C dw CURROFS - asmtab = 867 1C MN_SETGE equ $ - mnlist = "SETG",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 126F 53455447FFFFFFC5 1C db "SETG",'E'+80h C variant 19dh, 59, , ASM_MACH3 0634 1C ASMDATA segment 0634 FFFFFFF0 1C db ASM_MACH3 = 7AD7 1C ainfo = (19dh) * ASMMOD + 59 0635 7AFFFFFFD7 1C db HIGH ainfo, LOW ainfo 0637 1C ASMDATA ends C endvariant 0637 1C ASMDATA segment 0637 FFFFFFFF 1C db -1 0638 1C ASMDATA ends C mne SETL ; ofs=64Eh 0638 1C ASMDATA segment 00000638 = 638 1C CURROFS = $ 0638 1C ASMDATA ends 1274 3806 1C dw CURROFS - asmtab = 86E 1C MN_SETL equ $ - mnlist = "SET",'L'+80h 1C tmpstr catstr ,,,,,<+80h> 1276 534554FFFFFFCC 1C db "SET",'L'+80h C variant 19ch, 59, , ASM_MACH3 0638 1C ASMDATA segment 0638 FFFFFFF0 1C db ASM_MACH3 = 7A8B 1C ainfo = (19ch) * ASMMOD + 59 0639 7AFFFFFF8B 1C db HIGH ainfo, LOW ainfo 063B 1C ASMDATA ends C endvariant 063B 1C ASMDATA segment 063B FFFFFFFF 1C db -1 063C 1C ASMDATA ends C mne SETLE ; ofs=652h 063C 1C ASMDATA segment 0000063C = 63C 1C CURROFS = $ 063C 1C ASMDATA ends 127A 3C06 1C dw CURROFS - asmtab = 874 1C MN_SETLE equ $ - mnlist = "SETL",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 127C 5345544CFFFFFFC5 1C db "SETL",'E'+80h C variant 19eh, 59, , ASM_MACH3 063C 1C ASMDATA segment 063C FFFFFFF0 1C db ASM_MACH3 = 7B23 1C ainfo = (19eh) * ASMMOD + 59 063D 7B23 1C db HIGH ainfo, LOW ainfo 063F 1C ASMDATA ends C endvariant 063F 1C ASMDATA segment 063F FFFFFFFF 1C db -1 0640 1C ASMDATA ends C mne SETNA ; ofs=656h 0640 1C ASMDATA segment 00000640 = 640 1C CURROFS = $ 0640 1C ASMDATA ends 1281 4006 1C dw CURROFS - asmtab = 87B 1C MN_SETNA equ $ - mnlist = "SETN",'A'+80h 1C tmpstr catstr ,,,,,<+80h> 1283 5345544EFFFFFFC1 1C db "SETN",'A'+80h C variant 196h, 59, , ASM_MACH3 0640 1C ASMDATA segment 0640 FFFFFFF0 1C db ASM_MACH3 = 78C3 1C ainfo = (196h) * ASMMOD + 59 0641 78FFFFFFC3 1C db HIGH ainfo, LOW ainfo 0643 1C ASMDATA ends C endvariant 0643 1C ASMDATA segment 0643 FFFFFFFF 1C db -1 0644 1C ASMDATA ends C mne SETNAE ; ofs=65Ah 0644 1C ASMDATA segment 00000644 = 644 1C CURROFS = $ 0644 1C ASMDATA ends 1288 4406 1C dw CURROFS - asmtab = 882 1C MN_SETNAE equ $ - mnlist = "SETNA",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 128A 5345544E41FFFFFFC5 1C db "SETNA",'E'+80h C variant 192h, 59, , ASM_MACH3 0644 1C ASMDATA segment 0644 FFFFFFF0 1C db ASM_MACH3 = 7793 1C ainfo = (192h) * ASMMOD + 59 0645 77FFFFFF93 1C db HIGH ainfo, LOW ainfo 0647 1C ASMDATA ends C endvariant 0647 1C ASMDATA segment 0647 FFFFFFFF 1C db -1 0648 1C ASMDATA ends C mne SETNB ; ofs=65Eh 0648 1C ASMDATA segment 00000648 = 648 1C CURROFS = $ 0648 1C ASMDATA ends 1290 4806 1C dw CURROFS - asmtab = 88A 1C MN_SETNB equ $ - mnlist = "SETN",'B'+80h 1C tmpstr catstr ,,,,,<+80h> 1292 5345544EFFFFFFC2 1C db "SETN",'B'+80h C variant 193h, 59, , ASM_MACH3 0648 1C ASMDATA segment 0648 FFFFFFF0 1C db ASM_MACH3 = 77DF 1C ainfo = (193h) * ASMMOD + 59 0649 77FFFFFFDF 1C db HIGH ainfo, LOW ainfo 064B 1C ASMDATA ends C endvariant 064B 1C ASMDATA segment 064B FFFFFFFF 1C db -1 064C 1C ASMDATA ends C mne SETNBE ; ofs=662h 064C 1C ASMDATA segment 0000064C = 64C 1C CURROFS = $ 064C 1C ASMDATA ends 1297 4C06 1C dw CURROFS - asmtab = 891 1C MN_SETNBE equ $ - mnlist = "SETNB",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 1299 5345544E42FFFFFFC5 1C db "SETNB",'E'+80h C variant 197h, 59, , ASM_MACH3 064C 1C ASMDATA segment 064C FFFFFFF0 1C db ASM_MACH3 = 790F 1C ainfo = (197h) * ASMMOD + 59 064D 790F 1C db HIGH ainfo, LOW ainfo 064F 1C ASMDATA ends C endvariant 064F 1C ASMDATA segment 064F FFFFFFFF 1C db -1 0650 1C ASMDATA ends C mne SETNC ; ofs=666h 0650 1C ASMDATA segment 00000650 = 650 1C CURROFS = $ 0650 1C ASMDATA ends 129F 5006 1C dw CURROFS - asmtab = 899 1C MN_SETNC equ $ - mnlist = "SETN",'C'+80h 1C tmpstr catstr ,,,,,<+80h> 12A1 5345544EFFFFFFC3 1C db "SETN",'C'+80h C variant 193h, 59, , ASM_MACH3 0650 1C ASMDATA segment 0650 FFFFFFF0 1C db ASM_MACH3 = 77DF 1C ainfo = (193h) * ASMMOD + 59 0651 77FFFFFFDF 1C db HIGH ainfo, LOW ainfo 0653 1C ASMDATA ends C endvariant 0653 1C ASMDATA segment 0653 FFFFFFFF 1C db -1 0654 1C ASMDATA ends C mne SETNE ; ofs=66Ah 0654 1C ASMDATA segment 00000654 = 654 1C CURROFS = $ 0654 1C ASMDATA ends 12A6 5406 1C dw CURROFS - asmtab = 8A0 1C MN_SETNE equ $ - mnlist = "SETN",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 12A8 5345544EFFFFFFC5 1C db "SETN",'E'+80h C variant 195h, 59, , ASM_MACH3 0654 1C ASMDATA segment 0654 FFFFFFF0 1C db ASM_MACH3 = 7877 1C ainfo = (195h) * ASMMOD + 59 0655 7877 1C db HIGH ainfo, LOW ainfo 0657 1C ASMDATA ends C endvariant 0657 1C ASMDATA segment 0657 FFFFFFFF 1C db -1 0658 1C ASMDATA ends C mne SETNG ; ofs=66Eh 0658 1C ASMDATA segment 00000658 = 658 1C CURROFS = $ 0658 1C ASMDATA ends 12AD 5806 1C dw CURROFS - asmtab = 8A7 1C MN_SETNG equ $ - mnlist = "SETN",'G'+80h 1C tmpstr catstr ,,,,,<+80h> 12AF 5345544EFFFFFFC7 1C db "SETN",'G'+80h C variant 19eh, 59, , ASM_MACH3 0658 1C ASMDATA segment 0658 FFFFFFF0 1C db ASM_MACH3 = 7B23 1C ainfo = (19eh) * ASMMOD + 59 0659 7B23 1C db HIGH ainfo, LOW ainfo 065B 1C ASMDATA ends C endvariant 065B 1C ASMDATA segment 065B FFFFFFFF 1C db -1 065C 1C ASMDATA ends C mne SETNGE ; ofs=672h 065C 1C ASMDATA segment 0000065C = 65C 1C CURROFS = $ 065C 1C ASMDATA ends 12B4 5C06 1C dw CURROFS - asmtab = 8AE 1C MN_SETNGE equ $ - mnlist = "SETNG",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 12B6 5345544E47FFFFFFC5 1C db "SETNG",'E'+80h C variant 19ch, 59, , ASM_MACH3 065C 1C ASMDATA segment 065C FFFFFFF0 1C db ASM_MACH3 = 7A8B 1C ainfo = (19ch) * ASMMOD + 59 065D 7AFFFFFF8B 1C db HIGH ainfo, LOW ainfo 065F 1C ASMDATA ends C endvariant 065F 1C ASMDATA segment 065F FFFFFFFF 1C db -1 0660 1C ASMDATA ends C mne SETNL ; ofs=676h 0660 1C ASMDATA segment 00000660 = 660 1C CURROFS = $ 0660 1C ASMDATA ends 12BC 6006 1C dw CURROFS - asmtab = 8B6 1C MN_SETNL equ $ - mnlist = "SETN",'L'+80h 1C tmpstr catstr ,,,,,<+80h> 12BE 5345544EFFFFFFCC 1C db "SETN",'L'+80h C variant 19dh, 59, , ASM_MACH3 0660 1C ASMDATA segment 0660 FFFFFFF0 1C db ASM_MACH3 = 7AD7 1C ainfo = (19dh) * ASMMOD + 59 0661 7AFFFFFFD7 1C db HIGH ainfo, LOW ainfo 0663 1C ASMDATA ends C endvariant 0663 1C ASMDATA segment 0663 FFFFFFFF 1C db -1 0664 1C ASMDATA ends C mne SETNLE ; ofs=67Ah 0664 1C ASMDATA segment 00000664 = 664 1C CURROFS = $ 0664 1C ASMDATA ends 12C3 6406 1C dw CURROFS - asmtab = 8BD 1C MN_SETNLE equ $ - mnlist = "SETNL",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 12C5 5345544E4CFFFFFFC5 1C db "SETNL",'E'+80h C variant 19fh, 59, , ASM_MACH3 0664 1C ASMDATA segment 0664 FFFFFFF0 1C db ASM_MACH3 = 7B6F 1C ainfo = (19fh) * ASMMOD + 59 0665 7B6F 1C db HIGH ainfo, LOW ainfo 0667 1C ASMDATA ends C endvariant 0667 1C ASMDATA segment 0667 FFFFFFFF 1C db -1 0668 1C ASMDATA ends C mne SETNO ; ofs=67Eh 0668 1C ASMDATA segment 00000668 = 668 1C CURROFS = $ 0668 1C ASMDATA ends 12CB 6806 1C dw CURROFS - asmtab = 8C5 1C MN_SETNO equ $ - mnlist = "SETN",'O'+80h 1C tmpstr catstr ,,,,,<+80h> 12CD 5345544EFFFFFFCF 1C db "SETN",'O'+80h C variant 191h, 59, , ASM_MACH3 0668 1C ASMDATA segment 0668 FFFFFFF0 1C db ASM_MACH3 = 7747 1C ainfo = (191h) * ASMMOD + 59 0669 7747 1C db HIGH ainfo, LOW ainfo 066B 1C ASMDATA ends C endvariant 066B 1C ASMDATA segment 066B FFFFFFFF 1C db -1 066C 1C ASMDATA ends C mne SETNP ; ofs=682h 066C 1C ASMDATA segment 0000066C = 66C 1C CURROFS = $ 066C 1C ASMDATA ends 12D2 6C06 1C dw CURROFS - asmtab = 8CC 1C MN_SETNP equ $ - mnlist = "SETN",'P'+80h 1C tmpstr catstr ,,,

,,<+80h> 12D4 5345544EFFFFFFD0 1C db "SETN",'P'+80h C variant 19bh, 59, , ASM_MACH3 066C 1C ASMDATA segment 066C FFFFFFF0 1C db ASM_MACH3 = 7A3F 1C ainfo = (19bh) * ASMMOD + 59 066D 7A3F 1C db HIGH ainfo, LOW ainfo 066F 1C ASMDATA ends C endvariant 066F 1C ASMDATA segment 066F FFFFFFFF 1C db -1 0670 1C ASMDATA ends C mne SETNS ; ofs=686h 0670 1C ASMDATA segment 00000670 = 670 1C CURROFS = $ 0670 1C ASMDATA ends 12D9 7006 1C dw CURROFS - asmtab = 8D3 1C MN_SETNS equ $ - mnlist = "SETN",'S'+80h 1C tmpstr catstr ,,,,,<+80h> 12DB 5345544EFFFFFFD3 1C db "SETN",'S'+80h C variant 199h, 59, , ASM_MACH3 0670 1C ASMDATA segment 0670 FFFFFFF0 1C db ASM_MACH3 = 79A7 1C ainfo = (199h) * ASMMOD + 59 0671 79FFFFFFA7 1C db HIGH ainfo, LOW ainfo 0673 1C ASMDATA ends C endvariant 0673 1C ASMDATA segment 0673 FFFFFFFF 1C db -1 0674 1C ASMDATA ends C mne SETNZ ; ofs=68Ah 0674 1C ASMDATA segment 00000674 = 674 1C CURROFS = $ 0674 1C ASMDATA ends 12E0 7406 1C dw CURROFS - asmtab = 8DA 1C MN_SETNZ equ $ - mnlist = "SETN",'Z'+80h 1C tmpstr catstr ,,,,,<+80h> 12E2 5345544EFFFFFFDA 1C db "SETN",'Z'+80h C variant 195h, 59, , ASM_MACH3 0674 1C ASMDATA segment 0674 FFFFFFF0 1C db ASM_MACH3 = 7877 1C ainfo = (195h) * ASMMOD + 59 0675 7877 1C db HIGH ainfo, LOW ainfo 0677 1C ASMDATA ends C endvariant 0677 1C ASMDATA segment 0677 FFFFFFFF 1C db -1 0678 1C ASMDATA ends C mne SETO ; ofs=68Eh 0678 1C ASMDATA segment 00000678 = 678 1C CURROFS = $ 0678 1C ASMDATA ends 12E7 7806 1C dw CURROFS - asmtab = 8E1 1C MN_SETO equ $ - mnlist = "SET",'O'+80h 1C tmpstr catstr ,,,,,<+80h> 12E9 534554FFFFFFCF 1C db "SET",'O'+80h C variant 190h, 59, , ASM_MACH3 0678 1C ASMDATA segment 0678 FFFFFFF0 1C db ASM_MACH3 = 76FB 1C ainfo = (190h) * ASMMOD + 59 0679 76FFFFFFFB 1C db HIGH ainfo, LOW ainfo 067B 1C ASMDATA ends C endvariant 067B 1C ASMDATA segment 067B FFFFFFFF 1C db -1 067C 1C ASMDATA ends C mne SETP ; ofs=692h 067C 1C ASMDATA segment 0000067C = 67C 1C CURROFS = $ 067C 1C ASMDATA ends 12ED 7C06 1C dw CURROFS - asmtab = 8E7 1C MN_SETP equ $ - mnlist = "SET",'P'+80h 1C tmpstr catstr ,,,

,,<+80h> 12EF 534554FFFFFFD0 1C db "SET",'P'+80h C variant 19ah, 59, , ASM_MACH3 067C 1C ASMDATA segment 067C FFFFFFF0 1C db ASM_MACH3 = 79F3 1C ainfo = (19ah) * ASMMOD + 59 067D 79FFFFFFF3 1C db HIGH ainfo, LOW ainfo 067F 1C ASMDATA ends C endvariant 067F 1C ASMDATA segment 067F FFFFFFFF 1C db -1 0680 1C ASMDATA ends C mne SETPE ; ofs=696h 0680 1C ASMDATA segment 00000680 = 680 1C CURROFS = $ 0680 1C ASMDATA ends 12F3 FFFFFF8006 1C dw CURROFS - asmtab = 8ED 1C MN_SETPE equ $ - mnlist = "SETP",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 12F5 53455450FFFFFFC5 1C db "SETP",'E'+80h C variant 19ah, 59, , ASM_MACH3 0680 1C ASMDATA segment 0680 FFFFFFF0 1C db ASM_MACH3 = 79F3 1C ainfo = (19ah) * ASMMOD + 59 0681 79FFFFFFF3 1C db HIGH ainfo, LOW ainfo 0683 1C ASMDATA ends C endvariant 0683 1C ASMDATA segment 0683 FFFFFFFF 1C db -1 0684 1C ASMDATA ends C mne SETPO ; ofs=69Ah 0684 1C ASMDATA segment 00000684 = 684 1C CURROFS = $ 0684 1C ASMDATA ends 12FA FFFFFF8406 1C dw CURROFS - asmtab = 8F4 1C MN_SETPO equ $ - mnlist = "SETP",'O'+80h 1C tmpstr catstr ,,,,,<+80h> 12FC 53455450FFFFFFCF 1C db "SETP",'O'+80h C variant 19bh, 59, , ASM_MACH3 0684 1C ASMDATA segment 0684 FFFFFFF0 1C db ASM_MACH3 = 7A3F 1C ainfo = (19bh) * ASMMOD + 59 0685 7A3F 1C db HIGH ainfo, LOW ainfo 0687 1C ASMDATA ends C endvariant 0687 1C ASMDATA segment 0687 FFFFFFFF 1C db -1 0688 1C ASMDATA ends C mne SETS ; ofs=69Eh 0688 1C ASMDATA segment 00000688 = 688 1C CURROFS = $ 0688 1C ASMDATA ends 1301 FFFFFF8806 1C dw CURROFS - asmtab = 8FB 1C MN_SETS equ $ - mnlist = "SET",'S'+80h 1C tmpstr catstr ,,,,,<+80h> 1303 534554FFFFFFD3 1C db "SET",'S'+80h C variant 198h, 59, , ASM_MACH3 0688 1C ASMDATA segment 0688 FFFFFFF0 1C db ASM_MACH3 = 795B 1C ainfo = (198h) * ASMMOD + 59 0689 795B 1C db HIGH ainfo, LOW ainfo 068B 1C ASMDATA ends C endvariant 068B 1C ASMDATA segment 068B FFFFFFFF 1C db -1 068C 1C ASMDATA ends C mne SETZ ; ofs=6A2h 068C 1C ASMDATA segment 0000068C = 68C 1C CURROFS = $ 068C 1C ASMDATA ends 1307 FFFFFF8C06 1C dw CURROFS - asmtab = 901 1C MN_SETZ equ $ - mnlist = "SET",'Z'+80h 1C tmpstr catstr ,,,,,<+80h> 1309 534554FFFFFFDA 1C db "SET",'Z'+80h C variant 194h, 59, , ASM_MACH3 068C 1C ASMDATA segment 068C FFFFFFF0 1C db ASM_MACH3 = 782B 1C ainfo = (194h) * ASMMOD + 59 068D 782B 1C db HIGH ainfo, LOW ainfo 068F 1C ASMDATA ends C endvariant 068F 1C ASMDATA segment 068F FFFFFFFF 1C db -1 0690 1C ASMDATA ends C mne SGDT ; ofs=6A6h 0690 1C ASMDATA segment 00000690 = 690 1C CURROFS = $ 0690 1C ASMDATA ends 130D FFFFFF9006 1C dw CURROFS - asmtab = 907 1C MN_SGDT equ $ - mnlist = "SGD",'T'+80h 1C tmpstr catstr ,,,,,<+80h> 130F 534744FFFFFFD4 1C db "SGD",'T'+80h C variant AGRP(7,0), 29, , ASM_MACH2 0690 1C ASMDATA segment 0690 FFFFFFEF 1C db ASM_MACH2 = BBBD 1C ainfo = (240h + 7*8 + 0) * ASMMOD + 29 0691 FFFFFFBBFFFFFFBD 1C db HIGH ainfo, LOW ainfo 0693 1C ASMDATA ends C endvariant 0693 1C ASMDATA segment 0693 FFFFFFFF 1C db -1 0694 1C ASMDATA ends C mne SIDT ; ofs=6AAh 0694 1C ASMDATA segment 00000694 = 694 1C CURROFS = $ 0694 1C ASMDATA ends 1313 FFFFFF9406 1C dw CURROFS - asmtab = 90D 1C MN_SIDT equ $ - mnlist = "SID",'T'+80h 1C tmpstr catstr ,,,,,<+80h> 1315 534944FFFFFFD4 1C db "SID",'T'+80h C variant AGRP(7,1), 29, , ASM_MACH2 0694 1C ASMDATA segment 0694 FFFFFFEF 1C db ASM_MACH2 = BC09 1C ainfo = (240h + 7*8 + 1) * ASMMOD + 29 0695 FFFFFFBC09 1C db HIGH ainfo, LOW ainfo 0697 1C ASMDATA ends C endvariant 0697 1C ASMDATA segment 0697 FFFFFFFF 1C db -1 0698 1C ASMDATA ends C mne SHLD ; ofs=6AEh 0698 1C ASMDATA segment 00000698 = 698 1C CURROFS = $ 0698 1C ASMDATA ends 1319 FFFFFF9806 1C dw CURROFS - asmtab = 913 1C MN_SHLD equ $ - mnlist = "SHL",'D'+80h 1C tmpstr catstr ,,,,,<+80h> 131B 53484CFFFFFFC4 1C db "SHL",'D'+80h C variant 1a4h, 60, , ASM_MACH3 0698 1C ASMDATA segment 0698 FFFFFFF0 1C db ASM_MACH3 = 7CEC 1C ainfo = (1a4h) * ASMMOD + 60 0699 7CFFFFFFEC 1C db HIGH ainfo, LOW ainfo 069B 1C ASMDATA ends C variant 1a5h, 61, , ASM_MACH3 069B 1C ASMDATA segment 069B FFFFFFF0 1C db ASM_MACH3 = 7D39 1C ainfo = (1a5h) * ASMMOD + 61 069C 7D39 1C db HIGH ainfo, LOW ainfo 069E 1C ASMDATA ends C endvariant 069E 1C ASMDATA segment 069E FFFFFFFF 1C db -1 069F 1C ASMDATA ends C mne SHRD ; ofs=6B5h 069F 1C ASMDATA segment 0000069F = 69F 1C CURROFS = $ 069F 1C ASMDATA ends 131F FFFFFF9F06 1C dw CURROFS - asmtab = 919 1C MN_SHRD equ $ - mnlist = "SHR",'D'+80h 1C tmpstr catstr ,,,,,<+80h> 1321 534852FFFFFFC4 1C db "SHR",'D'+80h C variant 1ach, 60, , ASM_MACH3 069F 1C ASMDATA segment 069F FFFFFFF0 1C db ASM_MACH3 = 7F4C 1C ainfo = (1ach) * ASMMOD + 60 06A0 7F4C 1C db HIGH ainfo, LOW ainfo 06A2 1C ASMDATA ends C variant 1adh, 61, , ASM_MACH3 06A2 1C ASMDATA segment 06A2 FFFFFFF0 1C db ASM_MACH3 = 7F99 1C ainfo = (1adh) * ASMMOD + 61 06A3 7FFFFFFF99 1C db HIGH ainfo, LOW ainfo 06A5 1C ASMDATA ends C endvariant 06A5 1C ASMDATA segment 06A5 FFFFFFFF 1C db -1 06A6 1C ASMDATA ends C mne SLDT ; ofs=6BCh 06A6 1C ASMDATA segment 000006A6 = 6A6 1C CURROFS = $ 06A6 1C ASMDATA ends 1325 FFFFFFA606 1C dw CURROFS - asmtab = 91F 1C MN_SLDT equ $ - mnlist = "SLD",'T'+80h 1C tmpstr catstr ,,,,,<+80h> 1327 534C44FFFFFFD4 1C db "SLD",'T'+80h C variant AGRP(8,0), 40, , ASM_MACH2 06A6 1C ASMDATA segment 06A6 FFFFFFEF 1C db ASM_MACH2 = BE28 1C ainfo = (240h + 8*8 + 0) * ASMMOD + 40 06A7 FFFFFFBE28 1C db HIGH ainfo, LOW ainfo 06A9 1C ASMDATA ends C endvariant 06A9 1C ASMDATA segment 06A9 FFFFFFFF 1C db -1 06AA 1C ASMDATA ends C mne SMSW ; ofs=6C0h 06AA 1C ASMDATA segment 000006AA = 6AA 1C CURROFS = $ 06AA 1C ASMDATA ends 132B FFFFFFAA06 1C dw CURROFS - asmtab = 925 1C MN_SMSW equ $ - mnlist = "SMS",'W'+80h 1C tmpstr catstr ,,,,,<+80h> 132D 534D53FFFFFFD7 1C db "SMS",'W'+80h C variant AGRP(7,4), 40, , ASM_MACH2 06AA 1C ASMDATA segment 06AA FFFFFFEF 1C db ASM_MACH2 = BCF8 1C ainfo = (240h + 7*8 + 4) * ASMMOD + 40 06AB FFFFFFBCFFFFFFF8 1C db HIGH ainfo, LOW ainfo 06AD 1C ASMDATA ends C endvariant 06AD 1C ASMDATA segment 06AD FFFFFFFF 1C db -1 06AE 1C ASMDATA ends C mne STC ; ofs=6C4h 06AE 1C ASMDATA segment 000006AE = 6AE 1C CURROFS = $ 06AE 1C ASMDATA ends 1331 FFFFFFAE06 1C dw CURROFS - asmtab = 92B 1C MN_STC equ $ - mnlist = "ST",'C'+80h 1C tmpstr catstr ,,,,,<+80h> 1333 5354FFFFFFC3 1C db "ST",'C'+80h C variant 0f9h, 0 06AE 1C ASMDATA segment = 49EC 1C ainfo = (0f9h) * ASMMOD + 0 06AE 49FFFFFFEC 1C db HIGH ainfo, LOW ainfo 06B0 1C ASMDATA ends C endvariant 06B0 1C ASMDATA segment 06B0 FFFFFFFF 1C db -1 06B1 1C ASMDATA ends C mne STD ; ofs=6C7h 06B1 1C ASMDATA segment 000006B1 = 6B1 1C CURROFS = $ 06B1 1C ASMDATA ends 1336 FFFFFFB106 1C dw CURROFS - asmtab = 930 1C MN_STD equ $ - mnlist = "ST",'D'+80h 1C tmpstr catstr ,,,,,<+80h> 1338 5354FFFFFFC4 1C db "ST",'D'+80h C variant 0fdh, 0 06B1 1C ASMDATA segment = 4B1C 1C ainfo = (0fdh) * ASMMOD + 0 06B1 4B1C 1C db HIGH ainfo, LOW ainfo 06B3 1C ASMDATA ends C endvariant 06B3 1C ASMDATA segment 06B3 FFFFFFFF 1C db -1 06B4 1C ASMDATA ends C mne STI ; ofs=6CAh 06B4 1C ASMDATA segment 000006B4 = 6B4 1C CURROFS = $ 06B4 1C ASMDATA ends 133B FFFFFFB406 1C dw CURROFS - asmtab = 935 1C MN_STI equ $ - mnlist = "ST",'I'+80h 1C tmpstr catstr ,,,,,<+80h> 133D 5354FFFFFFC9 1C db "ST",'I'+80h C variant 0fbh, 0 06B4 1C ASMDATA segment = 4A84 1C ainfo = (0fbh) * ASMMOD + 0 06B4 4AFFFFFF84 1C db HIGH ainfo, LOW ainfo 06B6 1C ASMDATA ends C endvariant 06B6 1C ASMDATA segment 06B6 FFFFFFFF 1C db -1 06B7 1C ASMDATA ends C mne STOSB ; ofs=6CDh 06B7 1C ASMDATA segment 000006B7 = 6B7 1C CURROFS = $ 06B7 1C ASMDATA ends 1340 FFFFFFB706 1C dw CURROFS - asmtab = 93A 1C MN_STOSB equ $ - mnlist = "STOS",'B'+80h 1C tmpstr catstr ,,,,,<+80h> 1342 53544F53FFFFFFC2 1C db "STOS",'B'+80h C variant 0aah, 0 06B7 1C ASMDATA segment = 3278 1C ainfo = (0aah) * ASMMOD + 0 06B7 3278 1C db HIGH ainfo, LOW ainfo 06B9 1C ASMDATA ends C endvariant 06B9 1C ASMDATA segment 06B9 FFFFFFFF 1C db -1 06BA 1C ASMDATA ends C mne STOSW, ASM_D16 ; ofs=6D0h 06BA 1C ASMDATA segment 000006BA = 6BA 1C CURROFS = $ 06BA FFFFFFF8 1C db ASM_D16 06BB 1C ASMDATA ends 1347 FFFFFFBA06 1C dw CURROFS - asmtab = 941 1C MN_STOSW equ $ - mnlist = "STOS",'W'+80h 1C tmpstr catstr ,,,,,<+80h> 1349 53544F53FFFFFFD7 1C db "STOS",'W'+80h C mne STOSD, ASM_D32 ; ofs=6D1h 06BB 1C ASMDATA segment 000006BB = 6BB 1C CURROFS = $ 06BB FFFFFFF9 1C db ASM_D32 06BC 1C ASMDATA ends 134E FFFFFFBB06 1C dw CURROFS - asmtab = 948 1C MN_STOSD equ $ - mnlist = "STOS",'D'+80h 1C tmpstr catstr ,,,,,<+80h> 1350 53544F53FFFFFFC4 1C db "STOS",'D'+80h C variant 0abh, 0 06BC 1C ASMDATA segment = 32C4 1C ainfo = (0abh) * ASMMOD + 0 06BC 32FFFFFFC4 1C db HIGH ainfo, LOW ainfo 06BE 1C ASMDATA ends C endvariant 06BE 1C ASMDATA segment 06BE FFFFFFFF 1C db -1 06BF 1C ASMDATA ends C mne STR ; ofs=6D5h 06BF 1C ASMDATA segment 000006BF = 6BF 1C CURROFS = $ 06BF 1C ASMDATA ends 1355 FFFFFFBF06 1C dw CURROFS - asmtab = 94F 1C MN_STR equ $ - mnlist = "ST",'R'+80h 1C tmpstr catstr ,,,,,<+80h> 1357 5354FFFFFFD2 1C db "ST",'R'+80h C variant AGRP(8,1), 41, , ASM_MACH2 06BF 1C ASMDATA segment 06BF FFFFFFEF 1C db ASM_MACH2 = BE75 1C ainfo = (240h + 8*8 + 1) * ASMMOD + 41 06C0 FFFFFFBE75 1C db HIGH ainfo, LOW ainfo 06C2 1C ASMDATA ends C endvariant 06C2 1C ASMDATA segment 06C2 FFFFFFFF 1C db -1 06C3 1C ASMDATA ends C mne SUB ; ofs=6D9h 06C3 1C ASMDATA segment 000006C3 = 6C3 1C CURROFS = $ 06C3 1C ASMDATA ends 135A FFFFFFC306 1C dw CURROFS - asmtab = 954 1C MN_SUB equ $ - mnlist = "SU",'B'+80h 1C tmpstr catstr ,,,,,<+80h> 135C 5355FFFFFFC2 1C db "SU",'B'+80h C variant AGRP(0,5), 3, ASM_LOCKABLE 06C3 1C ASMDATA segment 06C3 FFFFFFF4 1C db ASM_LOCKABLE = AC7F 1C ainfo = (240h + 0*8 + 5) * ASMMOD + 3 06C4 FFFFFFAC7F 1C db HIGH ainfo, LOW ainfo 06C6 1C ASMDATA ends C variant 02ch, 1 06C6 1C ASMDATA segment = D11 1C ainfo = (02ch) * ASMMOD + 1 06C6 0D11 1C db HIGH ainfo, LOW ainfo 06C8 1C ASMDATA ends C variant AGRP(1,5), 2, ASM_LOCKABLE 06C8 1C ASMDATA segment 06C8 FFFFFFF4 1C db ASM_LOCKABLE = AEDE 1C ainfo = (240h + 1*8 + 5) * ASMMOD + 2 06C9 FFFFFFAEFFFFFFDE 1C db HIGH ainfo, LOW ainfo 06CB 1C ASMDATA ends C variant 028h, 4, ASM_LOCKABLE 06CB 1C ASMDATA segment 06CB FFFFFFF4 1C db ASM_LOCKABLE = BE4 1C ainfo = (028h) * ASMMOD + 4 06CC 0BFFFFFFE4 1C db HIGH ainfo, LOW ainfo 06CE 1C ASMDATA ends C variant 02ah, 5 06CE 1C ASMDATA segment = C7D 1C ainfo = (02ah) * ASMMOD + 5 06CE 0C7D 1C db HIGH ainfo, LOW ainfo 06D0 1C ASMDATA ends C endvariant 06D0 1C ASMDATA segment 06D0 FFFFFFFF 1C db -1 06D1 1C ASMDATA ends C mne TEST ; ofs=6E7h 06D1 1C ASMDATA segment 000006D1 = 6D1 1C CURROFS = $ 06D1 1C ASMDATA ends 135F FFFFFFD106 1C dw CURROFS - asmtab = 959 1C MN_TEST equ $ - mnlist = "TES",'T'+80h 1C tmpstr catstr ,,,,,<+80h> 1361 544553FFFFFFD4 1C db "TES",'T'+80h C variant 0a8h, 1 06D1 1C ASMDATA segment = 31E1 1C ainfo = (0a8h) * ASMMOD + 1 06D1 31FFFFFFE1 1C db HIGH ainfo, LOW ainfo 06D3 1C ASMDATA ends C variant AGRP(6,0), 2 06D3 1C ASMDATA segment = B942 1C ainfo = (240h + 6*8 + 0) * ASMMOD + 2 06D3 FFFFFFB942 1C db HIGH ainfo, LOW ainfo 06D5 1C ASMDATA ends C variant 084h, 4 06D5 1C ASMDATA segment = 2734 1C ainfo = (084h) * ASMMOD + 4 06D5 2734 1C db HIGH ainfo, LOW ainfo 06D7 1C ASMDATA ends C variant 084h, 5 06D7 1C ASMDATA segment = 2735 1C ainfo = (084h) * ASMMOD + 5 06D7 2735 1C db HIGH ainfo, LOW ainfo 06D9 1C ASMDATA ends C endvariant 06D9 1C ASMDATA segment 06D9 FFFFFFFF 1C db -1 06DA 1C ASMDATA ends C mne VERR ; ofs=6F0h 06DA 1C ASMDATA segment 000006DA = 6DA 1C CURROFS = $ 06DA 1C ASMDATA ends 1365 FFFFFFDA06 1C dw CURROFS - asmtab = 95F 1C MN_VERR equ $ - mnlist = "VER",'R'+80h 1C tmpstr catstr ,,,,,<+80h> 1367 564552FFFFFFD2 1C db "VER",'R'+80h C variant AGRP(8,4), 41, , ASM_MACH2 06DA 1C ASMDATA segment 06DA FFFFFFEF 1C db ASM_MACH2 = BF59 1C ainfo = (240h + 8*8 + 4) * ASMMOD + 41 06DB FFFFFFBF59 1C db HIGH ainfo, LOW ainfo 06DD 1C ASMDATA ends C endvariant 06DD 1C ASMDATA segment 06DD FFFFFFFF 1C db -1 06DE 1C ASMDATA ends C mne VERW ; ofs=6F4h 06DE 1C ASMDATA segment 000006DE = 6DE 1C CURROFS = $ 06DE 1C ASMDATA ends 136B FFFFFFDE06 1C dw CURROFS - asmtab = 965 1C MN_VERW equ $ - mnlist = "VER",'W'+80h 1C tmpstr catstr ,,,,,<+80h> 136D 564552FFFFFFD7 1C db "VER",'W'+80h C variant AGRP(8,5), 41, , ASM_MACH2 06DE 1C ASMDATA segment 06DE FFFFFFEF 1C db ASM_MACH2 = BFA5 1C ainfo = (240h + 8*8 + 5) * ASMMOD + 41 06DF FFFFFFBFFFFFFFA5 1C db HIGH ainfo, LOW ainfo 06E1 1C ASMDATA ends C endvariant 06E1 1C ASMDATA segment 06E1 FFFFFFFF 1C db -1 06E2 1C ASMDATA ends C mne WAIT ; ofs=6F8h 06E2 1C ASMDATA segment 000006E2 = 6E2 1C CURROFS = $ 06E2 1C ASMDATA ends 1371 FFFFFFE206 1C dw CURROFS - asmtab = 96B 1C MN_WAIT equ $ - mnlist = "WAI",'T'+80h 1C tmpstr catstr ,,,,,<+80h> 1373 574149FFFFFFD4 1C db "WAI",'T'+80h C variant 09bh, 0 06E2 1C ASMDATA segment = 2E04 1C ainfo = (09bh) * ASMMOD + 0 06E2 2E04 1C db HIGH ainfo, LOW ainfo 06E4 1C ASMDATA ends C endvariant 06E4 1C ASMDATA segment 06E4 FFFFFFFF 1C db -1 06E5 1C ASMDATA ends C mne WBINVD ; ofs=6FBh 06E5 1C ASMDATA segment 000006E5 = 6E5 1C CURROFS = $ 06E5 1C ASMDATA ends 1377 FFFFFFE506 1C dw CURROFS - asmtab = 971 1C MN_WBINVD equ $ - mnlist = "WBINV",'D'+80h 1C tmpstr catstr ,,,,,<+80h> 1379 5742494E56FFFFFFC4 1C db "WBINV",'D'+80h C variant 109h, 0, , ASM_MACH4 06E5 1C ASMDATA segment 06E5 FFFFFFF1 1C db ASM_MACH4 = 4EAC 1C ainfo = (109h) * ASMMOD + 0 06E6 4EFFFFFFAC 1C db HIGH ainfo, LOW ainfo 06E8 1C ASMDATA ends C endvariant 06E8 1C ASMDATA segment 06E8 FFFFFFFF 1C db -1 06E9 1C ASMDATA ends C mne WRMSR ; ofs=6FFh 06E9 1C ASMDATA segment 000006E9 = 6E9 1C CURROFS = $ 06E9 1C ASMDATA ends 137F FFFFFFE906 1C dw CURROFS - asmtab = 979 1C MN_WRMSR equ $ - mnlist = "WRMS",'R'+80h 1C tmpstr catstr ,,,,,<+80h> 1381 57524D53FFFFFFD2 1C db "WRMS",'R'+80h C variant 130h, 0, , ASM_MACH5 06E9 1C ASMDATA segment 06E9 FFFFFFF2 1C db ASM_MACH5 = 5A40 1C ainfo = (130h) * ASMMOD + 0 06EA 5A40 1C db HIGH ainfo, LOW ainfo 06EC 1C ASMDATA ends C endvariant 06EC 1C ASMDATA segment 06EC FFFFFFFF 1C db -1 06ED 1C ASMDATA ends C mne XADD ; ofs=703h 06ED 1C ASMDATA segment 000006ED = 6ED 1C CURROFS = $ 06ED 1C ASMDATA ends 1386 FFFFFFED06 1C dw CURROFS - asmtab = 980 1C MN_XADD equ $ - mnlist = "XAD",'D'+80h 1C tmpstr catstr ,,,,,<+80h> 1388 584144FFFFFFC4 1C db "XAD",'D'+80h C variant 1c0h, 4, ASM_LOCKABLE, ASM_MACH4 06ED 1C ASMDATA segment 06ED FFFFFFF4 1C db ASM_LOCKABLE 06EE FFFFFFF1 1C db ASM_MACH4 = 8504 1C ainfo = (1c0h) * ASMMOD + 4 06EF FFFFFF8504 1C db HIGH ainfo, LOW ainfo 06F1 1C ASMDATA ends C endvariant 06F1 1C ASMDATA segment 06F1 FFFFFFFF 1C db -1 06F2 1C ASMDATA ends C mne XCHG ; ofs=708h 06F2 1C ASMDATA segment 000006F2 = 6F2 1C CURROFS = $ 06F2 1C ASMDATA ends 138C FFFFFFF206 1C dw CURROFS - asmtab = 986 1C MN_XCHG equ $ - mnlist = "XCH",'G'+80h 1C tmpstr catstr ,,,,,<+80h> 138E 584348FFFFFFC7 1C db "XCH",'G'+80h C variant 090h, 62 06F2 1C ASMDATA segment = 2AFE 1C ainfo = (090h) * ASMMOD + 62 06F2 2AFFFFFFFE 1C db HIGH ainfo, LOW ainfo 06F4 1C ASMDATA ends C variant 090h, 63 06F4 1C ASMDATA segment = 2AFF 1C ainfo = (090h) * ASMMOD + 63 06F4 2AFFFFFFFF 1C db HIGH ainfo, LOW ainfo 06F6 1C ASMDATA ends C variant 086h, 4, ASM_LOCKABLE 06F6 1C ASMDATA segment 06F6 FFFFFFF4 1C db ASM_LOCKABLE = 27CC 1C ainfo = (086h) * ASMMOD + 4 06F7 27FFFFFFCC 1C db HIGH ainfo, LOW ainfo 06F9 1C ASMDATA ends C variant 086h, 5, ASM_LOCKABLE 06F9 1C ASMDATA segment 06F9 FFFFFFF4 1C db ASM_LOCKABLE = 27CD 1C ainfo = (086h) * ASMMOD + 5 06FA 27FFFFFFCD 1C db HIGH ainfo, LOW ainfo 06FC 1C ASMDATA ends C endvariant 06FC 1C ASMDATA segment 06FC FFFFFFFF 1C db -1 06FD 1C ASMDATA ends C mne XLAT ; ofs=713h 06FD 1C ASMDATA segment 000006FD = 6FD 1C CURROFS = $ 06FD 1C ASMDATA ends 1392 FFFFFFFD06 1C dw CURROFS - asmtab = 98C 1C MN_XLAT equ $ - mnlist = "XLA",'T'+80h 1C tmpstr catstr ,,,,,<+80h> 1394 584C41FFFFFFD4 1C db "XLA",'T'+80h C variant 0d7h, 0 06FD 1C ASMDATA segment = 3FD4 1C ainfo = (0d7h) * ASMMOD + 0 06FD 3FFFFFFFD4 1C db HIGH ainfo, LOW ainfo 06FF 1C ASMDATA ends C endvariant 06FF 1C ASMDATA segment 06FF FFFFFFFF 1C db -1 0700 1C ASMDATA ends C mne XLATB ; ofs=716h 0700 1C ASMDATA segment 00000700 = 700 1C CURROFS = $ 0700 1C ASMDATA ends 1398 0007 1C dw CURROFS - asmtab = 992 1C MN_XLATB equ $ - mnlist = "XLAT",'B'+80h 1C tmpstr catstr ,,,,,<+80h> 139A 584C4154FFFFFFC2 1C db "XLAT",'B'+80h C variant 0d7h, 0 0700 1C ASMDATA segment = 3FD4 1C ainfo = (0d7h) * ASMMOD + 0 0700 3FFFFFFFD4 1C db HIGH ainfo, LOW ainfo 0702 1C ASMDATA ends C endvariant 0702 1C ASMDATA segment 0702 FFFFFFFF 1C db -1 0703 1C ASMDATA ends C mne XOR ; ofs=719h 0703 1C ASMDATA segment 00000703 = 703 1C CURROFS = $ 0703 1C ASMDATA ends 139F 0307 1C dw CURROFS - asmtab = 999 1C MN_XOR equ $ - mnlist = "XO",'R'+80h 1C tmpstr catstr ,,,,,<+80h> 13A1 584FFFFFFFD2 1C db "XO",'R'+80h C variant AGRP(0,6), 3, ASM_LOCKABLE 0703 1C ASMDATA segment 0703 FFFFFFF4 1C db ASM_LOCKABLE = ACCB 1C ainfo = (240h + 0*8 + 6) * ASMMOD + 3 0704 FFFFFFACFFFFFFCB 1C db HIGH ainfo, LOW ainfo 0706 1C ASMDATA ends C variant 034h, 1 0706 1C ASMDATA segment = F71 1C ainfo = (034h) * ASMMOD + 1 0706 0F71 1C db HIGH ainfo, LOW ainfo 0708 1C ASMDATA ends C variant AGRP(1,6), 2, ASM_LOCKABLE 0708 1C ASMDATA segment 0708 FFFFFFF4 1C db ASM_LOCKABLE = AF2A 1C ainfo = (240h + 1*8 + 6) * ASMMOD + 2 0709 FFFFFFAF2A 1C db HIGH ainfo, LOW ainfo 070B 1C ASMDATA ends C variant 030h, 4, ASM_LOCKABLE 070B 1C ASMDATA segment 070B FFFFFFF4 1C db ASM_LOCKABLE = E44 1C ainfo = (030h) * ASMMOD + 4 070C 0E44 1C db HIGH ainfo, LOW ainfo 070E 1C ASMDATA ends C variant 032h, 5 070E 1C ASMDATA segment = EDD 1C ainfo = (032h) * ASMMOD + 5 070E 0EFFFFFFDD 1C db HIGH ainfo, LOW ainfo 0710 1C ASMDATA ends C endvariant 0710 1C ASMDATA segment 0710 FFFFFFFF 1C db -1 0711 1C ASMDATA ends C 13A4 C end_mnlist label byte C C C ;--- opindex array - help array to access operand list items (oplists); C ;--- needed because the operand list items differ in size. C 13A4 C opindex label byte C .radix 16t = 0 C opidx = 0 C repeat ASMMOD > C if opidx lt 10h > C % db OPLIST_0&@CatStr(%opidx) > C else > C % db OPLIST_&@CatStr(%opidx) > C endif > C opidx = opidx + 1 > C endm 13A4 00 1C % db OPLIST_00 = 1 1C opidx = opidx + 1 13A5 00 1C % db OPLIST_01 = 2 1C opidx = opidx + 1 13A6 02 1C % db OPLIST_02 = 3 1C opidx = opidx + 1 13A7 04 1C % db OPLIST_03 = 4 1C opidx = opidx + 1 13A8 06 1C % db OPLIST_04 = 5 1C opidx = opidx + 1 13A9 08 1C % db OPLIST_05 = 6 1C opidx = opidx + 1 13AA 0A 1C % db OPLIST_06 = 7 1C opidx = opidx + 1 13AB 0C 1C % db OPLIST_07 = 8 1C opidx = opidx + 1 13AC 0E 1C % db OPLIST_08 = 9 1C opidx = opidx + 1 13AD 10 1C % db OPLIST_09 = A 1C opidx = opidx + 1 13AE 11 1C % db OPLIST_0A = B 1C opidx = opidx + 1 13AF 13 1C % db OPLIST_0B = C 1C opidx = opidx + 1 13B0 15 1C % db OPLIST_0C = D 1C opidx = opidx + 1 13B1 16 1C % db OPLIST_0D = E 1C opidx = opidx + 1 13B2 17 1C % db OPLIST_0E = F 1C opidx = opidx + 1 13B3 18 1C % db OPLIST_0F = 10 1C opidx = opidx + 1 13B4 19 1C % db OPLIST_10 = 11 1C opidx = opidx + 1 13B5 1A 1C % db OPLIST_11 = 12 1C opidx = opidx + 1 13B6 1B 1C % db OPLIST_12 = 13 1C opidx = opidx + 1 13B7 1D 1C % db OPLIST_13 = 14 1C opidx = opidx + 1 13B8 1E 1C % db OPLIST_14 = 15 1C opidx = opidx + 1 13B9 1F 1C % db OPLIST_15 = 16 1C opidx = opidx + 1 13BA 21 1C % db OPLIST_16 = 17 1C opidx = opidx + 1 13BB 23 1C % db OPLIST_17 = 18 1C opidx = opidx + 1 13BC 26 1C % db OPLIST_18 = 19 1C opidx = opidx + 1 13BD 27 1C % db OPLIST_19 = 1A 1C opidx = opidx + 1 13BE 28 1C % db OPLIST_1A = 1B 1C opidx = opidx + 1 13BF 29 1C % db OPLIST_1B = 1C 1C opidx = opidx + 1 13C0 2A 1C % db OPLIST_1C = 1D 1C opidx = opidx + 1 13C1 2C 1C % db OPLIST_1D = 1E 1C opidx = opidx + 1 13C2 2D 1C % db OPLIST_1E = 1F 1C opidx = opidx + 1 13C3 2E 1C % db OPLIST_1F = 20 1C opidx = opidx + 1 13C4 31 1C % db OPLIST_20 = 21 1C opidx = opidx + 1 13C5 34 1C % db OPLIST_21 = 22 1C opidx = opidx + 1 13C6 37 1C % db OPLIST_22 = 23 1C opidx = opidx + 1 13C7 3A 1C % db OPLIST_23 = 24 1C opidx = opidx + 1 13C8 3C 1C % db OPLIST_24 = 25 1C opidx = opidx + 1 13C9 3E 1C % db OPLIST_25 = 26 1C opidx = opidx + 1 13CA 3F 1C % db OPLIST_26 = 27 1C opidx = opidx + 1 13CB 40 1C % db OPLIST_27 = 28 1C opidx = opidx + 1 13CC 41 1C % db OPLIST_28 = 29 1C opidx = opidx + 1 13CD 42 1C % db OPLIST_29 = 2A 1C opidx = opidx + 1 13CE 43 1C % db OPLIST_2A = 2B 1C opidx = opidx + 1 13CF 45 1C % db OPLIST_2B = 2C 1C opidx = opidx + 1 13D0 47 1C % db OPLIST_2C = 2D 1C opidx = opidx + 1 13D1 49 1C % db OPLIST_2D = 2E 1C opidx = opidx + 1 13D2 4B 1C % db OPLIST_2E = 2F 1C opidx = opidx + 1 13D3 4D 1C % db OPLIST_2F = 30 1C opidx = opidx + 1 13D4 4F 1C % db OPLIST_30 = 31 1C opidx = opidx + 1 13D5 52 1C % db OPLIST_31 = 32 1C opidx = opidx + 1 13D6 55 1C % db OPLIST_32 = 33 1C opidx = opidx + 1 13D7 57 1C % db OPLIST_33 = 34 1C opidx = opidx + 1 13D8 59 1C % db OPLIST_34 = 35 1C opidx = opidx + 1 13D9 5A 1C % db OPLIST_35 = 36 1C opidx = opidx + 1 13DA 5B 1C % db OPLIST_36 = 37 1C opidx = opidx + 1 13DB 5D 1C % db OPLIST_37 = 38 1C opidx = opidx + 1 13DC 5F 1C % db OPLIST_38 = 39 1C opidx = opidx + 1 13DD 61 1C % db OPLIST_39 = 3A 1C opidx = opidx + 1 13DE 63 1C % db OPLIST_3A = 3B 1C opidx = opidx + 1 13DF 64 1C % db OPLIST_3B = 3C 1C opidx = opidx + 1 13E0 65 1C % db OPLIST_3C = 3D 1C opidx = opidx + 1 13E1 68 1C % db OPLIST_3D = 3E 1C opidx = opidx + 1 13E2 6B 1C % db OPLIST_3E = 3F 1C opidx = opidx + 1 13E3 6D 1C % db OPLIST_3F = 40 1C opidx = opidx + 1 13E4 6F 1C % db OPLIST_40 = 41 1C opidx = opidx + 1 13E5 70 1C % db OPLIST_41 = 42 1C opidx = opidx + 1 13E6 71 1C % db OPLIST_42 = 43 1C opidx = opidx + 1 13E7 72 1C % db OPLIST_43 = 44 1C opidx = opidx + 1 13E8 73 1C % db OPLIST_44 = 45 1C opidx = opidx + 1 13E9 74 1C % db OPLIST_45 = 46 1C opidx = opidx + 1 13EA 75 1C % db OPLIST_46 = 47 1C opidx = opidx + 1 13EB 77 1C % db OPLIST_47 = 48 1C opidx = opidx + 1 13EC 79 1C % db OPLIST_48 = 49 1C opidx = opidx + 1 13ED 7B 1C % db OPLIST_49 = 4A 1C opidx = opidx + 1 13EE 7D 1C % db OPLIST_4A = 4B 1C opidx = opidx + 1 13EF 7F 1C % db OPLIST_4B = 4C 1C opidx = opidx + 1 C .radix 10t 13F0 FFFFFF81 C db offset agroups - offset oplists ; size of oplists table, required to find end of last operand list C 13F1 C CONST ends C 00C8 C _DATA segment C 00C8 00 C asm_mn_flags db 0 ;flags for the mnemonic C = 1 C AMF_D32 equ 1 ;32bit opcode/data operand = 2 C AMF_WAIT equ 2 = 4 C AMF_A32 equ 4 ;address operand is 32bit = 8 C AMF_SIB equ 8 ;there's a SIB in the arguments = 10 C AMF_MSEG equ 10h ;if a seg prefix was given b4 mnemonic = 20 C AMF_FSGS equ 20h ;if FS or GS was encountered C = 40 C AMF_D16 equ 40h ;16bit opcode/data operand = 80 C AMF_ADDR equ 80h ;address operand is given C 00C9 00 C bEndOplItem db 0 ;v2.50 C C ;--- aa_saved_prefix and aa_seg_pre must be consecutive. 00CA 00 C aa_saved_prefix db 0 ;WAIT or REP... prefix 00CB 00 C aa_seg_pre db 0 ;segment prefix C 00CC 0000 C mneminfo dw 0 ;address associated with the mnemonic 00CE 0000 C a_opcode dw 0 ;op code info for this variant 00D0 0000 C a_opcode2 dw 0 ;copy of a_opcode for obs-instruction C C ;--- dmflags values = 1 C DM_COPR equ 1 ;math coprocessor = 2 C DM_MMX equ 2 ;MMX extensions C C ;--- varflags values = 1 C VAR_LOCKABLE equ 1 ;variant is lockable = 2 C VAR_MODRM equ 2 ;if there's a MOD R/M here = 4 C VAR_SIZ_GIVN equ 4 ;if a size was given = 8 C VAR_SIZ_FORCD equ 8 ;if only one size is permitted = 10 C VAR_SIZ_NEED equ 10h ;if we need the size = 20 C VAR_D16 equ 20h ;if operand size is WORD = 40 C VAR_D32 equ 40h ;if operand size is DWORD C 00000000 C AINSTR struct 00000000 C rmaddr dw ? ;address of operand giving the R/M byte (asm only) C ;--- regmem and sibbyte must be consecutive 00000002 C regmem db ? ;mod reg r/m part of instruction 00000003 C sibbyte db ? ;SIB byte 00000004 C immaddr dw ? ;address of operand giving the immed stf (asm only) 00000006 C xxaddr dw ? ;address of additional stuff (asm only) C ;--- dismach and dmflags must be consecutive 00000008 C dismach db ? ;type of processor needed 00000009 C dmflags db ? ;flags for extra processor features 0000000A C opcode_or db ? ;extra bits in the op code (asm only) 0000000B C opsize db ? ;size of this operation (2 or 4) (asm only) 0000000C C varflags db ? ;flags for this variant (asm only) 0000000D C reqsize db ? ;size that this arg should be (asm only) 0000000E C AINSTR ends C 00D2 0000000000000000000000 C ai AINSTR ; used by assembler and disassembler C 00E0 C _DATA ends C 13F1 C CONST segment C C ;--- search for "obsolete" instructions C ;--- dbe0: FENI C ;--- dbe1: FDISI C ;--- dbe4: FSETPM C ;--- 124: MOV TRx, reg C ;--- 126: MOV reg, TRx C 13F1 FFFFFFE0FFFFFFDBFFFFFFE C a_obstab dw 0dbe0h,0dbe1h,0dbe4h,124h,126h ;obs. instruction codes 13FB 0101020404 C obsmach db 1,1,2,4,4 ;max permissible machine for the above C 1400 0B000D000F000E00 C modrmtab db 11,0,13,0,15,0,14,0 ;[bx], [bp], [di], [si] 1408 0F0D0E0D0F0B0E0B C db 15,13,14,13,15,11,14,11 ;[bp+di],[bp+si],[bx+di],[bx+si] C 1410 610D C aam_args db 'a',CR C C ;--- Equates for parsed arguments, stored in OPRND.flags C = 1 C ARG_DEREF equ 1 ;non-immediate memory reference = 2 C ARG_MODRM equ 2 ;if we've computed the MOD R/M byte = 4 C ARG_JUSTREG equ 4 ;a solo register = 8 C ARG_WEIRDREG equ 8 ;if it's a segment register or CR, etc. = 10 C ARG_IMMED equ 10h ;if it's just a number = 20 C ARG_FARADDR equ 20h ;if it's of the form xxxx:yyyyyyyy C C ;--- For each operand type in the following table, the first byte is C ;--- the bits, at least one of which must be present; the second is the C ;--- bits all of which must be absent. C ;--- the items in bittab must be ordered similiar to asm_jmp1 and dis_jmp1. C 1412 C bittab label byte 1412 10 C db ARG_IMMED ;+0 OP_IMM 1413 05 C db ARG_DEREF+ARG_JUSTREG;+1 OP_RM 1414 01 C db ARG_DEREF ;+2 OP_M 1415 04 C db ARG_JUSTREG ;+3 OP_R_MOD 1416 01 C db ARG_DEREF ;+4 OP_MOFFS 1417 04 C db ARG_JUSTREG ;+5 OP_R 1418 04 C db ARG_JUSTREG ;+6 OP_R_ADD 1419 04 C db ARG_JUSTREG ;+7 OP_AX C 141A 01 C db ARG_DEREF ; 0 OP_M64 141B 01 C db ARG_DEREF ; 1 OP_MFLOAT 141C 01 C db ARG_DEREF ; 2 OP_MDOUBLE 141D 01 C db ARG_DEREF ; 3 OP_M80 141E 01 C db ARG_DEREF ; 4 OP_MXX 141F 01 C db ARG_DEREF ; 5 OP_FARMEM 1420 20 C db ARG_FARADDR ; 6 OP_FARIMM 1421 10 C db ARG_IMMED ; 7 OP_REL8 1422 10 C db ARG_IMMED ; 8 OP_REL1632 1423 08 C db ARG_WEIRDREG ; 9 OP_1CHK 1424 08 C db ARG_WEIRDREG ;10 OP_STI 1425 08 C db ARG_WEIRDREG ;11 OP_CR 1426 08 C db ARG_WEIRDREG ;12 OP_DR 1427 08 C db ARG_WEIRDREG ;13 OP_TR 1428 08 C db ARG_WEIRDREG ;14 OP_SEGREG 1429 10 C db ARG_IMMED ;15 OP_IMMS8 142A 10 C db ARG_IMMED ;16 OP_IMM8 142B 08 C db ARG_WEIRDREG ;17 OP_MMX 142C FFFFFFFF C db 0ffh ;18 OP_SHOSIZ C 142D 10 C db ARG_IMMED ;OP_1 142E 10 C db ARG_IMMED ;OP_3 142F 04 C db ARG_JUSTREG ;OP_DX 1430 04 C db ARG_JUSTREG ;OP_CL 1431 08 C db ARG_WEIRDREG ;OP_ST 1432 08 C db ARG_WEIRDREG ;OP_CS 1433 08 C db ARG_WEIRDREG ;OP_DS 1434 08 C db ARG_WEIRDREG ;OP_ES 1435 08 C db ARG_WEIRDREG ;OP_FS 1436 08 C db ARG_WEIRDREG ;OP_GS 1437 08 C db ARG_WEIRDREG ;OP_SS C C ;--- special ops DX, CL, ST, CS, DS, ES, FS, GS, SS C ;--- entry required if ao48 is set C ;--- order of entries matches the last 9 ones in dis_optab C 1438 C asm_regnum label byte 1438 0A011E191B181C1D1A C db REG_DX, REG_CL, REG_ST, REG_CS, REG_DS, REG_ES, REG_FS, REG_GS, REG_SS C C ;--- size qualifier C ;--- 1 BY=BYTE ptr C ;--- 2 WO=WORD ptr C ;--- 3 unused C ;--- 4 DW=DWORD ptr C ;--- 5 QW=QWORD ptr C ;--- 6 FL=FLOAT ptr (REAL4) C ;--- 7 DO=DOUBLE ptr (REAL8) C ;--- 8 TB=TBYTE ptr (REAL10) C ;--- 9 SH=SHORT C ;--- 10 LO=LONG C ;--- 11 NE=NEAR ptr C ;--- 12 FA=FAR ptr C = 0 C SIZ_NONE equ 0 = 1 C SIZ_BYTE equ 1 = 2 C SIZ_WORD equ 2 = 4 C SIZ_DWORD equ 4 = 5 C SIZ_QWORD equ 5 = 6 C SIZ_FLOAT equ 6 = 7 C SIZ_DOUBLE equ 7 = 8 C SIZ_TBYTE equ 8 = 9 C SIZ_SHORT equ 9 = A C SIZ_LONG equ 10 = B C SIZ_NEAR equ 11 = C C SIZ_FAR equ 12 C 1441 4259574F574F4457515746 C sizetcnam db 'BY','WO','WO','DW','QW','FL','DO','TB','SH','LO','NE','FA' C C ;--- sizes for OP_M64, OP_MFLOAT, OP_MDOUBLE, OP_M80, OP_MXX, OP_FARMEM C 1459 05060708 C asm_siznum db SIZ_QWORD, SIZ_FLOAT, SIZ_DOUBLE, SIZ_TBYTE 145D FFFFFFFF0C C db -1, SIZ_FAR ;-1 = none C 145F C CONST ends C C ;--- write byte in AL to BX/[E]DX, then increment [E]DX C 01C8 C writeasm proc 01C8 FFFFFFE8FFFFFFFD12 C call writemem C sizeprfX ;inc edx 01CB 42 C inc dx 01CC FFFFFFC3 C ret 01CD C writeasm endp C C ;--- write CX bytes from DS:SI to BX:[E]DX C 01CD C writeasmn proc 01CD FFFFFFE306 C jcxz nowrite 01CF C @@: 01CF FFFFFFAC C lodsb 01D0 FFFFFFE8FFFFFFF5FFFFFFF C call writeasm 01D3 FFFFFFE2FFFFFFFA C loop @B 01D5 C nowrite: 01D5 FFFFFFC3 C ret 01D6 C writeasmn endp C 01D6 C a_cmd proc 01D6 FFFFFFC706 0000o 0000o C mov [errret],offset aa01 01DC 3C0D C cmp al,CR 01DE 7412 C je aa01x ;if end of line C @movs bx,[regs.rCS] ;default segment to use 01E0 FFFFFF8B1E 002Ao 1C mov bx, [regs.rCS] 01E4 C aa00a: 01E4 FFFFFFE8FFFFFFFA1E C call getaddr ;get address into bx:(e)dx 01E7 FFFFFFE8FFFFFFEA1F C call chkeol ;expect end of line here C sizeprfX ;mov [a_addr+0],edx 01EA FFFFFF8916 0000o C mov [a_addr+0],dx ;save the address 01EE FFFFFF891E 0004o C mov [a_addr+4],bx C if ?PM C else 01F2 C aa01x: C endif C C ;--- Begin loop over input lines. C 01F2 C aa01: C if ?PM C endif C if FLATSS C else 01F2 FFFFFF8B26 0000o C mov sp,[top_sp] ;restore the stack (this implies no "ret") C endif 01F6 FFFFFFBF 0000o C mov di,offset line_out C @dispsegm [a_addr+4] 01F9 FFFFFFA1 0004o 1C mov ax,[a_addr+4] 01FC FFFFFFE8662A 1C call hexword 01FF FFFFFFB03A C mov al,':' 0201 FFFFFFAA C stosb 0202 FFFFFFC606 0000o 00 C mov [asm_mn_flags],0 C if ?PM C endif C sizeprfX ;mov eax,[a_addr+0] 0207 FFFFFFA1 0000o C mov ax,[a_addr+0] 020A FFFFFFE84D2A C call DispOfs 020D FFFFFFB020 C mov al,' ' 020F FFFFFFAA C stosb 0210 FFFFFFE8FFFFFFD21C C call getline00 0213 3C0D C cmp al,CR 0215 745E C je aa_exit ;if done 0217 3C3B C cmp al,';' 0219 74FFFFFFD7 C je aa01 ;if comment 021B FFFFFFC706 0000o 0000 C mov word ptr [aa_saved_prefix],0 ;clear aa_saved_prefix and aa_seg_pre C C ;--- Get mnemonic and look it up. C 0221 C aa02: 0221 FFFFFFBF 0000o C mov di,offset line_out ;return here after LOCK/REP/SEG prefix 0224 56 C push si ;save position of mnemonic 0225 C aa03: 0225 3C61 C cmp al,'a' 0227 7206 C jb @F ;if not lower case letter 0229 3C7A C cmp al,'z' 022B 7702 C ja @F 022D 24FFFFFFDF C and al,TOUPPER ;convert to upper case 022F C @@: 022F FFFFFFAA C stosb 0230 FFFFFFAC C lodsb 0231 3C0D C cmp al,CR 0233 7410 C je @F ;if end of mnemonic 0235 3C3B C cmp al,';' 0237 740C C je @F 0239 3C20 C cmp al,' ' 023B 7408 C je @F 023D 3C3A C cmp al,':' 023F 7404 C je @F 0241 3C09 C cmp al,TAB 0243 75FFFFFFE0 C jne aa03 0245 C @@: 0245 FFFFFF804DFFFFFFFFFFFFF C or byte ptr [di-1],80h ;set highest bit of last char of mnemonic 0249 FFFFFFE8FFFFFFB61F C call skipwh0 ;skip to next field 024C 4E C dec si 024D 56 C push si ;save position in input line C ; mov al,0 C ; stosb C C ;--- now search mnemonic in list C 024E FFFFFFBE 0000o C mov si,offset mnlist 0251 C aa06: ;<--- next mnemonic 0251 FFFFFF8BFFFFFFDE C mov bx,si 0253 FFFFFF83FFFFFFC602 C add si,2 ;skip the 'asmtab' offset 0256 FFFFFF8BFFFFFFCE C mov cx,si 0258 C @@: 0258 FFFFFFAC C lodsb ;skip to end of string 0259 22FFFFFFC0 C and al,al 025B 79FFFFFFFB C jns @B ;if not end of string 025D FFFFFF87FFFFFFCE C xchg cx,si 025F 51 C push cx 0260 2BFFFFFFCE C sub cx,si ;size of opcode in mnlist 0262 FFFFFFBF 0000o C mov di,offset line_out 0265 FFFFFFF3FFFFFFA6 C repe cmpsb 0267 5E C pop si 0268 740E C je aa14 ;if found it 026A FFFFFF81FFFFFFFE 0000o C cmp si,offset end_mnlist 026E 72FFFFFFE1 C jc aa06 ;next mnemonic 0270 5E C pop si ;skip position in input line 0271 C aa13a: 0271 5E C pop si ;skip position of mnemonic 0272 C aa13b: 0272 FFFFFFE92F1A C jmp cmd_error ;complain 0275 C aa_exit: 0275 FFFFFFE9FFFFFF92FFFFFFF C jmp cmdloop ;done with this command C C ;--- We found the mnemonic. C 0278 C aa14: 0278 FFFFFF8B37 C mov si,[bx] ;get the offset into asmtab 027A FFFFFF81FFFFFFC6 0000o C add si,offset asmtab C C ; Now si points to the spot in asmtab corresponding to this mnemonic. C ; The format of the assembler table is as follows. C ; First, there is optionally one of the following bytes: C ; ASM_DB db mnemonic C ; ASM_DW dw mnemonic C ; ASM_DD dd mnemonic C ; ASM_WAIT the mnemonic should start with a wait C ; instruction. C ; ASM_D32 This is a 32 bit instruction variant. C ; ASM_D16 This is a 16 bit instruction variant. C ; ASM_AAX Special for AAM and AAD instructions: C ; put 0ah in for a default operand. C ; ASM_SEG This is a segment prefix. C ; ASM_LOCKREP This is a LOCK or REP... prefix. C ; C ; Then, in most cases, this is followed by one or more of the following C ; sequences, indicating an instruction variant. C ; ASM_LOCKABLE (optional) indicates that this instruction can C ; follow a LOCK prefix. C ; ASM_MACHx (optional) indicates the first machine on which this C ; instruction appeared. C ; [word] This is a 16-bit integer, most significant byte C ; first, giving ASMMOD * a + b, where b is an C ; index into the array opindex (indicating the C ; key, or type of operand list), and a is as C ; follows: C ; 0-255 The (one-byte) instruction. C ; 256-511 The lower 8 bits give the second byte of C ; a two-byte instruction beginning with 0fh. C ; 512-575 Bits 2-0 say which floating point instruction C ; this is (0d8h-0dfh), and 5-3 give the /r C ; field. C ; 576-... (a-576)/8 is the index in the array agroups C ; (which gives the real value of a), and the C ; low-order 3 bits gives the /r field. C ; C ; [byte] This gives the second byte of a floating C ; instruction if 0d8h <= a <= 0dfh. C ; C ; Following these is an ASM_END byte. C ; C ; Exceptions: C ; ASM_SEG and ASM_LOCKREP are followed by just one byte, the C ; prefix byte. C ; ASM_DB, ASM_DW, and ASM_DD don't need to be followed by C ; anything. C = FF C ASM_END equ 0ffh = FE C ASM_DB equ 0feh = FD C ASM_DW equ 0fdh = FC C ASM_DD equ 0fch = FB C ASM_ORG equ 0fbh = FA C ASM_WAIT equ 0fah = F9 C ASM_D32 equ 0f9h = F8 C ASM_D16 equ 0f8h = F7 C ASM_AAX equ 0f7h = F6 C ASM_SEG equ 0f6h = F5 C ASM_LOCKREP equ 0f5h = F4 C ASM_LOCKABLE equ 0f4h = F3 C ASM_MACH6 equ 0f3h = F2 C ASM_MACH5 equ 0f2h = F1 C ASM_MACH4 equ 0f1h = F0 C ASM_MACH3 equ 0f0h = EF C ASM_MACH2 equ 0efh = EE C ASM_MACH1 equ 0eeh = ED C ASM_MACH0 equ 0edh C 027E FFFFFF803CFFFFFFF5 C cmp byte ptr [si],ASM_LOCKREP ;check for mnemonic flag byte 0281 7217 C jb aa15 ;if none 0283 FFFFFFAC C lodsb ;get the prefix 0284 2CFFFFFFF5 C sub al,ASM_LOCKREP ;convert to 0-9 0286 7447 C je aa18 ;if LOCK or REP... 0288 FFFFFF98 C cbw 0289 48 C dec ax 028A 741D C jz aa17 ;if segment prefix (ASM_SEG) 028C 48 C dec ax 028D 7417 C jz aa16 ;if aad or aam (ASM_AAX) 028F 48 C dec ax 0290 740B C jz aa15_1 ;if ASM_D16 0292 3C03 C cmp al,3 0294 7359 C jae aa20 ;if ASM_ORG or ASM_DD or ASM_DW or ASM_DB 0296 0806 0000o C or [asm_mn_flags],al ;save AMF_D32 or AMF_WAIT (1 or 2) 029A C aa15: 029A FFFFFFE9FFFFFFF500 C jmp ab01 ;now process the arguments 029D C aa15_1: 029D FFFFFF800E 0000o 40 C or [asm_mn_flags],AMF_D16 02A2 46 C inc si ;skip the ASM_D32 byte 02A3 FFFFFFE9FFFFFFEC00 C jmp ab01 ;now process the arguments C 02A6 C aa16: 02A6 FFFFFFE9FFFFFFD600 C jmp ab00 C C ;--- segment prefix C 02A9 C aa17: 02A9 FFFFFFAC C lodsb ;get prefix value 02AA FFFFFFA2 0000o C mov [aa_seg_pre],al 02AD FFFFFF8AFFFFFFC8 C mov cl,al 02AF FFFFFF800E 0000o 10 C or [asm_mn_flags],AMF_MSEG 02B4 5E C pop si ;get position in input line 02B5 58 C pop ax ;skip 02B6 FFFFFFAC C lodsb 02B7 3C3A C cmp al,':' 02B9 75FFFFFFB7 C jne aa13b 02BB FFFFFFE8431F C call skipwhite 02BE 3C0D C cmp al,CR 02C0 7404 C je @F 02C2 3C3B C cmp al,';' 02C4 75FFFFFFAC C jne aa13b 02C6 C @@: 02C6 FFFFFFBF 0000o C mov di,offset line_out 02C9 FFFFFF8AFFFFFFC1 C mov al,cl 02CB FFFFFFAA C stosb 02CC FFFFFFE9FFFFFF8B00 C jmp aa27 ;back for more C C ;--- LOCK or REP prefix C 02CF C aa18: 02CF FFFFFFAC C lodsb ;get prefix value 02D0 FFFFFF8606 0000o C xchg al,[aa_saved_prefix] 02D4 3C00 C cmp al,0 02D6 75FFFFFF99 C jnz aa13a ;if there already was a saved prefix 02D8 5E C pop si 02D9 58 C pop ax 02DA FFFFFFAC C lodsb 02DB 3C0D C cmp al,CR 02DD 7407 C je @F ;if end of line 02DF 3C3B C cmp al,';' 02E1 7403 C je @F ;if end of line (comment) 02E3 FFFFFFE93BFFFFFFFF C jmp aa02 ;back for more 02E6 C @@: 02E6 FFFFFFA0 0000o C mov al,[aa_saved_prefix] ;just a prefix, nothing else 02E9 FFFFFFBF 0000o C mov di,offset line_out 02EC FFFFFFAA C stosb 02ED FFFFFFEB6B C jmp aa27 C C ;--- Pseudo ops (org or db/dw/dd). C 02EF C aa20: 02EF FFFFFF833E 0000o 00 C cmp word ptr [aa_saved_prefix],0 02F4 7403FFFFFFE978FFFFFFFF C jnz aa13a ;if there was a prefix or a segment: error 02F9 5E C pop si ;get position in input line 02FA 2C03 C sub al,3 ;AX=0 if org, 1 if dd, 2 if dw, 3 if db. 02FC 7511 C jnz aa20m ;if not ORG C C ;--- Process ORG pseudo op. C 02FE FFFFFFE8001F C call skipwhite 0301 3C0D C cmp al,CR 0303 7407 C je @F ;if nothing 0305 FFFFFF8B1E 0004o C mov bx,[a_addr+4] ;default segment 0309 FFFFFFE9FFFFFFD8FFFFFFF C jmp aa00a ;go to top 030C C @@: 030C FFFFFFE9FFFFFFE3FFFFFFF C jmp aa01 ;get next line C C ;--- Data instructions (DB/DW/DD). C 030F C aa20m: 030F FFFFFFBF 0000o C mov di,offset line_out ;put the bytes here when we get them 0312 FFFFFF93 C xchg ax,bx ;mov bx,ax 0313 FFFFFFD1FFFFFFE3 C shl bx,1 0315 FFFFFF8BFFFFFFAF FFFEo C mov bp,[bx+aadbsto-2] ;get address of storage routine 0319 FFFFFFE8FFFFFFE51E C call skipwhite 031C 3C0D C cmp al,CR 031E 743A C je aa27 ;if end of line C 0320 C aa21: ;<--- loop 0320 3C22 C cmp al,'"' 0322 7419 C je aa22 ;if string 0324 3C27 C cmp al,"'" 0326 7415 C je aa22 ;if string 0328 FFFFFFE8FFFFFF8608 C call aageti ;get a numerical value into dx:bx, size into cl 032B 2E3A4EFFFFFFFF C cmp cl,cs:[bp-1] ;compare with size 032F 7F1E C jg aa24 ;if overflow 0331 FFFFFF93 C xchg ax,bx 0332 FFFFFFFFFFFFFFD5 C call bp ;store value in AL/AX/DX:AX 0334 FFFFFF81FFFFFFFF 0000o C cmp di,offset real_end 0338 7715 C ja aa24 ;if output line overflow 033A FFFFFF93 C xchg ax,bx 033B FFFFFFEB16 C jmp aa26 ;done with this one C 033D C aa22: 033D FFFFFF8AFFFFFFE0 C mov ah,al 033F C aa23: 033F FFFFFFAC C lodsb 0340 3C0D C cmp al,CR 0342 740B C je aa24 ;if end of line 0344 3AFFFFFFC4 C cmp al,ah 0346 740A C je aa25 ;if end of string 0348 FFFFFFAA C stosb 0349 FFFFFF81FFFFFFFF 0000o C cmp di,offset real_end 034D 76FFFFFFF0 C jbe aa23 ;if output line not overflowing 034F C aa24: 034F FFFFFFE920FFFFFFFF C jmp aa13b ;error 0352 C aa25: 0352 FFFFFFAC C lodsb 0353 C aa26: 0353 FFFFFFE8FFFFFF8A1E C call skipcomm0 0356 3C0D C cmp al,CR 0358 75FFFFFFC6 C jne aa21 ;if not end of line C C ;--- End of line. Copy it to debuggee's memory C 035A C aa27: 035A FFFFFFBE 0000o C mov si,offset line_out 035D FFFFFF8B1E 0004o C mov bx,[a_addr+4] C sizeprfX ;mov edx, [a_addr+0] 0361 FFFFFF8B16 0000o C mov dx,[a_addr+0] 0365 FFFFFF8BFFFFFFCF C mov cx,di 0367 2BFFFFFFCE C sub cx,si 0369 FFFFFFE861FFFFFFFE C call writeasmn C sizeprfX ;mov [a_addr+0],edx 036C FFFFFF8916 0000o C mov [a_addr+0],dx 0370 FFFFFFE97FFFFFFFFE C jmp aa01 C 145F C CONST segment C ;--- table for routine to store a number ( index dd=1,dw=2,db=3 ) 145F 000000000000 C aadbsto dw sto_dd,sto_dw,sto_db 1465 C CONST ends C C ;--- Routines to store a byte/word/dword. C 0373 04 C db 4 ;size to store 0374 C sto_dd: 0374 FFFFFFAB C stosw ;store a dword value 0375 FFFFFF92 C xchg ax,dx 0376 FFFFFFAB C stosw 0377 FFFFFF92 C xchg ax,dx 0378 FFFFFFC3 C ret 0379 02 C db 2 ;size to store 037A C sto_dw: 037A FFFFFFAB C stosw ;store a word value 037B FFFFFFC3 C ret 037C 01 C db 1 ;size to store 037D C sto_db: 037D FFFFFFAA C stosb ;store a byte value 037E FFFFFFC3 C ret C C ; Here we process the AAD and AAM instructions. They are special C ; in that they may take a one-byte argument, or none (in which case C ; the argument defaults to 0ah = ten). C 037F C ab00: 037F FFFFFF8936 0000o C mov [mneminfo],si ;save this address 0383 5E C pop si 0384 FFFFFFAC C lodsb 0385 3C0D C cmp al,CR 0387 7404 C je ab00a ;if end of line 0389 3C3B C cmp al,';' 038B 750B C jne ab01b ;if not end of line 038D C ab00a: 038D FFFFFFBE 0000o C mov si,offset aam_args ;fake a 0ah argument 0390 FFFFFFEB05 C jmp ab01a C C ;--- Process normal instructions. C C ; First we parse each argument into a 12-byte data block (OPRND), stored C ; consecutively at line_out, line_out+12, etc. C ; This is stored in an OPRND struct: C C ; [di+2]: Size argument, if any (1=byte, 2=word, 3=(unused), 4=dword, C ; 5=qword, 6=float, 7=double, 8=tbyte, 9=short, 10=long, 11=near, C ; 12=far), see SIZ_xxx and sizetcnam C ; [di+3] Size of MOD R/M displacement C ; [di+4] First register, or MOD R/M byte, or num of additional bytes C ; [di+5] Second register or index register or SIB byte C ; [di+6] Index factor C ; [di+7] Sizes of numbers are or-ed here C ; [di+8] (dword) number C C ; For arguments of the form xxxx:yyyyyyyy, xxxx is stored in , C ; and yyyyyyyy in . The number of bytes in yyyyyyyy is stored in C ; opaddr, 2 is stored in , and di is stored in xxaddr. C 00000000 C OPRND struc 00000000 C flags db ? ;+0 ARG_xxx Flags (ARG_DEREF, etc.) 00000001 C db ? ;+1 unused 00000002 C sizearg db ? ;+2 00000003 C sizedis db ? ;+3 Size of MOD R/M displacement 00000004 C union 00000000 C reg1 db ? ;+4 First register, or MOD R/M byte 00000000 C numadd db ? ;+4 (additional bytes, stored at num2 (up to 4) 00000001 C ends 00000005 C union 00000000 C struct 00000000 C reg2 db ? ;+5 Second register or index register or SIB byte 00000001 C index db ? ;+6 Index factor 00000002 C ends 00000000 C num2 dw ? ;+5 00000002 C ends 00000007 C orednum db ? ;+7 00000008 C num dd ? ;+8 0000000C C OPRND ends C 0392 C ab01: 0392 FFFFFF8936 0000o C mov [mneminfo],si ;save this address 0396 5E C pop si ;get position in line 0397 C ab01a: 0397 FFFFFFAC C lodsb 0398 C ab01b: 0398 FFFFFFBF 0000o C mov di,offset line_out C C ;--- Begin loop over operands. C 039B C ab02: ;<--- next operand 039B 3C0D C cmp al,CR 039D 7404 C je ab03 ;if end of line 039F 3C3B C cmp al,';' 03A1 7503 C jne ab04 ;if not end of line 03A3 C ab03: 03A3 FFFFFFE9FFFFFFFE02 C jmp ab99 ;to next phase C 03A6 C ab04: 03A6 57 C push di ;clear out the current OPRND storage area 03A7 FFFFFFB90600 C mov cx,sizeof OPRND / 2 03AA 33FFFFFFC0 C xor ax,ax 03AC FFFFFFF3FFFFFFAB C rep stosw 03AE 5F C pop di C C ;--- Small loop over "BYTE PTR" and segment prefixes. C 03AF C ab05: 03AF 4E C dec si 03B0 FFFFFF8B04 C mov ax,[si] 03B2 25FFFFFFDFFFFFFFDF C and ax,TOUPPER_W 03B5 FFFFFF807D0200 C cmp [di].OPRND.sizearg,SIZ_NONE 03B9 7533 C jne ab07 ;if already have a size qualifier ("BYTE PTR",...) 03BB 57 C push di 03BC FFFFFFBF 0000o C mov di,offset sizetcnam 03BF FFFFFFB90C00 C mov cx,sizeof sizetcnam / 2 03C2 FFFFFFF2FFFFFFAF C repne scasw 03C4 5F C pop di 03C5 7527 C jne ab07 ;if not found 03C7 0BFFFFFFC9 C or cx,cx 03C9 7509 C jnz @F ;if not 'FA' 03CB FFFFFF8A4402 C mov al,[si+2] 03CE 24FFFFFFDF C and al,TOUPPER 03D0 3C52 C cmp al,'R' 03D2 7547 C jne ab09 ;if not 'FAR' (could be hexadecimal) 03D4 C @@: 03D4 FFFFFF80FFFFFFE90C C sub cl,sizeof sizetcnam / 2 03D7 FFFFFFF6FFFFFFD9 C neg cl ;convert to 1, ..., 12 03D9 FFFFFF884D02 C mov [di].OPRND.sizearg,cl 03DC FFFFFFE8181E C call skipalpha ;go to next token 03DF FFFFFF8A24 C mov ah,[si] 03E1 25FFFFFFDFFFFFFFDF C and ax,TOUPPER_W 03E4 3D5054 C cmp ax,'TP' 03E7 75FFFFFFC6 C jne ab05 ;if not 'PTR' 03E9 FFFFFFE80B1E C call skipalpha ;go to next token 03EC FFFFFFEBFFFFFFC1 C jmp ab05 C 03EE C ab07: 03EE FFFFFF803E 0000o 00 C cmp [aa_seg_pre],0 03F3 7526 C jne ab09 ;if we already have a segment prefix 03F5 57 C push di 03F6 FFFFFFBF 0000o C mov di,offset segrgnam 03F9 FFFFFFB90600 C mov cx,N_SEGREGS 03FC FFFFFFF2FFFFFFAF C repne scasw 03FE 5F C pop di 03FF 751A C jne ab09 ;if not found 0401 56 C push si ;save si in case there's no colon 0402 FFFFFFAD C lodsw 0403 FFFFFFE8FFFFFFFB1D C call skipwhite 0406 3C3A C cmp al,':' 0408 7510 C jne ab08 ;if not followed by ':' 040A 58 C pop ax ;discard saved si 040B FFFFFFE8FFFFFFF31D C call skipwhite ;skip it 040E FFFFFFBB 0005o C mov bx,offset prefixlist + 5 0411 2BFFFFFFD9 C sub bx,cx 0413 FFFFFF8A07 C mov al,[bx] ;look up the prefix byte 0415 FFFFFFA2 0000o C mov [aa_seg_pre],al ;save it away 0418 FFFFFFEBFFFFFF95 C jmp ab05 041A C ab08: 041A 5E C pop si C C ;--- Begin parsing main part of argument. C C ;--- first check registers C 041B C ab09: 041B 57 C push di ;check for solo registers 041C FFFFFFBF 0000o C mov di,offset rgnam816 041F FFFFFFB91B00 C mov cx,N_ALLREGS;8+16bit regs, segment regs, special regs 0422 FFFFFFE81908 C call aagetreg 0425 5F C pop di 0426 726F C jc ab14 ;if not a register 0428 FFFFFF800D04 C or [di].OPRND.flags, ARG_JUSTREG 042B FFFFFF885D04 C mov [di].OPRND.reg1,bl ;save register number 042E FFFFFF80FFFFFFFB18 C cmp bl,24 ;0-23 = AL-DH, AX-DI, EAX-EDI (REG_NO_GPR) 0431 730B C jae @F ;if it's not a normal register 0433 FFFFFF93 C xchg ax,bx ;mov al,bl 0434 FFFFFFB103 C mov cl,3 0436 FFFFFFD2FFFFFFE8 C shr al,cl ;al = size: 0 -> byte, 1 -> word, 2 -> dword 0438 04FFFFFFFE C add al,-2 043A 1403 C adc al,3 ;convert to 1, 2, 4 (respectively) 043C FFFFFFEB4A C jmp ab13 043E C @@: 043E FFFFFF80350C C xor [di].OPRND.flags, ARG_JUSTREG + ARG_WEIRDREG 0441 FFFFFFB002 C mov al,SIZ_WORD ;register size 0443 FFFFFF80FFFFFFFB1E C cmp bl,REG_ST 0446 7726 C ja ab11 ;if it's MM, CR, DR or TR 0448 740C C je @F ;if it's ST 044A FFFFFF80FFFFFFFB1C C cmp bl,28 ;24-27 are ES,CS,SS,DS (segrgnam) 044D 7239 C jb ab13 ;if it's a normal segment register 044F FFFFFF800E 0000o 20 C or [asm_mn_flags],AMF_FSGS ;flag it 0454 FFFFFFEB32 C jmp ab13 0456 C @@: 0456 FFFFFF803C28 C cmp byte ptr [si],'(' 0459 752B C jne ab12 ;if just plain ST 045B FFFFFFAC C lodsb 045C FFFFFFAC C lodsb 045D 2C30 C sub al,'0' 045F 3C07 C cmp al,7 0461 7708 C ja ab10 ;if not 0..7 0463 FFFFFF884505 C mov [di].OPRND.reg2,al ;save the number 0466 FFFFFFAC C lodsb 0467 3C29 C cmp al,')' 0469 741B C je ab12 ;if not error 046B C ab10: 046B FFFFFFE904FFFFFFFE C jmp aa13b ;error C C ;--- other registers 31-34 (MM, CR, DR, TR) C 046E C ab11: 046E FFFFFFAC C lodsb 046F 2C30 C sub al,'0' 0471 3C07 C cmp al,7 0473 77FFFFFFF6 C ja ab10 ;if error 0475 FFFFFF884505 C mov [di].OPRND.reg2,al ;save the number 0478 FFFFFFB004 C mov al,SIZ_DWORD;register size 047A FFFFFF80FFFFFFFB1F C cmp bl,REG_MM 047D 7509 C jne ab13 ;if not MM register 047F FFFFFF800D04 C or [di].OPRND.flags, ARG_JUSTREG 0482 FFFFFFB005 C mov al,SIZ_QWORD 0484 FFFFFFEB02 C jmp ab13 0486 C ab12: 0486 FFFFFFB000 C mov al,0 ;size for ST regs 0488 C ab13: 0488 3A4502 C cmp al,[di].OPRND.sizearg ;compare with stated size 048B 7407 C je @F ;if same 048D FFFFFF864502 C xchg al,[di].OPRND.sizearg 0490 3C00 C cmp al,0 0492 75FFFFFFD7 C jne ab10 ;if wrong size given - error 0494 C @@: 0494 FFFFFFE9FFFFFFEC01 C jmp ab44 ;done with this operand C C ;--- It's not a register reference. Try for a number. C 0497 C ab14: 0497 FFFFFFAC C lodsb 0498 FFFFFFE80007 C call aaifnum 049B 7242 C jc ab17 ;it's not a number 049D FFFFFFE81107 C call aageti ;get the number 04A0 FFFFFF884D07 C mov [di].OPRND.orednum,cl 04A3 FFFFFF895D08 C mov word ptr [di].OPRND.num+0,bx 04A6 FFFFFF89550A C mov word ptr [di].OPRND.num+2,dx 04A9 FFFFFFE8561D C call skipwh0 04AC FFFFFF80FFFFFFF902 C cmp cl,2 04AF 7F2E C jg ab17 ;if we can't have a colon here 04B1 3C3A C cmp al,':' 04B3 752A C jne ab17 ;if not xxxx:yyyy C if 1 ;v2.50: size for ssss:oooo must be none or far 04B5 FFFFFF807D0200 C cmp [di].OPRND.sizearg, SIZ_NONE 04B9 7406 C jz @F 04BB FFFFFF807D020C C cmp [di].OPRND.sizearg, SIZ_FAR 04BF 757A C jnz ab24 04C1 C @@: C endif 04C1 FFFFFFE83D1D C call skipwhite 04C4 FFFFFFE8FFFFFFEA06 C call aageti 04C7 FFFFFF8B4D08 C mov cx,word ptr [di].OPRND.num+0 04CA FFFFFF894D05 C mov [di].OPRND.num2,cx 04CD FFFFFF895D08 C mov word ptr [di].OPRND.num+0,bx 04D0 FFFFFF89550A C mov word ptr [di].OPRND.num+2,dx 04D3 FFFFFF800D20 C or [di].OPRND.flags, ARG_FARADDR 04D6 FFFFFFE9FFFFFFA901 C jmp ab43 ;done with this operand C C ;--- Check for [...]. C 04D9 C ab15: 04D9 FFFFFFE9FFFFFFA500 C jmp ab30 ;do post-processing C 04DC C ab16: 04DC FFFFFFE8221D C call skipwhite 04DF C ab17: 04DF 3C5B C cmp al,'[' ;begin loop over sets of [] 04E1 75FFFFFFF6 C jne ab15 ;if not [ 04E3 FFFFFF800D01 C or [di].OPRND.flags, ARG_DEREF ;set the flag 04E6 C ab18: 04E6 FFFFFFE8181D C call skipwhite 04E9 C ab19: 04E9 3C5D C cmp al,']' ;begin loop within [] 04EB 74FFFFFFEF C je ab16 ;if done C C ;--- Check for a register (within []). C 04ED 4E C dec si 04EE 57 C push di 04EF FFFFFFBF 0000o C mov di,offset rgnam16 04F2 FFFFFFB90800 C mov cx,N_REGS16 04F5 FFFFFFE84607 C call aagetreg 04F8 5F C pop di 04F9 7243 C jc ab25 ;if not a register 04FB FFFFFF80FFFFFFFB10 C cmp bl,16 04FE 7305 C jae @F ;if 32-bit register 0500 FFFFFF80FFFFFFC308 C add bl,8 ;adjust 0..7 to 8..15 0503 FFFFFFEB1D C jmp ab21 0505 C @@: 0505 FFFFFF807D0500 C cmp [di].OPRND.reg2, 0 0509 7517 C jnz ab21 ;if we already have an index 050B FFFFFFE8FFFFFFF31C C call skipwhite 050E 4E C dec si 050F 3C2A C cmp al,'*' 0511 750F C jne ab21 ;if not followed by '*' 0513 46 C inc si 0514 FFFFFF885D05 C mov [di].OPRND.reg2,bl ;save index register 0517 FFFFFFE8FFFFFFE71C C call skipwhite 051A FFFFFFE8FFFFFF9406 C call aageti 051D FFFFFFE8FFFFFFFB06 C call aaconvindex 0520 FFFFFFEB51 C jmp ab28 ;ready for next part C 0522 C ab21: 0522 FFFFFF807D0400 C cmp [di].OPRND.reg1,0 0526 7505 C jne @F ;if there's already a register 0528 FFFFFF885D04 C mov [di].OPRND.reg1,bl 052B FFFFFFEB09 C jmp ab23 052D C @@: 052D FFFFFF807D0500 C cmp [di].OPRND.reg2, 0 0531 7508 C jne ab24 ;if too many registers 0533 FFFFFF885D05 C mov [di].OPRND.reg2,bl 0536 C ab23: 0536 FFFFFFE8FFFFFFC81C C call skipwhite 0539 FFFFFFEB38 C jmp ab28 ;ready for next part 053B C ab24: 053B FFFFFFE934FFFFFFFD C jmp aa13b ;error C C ;--- Try for a number (within []). C 053E C ab25: 053E FFFFFFAC C lodsb 053F C ab26: 053F FFFFFFE86F06 C call aageti ;get a number (or flag an error) 0542 FFFFFFE8FFFFFFBD1C C call skipwh0 0545 3C2A C cmp al,'*' 0547 740B C je ab27 ;if it's an index factor 0549 084D07 C or [di].OPRND.orednum,cl 054C 015D08 C add word ptr [di].OPRND.num+0,bx 054F 11550A C adc word ptr [di].OPRND.num+2,dx 0552 FFFFFFEB1F C jmp ab28 ;next part ... C 0554 C ab27: 0554 FFFFFFE8FFFFFFC406 C call aaconvindex 0557 FFFFFFE8FFFFFFA71C C call skipwhite 055A 4E C dec si 055B 57 C push di 055C FFFFFFBF 0000o C mov di,offset rgnam16 055F 33FFFFFFC9 C xor cx,cx 0561 FFFFFFE8FFFFFFDA06 C call aagetreg 0564 5F C pop di 0565 72FFFFFFD4 C jc ab24 ;if error 0567 FFFFFF807D0500 C cmp [di].OPRND.reg2, 0 056B 75FFFFFFCE C jne ab24 ;if there is already a register 056D FFFFFF885D05 C mov [di].OPRND.reg2, bl 0570 FFFFFFE8FFFFFF8E1C C call skipwhite C C ;--- Ready for the next term within []. C 0573 C ab28: 0573 3C2D C cmp al,'-' 0575 74FFFFFFC8 C je ab26 ;if a (negative) number is next 0577 3C2B C cmp al,'+' 0579 7503 C jne @F ;if no next term (presumably) 057B FFFFFFE968FFFFFFFF C jmp ab18 057E C @@: 057E FFFFFFE968FFFFFFFF C jmp ab19 ;back for more C C ;--- Post-processing for complicated arguments. C 0581 C ab30: 0581 FFFFFF837D0400 C cmp word ptr [di].OPRND.reg1,0 ;check both reg1+reg2 0585 752D C jnz ab32 ;if registers were given ( ==> create MOD R/M) 0587 FFFFFF807D0700 C cmp [di].OPRND.orednum,0 058B 7424 C jz ab31 ;if nothing was given ( ==> error) 058D FFFFFF803D00 C cmp [di].OPRND.flags,0 0590 7506 C jnz ab30b ;if it was not immediate 0592 FFFFFF800D10 C or [di].OPRND.flags,ARG_IMMED 0595 C ab30a: 0595 FFFFFFE9FFFFFFEA00 C jmp ab43 ;done with this argument 0598 C ab30b: 0598 FFFFFF800E 0000o FFFFFF C or [asm_mn_flags],AMF_ADDR 059D FFFFFFB002 C mov al,2 ;size of the displacement 059F FFFFFFF6450704 C test [di].OPRND.orednum,4 05A3 7407 C jz @F ;if not 32-bit displacement 05A5 40 C inc ax 05A6 40 C inc ax 05A7 FFFFFF800E 0000o 04 C or [asm_mn_flags],AMF_A32 ;32-bit addressing 05AC C @@: 05AC FFFFFF884503 C mov [di].OPRND.sizedis,al ;save displacement size 05AF FFFFFFEBFFFFFFE4 C jmp ab30a ;done with this argument 05B1 C ab31: 05B1 FFFFFFE9FFFFFFBEFFFFFFF C jmp aa13b ;flag an error C C ; Create the MOD R/M byte. C ; (For disp-only or register, this will be done later as needed.) C 05B4 C ab32: 05B4 FFFFFF800D02 C or [di].OPRND.flags, ARG_MODRM 05B7 FFFFFF8A4504 C mov al,[di].OPRND.reg1 05BA 0A4505 C or al,[di].OPRND.reg2 05BD FFFFFFA810 C test al,16 05BF 7525 C jnz ab34 ;if 32-bit addressing 05C1 FFFFFFF6450704 C test [di].OPRND.orednum,4 05C5 751F C jnz ab34 ;if 32-bit addressing C ; or [asm_mn_flags], AMF_ADDR | AMF_A32 05C7 FFFFFF800E 0000o FFFFFF C or [asm_mn_flags], AMF_ADDR 05CC FFFFFF8B4504 C mov ax,word ptr [di].OPRND.reg1 ;get reg1+reg2 05CF 3AFFFFFFC4 C cmp al,ah 05D1 7702 C ja @F ;make sure al >= ah 05D3 FFFFFF86FFFFFFC4 C xchg al,ah 05D5 C @@: 05D5 57 C push di 05D6 FFFFFFBF 0000o C mov di,offset modrmtab 05D9 FFFFFFB90800 C mov cx,8 05DC FFFFFFF2FFFFFFAF C repne scasw 05DE 5F C pop di 05DF 75FFFFFFD0 C jne ab31 ;if not among the possibilities 05E1 FFFFFFBB0602 C mov bx,206h ;max disp = 2 bytes; 6 ==> (non-existent) [bp] 05E4 FFFFFFEB6A C jmp ab39 ;done (just about) C C ;--- 32-bit addressing C 05E6 C ab34: 05E6 FFFFFF800E 0000o FFFFFF C or [asm_mn_flags],AMF_A32 + AMF_ADDR 05EB FFFFFF8A4504 C mov al,[di].OPRND.reg1 05EE 0A4506 C or al,[di].OPRND.index 05F1 7508 C jnz @F ;if we can't optimize [EXX*1] to [EXX] 05F3 FFFFFF8B4504 C mov ax,word ptr [di].OPRND.reg1 ;get reg1+reg2 05F6 FFFFFF86FFFFFFC4 C xchg al,ah 05F8 FFFFFF894504 C mov word ptr [di].OPRND.reg1,ax 05FB C @@: 05FB FFFFFFBB0504 C mov bx,405h ;max disp = 4 bytes; 5 ==> (non-existent) [bp] 05FE FFFFFF807D0500 C cmp [di].OPRND.reg2,0 0602 7510 C jne @F ;if there's a SIB 0604 FFFFFF8A4D04 C mov cl,[di].OPRND.reg1 0607 FFFFFF80FFFFFFF910 C cmp cl,16 060A 7CFFFFFFA5 C jl ab31 ;if wrong register type 060C FFFFFF80FFFFFFE107 C and cl,7 060F FFFFFF80FFFFFFF904 C cmp cl,4 ;check for ESP 0612 753C C jne ab39 ;if not, then we're done (otherwise do SIB) 0614 C @@: 0614 FFFFFF800E 0000o 08 C or [asm_mn_flags],AMF_SIB ;form SIB 0619 FFFFFF8A6D06 C mov ch,[di].OPRND.index ;get SS bits 061C FFFFFFB103 C mov cl,3 061E FFFFFFD2FFFFFFE5 C shl ch,cl ;shift them halfway into place 0620 FFFFFF8A4505 C mov al,[di].OPRND.reg2 ;index register 0623 3C14 C cmp al,20 0625 74FFFFFF8A C je ab31 ;if ESP ( ==> error) 0627 3C00 C cmp al,0 0629 7502 C jne @F ;if not zero 062B FFFFFFB014 C mov al,20 ;set it for index byte 4 062D C @@: 062D 3C10 C cmp al,16 062F 7CFFFFFF80 C jl ab31 ;if wrong register type 0631 2407 C and al,7 0633 0AFFFFFFE8 C or ch,al ;put it into the SIB 0635 FFFFFFD2FFFFFFE5 C shl ch,cl ;shift it into place 0637 41 C inc cx ;R/M for SIB = 4 0638 FFFFFF8A4504 C mov al,[di].OPRND.reg1 ;now get the low 3 bits 063B 3C00 C cmp al,0 063D 7505 C jne @F ;if there was a first register 063F FFFFFF80FFFFFFCD05 C or ch,5 0642 FFFFFFEB38 C jmp ab42 ;MOD = 0, disp is 4 bytes 0644 C @@: 0644 3C10 C cmp al,16 0646 7C59 C jl ab45 ;if wrong register type 0648 2407 C and al,7 ;first register 064A 0AFFFFFFE8 C or ch,al ;put it into the SIB 064C 3C05 C cmp al,5 064E 7406 C je ab40 ;if it's EBP, then we don't recognize disp=0 C ;otherwise bl will be set to 0 C C ;--- Find the size of the displacement. C 0650 C ab39: 0650 3AFFFFFFCB C cmp cl,bl 0652 7402 C je ab40 ;if it's [(E)BP], then disp=0 is still 1 byte 0654 FFFFFFB300 C mov bl,0 ;allow 0-byte disp C 0656 C ab40: 0656 51 C push cx 0657 FFFFFF8A4508 C mov al,byte ptr [di].OPRND.num+0 065A FFFFFFB107 C mov cl,7 065C FFFFFFD2FFFFFFF8 C sar al,cl 065E 59 C pop cx 065F FFFFFF8A6509 C mov ah,byte ptr [di].OPRND.num+1 0662 3AFFFFFFC4 C cmp al,ah 0664 7513 C jne @F ;if it's bigger than 1 byte 0666 3B450A C cmp ax,word ptr [di].OPRND.num+2 0669 750E C jne @F ;ditto 066B FFFFFFB700 C mov bh,0 ;no displacement 066D 0A5D08 C or bl,byte ptr [di].OPRND.num+0 0670 740A C jz ab42 ;if disp = 0 and it's not (E)BP 0672 FFFFFFFEFFFFFFC7 C inc bh ;disp = 1 byte 0674 FFFFFF80FFFFFFC940 C or cl,40h ;set MOD = 1 0677 FFFFFFEB03 C jmp ab42 ;done 0679 C @@: 0679 FFFFFF80FFFFFFC9FFFFFF8 C or cl,80h ;set MOD = 2 067C C ab42: 067C FFFFFF887D03 C mov [di].OPRND.sizedis,bh ;store displacement size 067F FFFFFF894D04 C mov word ptr [di].OPRND.reg1, cx ;store MOD R/M and maybe SIB C C ;--- Finish up with the operand. C 0682 C ab43: 0682 4E C dec si 0683 C ab44: 0683 FFFFFFE87B1B C call skipwhite 0686 FFFFFF83FFFFFFC70C C add di,sizeof OPRND 0689 3C0D C cmp al,CR 068B 7417 C je ab99 ;if end of line 068D 3C3B C cmp al,';' 068F 7413 C je ab99 ;if comment (ditto) 0691 3C2C C cmp al,',' 0693 750C C jne ab45 ;if not comma ( ==> error) 0695 FFFFFF81FFFFFFFF 0024o C cmp di,offset line_out+ 3 * sizeof OPRND 0699 7306 C jae ab45 ;if too many operands 069B FFFFFFE8631B C call skipwhite 069E FFFFFFE9FFFFFFFAFFFFFFF C jmp ab02 C 06A1 C ab45: 06A1 FFFFFFE9FFFFFFCEFFFFFFF C jmp aa13b ;error jump C 06A4 C ab99: 06A4 FFFFFFC605FFFFFFFF C mov [di].OPRND.flags,-1;end of parsing phase 06A7 56 C push si ;save the location of the end of the string C C ; For the next phase, we match the parsed arguments with the set of C ; permissible argument lists for the opcode. The first match wins. C ; Therefore the argument lists should be ordered such that the C ; cheaper ones come first. C C ; There is a tricky issue regarding sizes of memory references. C ; Here are the rules: C ; 1. If a memory reference is given with a size, then it's OK. C ; 2. If a memory reference is given without a size, but some C ; other argument is a register (which implies a size), C ; then the memory reference inherits that size. C ; Exceptions: OP_CL does not imply a size C ; OP_SHOSIZ C ; 3. If 1 and 2 do not apply, but this is the last possible argument C ; list, and if the argument list requires a particular size, then C ; that size is used. C ; 4. In all other cases, flag an error. C 06A8 C ac01: ;<--- next possible argument list 06A8 33FFFFFFC0 C xor ax,ax 06AA FFFFFFBF 0000o C mov di,offset ai 06AD FFFFFFB90700 C mov cx,sizeof ai/2 06B0 FFFFFFF3FFFFFFAB C rep stosw 06B2 FFFFFF8B36 0000o C mov si,[mneminfo] ;address of the argument variant C C ;--- Sort out initial bytes. At this point: C ;--- si = address of argument variant C 06B6 C ac02: ;<--- next byte of argument variant 06B6 FFFFFFAC C lodsb 06B7 2CFFFFFFED C sub al,ASM_MACH0 06B9 7215 C jb ac05 ;if no more special bytes 06BB 3C07 C cmp al,ASM_LOCKABLE - ASM_MACH0 06BD 7407 C je @F ;if ASM_LOCKABLE 06BF 770C C ja ac04 ;if ASM_END ( ==> error) 06C1 FFFFFFA2 0008o C mov [ai.dismach],al;save machine type 06C4 FFFFFFEBFFFFFFF0 C jmp ac02 ;back for next byte 06C6 C @@: 06C6 FFFFFF800E 000Co 01 C or [ai.varflags],VAR_LOCKABLE 06CB FFFFFFEBFFFFFFE9 C jmp ac02 ;back for next byte C 06CD C ac04: 06CD FFFFFFE9FFFFFFA1FFFFFFF C jmp aa13a ;error C C ;--- Get and unpack the word. C 06D0 C ac05: 06D0 4E C dec si 06D1 FFFFFFAD C lodsw 06D2 FFFFFF86FFFFFFC4 C xchg al,ah ;put into little-endian order 06D4 33FFFFFFD2 C xor dx,dx 06D6 FFFFFFBB4C00 C mov bx,ASMMOD 06D9 FFFFFFF7FFFFFFF3 C div bx ;ax = a_opcode; dx = index into opindex 06DB FFFFFFA3 0000o C mov [a_opcode],ax ;save ax 06DE FFFFFFA3 0000o C mov [a_opcode2],ax ;save the second copy 06E1 3DFFFFFFDF00 C cmp ax,0dfh 06E4 7717 C ja @F ;if not coprocessor instruction 06E6 3CFFFFFFD8 C cmp al,0d8h 06E8 7213 C jb @F ;ditto 06EA FFFFFF800E 0009o 01 C or [ai.dmflags],DM_COPR;flag it as an x87 instruction 06EF FFFFFF8AFFFFFFE0 C mov ah,al ;ah = low order byte of opcode 06F1 FFFFFFAC C lodsb ;get extra byte 06F2 FFFFFFA2 0002o C mov [ai.regmem],al ;save it in regmem 06F5 FFFFFFA3 0000o C mov [a_opcode2],ax ;save this for obsolete-instruction detection 06F8 FFFFFF800E 000Co 02 C or [ai.varflags],VAR_MODRM ;flag its presence 06FD C @@: 06FD FFFFFF8936 0000o C mov [mneminfo],si ;save si back again 0701 FFFFFF8BFFFFFFF2 C mov si,dx 0703 FFFFFF8BFFFFFF84 0000o C mov ax,word ptr [opindex+si] 0707 FFFFFF8AFFFFFFD8 C mov bl,al 0709 FFFFFF8826 0000o C mov [bEndOplItem], ah ; end of oplist item C 070D FFFFFF8DFFFFFFB7 0000o C lea si,[oplists+bx] ;si = the address of our operand list 0711 FFFFFFBF 0000o C mov di,offset line_out ;di = array of OPRNDs C C ;--- Begin loop over operands. C 0714 C ac06: ;<--- next operand 0714 FFFFFF8BFFFFFFC6 C mov ax, si 0716 2D 0000o C sub ax, offset oplists 0719 3A06 0000o C cmp al, [bEndOplItem] 071D 7335 C jae ac10 071F FFFFFFAC C lodsb ;get next operand byte C ; cmp al,0 C ; je ac10 ;if end of list 0720 FFFFFF803DFFFFFFFF C cmp [di].OPRND.flags,-1 0723 74FFFFFF83 C je ac01 ;if too few operands were given 0725 3C40 C cmp al,OP_SIZE 0727 7208 C jb @F ;if no size needed C ; mov ah,0 C ; mov cl,4 C ; shl ax,cl ;move bits 4-7 (size) to ah (OP_1632=5,OP_8=6,OP_16=7,...) C ; shr al,cl ;move bits 0-3 back 0729 FFFFFFD410 C db 0d4h,10h ;=aam 10h (AX=00XY -> AX=0X0Y) 072B FFFFFF8826 000Do C mov [ai.reqsize],ah ;save size away 072F FFFFFFEB02 C jmp ac08 0731 C @@: ;AL = OP_M64 - ... 0731 040E C add al,ASM_OPOFF - OP_M64 ;adjust for the start entries im asm_jmp1 0733 C ac08: 0733 FFFFFF98 C cbw 0734 FFFFFF93 C xchg ax,bx ;now bx contains the offset 0735 FFFFFF8BFFFFFF8F 0000o C mov cx,[asm_jmp1+bx] ;subroutine address 0739 FFFFFFD1FFFFFFEB C shr bx,1 073B FFFFFF8AFFFFFF87 0000o C mov al,[bittab+bx] 073F FFFFFF8405 C test al,[di].OPRND.flags 0741 740E C jz ac09 ;if no required bits are present 0743 FFFFFFFFFFFFFFD1 C call cx ;call its specific routine 0745 FFFFFF817CFFFFFFFF565A C cmp word ptr [si-1], (OP_1632 + OP_R) * 256 + (OP_1632 + OP_R_MOD) 074A 74FFFFFFC8 C je ac06 ;(hack) for IMUL instruction 074C FFFFFF83FFFFFFC70C C add di,sizeof OPRND ;next operand 074F FFFFFFEBFFFFFFC3 C jmp ac06 ;back for more C 0751 C ac09: 0751 FFFFFFE954FFFFFFFF C jmp ac01 ;back to next possibility C C ;--- End of operand list. C 0754 C ac10: 0754 FFFFFF803DFFFFFFFF C cmp [di].OPRND.flags,-1 0757 75FFFFFFF8 C jne ac09 ;if too many operands were given C C ;--- Final check on sizes C 0759 FFFFFFA0 000Co C mov al,[ai.varflags] 075C FFFFFFA810 C test al,VAR_SIZ_NEED 075E 7414 C jz ac12 ;if no size needed 0760 FFFFFFA804 C test al,VAR_SIZ_GIVN 0762 7510 C jnz ac12 ;if a size was given 0764 FFFFFFA808 C test al,VAR_SIZ_FORCD 0766 74FFFFFFE9 C jz ac09 ;if the size was not forced ( ==> reject) 0768 FFFFFF8B36 0000o C mov si,[mneminfo] 076C FFFFFF803CFFFFFFFF C cmp byte ptr [si],ASM_END 076F 7403 C je ac12 ;if this is the last one 0771 C ac11: 0771 FFFFFFE9FFFFFFFDFFFFFFF C jmp aa13a ;it was not ==> error (not a retry) C C ;--- Check other prefixes. C 0774 C ac12: 0774 FFFFFFA0 0000o C mov al,[aa_saved_prefix] 0777 3C00 C cmp al,0 0779 7421 C jz ac14 ;if no saved prefixes to check 077B 3CFFFFFFF0 C cmp al,0f0h 077D 7509 C jne @F ;if it's a rep prefix 077F FFFFFFF606 000Co 01 C test [ai.varflags],VAR_LOCKABLE 0784 74FFFFFFEB C jz ac11 ;if this variant is not lockable - error 0786 FFFFFFEB14 C jmp ac14 ;done 0788 C @@: 0788 FFFFFFA1 0000o C mov ax,[a_opcode] ;check if opcode is OK for rep{,z,nz} 078B 24FFFFFFFE C and al,not 1 ;clear low order bit (MOVSW -> MOVSB) 078D 3DFFFFFFFF00 C cmp ax,0ffh 0790 77FFFFFFDF C ja ac11 ;if it's not a 1 byte instruction - error 0792 FFFFFFBF 0000o C mov di,offset replist ;list of instructions that go with rep 0795 FFFFFFB90700 C mov cx,N_REPALL ;scan all (REP + REPxx) 0798 FFFFFFF2FFFFFFAE C repne scasb 079A 75FFFFFFD5 C jnz ac11 ;if it's not among them - error C 079C C ac14: 079C FFFFFFF606 0000o 10 C test [asm_mn_flags],AMF_MSEG 07A1 7412 C jz @F ;if no segment prefix before mnemonic 07A3 FFFFFFA1 0000o C mov ax,[a_opcode] ;check if opcode allows this 07A6 3DFFFFFFFF00 C cmp ax,0ffh 07A9 77FFFFFFC6 C ja ac11 ;if it's not a 1 byte instruction - error 07AB FFFFFFBF 0000o C mov di,offset prfxtab 07AE FFFFFFB90900 C mov cx,N_PRFXTAB 07B1 FFFFFFF2FFFFFFAE C repne scasb 07B3 75FFFFFFBC C jnz ac11 ;if it's not in the list - error 07B5 C @@: 07B5 FFFFFF8B1E 0004o C mov bx,[ai.immaddr] 07B9 0BFFFFFFDB C or bx,bx 07BB 740C C jz ac16 ;if no immediate data 07BD FFFFFFA0 000Bo C mov al,[ai.opsize] 07C0 FFFFFFF6FFFFFFD8 C neg al 07C2 FFFFFFD0FFFFFFE0 C shl al,1 07C4 FFFFFF844707 C test al,[bx+7] 07C7 75FFFFFFA8 C jnz ac11 ;if the immediate data was too big - error C C ; Put the instruction together C ; (maybe is this why they call it an assembler) C C ; First, the prefixes (including preceding WAIT instruction) C 07C9 C ac16: C sizeprfX ;mov edx,[a_addr] 07C9 FFFFFF8B16 0000o C mov dx,[a_addr+0] 07CD FFFFFF8B1E 0004o C mov bx,[a_addr+4] 07D1 FFFFFFF606 0000o 02 C test [asm_mn_flags],AMF_WAIT 07D6 7405 C jz @F ;if no wait instruction beforehand 07D8 FFFFFFB0FFFFFF9B C mov al,9bh 07DA FFFFFFE8FFFFFFEBFFFFFFF C call writeasm 07DD C @@: 07DD FFFFFFA0 0000o C mov al,[aa_saved_prefix] 07E0 3C00 C cmp al,0 07E2 7403 C jz @F ;if no LOCK or REP prefix 07E4 FFFFFFE8FFFFFFE1FFFFFFF C call writeasm 07E7 C @@: C C ;--- a 67h address size prefix is needed C ;--- 1. for CS32: if AMF_ADDR=1 and AMF_A32=1 C ;--- 2. for CS16: if AMF_ADDR=1 and AMF_A32=0 C 07E7 FFFFFFA0 0000o C mov al,[asm_mn_flags] 07EA FFFFFFA8FFFFFF80 C test al,AMF_ADDR 07EC 740F C jz @F 07EE 2404 C and al,AMF_A32 C if ?PM C endif 07F0 2444 C and al,AMF_A32 + 40h 07F2 7409 C jz @F 07F4 3C44 C cmp al,AMF_A32 + 40h 07F6 7405 C jz @F 07F8 FFFFFFB067 C mov al,67h 07FA FFFFFFE8FFFFFFCBFFFFFFF C call writeasm 07FD C @@: C C ;--- a 66h data size prefix is needed C ;--- for CS16: if VAR_D32 == 1 or AMF_D32 == 1 C ;--- for CS32: if VAR_D16 == 1 or AMF_D16 == 1 C 07FD FFFFFF8A26 0000o C mov ah,[asm_mn_flags] 0801 FFFFFFA0 000Co C mov al,[ai.varflags] C if ?PM C endif 0804 FFFFFFA840 C test al,VAR_D32 0806 7505 C jnz ac20_1 0808 FFFFFFF6FFFFFFC401 C test ah,AMF_D32 080B 7405 C jz ac21 080D C ac20_1: 080D FFFFFFB066 C mov al,66h 080F FFFFFFE8FFFFFFB6FFFFFFF C call writeasm ;store operand-size prefix 0812 C ac21: 0812 FFFFFFA0 0000o C mov al,[aa_seg_pre] 0815 3C00 C cmp al,0 0817 740C C jz @F ;if no segment prefix 0819 FFFFFFE8FFFFFFACFFFFFFF C call writeasm 081C 3C64 C cmp al,64h 081E 7205 C jb @F ;if not 64 or 65 (FS or GS) 0820 FFFFFF800E 0000o 20 C or [asm_mn_flags],AMF_FSGS ;flag it 0825 C @@: C C ;--- Now emit the instruction itself. C 0825 FFFFFFA1 0000o C mov ax,[a_opcode] 0828 FFFFFF8BFFFFFFF8 C mov di,ax 082A FFFFFF81FFFFFFEF4002 C sub di,240h 082E 7317 C jae @F ;if 576-... 0830 3D0002 C cmp ax,200h 0833 7224 C jb ac24 ;if regular instruction 0835 FFFFFF800E 0009o 01 C or [ai.dmflags],DM_COPR ;flag it as an x87 instruction 083A 2438 C and al,038h ;get register part 083C 0806 0002o C or [ai.regmem],al 0840 FFFFFF97 C xchg ax,di ;mov ax,di (the low bits of di are good) 0841 2407 C and al,7 0843 0CFFFFFFD8 C or al,0d8h 0845 FFFFFFEB1E C jmp ac25 ;on to decoding the instruction 0847 C @@: 0847 FFFFFFB103 C mov cl,3 ;one instruction of a group 0849 FFFFFFD3FFFFFFEF C shr di,cl 084B 2407 C and al,7 084D FFFFFFD2FFFFFFE0 C shl al,cl 084F 0806 0002o C or [ai.regmem],al 0853 FFFFFFD1FFFFFFE7 C shl di,1 0855 FFFFFF8BFFFFFF85 0000o C mov ax,[agroups+di] ;get actual opcode C 0859 C ac24: 0859 FFFFFF80FFFFFFFC00 C cmp ah,0 085C 7407 C jz ac25 ;if no 0fh first 085E 50 C push ax ;store a 0fh 085F FFFFFFB00F C mov al,0fh 0861 FFFFFFE864FFFFFFF9 C call writeasm 0864 58 C pop ax C 0865 C ac25: 0865 0A06 000Ao C or al,[ai.opcode_or] ;put additional bits into the op code 0869 FFFFFFE85CFFFFFFF9 C call writeasm ;store the op code itself C C ;--- Now store the extra stuff that comes with the instruction. C 086C FFFFFFA1 0002o C mov ax,word ptr [ai.regmem] 086F FFFFFFF606 000Co 02 C test [ai.varflags],VAR_MODRM 0874 7411 C jz @F ;if no mod reg/mem 0876 50 C push ax 0877 FFFFFFE84EFFFFFFF9 C call writeasm 087A 58 C pop ax 087B FFFFFFF606 0000o 08 C test [asm_mn_flags],AMF_SIB 0880 7405 C jz @F ;if no SIB 0882 FFFFFF8AFFFFFFC4 C mov al,ah 0884 FFFFFFE841FFFFFFF9 C call writeasm ;store the MOD R/M and SIB, too 0887 C @@: C 0887 FFFFFF8B3E 0000o C mov di,[ai.rmaddr] 088B 0BFFFFFFFF C or di,di 088D 740B C jz @F ;if no offset associated with the R/M 088F FFFFFF8A4D03 C mov cl,[di].OPRND.sizedis 0892 FFFFFFB500 C mov ch,0 0894 FFFFFF8D7508 C lea si,[di].OPRND.num ;store the R/M offset (or memory offset) 0897 FFFFFFE833FFFFFFF9 C call writeasmn 089A C @@: C C ;--- Now store immediate data C 089A FFFFFF8B3E 0004o C mov di,[ai.immaddr] 089E 0BFFFFFFFF C or di,di 08A0 740B C jz @F ;if no immediate data 08A2 FFFFFFA0 000Bo C mov al,[ai.opsize] 08A5 FFFFFF98 C cbw 08A6 FFFFFF91 C xchg ax,cx ;mov cx,ax 08A7 FFFFFF8D7508 C lea si,[di].OPRND.num 08AA FFFFFFE820FFFFFFF9 C call writeasmn 08AD C @@: C C ;--- Now store additional bytes (needed for, e.g., enter instruction) C ;--- also for FAR memory address C 08AD FFFFFF8B3E 0006o C mov di,[ai.xxaddr] 08B1 0BFFFFFFFF C or di,di 08B3 7409 C jz @F ;if no additional data 08B5 FFFFFF8D7504 C lea si,[di].OPRND.numadd ;number of bytes (2 for FAR, size of segment) 08B8 FFFFFFAC C lodsb 08B9 FFFFFF98 C cbw 08BA FFFFFF91 C xchg ax,cx ;mov cx,ax 08BB FFFFFFE80FFFFFFFF9 C call writeasmn 08BE C @@: C C ;--- Done emitting. Update asm address offset. C C sizeprfX ;mov [a_addr],edx 08BE FFFFFF8916 0000o C mov [a_addr],dx C C ;--- Compute machine type. C 08C2 FFFFFF803E 0008o 03 C cmp [ai.dismach],3 08C7 7313 C jae ac31 ;if we already know a 386 is needed 08C9 FFFFFFF606 0000o 25 C test [asm_mn_flags], AMF_D32 or AMF_A32 or AMF_FSGS 08CE 7507 C jnz ac30 ;if 386 08D0 FFFFFFF606 000Co 40 C test [ai.varflags],VAR_D32 08D5 7405 C jz ac31 ;if not 386 08D7 C ac30: 08D7 FFFFFFC606 0008o 03 C mov [ai.dismach],3 08DC C ac31: 08DC FFFFFFBF 0000o C mov di,offset a_obstab ;obsolete instruction table 08DF FFFFFF8B0E 0000o C mov cx,[a_opcode2] 08E3 FFFFFFE8FFFFFF8D21 C call showmach ;get machine message into si, length into cx 08E6 FFFFFFE308 C jcxz ac33 ;if no message C 08E8 C ac32: 08E8 FFFFFFBF 0000o C mov di,offset line_out 08EB FFFFFFF3FFFFFFA4 C rep movsb ;copy the line to line_out 08ED FFFFFFE8FFFFFF9823 C call putsline C 08F0 C ac33: 08F0 FFFFFFE9FFFFFFFFFFFFFFF C jmp aa01 ;back for the next input line C C if 0 C endif C 1465 C CONST segment C 1465 00 C align 2 C C ;--- Jump table for operand types. C ;--- order of entries in asm_jmp1 must match C ;--- the one in dis_jmp1 / dis_optab. C 1466 C asm_jmp1 label word 1466 0000000000000000 C dw aop_imm, aop_rm, aop_m, aop_r_mod ;OP_IMM, OP_RM, OP_M, OP_R_MOD 146E 0000000000000000 C dw aop_moffs, aop_r, aop_r_add, aop_ax ;OP_MOFFS, OP_R, OP_R_ADD, OP_AX = 10 C ASM_OPOFF equ $ - asm_jmp1 C C ;--- order must match the one in dis_optab 1476 000000000000 C dw ao17, ao17, ao17 ;OP_M64, OP_MFLOAT, OP_MDOUBLE 147C 000000000000 C dw ao17, ao17, ao17 ;OP_M80, OP_MXX, OP_FARMEM 1482 000000000000 C dw aop_farimm, aop_rel8, aop_rel1632;OP_FARIMM, OP_REL8, OP_REL1632 1488 000000000000 C dw ao29, aop_sti, aop_cr ;OP_1CHK, OP_STI, OP_CR 148E 000000000000 C dw ao34, ao35, ao39 ;OP_DR, OP_TR, OP_SEGREG 1494 000000000000 C dw ao41, ao42, aop_mmx ;OP_IMMS8, OP_IMM8, OP_MMX 149A 000000000000 C dw ao44, ao46, ao47 ;OP_SHOSIZ, OP_1, OP_3 14A0 000000000000 C dw ao48, ao48, ao48 ;OP_DX, OP_CL, OP_ST 14A6 000000000000 C dw ao48, ao48, ao48 ;OP_CS, OP_DS, OP_ES 14AC 000000000000 C dw ao48, ao48, ao48 ;OP_FS, OP_GS, OP_SS C 14B2 C CONST ends C C ; Routines to check for specific operand types. C ; Upon success, the routine returns. C ; Upon failure, it pops the return address and jumps to ac01. C ; The routines must preserve si and di. C C ;--- OP_RM, OP_M, OP_R_MOD: form MOD R/M byte. C 08F3 C aop_rm: 08F3 C aop_m: 08F3 C aop_r_mod: 08F3 FFFFFFE86E02 C call ao90 ;form reg/mem byte 08F6 FFFFFFEB30 C jmp ao07 ;go to the size check C C ;--- OP_R: register. C 08F8 C aop_r: 08F8 FFFFFF8A4504 C mov al,[di].OPRND.reg1 ;register number 08FB 2407 C and al,7 08FD FFFFFFB103 C mov cl,3 08FF FFFFFFD2FFFFFFE0 C shl al,cl ;shift it into place 0901 0806 0002o C or [ai.regmem],al ;put it into the reg/mem byte 0905 FFFFFFEB21 C jmp ao07 ;go to the size check C C ;--- OP_R_ADD: register, added to the instruction. C 0907 C aop_r_add: 0907 FFFFFF8A4504 C mov al,[di].OPRND.reg1 090A 2407 C and al,7 090C FFFFFFA2 000Ao C mov [ai.opcode_or],al ;put it there 090F FFFFFFEB17 C jmp ao07 ;go to the size check C C ;--- OP_IMM: immediate data. C 0911 C aop_imm: 0911 FFFFFF893E 0004o C mov [ai.immaddr],di ;save the location of this 0915 FFFFFFEB11 C jmp ao07 ;go to the size check C C ;--- OP_MOFFS: just the memory offset C 0917 C aop_moffs: 0917 FFFFFFF60502 C test [di].OPRND.flags,ARG_MODRM 091A 7547 C jnz ao11 ;if MOD R/M byte ( ==> reject) 091C FFFFFF893E 0000o C mov [ai.rmaddr],di ;save the operand pointer 0920 FFFFFFEB06 C jmp ao07 ;go to the size check C C ;--- OP_AX: check for AL/AX/EAX C 0922 C aop_ax: 0922 FFFFFFF6450407 C test [di].OPRND.reg1,7 0926 753B C jnz ao11 ;if wrong register C ;jmp ao07 ;go to the size check C C ;--- Size check C 0928 C ao07: ;<--- entry for OP_RM, OP_M, OP_R_MOD, OP_R, OP_R_ADD... 0928 FFFFFF800E 000Co 10 C or [ai.varflags],VAR_SIZ_NEED 092D FFFFFFA0 000Do C mov al,[ai.reqsize] ;4 OP_ALL, 5 OP_1632, 6 OP_8, 7 OP_16, 8 OP_32, 9 OP_64 0930 2C05 C sub al,5 0932 7C32 C jl ao12 ;if OP_ALL 0934 7440 C jz ao13 ;if OP_1632 C ;--- OP_8=1, OP_16=2, OP_32=3, OP_64=4 0936 04FFFFFFFD C add al,-3 0938 1403 C adc al,3 ;convert 3 --> 4 and 4 --> 5 C 093A C ao08: ;<--- entry for OP_M64 ... OP_FARMEM 093A FFFFFF800E 000Co 18 C or [ai.varflags],VAR_SIZ_FORCD + VAR_SIZ_NEED 093F C ao08_1: 093F FFFFFF8A5D02 C mov bl,[di].OPRND.sizearg 0942 0AFFFFFFDB C or bl,bl 0944 7409 C jz @F ;if no size given 0946 FFFFFF800E 000Co 04 C or [ai.varflags],VAR_SIZ_GIVN 094B 3AFFFFFFC3 C cmp al,bl 094D 7514 C jne ao11 ;if sizes conflict 094F C @@: 094F 3A06 000Bo C cmp al,[ai.opsize] 0953 740D C je @F ;if sizes agree 0955 FFFFFF8606 000Bo C xchg al,[ai.opsize] 0959 3C00 C cmp al,0 095B 7506 C jnz ao11 ;if sizes disagree C ;--- v2.50: the next line caused - as a side effect - a regression for "call [xxxx]" C ;--- which has been fixed at ao13. 095D FFFFFF800E 000Co 04 C or [ai.varflags],VAR_SIZ_GIVN ;v1.18 added!!! 0962 C @@: 0962 FFFFFFC3 C ret C 0963 C ao11: 0963 FFFFFFE9FFFFFFEB01 C jmp ao50 ;reject C C ;--- OP_ALL - Allow all sizes. C 0966 C ao12: 0966 FFFFFF8A4502 C mov al,[di].OPRND.sizearg 0969 3C01 C cmp al,SIZ_BYTE 096B 742F C je ao15 ;if byte 096D 7215 C jb ao14 ;if unknown 096F FFFFFF800E 000Ao 01 C or [ai.opcode_or],1;set bit in instruction 0974 FFFFFFEB0E C jmp ao14 ;if size is 16 or 32 C 0976 C ao13: ;<--- OP_1632 - word or dword. 0976 FFFFFF8A4502 C mov al,[di].OPRND.sizearg C if 1 ;v2.50: set default size for call/jmp/push [mem] (hackish fix) 0979 3C00 C cmp al,SIZ_NONE 097B 7507 C jnz @F 097D FFFFFF83FFFFFFFA28 C cmp dx, 40 ;just opindex 40 ( call/jmp/push [memref] ) 0980 7502 C jnz @F 0982 FFFFFFB002 C mov al,SIZ_WORD C if ?PM C endif 0984 C @@: C endif 0984 C ao14: 0984 3C00 C cmp al,SIZ_NONE 0986 741C C je ao16 ;if still unknown 0988 3C02 C cmp al,SIZ_WORD 098A 7507 C jne @F ;if word 098C FFFFFF800E 000Co 20 C or [ai.varflags],VAR_D16 0991 FFFFFFEB09 C jmp ao15 0993 C @@: 0993 3C04 C cmp al,SIZ_DWORD 0995 75FFFFFFCC C jne ao11 ;if not dword 0997 FFFFFF800E 000Co 40 C or [ai.varflags],VAR_D32 099C C ao15: 099C FFFFFFA2 000Bo C mov [ai.opsize],al 099F FFFFFF800E 000Co 04 C or [ai.varflags],VAR_SIZ_GIVN 09A4 C ao16: 09A4 FFFFFFC3 C ret C C ; OP_M64 - 64-bit memory reference. C ; OP_MFLOAT - single-precision floating point memory reference. C ; OP_MDOUBLE - double-precision floating point memory reference. C ; OP_M80 - 80-bit memory reference. C ; OP_MXX - memory reference, size unknown. C ; OP_FARMEM - far memory pointer C C ;--- bx contains byte index for bittab 09A5 C ao17: 09A5 FFFFFFE8FFFFFFBC01 C call ao90 ;form reg/mem byte 09A8 FFFFFF8AFFFFFF87 FFF8o C mov al,[asm_siznum + bx - ASM_OPOFF/2] 09AC FFFFFFEBFFFFFF8C C jmp ao08 ;check size C C ;--- OP_FARIMM - far address contained in instruction C 09AE C aop_farimm: C if ?PM C endif 09AE FFFFFFB002 C mov al,2 09B0 FFFFFF837D0A00 C cmp word ptr [di].OPRND.num+2,0 09B4 7407 C jz ao22 ;if 16 bit address 09B6 C @@: 09B6 FFFFFF800E 000Co 40 C or [ai.varflags],VAR_D32 09BB FFFFFFB004 C mov al,4 09BD C ao22: 09BD FFFFFFC6450402 C mov [di].OPRND.numadd,2 ;2 additional bytes (segment part) 09C1 FFFFFF893E 0004o C mov [ai.immaddr],di 09C5 FFFFFFA2 000Bo C mov [ai.opsize],al ;2/4, size of offset 09C8 C ao22_1: 09C8 FFFFFF893E 0006o C mov [ai.xxaddr],di 09CC FFFFFFC3 C ret C C ;--- OP_REL8 - relative address C ;--- Jcc, LOOPx, JxCXZ C 09CD C aop_rel8: 09CD FFFFFFB009 C mov al,SIZ_SHORT 09CF FFFFFFE8FFFFFF8401 C call aasizchk ;check the size 09D2 FFFFFFB90200 C mov cx,2 ;size of instruction 09D5 FFFFFFA0 0000o C mov al,[asm_mn_flags] C 09D8 FFFFFFA841 C test al,AMF_D32 or AMF_D16 09DA 741A C jz ao23_1 ;if not JxCXZ, LOOPx 09DC FFFFFFA801 C test al,AMF_D32 09DE 7402 C jz @F 09E0 0C04 C or al,AMF_A32 ; JxCXZ and LOOPx need a 67h, not a 66h prefix 09E2 C @@: 09E2 24FFFFFFBE C and al,not (AMF_D32 or AMF_D16) 09E4 0CFFFFFF80 C or al, AMF_ADDR 09E6 FFFFFFA2 0000o C mov [asm_mn_flags],al C if ?PM C else 09E9 FFFFFFB400 C mov ah,0 C endif 09EB 2404 C and al,AMF_A32 09ED 0AFFFFFFC4 C or al,ah 09EF 7405 C jz ao23_1 09F1 3C44 C cmp al,AMF_A32+40h 09F3 7401 C jz ao23_1 09F5 41 C inc cx ;instruction size = 3 09F6 C ao23_1: 09F6 FFFFFF8B1E 0000o C mov bx,[a_addr+0] 09FA 03FFFFFFD9 C add bx,cx 09FC FFFFFF8B0E 0002o C mov cx,[a_addr+2];v1.22: handle HiWord(EIP) properly 0A00 FFFFFF83FFFFFFD100 C adc cx,0 0A03 FFFFFF8B4508 C mov ax,word ptr [di].OPRND.num+0 0A06 FFFFFF8B550A C mov dx,word ptr [di].OPRND.num+2 C ;--- CX:BX holds E/IP (=src), DX:AX holds dst 0A09 2BFFFFFFC3 C sub ax,bx 0A0B 1BFFFFFFD1 C sbb dx,cx 0A0D FFFFFF884505 C mov byte ptr [di].OPRND.num2,al 0A10 FFFFFFB107 C mov cl,7 ;range must be ffffff80 <= x <= 0000007f 0A12 FFFFFFD2FFFFFFF8 C sar al,cl ;1xxxxxxxb -> FF, 0xxxxxxxb -> 00 0A14 3AFFFFFFC4 C cmp al,ah 0A16 755C C jne ao_err1 ;if too big 0A18 3BFFFFFFC2 C cmp ax,dx 0A1A 7558 C jne ao_err1 ;if too big 0A1C FFFFFFC6450401 C mov [di].OPRND.numadd,1 ;save the length 0A20 FFFFFFEBFFFFFFA6 C jmp ao22_1 ;save it away C C ;--- OP_REL1632: relative jump/call to a longer address. C ;--- size of instruction is C ;--- a) CS 16-bit: C ;--- 3 (xx xxxx, jmp/call) or C ;--- 4 (0F xx xxxx) C ;--- 6 (66 xx xxxxxxxx) C ;--- 7 (66 0F xx xxxxxxxx) C ;--- C ;--- b) CS 32-bit: C ;--- 5 (xx xxxxxxxx, jmp/call) or C ;--- 6 (0F xx xxxxxxxx) C 0A22 C aop_rel1632: 0A22 FFFFFF8B1E 0000o C mov bx,[a_addr+0] 0A26 FFFFFFB90300 C mov cx,3 0A29 FFFFFF8B550A C mov dx,word ptr [di].OPRND.num+2 0A2C FFFFFF8A4502 C mov al,[di].OPRND.sizearg 0A2F FFFFFF813E 0000o 0001 C cmp [a_opcode],100h ;is a 0F xx opcode? 0A35 7201 C jb @F 0A37 41 C inc cx 0A38 C @@: 0A38 3C00 C cmp al,SIZ_NONE 0A3A 7408 C je @F ;if no size given 0A3C 3C04 C cmp al,SIZ_DWORD 0A3E 740C C je ao27 ;if size "dword" 0A40 3C0A C cmp al,SIZ_LONG 0A42 7530 C jne ao_err1 ;if not size "long" 0A44 C @@: C if ?PM C endif 0A44 0BFFFFFFD2 C or dx,dx 0A46 752C C jnz ao_err1 ;if operand is too big 0A48 FFFFFFB002 C mov al,2 ;displacement size 2 0A4A FFFFFFEB0A C jmp ao28 0A4C C ao27: 0A4C FFFFFFB004 C mov al,4 ;displacement size 4 0A4E FFFFFF800E 000Co 40 C or [ai.varflags],VAR_D32 0A53 FFFFFF83FFFFFFC103 C add cx,3 ;add 3 to instr size (+2 for displ, +1 for 66h) C if ?PM C endif 0A56 C ao28: 0A56 03FFFFFFD9 C add bx,cx 0A58 FFFFFF8B0E 0002o C mov cx,[a_addr+2] 0A5C FFFFFF83FFFFFFD100 C adc cx,0 0A5F FFFFFF884504 C mov [di].OPRND.numadd,al ;store size of displacement (2 or 4) 0A62 FFFFFF8B4508 C mov ax,word ptr [di].OPRND.num+0 0A65 2BFFFFFFC3 C sub ax,bx ;compute DX:AX - CX:BX 0A67 1BFFFFFFD1 C sbb dx,cx 0A69 FFFFFF894505 C mov [di].OPRND.num2,ax 0A6C FFFFFF895507 C mov [di].OPRND.num2+2,dx 0A6F FFFFFF893E 0006o C mov [ai.xxaddr],di 0A73 FFFFFFC3 C ret 0A74 C ao_err1: 0A74 FFFFFFE9FFFFFFDA00 C jmp ao50 ;reject C C ;--- OP_1CHK - The assembler can ignore this one. C 0A77 C ao29: 0A77 58 C pop ax ;discard return address 0A78 FFFFFFE9FFFFFF99FFFFFFF C jmp ac06 ;next operand C C ;--- OP_STI - ST(I). C 0A7B C aop_sti: 0A7B FFFFFFB01E C mov al,REG_ST ;code for ST 0A7D FFFFFF8A5D05 C mov bl,[di].OPRND.reg2 0A80 FFFFFFEB3D C jmp ao38 ;to common code C C ;--- OP_MMX [previously was OP_ECX (used for LOOPx)] C 0A82 C aop_mmx: 0A82 FFFFFFB01F C mov al,REG_MM 0A84 FFFFFFEB32 C jmp ao37 ;to common code C C ;--- OP_CR C 0A86 C aop_cr: 0A86 FFFFFF8A4505 C mov al,[di].OPRND.reg2 ;get the index 0A89 3C04 C cmp al,4 0A8B 77FFFFFFE7 C ja ao_err1 ;if too big 0A8D 7505 C jne @F ;if not CR4 0A8F FFFFFFC606 0008o 05 C mov [ai.dismach],5 ;CR4 is new to the 586 0A94 C @@: 0A94 3C01 C cmp al,1 0A96 7506 C jne @F 0A98 FFFFFF807D0CFFFFFFFF C cmp [di+sizeof OPRND].OPRND.flags,-1 0A9C 75FFFFFFD6 C jne ao_err1 ;if another arg (can't mov CR1,xx) 0A9E C @@: 0A9E FFFFFFB020 C mov al,REG_CR ;code for CR 0AA0 FFFFFFEB16 C jmp ao37 ;to common code C C ;--- OP_DR C 0AA2 C ao34: 0AA2 FFFFFFB021 C mov al,REG_DR ;code for DR 0AA4 FFFFFFEB12 C jmp ao37 ;to common code C C ;--- OP_TR C 0AA6 C ao35: 0AA6 FFFFFF8A4505 C mov al,[di].OPRND.reg2 ;get the index 0AA9 3C03 C cmp al,3 0AAB 72FFFFFFC7 C jb ao_err1 ;if too small 0AAD 3C06 C cmp al,6 0AAF 7305 C jae @F 0AB1 FFFFFFC606 0008o 04 C mov [ai.dismach],4 ;TR3-5 are new to the 486 0AB6 C @@: 0AB6 FFFFFFB022 C mov al,REG_TR ;code for TR C C ;--- Common code for these weird registers. C 0AB8 C ao37: 0AB8 FFFFFF8A5D05 C mov bl,[di].OPRND.reg2 0ABB FFFFFFB103 C mov cl,3 0ABD FFFFFFD2FFFFFFE3 C shl bl,cl 0ABF C ao38: 0ABF 081E 0002o C or [ai.regmem],bl 0AC3 FFFFFF800E 000Co 02 C or [ai.varflags],VAR_MODRM 0AC8 3A4504 C cmp al,[di].OPRND.reg1 ;check for the right numbered register 0ACB 7419 C je ao40 ;if yes, then return 0ACD C ao38a: 0ACD FFFFFFE9FFFFFF8100 C jmp ao50 ;reject C C ;--- OP_SEGREG C 0AD0 C ao39: 0AD0 FFFFFF8A4504 C mov al,[di].OPRND.reg1 0AD3 2C18 C sub al,24 0AD5 3C06 C cmp al,6 0AD7 73FFFFFFF4 C jae ao38a ;if not a segment register 0AD9 FFFFFFB103 C mov cl,3 0ADB FFFFFFD2FFFFFFE0 C shl al,cl 0ADD 0806 0002o C or [ai.regmem],al C ;--- v1.26: don't force size for MOV sreg,mxx / MOV mxx, sreg 0AE1 FFFFFF800E 000Co 04 C or [ai.varflags], VAR_SIZ_GIVN 0AE6 C ao40: 0AE6 FFFFFFC3 C ret C C ;--- OP_IMMS8 - Sign-extended immediate byte (PUSH xx) C 0AE7 C ao41: 0AE7 FFFFFF8026 000Co FFFFFF C and [ai.varflags],not VAR_SIZ_NEED ;added for v1.09. Ok? 0AEC FFFFFF8B4508 C mov ax,word ptr [di].OPRND.num+0 0AEF FFFFFFB107 C mov cl,7 0AF1 FFFFFFD2FFFFFFF8 C sar al,cl 0AF3 FFFFFFEB05 C jmp ao43 ;common code C C ;--- OP_IMM8 - Immediate byte C 0AF5 C ao42: 0AF5 FFFFFF8B4508 C mov ax,word ptr [di].OPRND.num+0 0AF8 FFFFFFB000 C mov al,0 0AFA C ao43: 0AFA 3AFFFFFFC4 C cmp al,ah 0AFC 7553 C jne ao50 ;if too big 0AFE 3B450A C cmp ax,word ptr [di].OPRND.num+2 0B01 754E C jne ao50 ;if too big 0B03 FFFFFFB001 C mov al,SIZ_BYTE 0B05 FFFFFFE84E00 C call aasizchk ;check that size == 0 or 1 0B08 FFFFFF8A6508 C mov ah,byte ptr [di].OPRND.num+0 0B0B FFFFFF894504 C mov word ptr [di].OPRND.numadd,ax ;store length (0/1) + the byte 0B0E FFFFFF893E 0006o C mov [ai.xxaddr],di 0B12 C ao43r: 0B12 FFFFFFC3 C ret C C ;--- OP_SHOSIZ - force the user to declare the size of the next operand C 0B13 C ao44: 0B13 FFFFFFF606 000Co 10 C test [ai.varflags],VAR_SIZ_NEED 0B18 7407 C jz ao45 ;if no testing needs to be done 0B1A FFFFFFF606 000Co 04 C test [ai.varflags],VAR_SIZ_GIVN 0B1F 7430 C jz ao50 ;if size was given ( ==> reject) 0B21 C ao45: 0B21 FFFFFF8026 000Co FFFFFF C and [ai.varflags],not VAR_SIZ_GIVN ;clear the flag 0B26 FFFFFF803C22 C cmp byte ptr [si],OP_IMM8 0B29 7405 C je ao45a ;if OP_IMM8 is next, then don't set VAR_SIZ_NEED 0B2B FFFFFF800E 000Co 10 C or [ai.varflags],VAR_SIZ_NEED 0B30 C ao45a: 0B30 FFFFFFC606 000Bo 00 C mov byte ptr [ai.opsize],0 0B35 58 C pop ax ;discard return address 0B36 FFFFFFE9FFFFFFDBFFFFFFF C jmp ac06 ;next operand C C ;--- OP_1 C 0B39 C ao46: 0B39 FFFFFF817D070101 C cmp word ptr [di+7],101h ;check both size and value 0B3E FFFFFFEB0F C jmp ao49 ;test it later C C ;--- OP_3 C 0B40 C ao47: 0B40 FFFFFF817D070103 C cmp word ptr [di+7],301h ;check both size and value 0B45 FFFFFFEB08 C jmp ao49 ;test it later C C ;--- OP_DX, OP_CL, OP_ST, OP_CS/DS/ES/FS/GS/SS C ;--- bx contains index for bittab C 0B47 C ao48: 0B47 FFFFFF8AFFFFFF87 FFE3o C mov al,[asm_regnum+bx-(ASM_OPOFF + OP_DX - OP_M64)/2] 0B4B FFFFFF98 C cbw 0B4C 3B4504 C cmp ax,word ptr [di].OPRND.reg1 C 0B4F C ao49: 0B4F 7404 C je ao51 C C ;--- Reject this operand list. C 0B51 C ao50: 0B51 58 C pop ax ;discard return address 0B52 FFFFFFE953FFFFFFFB C jmp ac01 ;go back to try the next alternative C 0B55 C ao51: 0B55 FFFFFFC3 C ret C C ;--- AASIZCHK - Check that the size given is 0 or AL. C 0B56 C aasizchk: 0B56 FFFFFF807D0200 C cmp [di].OPRND.sizearg,SIZ_NONE 0B5A 74FFFFFFF9 C je ao51 0B5C 384502 C cmp [di].OPRND.sizearg,al 0B5F 74FFFFFFF4 C je ao51 0B61 58 C pop ax ;discard return address 0B62 FFFFFFEBFFFFFFED C jmp ao50 C 0B64 C a_cmd endp C C ;--- Do reg/mem processing. C ;--- in: DI->OPRND C ;--- Uses AX C 0B64 C ao90 proc 0B64 FFFFFFF60504 C test [di].OPRND.flags, ARG_JUSTREG 0B67 7516 C jnz ao92 ;if just register 0B69 FFFFFFF60502 C test [di].OPRND.flags, ARG_MODRM 0B6C 7405 C jz @F ;if no precomputed MOD R/M byte 0B6E FFFFFF8B4504 C mov ax,word ptr [di].OPRND.reg1 ;get the precomputed bytes 0B71 FFFFFFEB1A C jmp ao93 ;done 0B73 C @@: 0B73 FFFFFFB006 C mov al,6 ;convert plain displacement to MOD R/M 0B75 FFFFFFF606 0000o 04 C test [asm_mn_flags],AMF_A32 0B7A 7411 C jz ao93 ;if 16 bit addressing 0B7C 48 C dec ax 0B7D FFFFFFEB0E C jmp ao93 ;done C 0B7F C ao92: 0B7F FFFFFF8A4504 C mov al,[di].OPRND.reg1 ;convert register to MOD R/M C if 1 0B82 3C1F C cmp al,REG_MM 0B84 7503 C jnz @F 0B86 FFFFFF8A4505 C mov al,[di].OPRND.reg2 0B89 C @@: C endif 0B89 2407 C and al,7 ;get low 3 bits 0B8B 0CFFFFFFC0 C or al,0c0h C 0B8D C ao93: 0B8D 0906 0002o C or word ptr [ai.regmem],ax ;store the MOD R/M and SIB 0B91 FFFFFF800E 000Co 02 C or [ai.varflags],VAR_MODRM ;flag its presence 0B96 FFFFFF893E 0000o C mov [ai.rmaddr],di ;save a pointer 0B9A FFFFFFC3 C ret ;done 0B9B C ao90 endp C C ; AAIFNUM - Determine if there's a number next. C ; Entry AL First character of number C ; SI Address of next character of number C ; Exit CY Clear if there's a number, set otherwise. C ; Uses None. C 0B9B C aaifnum proc 0B9B 3C2D C cmp al,'-' 0B9D 7411 C je aai2 ;if minus sign (carry is clear) 0B9F 50 C push ax 0BA0 2C30 C sub al,'0' 0BA2 3C0A C cmp al,10 0BA4 58 C pop ax 0BA5 7208 C jb aai1 ;if a digit 0BA7 50 C push ax 0BA8 24FFFFFFDF C and al,TOUPPER 0BAA 2C41 C sub al,'A' 0BAC 3C06 C cmp al,6 0BAE 58 C pop ax 0BAF C aai1: 0BAF FFFFFFF5 C cmc ;carry clear <==> it's a number 0BB0 C aai2: 0BB0 FFFFFFC3 C ret 0BB1 C aaifnum endp C C ; AAGETI - Get a number from the input line. C ; Entry AL First character of number C ; SI Address of next character of number C ; Exit DX:BX Resulting number C ; CL 1 if it's a byte ptr, 2 if a word, 4 if a dword C ; AL Next character not in number C ; SI Address of next character after that C ; Uses AH, CH C 0BB1 C aageti proc 0BB1 3C2D C cmp al,'-' 0BB3 740F C je aag1 ;if negative 0BB5 FFFFFFE83F00 C call aag4 ;get the bare number 0BB8 FFFFFFB90100 C mov cx,1 ;set up cx 0BBB 0BFFFFFFD2 C or dx,dx 0BBD 7534 C jnz aag2 ;if dword 0BBF 0AFFFFFFFF C or bh,bh 0BC1 7532 C jnz aag3 ;if word 0BC3 FFFFFFC3 C ret ;it's a byte C 0BC4 C aag1: 0BC4 FFFFFFAC C lodsb 0BC5 FFFFFFE82F00 C call aag4 ;get the bare number 0BC8 FFFFFF8BFFFFFFCB C mov cx,bx 0BCA 0BFFFFFFCA C or cx,dx 0BCC FFFFFFB90100 C mov cx,1 0BCF 7421 C jz aag1a ;if -0 0BD1 FFFFFFF7FFFFFFD2 C not dx ;negate the answer 0BD3 FFFFFFF7FFFFFFDB C neg bx 0BD5 FFFFFFF5 C cmc 0BD6 FFFFFF83FFFFFFD200 C adc dx,0 0BD9 FFFFFFF6FFFFFFC6FFFFFF8 C test dh,80h 0BDC 743A C jz aag7 ;if error 0BDE FFFFFF83FFFFFFFAFFFFFFF C cmp dx,-1 0BE1 7510 C jne aag2 ;if dword 0BE3 FFFFFFF6FFFFFFC7FFFFFF8 C test bh,80h 0BE6 740B C jz aag2 ;if dword 0BE8 FFFFFF80FFFFFFFFFFFFFFF C cmp bh,-1 0BEB 7508 C jne aag3 ;if word 0BED FFFFFFF6FFFFFFC3FFFFFF8 C test bl,80h 0BF0 7403 C jz aag3 ;if word 0BF2 C aag1a: 0BF2 FFFFFFC3 C ret ;it's a byte C 0BF3 C aag2: 0BF3 41 C inc cx ;return: it's a dword 0BF4 41 C inc cx 0BF5 C aag3: 0BF5 41 C inc cx ;return: it's a word 0BF6 FFFFFFC3 C ret C 0BF7 C aag4: 0BF7 33FFFFFFDB C xor bx,bx ;get the basic integer 0BF9 33FFFFFFD2 C xor dx,dx 0BFB FFFFFFE8FFFFFFBC15 C call getnyb 0BFE 7218 C jc aag7 ;if not a hex digit 0C00 C aag5: 0C00 0AFFFFFFD8 C or bl,al ;add it to the number 0C02 FFFFFFAC C lodsb 0C03 FFFFFFE8FFFFFFB415 C call getnyb 0C06 72FFFFFFEA C jc aag1a ;if done 0C08 FFFFFFF6FFFFFFC6FFFFFFF C test dh,0f0h 0C0B 750B C jnz aag7 ;if overflow 0C0D FFFFFFB90400 C mov cx,4 0C10 C aag6: 0C10 FFFFFFD1FFFFFFE3 C shl bx,1 ;shift it by 4 0C12 FFFFFFD1FFFFFFD2 C rcl dx,1 0C14 FFFFFFE2FFFFFFFA C loop aag6 0C16 FFFFFFEBFFFFFFE8 C jmp aag5 C 0C18 C aag7: 0C18 FFFFFFE9FFFFFF8910 C jmp cmd_error ;error C 0C1B C aageti endp C C ; AACONVINDEX - Convert results from AAGETI and store index value C ; Entry DX:BX,CL As in exit from AAGETI C ; DI Points to information record for this arg C ; Exit SS bits stored in [di].OPRND.index C ; Uses DL C 0C1B C aaconvindex proc 0C1B FFFFFF80FFFFFFF901 C cmp cl,1 0C1E 7517 C jne aacv1 ;if the number is too large 0C20 FFFFFF80FFFFFFFB01 C cmp bl,1 0C23 7415 C je aacv2 ;if 1 0C25 42 C inc dx 0C26 FFFFFF80FFFFFFFB02 C cmp bl,2 0C29 740F C je aacv2 ;if 2 0C2B 42 C inc dx 0C2C FFFFFF80FFFFFFFB04 C cmp bl,4 0C2F 7409 C je aacv2 ;if 4 0C31 42 C inc dx 0C32 FFFFFF80FFFFFFFB08 C cmp bl,8 0C35 7403 C je aacv2 ;if 8 0C37 C aacv1: 0C37 FFFFFFE96A10 C jmp cmd_error ;error C 0C3A C aacv2: 0C3A FFFFFF885506 C mov [di].OPRND.index,dl ;save the value 0C3D FFFFFFC3 C ret 0C3E C aaconvindex endp C C ; AAGETREG - Get register for the assembler. C ; Entry DI Start of register table C ; CX Length of register table ( or 0 ) C ; SI Address of first character in register name C ; Exit NC if a register was found C ; SI Updated if a register was found C ; BX Register number, defined as in the table below. C ; Uses AX, CX, DI C C ; Exit value of BX: C ; DI = rgnam816, CX = 27 DI = rgnam16, CX = 8 C ; ---------------------- -------------------- C ; 0 .. 7: AL .. BH 0 .. 7: AX .. DI C ; 8 .. 15: AX .. DI 16 .. 23: EAX..EDI C ; 16 .. 23: EAX..EDI C ; 24 .. 29: ES .. GS C ; 30 .. 34: ST .. TR C 0C3E C aagetreg proc 0C3E FFFFFF8B04 C mov ax,[si] 0C40 25FFFFFFDFFFFFFFDF C and ax,TOUPPER_W ;convert to upper case 0C43 3C45 C cmp al,'E' ;check for EAX, etc. 0C45 7522 C jne aagr1 ;if not 0C47 50 C push ax 0C48 FFFFFF8AFFFFFFC4 C mov al,ah 0C4A FFFFFF8A6402 C mov ah,[si+2] 0C4D FFFFFF80FFFFFFE4FFFFFFD C and ah,TOUPPER 0C50 57 C push di 0C51 FFFFFFBF 0000o C mov di,offset rgnam16 0C54 51 C push cx 0C55 FFFFFFB90800 C mov cx,N_REGS16 0C58 FFFFFFF2FFFFFFAF C repne scasw 0C5A FFFFFF8BFFFFFFD9 C mov bx,cx 0C5C 59 C pop cx 0C5D 5F C pop di 0C5E 58 C pop ax 0C5F 7508 C jne aagr1 ;if no match 0C61 46 C inc si 0C62 FFFFFFF7FFFFFFD3 C not bx 0C64 FFFFFF80FFFFFFC318 C add bl,8+16 ;adjust BX 0C67 FFFFFFEB11 C jmp aagr2 ;finish up C 0C69 C aagr1: 0C69 FFFFFF8BFFFFFFD9 C mov bx,cx ;(if cx = 0, this is always reached with 0C6B FFFFFFF2FFFFFFAF C repne scasw ; ZF clear) 0C6D 750F C jne aagr3 ;if no match 0C6F 2BFFFFFFD9 C sub bx,cx 0C71 4B C dec bx 0C72 FFFFFF80FFFFFFFB10 C cmp bl,16 0C75 7203 C jb aagr2 ;if AL .. BH or AX .. DI 0C77 FFFFFF80FFFFFFC308 C add bl,8 0C7A C aagr2: 0C7A 46 C inc si ;skip the register name 0C7B 46 C inc si 0C7C FFFFFFF8 C clc 0C7D FFFFFFC3 C ret 0C7E C aagr3: 0C7E FFFFFFF9 C stc ;not found 0C7F FFFFFFC3 C ret 0C80 C aagetreg endp C if ?PM endif ;--- C command - compare bytes. 0C80 c_cmd proc 0C80 FFFFFFE82113 call parsecm ;parse arguments (sets DS:e/si, ES:e/di, e/cx) ;--- note: DS unknown here if ?PM endif 0C83 41 inc cx 0C84 cc1: ;<--- continue compare if INT2324 0C84 1E push ds 0C85 16 push ss ;ds=DGROUP 0C86 1F pop ds 0C87 FFFFFFE80612 call dohack ;set debuggee's int 23/24 0C8A 1F pop ds endif if ?PM endif 0C8B FFFFFFF3FFFFFFA6 repe cmpsb 0C8D FFFFFF9F lahf ;--- v2.0: "mov dl,[si-1]" and "mov dl,[esi-1]" differ not just in the prefix! ;--- mov dl, [si-1]: 8A 54 FF ;--- mov dl,[esi-1]: 67 8A 56 FF if ?PM endif 0C8E FFFFFF8A54FFFFFFFF mov dl,[si-1] ;save the possibly errant characters 0C91 26FFFFFF8A75FFFFFFFF mov dh,es:[di-1] 0C95 c_cont: if INT2324 0C95 1E push ds 0C96 16 push ss 0C97 1F pop ds 0C98 FFFFFFE80012 call unhack ;set debugger's int 23/24 0C9B 1F pop ds endif 0C9C FFFFFF9E sahf 0C9D 7502 jne @F 0C9F FFFFFFEB4A jmp cc2 ;if we're done 0CA1 @@: 0CA1 51 push cx 0CA2 06 push es ;--- set ES to dgroup ( needed for output routines ) @RestoreSeg es 0CA3 16 1 push ss 0CA4 07 1 pop es sizeprfX ;mov ebx,edi 0CA5 FFFFFF8BFFFFFFDF mov bx,di ;save [E]DI 0CA7 FFFFFFBF 0000o mov di,offset line_out 0CAA FFFFFF8CFFFFFFD8 mov ax,ds 0CAC FFFFFFE8FFFFFFB61F call hexword 0CAF FFFFFFB03A mov al,':' 0CB1 FFFFFFAA stosb if ?PM else 0CB2 FFFFFF8D44FFFFFFFF lea ax,[si-1] 0CB5 FFFFFFE8FFFFFFAD1F call hexword endif 0CB8 FFFFFFB82020 mov ax,' ' 0CBB FFFFFFAB stosw 0CBC FFFFFF8AFFFFFFC2 mov al,dl 0CBE FFFFFFE8FFFFFFAB1F call hexbyte 0CC1 FFFFFFB82020 mov ax,' ' 0CC4 FFFFFFAB stosw 0CC5 FFFFFF8AFFFFFFC6 mov al,dh 0CC7 FFFFFFE8FFFFFFA21F call hexbyte 0CCA FFFFFFB82020 mov ax,' ' 0CCD FFFFFFAB stosw 0CCE 58 pop ax 0CCF 50 push ax 0CD0 FFFFFFE8FFFFFF921F call hexword 0CD3 FFFFFFB03A mov al,':' 0CD5 FFFFFFAA stosb if ?PM else 0CD6 FFFFFF8D47FFFFFFFF lea ax,[bx-1] 0CD9 FFFFFFE8FFFFFF891F call hexword endif 0CDC 1E push ds ;--- set DS to dgroup @RestoreSeg ds 0CDD 16 1 push ss 0CDE 1F 1 pop ds 0CDF 53 push bx 0CE0 FFFFFFE8FFFFFFA51F call putsline 0CE3 5F pop di 0CE4 1F pop ds 0CE5 07 pop es 0CE6 59 pop cx if ?PM endif 0CE7 FFFFFFE302 jcxz cc2 0CE9 FFFFFFEBFFFFFF99 jmp cc1 ;if not done yet 0CEB cc2: @RestoreSeg ds 0CEB 16 1 push ss 0CEC 1F 1 pop ds 0CED 1E push ds 0CEE 07 pop es 0CEF FFFFFFC3 ret 0CF0 c_cmd endp if DPCMD or DPCMDR0 endif if RING0 endif if DGCMD or DLCMD endif if DICMD endif .8086 if DMCMD ;--- dm cmd: display list of MCBs ;--- DI=lineout 0CF0 dm_cmd proc ; mov di,offset line_out 0CF0 FFFFFFB85053 mov ax,"SP" 0CF3 FFFFFFAB stosw 0CF4 FFFFFFB8503A mov ax,":P" 0CF7 FFFFFFAB stosw 0CF8 FFFFFFA1 0000o mov ax,[pspdbe] 0CFB FFFFFFE8671F call hexword 0CFE FFFFFFE8FFFFFF871F call putsline ;destroys cx,dx,bx 0D01 FFFFFF8B36 0000o mov si,[wMCB] 0D05 1E push ds 0D06 nextmcb: 0D06 FFFFFFBF 0000o mov di,offset line_out 0D09 FFFFFFE85C00 call setds2si 0D0C FFFFFF8BFFFFFFC6 mov ax,si 0D0E FFFFFFE8541F call hexword ;segment address of MCB 0D11 FFFFFFB020 mov al,' ' 0D13 FFFFFFAA stosb 0D14 FFFFFFA00000 mov al,ds:[0000];'M' or 'Z' 0D17 3C5A cmp al,'Z' 0D19 7404 jz @F 0D1B 3C4D cmp al,'M' 0D1D 7547 jnz mcbout_done 0D1F @@: 0D1F FFFFFFE84A1F call hexbyte 0D22 FFFFFFB020 mov al,' ' 0D24 FFFFFFAA stosb 0D25 FFFFFFA10100 mov ax,ds:[0001];MCB owner 0D28 FFFFFF8BFFFFFFD8 mov bx,ax 0D2A FFFFFFE8381F call hexword 0D2D FFFFFFB020 mov al,' ' 0D2F FFFFFFAA stosb 0D30 FFFFFFA10300 mov ax,ds:[0003];MCB size in paragraphs 0D33 FFFFFF8BFFFFFFD0 mov dx,ax 0D35 FFFFFFE82D1F call hexword 0D38 FFFFFFB020 mov al,' ' 0D3A FFFFFFAA stosb 0D3B 23FFFFFFDB and bx,bx 0D3D 741B jz mcbisfree 0D3F 56 push si 0D40 52 push dx 0D41 FFFFFFBE0800 mov si,8 0D44 FFFFFFB90200 mov cx,2 0D47 3BFFFFFFDE cmp bx,si ;is it a "system" MCB? 0D49 7407 jz nextmcbchar 0D4B 4B dec bx 0D4C FFFFFFE81B00 call setds2bx ;destroys cx if in pm 0D4F FFFFFFB90800 mov cx,8 0D52 nextmcbchar: ;copy "name" of owner MCB 0D52 FFFFFFAC lodsb 0D53 FFFFFFAA stosb 0D54 22FFFFFFC0 and al,al 0D56 FFFFFFE0FFFFFFFA loopnz nextmcbchar 0D58 5A pop dx 0D59 5E pop si 0D5A mcbisfree: 0D5A 03FFFFFFF2 add si,dx 0D5C 7208 jc mcbout_done 0D5E 46 inc si 0D5F 1F pop ds 0D60 1E push ds 0D61 FFFFFFE8241F call putsline ;destroys cx,dx,bx 0D64 FFFFFFEBFFFFFFA0 jmp nextmcb 0D66 mcbout_done: 0D66 1F pop ds 0D67 FFFFFFC3 ret 0D68 setds2si: 0D68 FFFFFF8BFFFFFFDE mov bx,si 0D6A setds2bx: if ?DPMI endif 0D6A FFFFFF8EFFFFFFDB mov ds,bx 0D6C FFFFFFC3 ret 0D6D dm_cmd endp endif if DTCMD endif ;--- DX command. Display extended memory ;--- works for 80386+ only. if DXCMD endif if RING0 and V86M endif ;--- D command - hex/ascii dump. 0D6D d_cmd proc 0D6D 3C0D cmp al,CR 0D6F 7514 jne dd1 ; if an argument was given sizeprfX ; mov edx,[d_addr] 0D71 FFFFFF8B16 0000o mov dx,[d_addr] 0D75 FFFFFF8B1E 0004o mov bx, [d_addr+4] if RING0 endif sizeprfX ; mov esi,edx 0D79 FFFFFF8BFFFFFFF2 mov si,dx ;--- ?PM: we don't know yet if limit is > 64kB ;--- so we stop at 64 kB in any case 0D7B FFFFFF83FFFFFFC27F add dx,80h-1; compute range of 80h or until end of segment 0D7E 7320 jnc dd2 0D80 FFFFFF83FFFFFFCAFFFFFFF or dx, -1 0D83 FFFFFFEB1B jmp dd2 00000000 DMPJT struct 00000000 pDispOfs dw ? ; display offset 16/32 00000002 pGetB dw ? ; get # of bytes to print in cx 00000004 pLoad dw ? ; load a byte 00000006 pEnd dw ? ; check if dump is done 00000008 DMPJT ends 14B2 CONST segment 14B2 0000000000000000 dd16 DMPJT < hexword, getb16, load16, end16> if ?PM endif 14BA CONST ends ife DGCMD+DICMD+DLCMD+DPCMD+DTCMD+DXCMD ; if just the DM cmd exists (std debug) 0D85 dd1: 0D85 FFFFFF80FFFFFFFC64 cmp ah,'d' ; char 'd' just before g/i/l/m/p/t/x? 0D88 7509 jnz dd1_1 0D8A 0C20 or al,TOLOWER if DMCMD 0D8C 3C6D cmp al,'m' 0D8E 7503FFFFFFE95DFFFFFFFF jz dm_cmd endif endif if FLATSS else = DMPPFX textequ <> endif 0D93 dd1_1: 0D93 FFFFFFB9FFFFFF8000 mov cx,80h ;default length 0D96 FFFFFFE80713 call getrangeDS ;get address range into bx:(e)dx ... bx:(e)cx 0D99 FFFFFFE83814 call chkeol ;expect end of line here sizeprfX ; mov esi,edx 0D9C FFFFFF8BFFFFFFF2 mov si,dx sizeprfX ; mov edx,ecx (14.2.2021) 0D9E FFFFFF8BFFFFFFD1 mov dx,cx ; dx = end address ;--- Parsing is done. Print lines. ;--- BX=segment/selector ;--- E/SI=src offset, E/DX=end src 0DA0 dd2: 0DA0 FFFFFF891E 0004o mov [d_addr+4], bx ;save segment/selector (offset is saved later) 0DA4 FFFFFFC706 0000o 0000o mov [lastcmd], offset d_cmd 0DAA FFFFFFBD 0000o mov bp, offset dd16 if ?PM endif 0DAD FFFFFFE8FFFFFFB510 call prephack ;set up for faking int vectors 23 and 24 0DB0 nextline: 0DB0 FFFFFFBF 0000o mov di,offset line_out @dispsegm [d_addr+4] 0DB3 FFFFFFA1 0004o 1 mov ax,[d_addr+4] 0DB6 FFFFFFE8FFFFFFAC1E 1 call hexword 0DB9 FFFFFFB03A mov al,':' 0DBB FFFFFFAA stosb sizeprfX ; mov eax, esi 0DBC FFFFFF8BFFFFFFC6 mov ax, si 0DBE 24FFFFFFF0 and al, 0f0h 0DC0 FFFFFF8BFFFFFFCE mov cx, si 0DC2 2BFFFFFFC8 sub cx, ax 0DC4 FFFFFFFF5600 call [bp].DMPJT.pDispOfs ;--- blank the line 0DC7 FFFFFFB82020 mov ax,' ' 0DCA FFFFFFAB stosw 0DCB FFFFFF8D5D30 lea bx, [di+3*16] 0DCE 03FFFFFFD9 add bx, cx 0DD0 51 push cx 0DD1 57 push di 0DD2 FFFFFF8BFFFFFFCB mov cx, bx 0DD4 2BFFFFFFCF sub cx, di 0DD6 FFFFFFF3FFFFFFAA rep stosb 0DD8 5F pop di 0DD9 59 pop cx 0DDA FFFFFFC645172D mov byte ptr [di+3*8-1],'-' 0DDE 03FFFFFFF9 add di,cx 0DE0 03FFFFFFC9 add cx,cx 0DE2 03FFFFFFF9 add di,cx 0DE4 FFFFFFFF5602 call [bp].DMPJT.pGetB 0DE7 FFFFFFE8FFFFFFA610 call dohack ;set debuggee's int 23/24 0DEA FFFFFF8E1E 0004o mov ds,[d_addr+4] 0DEE nextbyte: 0DEE FFFFFFFF5604 call [bp].DMPJT.pLoad 0DF1 50 push ax 0DF2 FFFFFFE8771E call hexbyte 0DF5 47 inc di 0DF6 58 pop ax 0DF7 3C20 cmp al,' ' 0DF9 7204 jb dd7 ;if control character 0DFB 3C7E cmp al,'~' 0DFD 7602 jbe dd8 ;if printable 0DFF dd7: 0DFF FFFFFFB02E mov al,'.' 0E01 dd8: 0E01 26FFFFFF8807 mov es:[bx],al 0E04 43 inc bx 0E05 FFFFFFE2FFFFFFE7 loop nextbyte 0E07 06 push es ;restore ds 0E08 1F pop ds 0E09 FFFFFFE8FFFFFF8F10 call unhack ;set debugger's int 23/24 0E0C FFFFFF8BFFFFFFFB mov di,bx 0E0E 52 push dx 0E0F FFFFFFE8761E call putsline 0E12 5A pop dx 0E13 FFFFFFFF5606 call [bp].DMPJT.pEnd 0E16 72FFFFFF98 jc nextline sizeprfX ;mov [d_addr],esi 0E18 FFFFFF8936 0000o mov [d_addr],si 0E1C FFFFFFC3 ret if ?PM endif 0E1D load16: 0E1D FFFFFFAC lodsb 0E1E FFFFFFC3 ret 0E1F getb16: 0E1F FFFFFF8BFFFFFFCE mov cx,si 0E21 FFFFFF80FFFFFFC90F or cl,0fh 0E24 3BFFFFFFCA cmp cx,dx ;compare with end address 0E26 7202 jb @F ;if we write to the end of the line 0E28 FFFFFF8BFFFFFFCA mov cx,dx 0E2A @@: 0E2A 2BFFFFFFCE sub cx,si 0E2C 41 inc cx ;cx = number of bytes to print this line 0E2D FFFFFFC3 ret 0E2E end16: 0E2E 4E dec si 0E2F 3BFFFFFFF2 cmp si,dx 0E31 46 inc si 0E32 FFFFFFC3 ret if ?PM endif 0E33 d_cmd endp if RING0 and V86M endif 0E33 errorj4: 0E33 FFFFFFE96E0E jmp cmd_error ;--- E command - edit memory. 0E36 e_cmd proc 0E36 FFFFFFE82C10 call prephack @movs bx,[regs.rDS] 0E39 FFFFFF8B1E 0020o 1 mov bx, [regs.rDS] 0E3D FFFFFFE8FFFFFFA112 call getaddr ;get address into bx:(e)dx 0E40 FFFFFFE8FFFFFF9D13 call skipcomm0 0E43 3C0D cmp al,CR 0E45 742A je ee1 ;if prompt mode 0E47 52 push dx ;save destination offset 0E48 FFFFFFE8FFFFFFAF12 call getstr ;get data bytes SI -> line_out 0E4B FFFFFF8BFFFFFFCF mov cx,di 0E4D FFFFFFBA 0000o mov dx,offset line_out 0E50 2BFFFFFFCA sub cx,dx ;length of byte string 0E52 5F pop di 0E53 FFFFFF8BFFFFFFC1 mov ax,cx 0E55 48 dec ax if ?PM endif 0E56 03FFFFFFC7 add ax,di 0E58 72FFFFFFD9 jc errorj4 ;if it wraps around 0E5A @@: 0E5A FFFFFFE83310 call dohack ;set debuggee's int 23/24 0E5D FFFFFF8BFFFFFFF2 mov si,dx if ?PM endif 0E5F FFFFFF8EFFFFFFC3 mov es, bx if ?PM endif 0E61 FFFFFFF3FFFFFFA4 rep movsb ;--- Restore ds + es and undo the interrupt vector hack. ;--- This code is also used by the 'm' command. 0E63 ee0a:: @RestoreSeg ds 0E63 16 1 push ss 0E64 1F 1 pop ds 0E65 1E push ds ;restore es 0E66 07 pop es if INT2324 ;--- store2324 is called after debuggee memory has been written (just e cmd) 0E67 FFFFFFBF 0000o mov di,offset run2324 ;debuggee's int 23/24 values 0E6A FFFFFFE81310 call store2324 ;copy IVT 23/24 to di ( real-mode only ) 0E6D FFFFFFE82B10 call unhack ;set debugger's int 23/24 endif 0E70 FFFFFFC3 ret ;--- Prompt mode. BX:E/DX=addr, DI=line_out 0E71 ee1: if REDIRECT 0E71 FFFFFF8936 0000o mov [bufnext], si ; update buffer ptr in case stdin is file endif 0E75 FFFFFFBD 0000o mov bp,offset hexword if ?PM endif ;--- Begin loop over lines. 0E78 e_nextl: ;<--- next line @dispsegm bx ;print out segment part 0E78 FFFFFF8BFFFFFFC3 1 mov ax,bx 0E7A FFFFFFE8FFFFFFE81D 1 call hexword 0E7D FFFFFFB03A mov al,':' 0E7F FFFFFFAA stosb sizeprfX ;mov eax,edx 0E80 FFFFFF8BFFFFFFC2 mov ax,dx 0E82 FFFFFFFFFFFFFFD5 call bp ;--- Begin loop over bytes. 0E84 e_nextb: ;<--- next byte 0E84 53 push bx 0E85 52 push dx 0E86 FFFFFFB82020 mov ax,' ' 0E89 FFFFFFAB stosw 0E8A FFFFFFE80310 call dohack ;set debuggee's int 23/24 0E8D FFFFFFE84B06 call readmem ;read byte at BX:(E)DX 0E90 FFFFFFE80810 call unhack ;set debugger's int 23/24 0E93 FFFFFFE8FFFFFFD61D call hexbyte ;print old value of byte 0E96 FFFFFFB02E mov al,'.' 0E98 FFFFFFAA stosb 0E99 FFFFFFE8FFFFFFF01D call puts 0E9C 5A pop dx 0E9D 5B pop bx 0E9E FFFFFFBE 0010o mov si,offset line_out+16 ;address of buffer for characters 0EA1 33FFFFFFC9 xor cx,cx ;number of characters so far ;--- get a byte (2 chars) ;--- this is a simple "editor" that allows max 2 chars as input: ;--- + 0-9 or A-F ;--- + control chars SPACE, CR, BS, '-' 0EA3 e_nextc: ;<--- get next char if REDIRECT 0EA3 FFFFFFF606 0000o FFFFFF test [fStdin], AT_DEVICE 0EA8 751A jnz ee9 ;jmp if it's a tty 0EAA 56 push si 0EAB FFFFFF8B36 0000o mov si,[bufnext] 0EAF 3B36 0000o cmp si,[bufend] 0EB3 7207 jb @F ;if there's a character already 0EB5 FFFFFFE8FFFFFFB710 call fillbuf ;fill buffer with a new line; init SI 0EB8 FFFFFFB00D mov al,CR 0EBA 7201 jc ee8 ;if eof 0EBC @@: 0EBC FFFFFFAC lodsb ;get the character 0EBD ee8: 0EBD FFFFFF8936 0000o mov [bufnext],si 0EC1 5E pop si 0EC2 FFFFFFEB10 jmp ee10 endif 0EC4 ee9: ife RING0 0EC4 FFFFFFE8FFFFFFEE0F call InDos ;v1.27: use BIOS if InDOS 0EC7 7507 jnz @F 0EC9 FFFFFFB408 mov ah,8 ;console input without echo ; int 21h ;v1.29: don't use INT instruction; 0ECB FFFFFFE8FFFFFFF701 call doscall ;might make debuggee run if int 21h is intercepted 0ECE FFFFFFEB04 jmp ee10 0ED0 @@: endif 0ED0 FFFFFFB400 mov ah,0h if RING0 else 0ED2 FFFFFFCD16 int 16h endif 0ED4 ee10: 0ED4 3C20 cmp al,' ' 0ED6 7439 je e_spcr ;if done with this byte 0ED8 3C0D cmp al,CR 0EDA 7435 je e_spcr ;ditto 0EDC 3C08 cmp al,BS 0EDE 7417 je e_bs ;if backspace 0EE0 3C2D cmp al,'-' 0EE2 741C je e_minus ;if '-' 0EE4 FFFFFF83FFFFFFF902 cmp cx,2 ;otherwise, it should be a hex character 0EE7 73FFFFFFBA jae e_nextc ;if we have a full byte already 0EE9 FFFFFF8804 mov [si],al 0EEB FFFFFFE8FFFFFFCC12 call getnyb 0EEE 72FFFFFFB3 jc e_nextc ;if it's not a hex character 0EF0 41 inc cx 0EF1 FFFFFFAC lodsb ;get the character back 0EF2 FFFFFFE8FFFFFFCC0F call stdoutal 0EF5 FFFFFFEBFFFFFFAC jmp e_nextc 0EF7 e_bs: 0EF7 FFFFFFE3FFFFFFAA jcxz e_nextc ;if nothing to backspace over 0EF9 49 dec cx 0EFA 4E dec si 0EFB FFFFFFE8FFFFFFD20F call fullbsout 0EFE FFFFFFEBFFFFFFA3 jmp e_nextc 0F00 e_minus: 0F00 FFFFFFE8FFFFFFBE0F call stdoutal 0F03 FFFFFFE82A00 call storebyte sizeprfX ;dec edx 0F06 4A dec dx ;decrement offset part 0F07 FFFFFFBF 0000o mov di,offset line_out 0F0A e_newline: 0F0A FFFFFFB80D0A mov ax,LF * 256 + CR;terminate this line 0F0D FFFFFFAB stosw 0F0E FFFFFFE967FFFFFFFF jmp e_nextl ;back for another line 0F11 e_spcr: 0F11 FFFFFFE81C00 call storebyte ;store byte if CX != 0 sizeprfX ;inc edx 0F14 42 inc dx ;increment offset 0F15 FFFFFFBF 0000o mov di,offset line_out 0F18 3C0D cmp al,CR 0F1A 7411 je e_done 0F1C FFFFFFF6FFFFFFC207 test dl,7 0F1F 74FFFFFFE9 jz e_newline 0F21 FFFFFFF7FFFFFFD1 not cx 0F23 FFFFFF83FFFFFFC104 add cx,4 ;compute 3 - cx 0F26 FFFFFFB020 mov al,' ' 0F28 FFFFFFF3FFFFFFAA rep stosb ;store that many spaces 0F2A FFFFFFE957FFFFFFFF jmp e_nextb ;back for more 0F2D e_done: 0F2D FFFFFFE9581D jmp putsline ;call putsline and return ;--- byte has been entered (1 or 2 chars) ;--- si->behind byte ;--- cx=#chars ;--- bx:e/dx: address to store byte ;--- ax preserved 0F30 storebyte: 0F30 FFFFFFE31F jcxz sb_done ;if no change for this byte 0F32 FFFFFF8804 mov [si],al ;terminate the string 0F34 2BFFFFFFF1 sub si,cx ;point to beginning 0F36 50 push ax ;v1.29: save/restore value of AL to avoid stop if 'D' is entered 0F37 51 push cx 0F38 52 push dx 0F39 FFFFFFAC lodsb 0F3A FFFFFFE87512 call getbyte ;convert byte to binary (DL) 0F3D FFFFFF8AFFFFFFC2 mov al,dl 0F3F 5A pop dx 0F40 59 pop cx 0F41 FFFFFFE84C0F call dohack ;set debuggee's int 23/24 if ?PM endif 0F44 FFFFFFE8FFFFFF8105 call writemem ;write AL at BX:(E)DX if ?PM endif if INT2324 0F47 FFFFFFBF 0000o mov di,offset run2324 ;debuggee's int 23/24 0F4A FFFFFFE8330F call store2324 ;copy IVT 23/24 to di ( real-mode only ) 0F4D FFFFFFE84B0F call unhack ;set debugger's int 23/24 endif 0F50 58 pop ax 0F51 sb_done: 0F51 FFFFFFC3 ret 0F52 e_cmd endp ;--- F command - fill memory ;--- entry: SI=line, CX=0, AL=last char 0F52 f_cmd proc 0F52 FFFFFFE84B11 call getrangeDS ;get address range into bx:(e)dx/(e)cx if ?PM endif 0F55 2BFFFFFFCA sub cx,dx 0F57 41 inc cx ;cx = number of bytes 0F58 51 push cx ;save it 0F59 52 push dx ;save start address 0F5A ff_01: 0F5A FFFFFFE8FFFFFF8312 call skipcomm0 0F5D FFFFFFE8FFFFFF9A11 call getstr ;get string of bytes 0F60 FFFFFF8BFFFFFFCF mov cx, di 0F62 FFFFFF81FFFFFFE9 0000o sub cx, offset line_out if ?PM endif 0F66 FFFFFF8EFFFFFFC3 mov es, bx if ?PM endif 0F68 5F pop di 0F69 FFFFFF83FFFFFFF901 cmp cx,1 0F6C 7421 je onebyte16;a common optimization 0F6E 58 pop ax ;get size 0F6F 33FFFFFFD2 xor dx,dx ;now size in DX:AX 0F71 FFFFFF83FFFFFFF801 cmp ax,1 0F74 FFFFFF83FFFFFFD200 adc dx,0 ;convert 0000:0000 to 0001:0000 0F77 FFFFFFF7FFFFFFF1 div cx ;compute number of whole repetitions 0F79 FFFFFFBE 0000o mov si,offset line_out 0F7C 0BFFFFFFC0 or ax,ax 0F7E 7409 jz partial16;if less than one whole rep 0F80 nextcopy16: 0F80 51 push cx 0F81 56 push si 0F82 FFFFFFF3FFFFFFA4 rep movsb 0F84 5E pop si 0F85 59 pop cx 0F86 48 dec ax 0F87 75FFFFFFF7 jnz nextcopy16 ;if more to go 0F89 partial16: 0F89 FFFFFF8BFFFFFFCA mov cx,dx ; jcxz exit ;rep with cx=0 is a nop 0F8B FFFFFFF3FFFFFFA4 rep movsb 0F8D FFFFFFEB08 jmp exit 0F8F onebyte16: 0F8F 59 pop cx 0F90 FFFFFFA0 0000o mov al,byte ptr [line_out] 0F93 FFFFFFAA stosb ;cx=0 -> 64 kB 0F94 49 dec cx 0F95 FFFFFFF3FFFFFFAA rep stosb 0F97 exit: 0F97 1E push ds 0F98 07 pop es 0F99 FFFFFFC3 ret 0F9A f_cmd endp ;--- breakpoints are stored in line_out, with this format ;--- WORD cnt ;--- array: ;--- DWORD/WORD offset of bp ;--- WORD segment of bp ;--- BYTE old value 0F9A resetbps: 0F9A FFFFFFBF 0000o mov di,offset resetbp1 0F9D setbps proc 0F9D FFFFFFBE 0000o mov si,offset line_out 0FA0 FFFFFFAD lodsw 0FA1 FFFFFF91 xchg cx, ax ;mov cx,ax 0FA2 FFFFFFE309 jcxz setbps_ex 0FA4 nextbp: sizeprfX ;lodsd 0FA4 FFFFFFAD lodsw sizeprfX ;xchg edx,eax 0FA5 FFFFFF92 xchg dx,ax ;mov dx,ax 0FA6 FFFFFFAD lodsw 0FA7 FFFFFF93 xchg bx,ax ;mov bx,ax 0FA8 FFFFFFFFFFFFFFD7 call di ;call setbp1/resetbp1 0FAA 46 inc si 0FAB FFFFFFE2FFFFFFF7 loop nextbp ;next bp 0FAD setbps_ex: 0FAD FFFFFFC3 ret 0FAE setbp1:: 0FAE FFFFFFB0FFFFFFCC mov al,0CCh 0FB0 FFFFFFE81505 call writemem ; write byte at bx:e/dx, C if write was unsuccessful (ROM) 0FB3 FFFFFF8824 mov [si],ah ; save the current contents 0FB5 7302 jnc @F 0FB7 FFFFFFFFFFFFFFD5 call bp ; either ignore error (g cmd) or abort with msg (p cmd) 0FB9 @@: 0FB9 FFFFFFC3 retn 0FBA resetbp1:: 0FBA FFFFFF8A04 mov al,[si] 0FBC 3CFFFFFFCC cmp al,0CCh 0FBE 7403 jz @F 0FC0 FFFFFFE80505 call writemem ; write byte at bx:e/dx 0FC3 @@: 0FC3 FFFFFFC3 retn 0FC4 setbps endp if ?DPMI endif if FMTEXE endif ;--- G command - go. 0FC4 g_cmd proc 0FC4 FFFFFFE8FFFFFF9210 call parseql ;get optional <=addr> argument; always writes [eqladdr+4] ;--- Parse the rest of the line for breakpoints 0FC7 FFFFFFBF 0000o mov di,offset line_out 0FCA 33FFFFFFC0 xor ax,ax ; init bp cnt to 0 0FCC FFFFFFAB stosw if USEHWBP endif 0FCD nextbp: 0FCD 4E dec si 0FCE FFFFFFE80E12 call skipcomma 0FD1 3C0D cmp al,CR ;end of line? 0FD3 7416 je gg_parsebp_done ;--- calling getaddr was a bug in protected-mode up to v1.29. ;--- ( it was a different getaddr than now, one that ensured the ;--- segment part is a writeable selector in pm; with 2.0, getaddr ;--- does this no longer ). ;--- Anyway, multiple BPs with different segment parts all used ;--- the very same "scratch" selector, resulting in "random" mem writes. @movs bx,[eqladdr+4] ;default segment ( either CS or segm of '=' ) 0FD5 FFFFFF8B1E 0004o 1 mov bx, [eqladdr+4] 0FD9 FFFFFFE80511 call getaddr ;get address into bx:(e)dx if RING0 and V86M endif if USEHWBP else 0FDC FFFFFFE80200 call storebpdef endif 0FDF FFFFFFEBFFFFFFEC jmp nextbp ;next bp if USEHWBP endif 0FE1 storebpdef:: sizeprfX ;xchg eax,edx 0FE1 FFFFFF92 xchg ax,dx ;mov ax,dx sizeprfX ;stosd 0FE2 FFFFFFAB stosw 0FE3 FFFFFF93 xchg ax,bx ;mov ax,bx 0FE4 FFFFFFAB stosw 0FE5 47 inc di ; reserve to store byte at bp location 0FE6 FFFFFFFE06 0000o inc byte ptr line_out ;use [line_out+0] to count bps 0FEA FFFFFFC3 retn if USEHWBP endif 0FEB gg_parsebp_done: ;--- Store breakpoint bytes in the given locations. ;--- v2.50: abort g as in t/p if bp can't be written ; mov bp, offset _ret ; ignore write errors for g 0FEB FFFFFFBD 0000o mov bp, offset bp_writeerr 0FEE gg_1:: ; <--- called by p/t ( run an int/call/... - set 1 bp ) 0FEE FFFFFFBF 0000o mov di,offset setbp1 0FF1 FFFFFFE8FFFFFFA9FFFFFFF call setbps ; may cause a GPF in protected-mode if location is read-only if ?DPMI endif 0FF4 FFFFFFE8120D call run ;run the program if ?DPMI endif ife RING0 if FMTEXE endif if FMTEXE endif endif if ?PM endif if 0 endif ;--- Restore breakpoint bytes. if ?DPMI else 0FF7 FFFFFFE8FFFFFFA0FFFFFFF call resetbps endif ;--- Finish up. Check if it was one of _our_ breakpoints. ;--- if yes, decrement (E)IP if 0 ; v2.0: not needed for soft/hard bp detection? endif if USEHWBP endif 0FFA FFFFFF803E 0000o 32 cmp [run_int], EXC03MSG 0FFF 7512 jnz gg_exit 1001 FFFFFFB9FFFFFFFFFFFFFFF mov cx, -1 1004 FFFFFFE8FFFFFF9F04 call getcseipbyte ; get byte [cs:eip-1], sets E/BX 1007 3CFFFFFFCC cmp al, 0CCh ; still a INT3 at [cs:eip-1] ? 1009 7408 jz gg_exit ;--- here E/IP is decremented because DEBUG assumes an INT3 has been restored. ;--- it's not always true, though - the INT3 may have been routed from protected-mode; ;--- or anything else has just jumped to the vector for INT3. if ?PM endif 100B FFFFFF891E 0030o mov [regs.rIP], bx ; decrement (E)IP if RING0 endif 100F gg_ok: 100F FFFFFFE8FFFFFFC01A call dumpregs ; then just display register dump 1012 _ret: 1012 FFFFFFC3 ret ; and done ( no "unexpected breakpoint" msg ) 1013 gg_exit: 1013 FFFFFFE9FFFFFFA508 jmp ue_int ;print messages and quit. 1016 g_cmd endp ;--- H command - hex addition and subtraction. 1016 h_cmd proc 1016 FFFFFFE86311 call getdword ;get dword in BX:DX 1019 53 push bx 101A 52 push dx 101B FFFFFFE8FFFFFFC211 call skipcomm0 101E FFFFFFE85B11 call getdword 1021 FFFFFFE8FFFFFFB011 call chkeol ;expect end of line here 1024 59 pop cx 1025 58 pop ax ;first value in AX:CX, second in BX:DX if 0 endif 1026 hh32: 1026 FFFFFF8BFFFFFFF0 mov si,ax 1028 FFFFFF8BFFFFFFE9 mov bp,cx ;first value in SI:BP now 102A FFFFFF8BFFFFFFC1 mov ax,cx 102C 03FFFFFFC2 add ax,dx 102E 50 push ax 102F FFFFFF8BFFFFFFC6 mov ax,si 1031 13FFFFFFC3 adc ax,bx 1033 7403 jz @F 1035 FFFFFFE82D1C call hexword 1038 @@: 1038 58 pop ax 1039 FFFFFFE8291C call hexword 103C FFFFFFB82020 mov ax,' ' 103F FFFFFFAB stosw 1040 FFFFFF8BFFFFFFC5 mov ax,bp 1042 2BFFFFFFC2 sub ax,dx 1044 50 push ax 1045 FFFFFF8BFFFFFFC6 mov ax,si 1047 1BFFFFFFC3 sbb ax,bx 1049 7407 jz @F 104B 0BFFFFFFF3 or si,bx 104D 7403 jz @F 104F FFFFFFE8131C call hexword 1052 @@: 1052 58 pop ax 1053 FFFFFFE80F1C call hexword 1056 FFFFFFE82F1C call putsline 1059 FFFFFFC3 ret 105A h_cmd endp ;--- I command - input from I/O port. 105A i_cmd proc 105A FFFFFFB300 mov bl,0 105C FFFFFF8AFFFFFFE0 mov ah,al 105E FFFFFF80FFFFFFE4FFFFFFD and ah,TOUPPER 1061 FFFFFF80FFFFFFFC57 cmp ah,'W' 1064 7418 je ii_1 1066 FFFFFF803E 0000o 03 cmp [machine],3 106B 7215 jb ii_2 106D FFFFFF80FFFFFFFC44 cmp ah,'D' 1070 7510 jne ii_2 if 1 1072 FFFFFF8A64FFFFFFFE mov ah,[si-2] ;distiguish 'id' and 'i d' 1075 FFFFFF80FFFFFFE4FFFFFFD and ah,TOUPPER 1078 FFFFFF80FFFFFFFC49 cmp ah,'I' 107B 7505 jnz ii_2 endif 107D 43 inc bx 107E ii_1: 107E 43 inc bx 107F FFFFFFE87F11 call skipwhite 1082 ii_2: 1082 FFFFFFE82311 call getword ;get word into DX 1085 FFFFFFE84C11 call chkeol ;expect end of line here 1088 FFFFFF80FFFFFFFB01 cmp bl,1 108B 740B jz ii_3 108D FFFFFF80FFFFFFFB02 cmp bl,2 1090 740C jz ii_4 1092 FFFFFFEC in al,dx 1093 FFFFFFE8FFFFFFD61B call hexbyte 1096 FFFFFFEB0B jmp ii_5 1098 ii_3: 1098 FFFFFFED in ax,dx 1099 FFFFFFE8FFFFFFC91B call hexword 109C FFFFFFEB05 jmp ii_5 109E ii_4: .386 109E 66FFFFFFED in eax,dx .8086 10A0 FFFFFFE8FFFFFFB91B call hexdword 10A3 ii_5: 10A3 FFFFFFE8FFFFFFE21B call putsline 10A6 FFFFFFC3 ret 10A7 i_cmd endp if ?DPMI elseif RING0 and V86M endif if LCMDFILE 10A7 setpspdbg: ; set debugger's PSP if FMTEXE else 10A7 FFFFFF8CFFFFFFCB mov bx,cs endif 10A9 setpsp proc ; <--- entry to set debuggee's PSP 10A9 FFFFFFB450 mov ah,50h if ?DPMI endif if USESDA if ?DPMI endif 10AB 1E push ds 10AC 56 push si if ?DPMI else 10AD FFFFFFC536 0000o lds si,[pSDA] endif 10B1 FFFFFF895C10 mov [si+10h],bx 10B4 5E pop si 10B5 1F pop ds 10B6 FFFFFFC3 ret endif 10B7 setpsp endp endif ife (BOOTDBG or RING0) 10B7 getpsp proc 10B7 FFFFFFB451 mov ah,51h if ?DPMI endif if USESDA if ?DPMI endif 10B9 1E push ds 10BA 56 push si if ?DPMI else 10BB FFFFFFC536 0000o lds si,[pSDA] endif 10BF FFFFFF8B5C10 mov bx,[si+10h] 10C2 5E pop si 10C3 1F pop ds 10C4 FFFFFFC3 ret endif 10C5 getpsp endp endif ife RING0 10C5 doscall: if NOEXTENDER endif 10C5 doscall_rm: 10C5 FFFFFFCD21 int 21h 10C7 FFFFFFC3 ret endif if ?DPMI endif if ?DPMI endif if LCMDFILE 10C8 isdebuggeeloaded: 10C8 FFFFFFA1 0000o mov ax,[pspdbe] 10CB 3B06 0000o cmp ax,[pspdbg] 10CF FFFFFFC3 ret ;--- ensure a debuggee PSP exists; ;--- set SI:DI to CS:IP, preserve AX, BX, DX 10D0 ensuredebuggeeloaded proc 10D0 50 push ax 10D1 FFFFFFE8FFFFFFF4FFFFFFF call isdebuggeeloaded 10D4 750F jnz @F 10D6 53 push bx 10D7 52 push dx 10D8 FFFFFFE8FFFFFFFA1B call createdummytask 10DB FFFFFF8B36 002Ao mov si,[regs.rCS] 10DF FFFFFF8B3E 0030o mov di,[regs.rIP] 10E3 5A pop dx 10E4 5B pop bx 10E5 @@: 10E5 58 pop ax 10E6 FFFFFFC3 ret 10E7 ensuredebuggeeloaded endp endif if BOOTDBG or DPCMD endif if BOOTDBG elseife RING0 ;--- L command - read a program, or disk sectors, from disk. 10E7 l_cmd proc 10E7 FFFFFFE8FFFFFFE50E call parselw ;parse it, addr in bx:(e)dx if LCMDFILE 10EA 7421 jz ll1 ;Z if max 1 argument (read program) endif if NOEXTENDER endif 10EC 2EFFFFFF803E 0000o 02 cmp cs:[usepacket],2 10F2 720E jb ll0_1 10F4 FFFFFF8AFFFFFFD0 mov dl,al ;A=0,B=1,C=2,... 10F6 33FFFFFFF6 xor si,si ;read drive if VDD endif 10F8 FFFFFFFEFFFFFFC2 inc dl ;A=1,B=2,C=3,... 10FA FFFFFFB80573 mov ax,7305h ;DS:(E)BX -> packet 10FD FFFFFFF9 stc 10FE FFFFFFCD21 int 21h ;use int 21h here, not doscall! 1100 FFFFFFEB02 jmp ll0_2 if VDD endif 1102 ll0_1: 1102 FFFFFFCD25 int 25h 1104 ll0_2: 1104 FFFFFFB97265 mov cx,"er" ;CX:DX="read" 1107 FFFFFFBA6164 mov dx,"da" 110A FFFFFFE95A08 jmp disp_diskresult if LCMDFILE ;--- For .com or .exe files, we can only load at cs:100. Check that first. 110D ll1: 110D FFFFFFF606 0000o 06 test [fileext], EXT_COM or EXT_EXE 1112 740F jz loadfile ;if not .com or .exe file 1114 3B1E 002Ao cmp bx,[regs.rCS] 1118 7506 jne l_err ;if segment is wrong 111A FFFFFF81FFFFFFFA0001 cmp dx,100h 111E 7403 je loadfile ;if address is OK (or not given) 1120 l_err: 1120 FFFFFFE9FFFFFF810B jmp cmd_error ;can only load .com or .exe at cs:100 endif 1123 l_cmd endp endif if LCMDFILE ;--- load (any) file (if not .EXE or .COM, load at BX:DX) ;--- open file and get length. ;--- in protected-mode, this will work with a DOS extender only. 1123 loadfile proc 1123 FFFFFF8BFFFFFFF3 mov si,bx ;save destination address, segment 1125 FFFFFF8BFFFFFFFA mov di,dx ;and offset 1127 FFFFFFB8003D mov ax,3d00h ;open file for reading if FMTEXE endif 112A FFFFFFBAFFFFFF8000 mov dx,PSPS.DTA ;n cmd has stored file spec at DTA! 112D FFFFFFE8FFFFFF95FFFFFFF call doscall if FMTEXE endif 1130 7303 jnc @F ;if no error 1132 FFFFFFE91D09 jmp io_error ;print error message 1135 @@: 1135 FFFFFF93 xchg ax,bx ;mov bx,ax 1136 FFFFFFB80242 mov ax,4202h ;lseek EOF 1139 33FFFFFFC9 xor cx,cx 113B 33FFFFFFD2 xor dx,dx 113D FFFFFFCD21 int 21h ; Split off file types ; At this point: ; bx file handle ; dx:ax file length ; si:di load address (CS:100h for .EXE or .COM) 113F FFFFFFF606 0000o 06 test [fileext],EXT_COM or EXT_EXE 1144 757E jnz loadpgm ;if .com or .exe file if ?DPMI endif ;--- Load it ourselves. ;--- For non-.com/.exe files, we just do a read, and set BX:CX to the ;--- number of bytes read. 1146 FFFFFFE8FFFFFF87FFFFFFF call ensuredebuggeeloaded ;make sure a debuggee PSP exists 1149 FFFFFF8E06 0000o mov es, [pspdbe] ;--- Check the size against available space. 114D 56 push si 114E 53 push bx 114F 263B360200 cmp si,es:[PSPS.ALASAP] 1154 FFFFFF9C pushf 1155 FFFFFFF7FFFFFFDE neg si 1157 FFFFFF9D popf 1158 7305 jae ll6 ;if loading past end of mem, allow through ffff 115A 2603360200 add si,es:[PSPS.ALASAP] ;si = number of paragraphs available 115F ll6: 115F FFFFFFB90400 mov cx,4 1162 33FFFFFFDB xor bx,bx 1164 ll7: 1164 FFFFFFD1FFFFFFE6 shl si,1 1166 FFFFFFD1FFFFFFD3 rcl bx,1 1168 FFFFFFE2FFFFFFFA loop ll7 116A 2BFFFFFFF7 sub si,di 116C 1BFFFFFFD9 sbb bx,cx ;bx:si = number of words left 116E 7208 jb ll9 ;if already we're out of space 1170 3BFFFFFFDA cmp bx,dx 1172 7502 jne @F 1174 3BFFFFFFF0 cmp si,ax 1176 @@: 1176 730A jae ll10 ;if not out of space 1178 ll9: 1178 5B pop bx ;out of space 1179 5E pop si 117A FFFFFFBA 0000o mov dx,offset doserr8 ;not enough memory 117D FFFFFFE8FFFFFFFB08 call int21ah9 ;print string 1180 FFFFFFEB2E jmp cl_exit 1182 ll10: 1182 5B pop bx 1183 5E pop si ;--- Store length in registers ;--- seems a bit unwise to modify registers if a debuggee is running ;--- but MS DEBUG does it as well if 0 endif 1184 FFFFFF8916 0010o mov [regs.rBX],dx 1188 FFFFFFA3 0018o mov [regs.rCX],ax 118B noregmodify: ;--- Rewind the file 118B FFFFFFB80042 mov ax,4200h ;lseek 118E 33FFFFFFC9 xor cx,cx 1190 33FFFFFFD2 xor dx,dx 1192 FFFFFFCD21 int 21h 1194 FFFFFFBA0F00 mov dx,0fh 1197 23FFFFFFD7 and dx,di 1199 FFFFFFB104 mov cl,4 119B FFFFFFD3FFFFFFEF shr di,cl 119D 03FFFFFFF7 add si,di ;si:dx is the address to read to ;--- Begin loop over chunks to read 119F ll11: 119F FFFFFFB43F mov ah,3fh ;read from file into DS:(E)DX 11A1 FFFFFFB900FFFFFFFE mov cx,0fe00h ;read up to this many bytes 11A4 FFFFFF8EFFFFFFDE mov ds,si 11A6 FFFFFFCD21 int 21h 11A8 FFFFFF81FFFFFFC6FFFFFFE add si,0fe0h ;wont work in protected-mode! 11AC 3BFFFFFFC1 cmp ax,cx 11AE 74FFFFFFEF je ll11 ;if end of file reached ;--- Close the file and finish up. 11B0 cl_exit: 11B0 FFFFFFB43E mov ah,3eh ;close file 11B2 FFFFFFCD21 int 21h 11B4 16 push ss ;restore ds 11B5 1F pop ds 11B6 FFFFFFC3 ret ;done 11B7 loadfile endp endif if LCMDFILE 11B7 setespefl proc sizeprf ;pushfd 000011B7 = 11B7 1 curreip = $ 0000 1 _IDATA segment 0000 FFFFFFB711 1 dw curreip 0002 1 _IDATA ends 11B7 66 1 db 66h 11B8 FFFFFF9C pushf sizeprf ;pop dword ptr [regs.rFL] 000011B9 = 11B9 1 curreip = $ 0002 1 _IDATA segment 0002 FFFFFFB911 1 dw curreip 0004 1 _IDATA ends 11B9 66 1 db 66h 11BA FFFFFF8F06 0034o pop [regs.rFL] sizeprf ;mov dword ptr [regs.rSP],esp 000011BE = 11BE 1 curreip = $ 0004 1 _IDATA segment 0004 FFFFFFBE11 1 dw curreip 0006 1 _IDATA ends 11BE 66 1 db 66h 11BF FFFFFF8926 002Co mov [regs.rSP],sp ;low 16bit of ESP will be overwritten 11C3 FFFFFFC3 ret 11C4 setespefl endp 11C4 loadpgm proc ;--- file is .EXE or .COM ;--- bx=file handle, dx:ax=file size 11C4 50 push ax 11C5 FFFFFFB43E mov ah,3eh ;close file 11C7 FFFFFFCD21 int 21h 11C9 5B pop bx ;dx:bx is the file length if 1 ;--- adjust .exe size by 200h (size of header? who knows ) 11CA FFFFFFF606 0000o 04 test [fileext],EXT_EXE 11CF 7407 jz @F ;if not .exe 11D1 FFFFFF81FFFFFFEB0002 sub bx,200h 11D5 FFFFFF83FFFFFFDA00 sbb dx,0 11D8 @@: endif 11D8 53 push bx 11D9 52 push dx ;--- cancel current process (unless there is none) ;--- this will also put cpu back to real-mode!!! 11DA FFFFFFE8FFFFFFEBFFFFFFF call isdebuggeeloaded 11DD 7403 jz @F 11DF FFFFFFE8FFFFFFE90A call freemem 11E2 @@: ;--- Clear registers 11E2 FFFFFFBF 0000o mov di, offset regs 11E5 FFFFFFB91C00 mov cx, sizeof regs / 2 11E8 33FFFFFFC0 xor ax, ax 11EA FFFFFFF3FFFFFFAB rep stosw 11EC FFFFFF8F06 0010o pop word ptr [regs.rBX] 11F0 FFFFFF8F06 0018o pop word ptr [regs.rCX] if FMTEXE endif ;--- Fix up interrupt vectors in PSP if INT2324 11F4 FFFFFFBE0E00 mov si,PSPS.CCIV ;address of original INT 23 and 24 (in PSP) 11F7 FFFFFFBF 0000o mov di,offset run2324 11FA FFFFFFA5 movsw 11FB FFFFFFA5 movsw 11FC FFFFFFA5 movsw 11FD FFFFFFA5 movsw endif ;--- Actual program loading. Use the DOS interrupt. 11FE FFFFFFBAFFFFFF8000 mov dx,PSPS.DTA ;file to load in DS:SI 1201 FFFFFFBB 0000o mov bx,offset execblk ;parameter block in ES:BX 1204 FFFFFFB8014B mov ax,4b01h ;load program, don't execute 1207 FFFFFFCD21 int 21h if FMTEXE endif 1209 7303 jnc @F 120B FFFFFFE94408 jmp io_error ;if error 120E @@: 120E FFFFFFE8FFFFFFA6FFFFFFF call setespefl ;--- we calculate the stack space used by previous dos call (ax=4b01) ;--- and use the result (in spadjust) to adjust the field PSP:[2Eh] ;--- in the debugger's PSP whenever the debuggee is to be executed ("run"). 1211 FFFFFF8BFFFFFFC4 mov ax,sp if FMTEXE else 1213 2B062E00 sub ax,word ptr ds:[PSPS.SPSAV] endif 1217 3DFFFFFF8000 cmp ax,80h 121A 7203 jb @F ;if in range 121C FFFFFFB8FFFFFF8000 mov ax,80h 121F @@: 121F FFFFFFA3 0000o mov [spadjust],ax ;--- use the values for CS:IP SS:SP returned by the loader 1222 FFFFFFC436 000Eo les si,dword ptr [execblk.sssp] 1226 26FFFFFFAD lodsw es:[si] ;recover ax 1228 FFFFFFA3 001Co mov [regs.rAX],ax 122B FFFFFF8936 002Co mov [regs.rSP],si 122F FFFFFF8C06 0028o mov [regs.rSS],es 1233 FFFFFFC436 0012o les si,dword ptr [execblk.csip] 1237 FFFFFF8936 0030o mov [regs.rIP],si 123B FFFFFF8C06 002Ao mov [regs.rCS],es 123F FFFFFFC606 0000o 00 mov [bInit],0 1244 16 push ss 1245 07 pop es 1246 FFFFFFF8 clc ;--- get the debuggee's PSP and store it in debuggee's DS,ES 1247 FFFFFFE86DFFFFFFFE call getpsp 124A FFFFFF93 xchg ax,bx ;mov ax,bx 124B FFFFFFA3 0000o mov [pspdbe],ax 124E FFFFFFBF 0020o mov di,offset regs.rDS 1251 FFFFFFAB stosw 1252 FFFFFFAB stosw ;regs.rES 1253 FFFFFFE851FFFFFFFE call setpspdbg ;switch back to debugger's PSP ;--- Finish up. Set termination address. 1256 FFFFFFB82225 mov ax,2522h ;set interrupt vector 22 1259 FFFFFFBA 0000o mov dx,offset intr22 125C FFFFFFCD21 int 21h 125E FFFFFF8E06 0000o mov es,[pspdbe] 1262 26FFFFFF89160A00 mov word ptr es:[PSPS.TPIV+0],dx 1267 26FFFFFF8C0E0C00 mov word ptr es:[PSPS.TPIV+2],cs 126C 16 push ss 126D 07 pop es ;--- Set up initial addresses for a/d/u commands. ;--- out: ax=regs.rCS 126E setup_adu:: 126E FFFFFFBF 0000o mov di,offset a_addr 1271 FFFFFFBE 0030o mov si,offset regs.rIP 1274 FFFFFFA1 002Ao mov ax,[regs.rCS] 1277 57 push di 1278 FFFFFFA5 movsw ; write a_addr eip 1279 FFFFFFA5 movsw 127A FFFFFFAB stosw ; write a_addr cs 127B 5E pop si 127C FFFFFFB90600 mov cx, 2*3 127F FFFFFFF3FFFFFFA5 rep movsw ; copy a_addr to d_addr and u_addr 1281 FFFFFFC3 ret 1282 loadpgm endp endif ;--- 'm'achine command: set machine type. 1282 mach proc ; dec si ; call skipwhite ; cmp al,CR ; je mach_query ;if just an 'm' (query machine type) 1282 FFFFFF8A44FFFFFFFF mov al,[si-1] 1285 FFFFFFE82A0F call getbyte 1288 FFFFFF8AFFFFFFC2 mov al,dl 128A 3C06 cmp al,6 128C 7710 ja errorj3 ;dl must be 0-6 128E FFFFFFA2 0000o mov [machine],al ;set machine type 1291 FFFFFFA2 0000o mov [mach_87],al ;coprocessor type, too 1294 3C03 cmp al,3 1296 7305 jnc @F 1298 FFFFFF8026 0000o FFFFFF and [rmode],not RM_386REGS ;reset 386 register display 129D @@: 129D FFFFFFC3 ret 129E mach endp 129E errorj3: 129E FFFFFFE9030A jmp cmd_error ;--- 'mc' command: set coprocessor. ;--- optional arguments: ;--- N: no coprocessor ;--- 2: 80287 with 80386 12A1 mc_cmd proc 12A1 FFFFFFE85D0F call skipwhite ;get next nonblank character 12A4 FFFFFF8A26 0000o mov ah,[machine] 12A8 3C0D cmp al,CR 12AA 741F jz set_mpc 12AC 0C20 or al,TOLOWER 12AE 50 push ax 12AF FFFFFFAC lodsb 12B0 FFFFFFE8210F call chkeol 12B3 58 pop ax 12B4 3C6E cmp al,'n' 12B6 7506 jne @F ;if something else 12B8 FFFFFFC606 0000o 00 mov [has_87],0 ;clear coprocessor flag 12BD FFFFFFC3 ret ;done 12BE @@: 12BE 3C32 cmp al,'2' 12C0 75FFFFFFDC jne errorj3 ;if not '2' 12C2 FFFFFF803E 0000o 03 cmp [machine],3 12C7 75FFFFFFD5 jnz errorj3 ;if not a 386 12C9 FFFFFFB402 mov ah,2 12CB set_mpc: 12CB FFFFFFC606 0000o 01 mov [has_87],1 ;set coprocessor flag 12D0 FFFFFF8826 0000o mov [mach_87],ah 12D4 FFFFFFC3 ret 12D5 mc_cmd endp ;--- M command - move/copy memory. ;--- 1. check if there's no argument at all: mach_query, display cpu ;--- 2. check for MC cmd: mc_cmd, set/reset coprocessor ;--- 3. check if there's just 1 argument: mach, set cpu 12D5 m_cmd proc 12D5 3C0D cmp al,CR 12D7 7456 jz mach_query 12D9 FFFFFF8A64FFFFFFFE mov ah,[si-2] 12DC 0D2020 or ax,TOLOWER or (TOLOWER shl 8) 12DF 3D636D cmp ax,'mc' ; mc cmd? 12E2 74FFFFFFBD jz mc_cmd if ?PM endif 12E4 56 push si 12E5 FFFFFFE8FFFFFF940E call getdword 12E8 3C0D cmp al,CR 12EA 7403 jz @F 12EC FFFFFFE8120F call skipwhite 12EF @@: 12EF 5E pop si 12F0 3C0D cmp al,CR 12F2 74FFFFFF8E je mach ; jump if 1 argument only 12F4 ismove: 12F4 4E dec si 12F5 FFFFFFAC lodsb 12F6 FFFFFFE8FFFFFFAB0C call parsecm ;parse arguments: src=DS:(E)SI, dst=ES:(E)DI, length-1=(E)CX ;--- note: DS unknown here 12F9 51 push cx if ?PM endif 12FA FFFFFFB104 mov cl,4 12FC FFFFFFD3FFFFFFEA shr dx,cl ; BX:DX=dst seg:ofs 12FE 03FFFFFFD3 add dx,bx ;upper 16 bits of destination 1300 FFFFFF8BFFFFFFC6 mov ax,si 1302 FFFFFFD3FFFFFFE8 shr ax,cl 1304 FFFFFF8CFFFFFFDB mov bx,ds 1306 03FFFFFFC3 add ax,bx 1308 3BFFFFFFC2 cmp ax,dx 130A 750B jne m3 ;if we know which is larger 130C FFFFFF8BFFFFFFC6 mov ax,si 130E 240F and al,0fh 1310 FFFFFF8BFFFFFFDF mov bx,di 1312 FFFFFF80FFFFFFE30F and bl,0fh 1315 3AFFFFFFC3 cmp al,bl 1317 m3: 1317 59 pop cx 1318 FFFFFF9F lahf if INT2324 1319 1E push ds 131A 16 push ss ;ds = dgroup 131B 1F pop ds 131C FFFFFFE8710B call dohack ;set debuggee's int 23/24 131F 1F pop ds endif if ?PM endif 1320 FFFFFF9E sahf 1321 7305 jae @F ;if forward copy is OK 1323 03FFFFFFF1 add si,cx 1325 03FFFFFFF9 add di,cx 1327 FFFFFFFD std 1328 @@: 1328 FFFFFFF3FFFFFFA4 rep movsb ;do the move 132A FFFFFFA4 movsb ;one more byte 132B FFFFFFFC cld ;restore flag 132C FFFFFFE934FFFFFFFB jmp ee0a ;restore ds and es and undo the int2324 pointer hack 132F m_cmd endp ;--- M without argument - display machine type. 132F mach_query proc 132F FFFFFFBE 0000o mov si,offset msg8088 1332 FFFFFFA0 0000o mov al,[machine] 1335 3C00 cmp al,0 1337 7407 je @F ;if 8088 1339 FFFFFFBE 0000o mov si,offset msgx86 133C 0430 add al,'0' 133E FFFFFF8804 mov [si],al 1340 @@: 1340 FFFFFFE80F19 call copystring ;si->di 1343 FFFFFFBE 0000o mov si,offset no_copr 1346 FFFFFF803E 0000o 00 cmp [has_87],0 134B 740F je @F ;if no coprocessor 134D FFFFFFBE 0000o mov si,offset has_copr 1350 FFFFFFA0 0000o mov al,[mach_87] 1353 3A06 0000o cmp al,[machine] 1357 7403 je @F ;if has coprocessor same as processor 1359 FFFFFFBE 0000o mov si,offset has_287 135C @@: 135C FFFFFFE8FFFFFFF318 call copystring ;si->di 135F FFFFFFE92619 jmp putsline ;call puts and quit 1362 mach_query endp if LCMDFILE or WCMDFILE ;--- N command - change the name of the program being debugged. ;--- modifies the debugger's PSP; actually, both the program name ;--- and the tail are stored in the DTA. ;--- Actually, the current N cmd is NOT compatible with MS Debug. MS Debug's ;--- N cmd modifies the debuggee's PSP. So it's an easy way to modify ;--- the program's arguments. OTOH, it removes the file_spec only on entry. ;--- possible fix: copy debug's PSP:5C-7B and DTA:xx-7F (xx=strlen(file_spec) + 1) ;--- to the debuggee PSP as soon as it has been created. 14BA CONST segment 14BA exts label byte 14BA 2E48455808 db ".HEX",EXT_HEX 14BF 2E45584504 db ".EXE",EXT_EXE 14C4 2E434F4D02 db ".COM",EXT_COM 14C9 extsend label near 14C9 CONST ends 1362 n_cmd proc 1362 FFFFFFBFFFFFFF8000 mov di,PSPS.DTA ;destination address if FMTEXE endif ;--- Copy and canonicalize file name. ;--- v2.50: check max. length to ensure that debug's _TEXT segment isn't modified. ;--- out: [fileext]=0 if no file spec at all ;--- [execblk.cmdtail] -> behind file spec 1365 FFFFFFB97F00 mov cx, sizeof PSPS.DTA - 1 1368 nextc: 1368 3C0D cmp al,CR 136A 7419 je nn3 ;if end of line 136C FFFFFFE8FFFFFF9C0E call ifsep ;check for separators space, TAB, comma, ;, = 136F 7414 je nn3 ;if end of file name 1371 3A06 0000o cmp al,[swch1] 1375 740E je nn3 ;if '/' (and '/' is the switch character) 1377 3C61 cmp al,'a' 1379 7206 jb @F ;if not lower case 137B 3C7A cmp al,'z' 137D 7702 ja @F ;ditto 137F 24FFFFFFDF and al,TOUPPER ;convert to upper case 1381 @@: 1381 FFFFFFAA stosb 1382 FFFFFFAC lodsb 1383 FFFFFFE2FFFFFFE3 loop nextc ;back for more 1385 nn3: 1385 FFFFFFB000 mov al,0 ;null terminate the file name string 1387 FFFFFFAA stosb 1388 FFFFFF893E 0002o mov word ptr [execblk.cmdtail],di ;save start of command tail ;--- file name stored as asciiz at psp:80h; ;--- now set [fileext]; ;--- AL=0 138C 51 push cx 138D 57 push di 138E 56 push si 138F FFFFFF81FFFFFFFFFFFFFF8 cmp di,PSPS.DTA+1 1393 7424 je nn3d ;if no file name at all 1395 FFFFFF81FFFFFFFFFFFFFF8 cmp di,PSPS.DTA+5 1399 721C jb nn3c ;if no extension (name too short) 139B FFFFFF8D55FFFFFFFB lea dx,[di-5] 139E FFFFFFBB 0000o mov bx,offset exts ;check for .EXE, .COM and .HEX 13A1 @@: 13A1 FFFFFF8BFFFFFFF3 mov si,bx 13A3 FFFFFF8BFFFFFFFA mov di,dx 13A5 FFFFFF83FFFFFFC305 add bx,5 13A8 FFFFFFB90400 mov cx,4 13AB FFFFFFF3FFFFFFA6 repz cmpsb 13AD FFFFFF8A04 mov al,[si] 13AF 7408 jz nn3d 13B1 FFFFFF81FFFFFFFB 0000o cmp bx, extsend 13B5 72FFFFFFEA jb @B 13B7 nn3c: 13B7 FFFFFFB001 mov al,EXT_OTHER 13B9 nn3d: 13B9 FFFFFFA2 0000o mov [fileext],al 13BC 5E pop si ;--- Finish the N command ;--- 1. copy what's left behind the file spec to line_out if FMTEXE endif 13BD FFFFFFBF 0000o mov di,offset line_out 13C0 57 push di 13C1 4E dec si 13C2 @@: 13C2 FFFFFFAC lodsb ;copy the remainder to line_out 13C3 FFFFFFAA stosb 13C4 3C0D cmp al,CR 13C6 75FFFFFFFA jne @B 13C8 5E pop si if FMTEXE endif ;--- Set up FCBs. src is line_out 13C9 FFFFFFBF5C00 mov di,PSPS.FCB1 13CC FFFFFFE82300 call DoFCB ;first FCB: parse name DS:SI into FCB es:di 13CF FFFFFFA2 001Co mov byte ptr [regs.rAX+0],al 13D2 FFFFFFBF6C00 mov di,PSPS.FCB2 13D5 FFFFFFE81A00 call DoFCB ;second FCB 13D8 FFFFFFA2 001Do mov byte ptr[regs.rAX+1],al ;--- Copy command tail from line_out to ;--- PSP, just behind zero-terminated file spec. 13DB FFFFFFBE 0000o mov si,offset line_out 13DE 5F pop di 13DF 59 pop cx 13E0 FFFFFFE30F jcxz notail ; if no more space left behind file spec 13E2 57 push di 13E3 47 inc di ; skip byte used for byte cnt 13E4 @@: 13E4 FFFFFFAC lodsb 13E5 FFFFFFAA stosb 13E6 3C0D cmp al,CR 13E8 FFFFFFE0FFFFFFFA loopne @B ;if not end of string 13EA 58 pop ax ;recover old DI 13EB 4F dec di 13EC 4F dec di 13ED FFFFFF97 xchg ax,di 13EE 2BFFFFFFC7 sub ax,di ;compute length of tail 13F0 FFFFFFAA stosb 13F1 notail: 13F1 FFFFFFC3 ret 13F2 n_cmd endp ;--- Subroutine to process an FCB. ;--- di->FCB ;--- si->file name 13F2 DoFCB proc 13F2 @@: 13F2 FFFFFFAC lodsb 13F3 3C0D cmp al,CR 13F5 740B je nn7 ;if end 13F7 FFFFFFE8110E call ifsep 13FA 74FFFFFFF6 je @B ;if separator 13FC 3A06 0000o cmp al,[swchar] 1400 7420 je nn10 ;if switch character 1402 nn7: 1402 4E dec si 1403 FFFFFFB80129 mov ax,2901h;parse filename into FCB 1406 FFFFFFE8FFFFFFBCFFFFFFF call doscall 1409 50 push ax ;save AL 140A @@: 140A FFFFFFAC lodsb ;skip till separator 140B 3C0D cmp al,CR 140D 740B je @F ;if end 140F FFFFFFE8FFFFFFF90D call ifsep 1412 7406 je @F ;if separator character 1414 3A06 0000o cmp al,[swch1] 1418 75FFFFFFF0 jne @B ;if not swchar (sort of) 141A @@: 141A 4E dec si 141B 58 pop ax ;recover AL 141C 3C01 cmp al,1 141E 7501 jne @F ;if not 1 1420 48 dec ax 1421 @@: 1421 FFFFFFC3 ret ;--- Handle a switch (differently). 1422 nn10: 1422 FFFFFFAC lodsb 1423 3C0D cmp al,CR 1425 74FFFFFFDB je nn7 ;if end of string 1427 FFFFFFE8FFFFFFE10D call ifsep 142A 74FFFFFFF6 je nn10 ;if another separator 142C FFFFFFB000 mov al,0 142E FFFFFFAA stosb 142F 4E dec si 1430 FFFFFFAC lodsb 1431 3C61 cmp al,'a' 1433 7206 jb @F ;if not a lower case letter 1435 3C7A cmp al,'z' 1437 7702 ja @F 1439 24FFFFFFDF and al,TOUPPER ;convert to upper case 143B @@: 143B FFFFFFAA stosb 143C FFFFFFB82020 mov ax,' ' 143F FFFFFFAB stosw 1440 FFFFFFAB stosw 1441 FFFFFFAB stosw 1442 FFFFFFAB stosw 1443 FFFFFFAB stosw 1444 33FFFFFFC0 xor ax,ax 1446 FFFFFFAB stosw 1447 FFFFFFAB stosw 1448 FFFFFFAB stosw 1449 FFFFFFAB stosw 144A FFFFFFC3 ret ;return with AL=0 144B DoFCB endp endif ;--- O command - output to I/O port. 144B o_cmd proc 144B FFFFFFB300 mov bl,0 144D FFFFFF8AFFFFFFE0 mov ah,al 144F FFFFFF80FFFFFFE4FFFFFFD and ah,TOUPPER 1452 FFFFFF80FFFFFFFC57 cmp ah,'W' 1455 7418 je oo_1 1457 FFFFFF803E 0000o 03 cmp [machine],3 145C 7215 jb oo_2 145E FFFFFF80FFFFFFFC44 cmp ah,'D' 1461 7510 jne oo_2 if 1 1463 FFFFFF8A64FFFFFFFE mov ah,[si-2] ;distiguish 'od' and 'o d' 1466 FFFFFF80FFFFFFE4FFFFFFD and ah,TOUPPER 1469 FFFFFF80FFFFFFFC4F cmp ah,'O' 146C 7505 jnz oo_2 endif 146E 43 inc bx 146F oo_1: 146F 43 inc bx 1470 FFFFFFE8FFFFFF8E0D call skipwhite 1473 oo_2: 1473 FFFFFFE8320D call getword 1476 52 push dx 1477 FFFFFFE8660D call skipcomm0 147A FFFFFF80FFFFFFFB01 cmp bl,1 147D 740F jz oo_4 147F FFFFFF80FFFFFFFB02 cmp bl,2 1482 7414 jz oo_5 1484 FFFFFFE82B0D call getbyte ;dl=byte 1487 FFFFFFE84A0D call chkeol ;expect end of line here 148A FFFFFF92 xchg ax,dx ;al = byte 148B 5A pop dx ;recover port number 148C FFFFFFEE out dx,al 148D FFFFFFC3 ret 148E oo_4: 148E FFFFFFE8170D call getword ;dx=word 1491 FFFFFFE8400D call chkeol ;expect end of line here 1494 FFFFFF92 xchg ax,dx ;ax = word 1495 5A pop dx 1496 FFFFFFEF out dx,ax 1497 FFFFFFC3 ret 1498 oo_5: .386 1498 FFFFFFE8FFFFFFE10C call getdword ;bx:dx=dword 149B FFFFFFE8360D call chkeol ;expect end of line here 149E 53 push bx 149F 52 push dx 14A0 6658 pop eax 14A2 5A pop dx 14A3 66FFFFFFEF out dx,eax 14A5 FFFFFFC3 ret .8086 14A6 o_cmd endp if ?PM endif ; ?PM ;--- read [EIP+x] value ;--- in: CX=x ;--- [regs.rCS]=CS ;--- [regh_(e)ip]=EIP ;--- out: AL=[CS:(E)IP] ;--- [E]BX=[E]IP+x ;--- called by T and G 14A6 getcseipbyte proc 14A6 06 push es @movs es, [regs.rCS] 14A7 FFFFFF8E06 002Ao 1 mov es, [regs.rCS] sizeprfX ;mov ebx,[regs.rIP] 14AB FFFFFF8B1E 0030o mov bx,[regs.rIP] if ?PM endif 14AF 03FFFFFFD9 add bx,cx 14B1 26FFFFFF8A07 mov al,es:[bx] 14B4 07 pop es 14B5 FFFFFFC3 ret 14B6 getcseipbyte endp ;--- set [EIP+x] value ;--- in: CX=x ;--- AL=byte to write ;--- [regs.rCS]=CS ;--- [regs.rIP]=EIP ;--- modifies [E]BX 14B6 setcseipbyte proc 14B6 06 push es @movs bx,[regs.rCS] 14B7 FFFFFF8B1E 002Ao 1 mov bx, [regs.rCS] if ?PM endif 14BB FFFFFF8EFFFFFFC3 mov es, bx sizeprfX 14BD FFFFFF8B1E 0030o mov bx, [regs.rIP] if ?PM endif 14C1 03FFFFFFD9 add bx,cx 14C3 26FFFFFF8807 mov es:[bx],al 14C6 07 pop es 14C7 FFFFFFC3 ret 14C8 setcseipbyte endp ;--- write a byte (AL) at BX:E/DX ;--- OUT: AH=old value at that location ;--- C if byte couldn't be written ;--- used by A, E, G (breakpoints) 14C8 writemem proc if ?PM endif 14C8 1E push ds 14C9 FFFFFF8EFFFFFFDB mov ds,bx 14CB 53 push bx 14CC FFFFFF8BFFFFFFDA mov bx,dx 14CE FFFFFF8A27 mov ah,[bx] 14D0 FFFFFF8807 mov [bx],al 14D2 3A07 cmp al,[bx] 14D4 5B pop bx 14D5 done: 14D5 1F pop ds 14D6 7501 jnz err 14D8 FFFFFFC3 ret 14D9 err: 14D9 FFFFFFF9 stc 14DA FFFFFFC3 ret 14DB writemem endp ;--- read byte from memory ;--- in: BX:(E)DX=address ;--- out: AL=byte ;--- used by e_cmd prompt mode ;--- BX may be modified 14DB readmem proc if ?PM endif 14DB 1E push ds 14DC FFFFFF8EFFFFFFDB mov ds,bx if ?PM endif 14DE FFFFFF8BFFFFFFDA mov bx, dx 14E0 FFFFFF8A07 mov al,[bx] 14E2 1F pop ds 14E3 FFFFFFC3 ret 14E4 readmem endp ;--- P command - proceed (i.e., skip over call/int/loop/string instruction). 14E4 p_cmd proc 14E4 FFFFFFE85A0B call parse_pt ;process arguments ;--- Do it times. First check the type of instruction. 14E7 instrloop: ; <--- next instruction 14E7 51 push cx ; save cx 14E8 FFFFFFBA0F00 mov dx,15 ; DL = number of bytes to go; DH = prefix flags. if ?PM endif sizeprfX ; mov esi,[regs.rIP] 14EB FFFFFF8B36 0030o mov si,[regs.rIP] 14EF nextprf: ; <- get next prefix byte 14EF FFFFFFE8FFFFFF9600 call getnextb ; AL=[cs:(e)ip], eip++ 14F2 FFFFFFBF 0000o mov di,offset ppbytes 14F5 FFFFFFB91F00 mov cx,PPLEN 14F8 FFFFFFF2FFFFFFAE repne scasb 14FA 7520 jne pp5 ; if not one of these 14FC FFFFFF8A451E mov al,[di+PPLEN-1] ; get corresponding byte in ppinfo 14FF FFFFFFA8FFFFFF80 test al,PP_PREFIX 1501 7408 jz @F ; if not a prefix 1503 32FFFFFFF0 xor dh,al ; update the flags 1505 FFFFFFFEFFFFFFCA dec dl 1507 75FFFFFFE6 jnz nextprf ; if not out of bytes 1509 FFFFFFEB5F jmp dotrace ; more than 15 prefixes will cause a GPF 150B @@: 150B FFFFFFA840 test al,40h 150D 7407 jz @F ; if no size dependency 150F 243F and al,3fh 1511 FFFFFF80FFFFFFE602 and dh,PP_OPSIZ ; for CALL, operand size 2->4, 4->6 1514 02FFFFFFC6 add al,dh 1516 @@: 1516 FFFFFF98 cbw 1517 FFFFFFE86B00 call addeip ; add ax to instruction pointer in (E)SI 151A FFFFFFEB49 jmp proceed0; we have a skippable instruction here 151C pp5: 151C 3CFFFFFFFF cmp al,0ffh ; indirect call? if 0 else 151E 754A jnz dotrace endif 1520 FFFFFFE86500 call getnextb ; get MOD REG R/M byte 1523 24FFFFFFF7 and al,not 8 ; clear lowest bit of REG field (/3 --> /2) 1525 3410 xor al,10h ; /2 --> /0 1527 FFFFFFA838 test al,38h if 0 else 1529 753F jnz dotrace ; if not ff/2 or ff/3 endif 152B 3CFFFFFFC0 cmp al,0c0h 152D 7336 jae proceed0; if just a register 152F FFFFFFF6FFFFFFC601 test dh,PP_ADRSIZ 1532 7510 jnz pp6 ; if 32 bit addressing 1534 3C06 cmp al,6 1536 7427 je proceed2 ; if just plain disp16 1538 3C40 cmp al,40h 153A 7229 jb proceed0 ; if indirect register 153C 3CFFFFFF80 cmp al,80h 153E 7222 jb proceed1 ; if disp8[reg(s)] 1540 FFFFFFEB1D jmp proceed2; it's disp16[reg(s)] 1542 back2top: 1542 FFFFFFEBFFFFFFA3 jmp instrloop; back for more 1544 pp6: 1544 3C05 cmp al,5 1546 7411 je proceed4 ; if just plain disp32 1548 3404 xor al,4 154A FFFFFFA807 test al,7 154C 7503 jnz @F ; if no SIB byte 154E FFFFFFE83200 call inceip 1551 @@: 1551 3C40 cmp al,40h 1553 7210 jb proceed0 ; if indirect register 1555 3CFFFFFF80 cmp al,80h 1557 7209 jb proceed1 ; if disp8[reg(s)] ; otherwise, it's disp32[reg(s)] 1559 proceed4: 1559 FFFFFFE82700 call inceip 155C FFFFFFE82400 call inceip 155F proceed2: 155F FFFFFFE82100 call inceip 1562 proceed1: 1562 FFFFFFE81E00 call inceip 1565 proceed0: 1565 FFFFFFE82800 call doproceed2 1568 FFFFFFEB12 jmp pp13 ;--- Ordinary instruction. Just do a trace. 156A dotrace: 156A FFFFFF800E 0035o 01 or byte ptr [regs.rFL+1],1 ;set single-step mode 156F FFFFFFE8FFFFFF9707 call run 1572 FFFFFF803E 0000o 0F cmp [run_int], EXC01MSG 1577 7507 jne pp15 ; stop if some other interrupt 1579 FFFFFFE85615 call dumpregs 157C pp13: ;<--- Common part to finish up. 157C 59 pop cx 157D FFFFFFE2FFFFFFC3 loop back2top ;back for more 157F FFFFFFC3 ret 1580 pp15: 1580 FFFFFFE93803 jmp ue_int ;print message about unexpected interrupt and quit 1583 inceip:: if ?PM endif 1583 46 inc si 1584 FFFFFFC3 retn 1585 addeip: if ?PM endif 1585 03FFFFFFF0 add si,ax 1587 FFFFFFC3 retn ;--- getnextb - Get next byte in instruction stream. ;--- [e]si = eip 1588 getnextb: 1588 1E push ds @movs ds,[regs.rCS] 1589 FFFFFF8E1E 002Ao 1 mov ds, [regs.rCS] if ?PM endif 158D FFFFFFAC lodsb 158E 1F pop ds 158F FFFFFFC3 retn 1590 doproceed2: @movs bx, [regs.rCS] 1590 FFFFFF8B1E 002Ao 1 mov bx, [regs.rCS] ;--- Special instruction. Set a breakpoint and run until we hit it. ;--- BX:(E)SI == address where a breakpoint is to be set. 1594 doproceed1:: ;<--- used by T if an INT is to be processed 1594 FFFFFFBF 0000o mov di,offset line_out ;use the same breakpoint structure as in G if USEHWBP else 1597 FFFFFFB80100 mov ax, 1 ;bp cnt 159A FFFFFFAB stosw sizeprfX ;xchg eax,esi 159B FFFFFF96 xchg ax,si sizeprfX ;stosd 159C FFFFFFAB stosw 159D FFFFFF93 xchg ax, bx 159E FFFFFFAB stosw endif 159F FFFFFFBD 0000o mov bp, offset bp_writeerr ; abort if bp couldn't be written 15A2 FFFFFFE849FFFFFFFA call gg_1 ; use g_cmd to write bp, run program, reset bp 15A5 FFFFFFC3 retn 15A6 bp_writeerr:: 15A6 FFFFFFBA 0000o mov dx, offset cantwritebp 15A9 FFFFFFE8FFFFFFCF04 call int21ah9 15AC FFFFFFE95BFFFFFFEB jmp cmdloop 15AF p_cmd endp if ?DPMI endif if QCMD ;--- Q command - quit. 15AF q_cmd proc if RING0 else if ?DPMI endif ;--- cancel child's process if any ;--- this will drop to real-mode if debuggee is in pmode if ?DPMI endif 15AF FFFFFFE81907 call freemem if VDD endif if VXCHG endif if ALTVID endif ;--- Restore interrupt vectors. 15B2 FFFFFFBF 0000o mov di,offset intsave 15B5 FFFFFFBE 0000o mov si,offset inttab if ?DPMI else 15B8 FFFFFFB90400 mov cx,NUMINTS endif 15BB nextint: 15BB FFFFFFAC lodsb 15BC 1E push ds ; add si,2 ; skip rest of INTITEM (now done below) 15BD FFFFFFC515 lds dx, [di] 15BF FFFFFF83FFFFFFC704 add di,4 15C2 3C22 cmp al,22h 15C4 740A jz norestore 15C6 FFFFFF8CFFFFFFDB mov bx, ds 15C8 23FFFFFFDB and bx, bx 15CA 7404 jz norestore 15CC FFFFFFB425 mov ah,25h 15CE FFFFFFCD21 int 21h 15D0 norestore: 15D0 1F pop ds 15D1 FFFFFFAD lodsw ; skip rest of INTITEM (16-bit offset) 15D2 FFFFFFE2FFFFFFE7 loop nextint if INT22 ;--- Restore termination address. if FMTEXE endif 15D4 FFFFFFBE 0000o mov si,offset psp22 ;restore termination address 15D7 FFFFFFBF0A00 mov di,PSPS.TPIV 15DA FFFFFFA5 movsw 15DB FFFFFFA5 movsw 15DC FFFFFFBF1600 mov di,PSPS.PARENT ;restore PSP of parent 15DF FFFFFFA5 movsw endif ;--- Really done. ;--- int 20h sets error code to 0. ;--- might be better to use int 21h, ax=4Cxxh ;--- and load the error code returned by the debuggee ;--- into AL. if FMTEXE else 15E0 FFFFFFCD20 int 20h endif 15E2 FFFFFFE925FFFFFFEB jmp cmdloop ;returned? then something is terribly wrong. endif 15E5 q_cmd endp endif if MMXSUPP endif ;--- RX command: toggle mode of R command (16 - 32 bit registers) 15E5 rx_cmd proc 15E5 FFFFFFE8190C call skipwhite 15E8 3C0D cmp al,CR 15EA 7403 je @F 15EC FFFFFFE93201 jmp rr_err 15EF @@: 15EF FFFFFF803E 0000o 03 cmp [machine],3 15F4 7217 jb rx_exit ; mov di,offset line_out 15F6 FFFFFFBE 0000o mov si,offset regs386 15F9 FFFFFFE85616 call copystring ;si->di 15FC FFFFFF8036 0000o 01 xor [rmode],RM_386REGS 1601 FFFFFFB86E20 mov ax," n" ;"on" 1604 7503 jnz @F 1606 FFFFFFB86666 mov ax,"ff" ;"off" 1609 @@: 1609 FFFFFFAB stosw ; mov al,0 ; v2.0: removed ; stosb 160A FFFFFFE87B16 call putsline 160D rx_exit: 160D FFFFFFC3 ret 160E rx_cmd endp ;--- RN command: display FPU status 160E rn_cmd proc 160E FFFFFFE8FFFFFFF00B call skipwhite 1611 3C0D cmp al,CR 1613 7403 je @F 1615 FFFFFFE90901 jmp rr_err 1618 @@: 1618 FFFFFF803E 0000o 00 cmp [has_87],0 161D 7403 jz @F 161F FFFFFFE82D15 call dumpregsFPU 1622 @@: 1622 FFFFFFC3 ret 1623 rn_cmd endp ;--- R command - manipulate registers. 1623 r_cmd proc 1623 3C0D cmp al,CR 1625 7503 jne @F ;if there's an argument 1627 FFFFFFE9FFFFFFA814 jmp dumpregs 162A @@: 162A FFFFFF80FFFFFFFC72 cmp ah,'r' 162D 750A jnz @F 162F 24FFFFFFDF and al,TOUPPER 1631 3C58 cmp al,'X' 1633 74FFFFFFB0 je rx_cmd if MMXSUPP endif 1635 3C4E cmp al,'N' 1637 74FFFFFFD5 je rn_cmd 1639 @@: ;--- an additional register parameter was given 1639 4E dec si 163A FFFFFFAD lodsw 163B 25FFFFFFDFFFFFFFDF and ax,TOUPPER_W 163E FFFFFFBF 0000o mov di,offset regnames 1641 FFFFFFB91000 mov cx,NUMREGNAMES 1644 FFFFFFF2FFFFFFAF repne scasw 1646 FFFFFF8BFFFFFFDF mov bx,di 1648 FFFFFFBF 0000o mov di,offset line_out 164B 752A jne rr2 ;if not found in standard register names 164D FFFFFF803C20 cmp byte ptr [si],20h ;avoid "ES" to be found for "ESI" or "ESP" 1650 7725 ja rr2 1652 FFFFFFAB stosw ;print register name 1653 FFFFFFB020 mov al,' ' 1655 FFFFFFAA stosb 1656 FFFFFF8B5F1E mov bx,[bx+NUMREGNAMES*2-2] 1659 FFFFFFE8FFFFFF830B call skipcomma ;skip white spaces 165C 3C0D cmp al,CR 165E 750E jne rr1a ;if not end of line 1660 53 push bx ;save bx for later 1661 FFFFFF8B07 mov ax,[bx] 1663 FFFFFFE8FFFFFFFF15 call hexword 1666 FFFFFFE87508 call getline0 ;prompt for new value 1669 5B pop bx 166A 3C0D cmp al,CR 166C 7408 je rr1b ;if no change required 166E rr1a: 166E FFFFFFE8370B call getword 1671 FFFFFFE8600B call chkeol ;expect end of line here 1674 FFFFFF8917 mov [bx],dx ;save new value 1676 rr1b: 1676 FFFFFFC3 ret ;--- is it the F(lags) register? 1677 rr2: 1677 3C46 cmp al,'F' 1679 7552 jne rr6 ;if not 'f' 167B 4E dec si 167C FFFFFFAC lodsb 167D 3C0D cmp al,CR 167F 7416 je rr2b ;if end of line 1681 3C20 cmp al,' ' 1683 740B je rr2a ;if white space 1685 3C09 cmp al,TAB 1687 7407 je rr2a ;ditto 1689 3C2C cmp al,',' 168B 7403 je rr2a 168D FFFFFFE9FFFFFF9200 jmp errorj9 ;if not, then it's an error 1690 rr2a: 1690 FFFFFFE84D0B call skipcomm0 1693 3C0D cmp al,CR 1695 7506 jne rr3 ;if not end of line 1697 rr2b: 1697 FFFFFFE8FFFFFF9E15 call dmpflags 169A FFFFFFE84108 call getline0 ;get input line (using line_out as prompt) 169D rr3: 169D 3C0D cmp al,CR 169F 74FFFFFFD5 je rr1b ;return if done 16A1 4E dec si 16A2 FFFFFFAD lodsw 16A3 25FFFFFFDFFFFFFFDF and ax,TOUPPER_W;here's the mnemonic 16A6 FFFFFFBF 0000o mov di,offset flgnams 16A9 FFFFFFB91000 mov cx,16 16AC FFFFFFF2FFFFFFAF repne scasw 16AE 751D jne rr6 ;if no match 16B0 FFFFFF81FFFFFFFF 0000o cmp di,offset flgnons 16B4 770B ja rr4 ;if we're clearing 16B6 FFFFFF8B45FFFFFFEE mov ax,[di-16-2] 16B9 FFFFFFF7FFFFFFD0 not ax 16BB 2106 0034o and [regs.rFL],ax 16BF FFFFFFEB07 jmp rr5 16C1 rr4: 16C1 FFFFFF8B45FFFFFFDE mov ax,[di-32-2] 16C4 0906 0034o or [regs.rFL],ax 16C8 rr5: 16C8 FFFFFFE8140B call skipcomma 16CB FFFFFFEBFFFFFFD0 jmp rr3 ;check if more ;--- it is neither 16bit register nor the F(lags) register. ;--- check for valid 32bit register name! 16CD rr6: 16CD FFFFFF803E 0000o 03 cmp [machine],3 16D2 724D jb rr_err 16D4 3C45 cmp al,'E' 16D6 7549 jnz rr_err 16D8 FFFFFFAC lodsb 16D9 24FFFFFFDF and al,TOUPPER 16DB 3C53 cmp al,'S' ;avoid EDS,ECS,ESS,... to be accepted! 16DD 7442 jz rr_err 16DF FFFFFF86FFFFFFC4 xchg al,ah 16E1 FFFFFFB91000 mov cx,NUMREGNAMES 16E4 FFFFFFBF 0000o mov di,offset regnames 16E7 FFFFFFF2FFFFFFAF repne scasw 16E9 7536 jne rr_err ;--- it is a valid 32bit register name 16EB FFFFFF8BFFFFFFDF mov bx,di 16ED FFFFFFBF 0000o mov di,offset line_out 16F0 FFFFFFC60545 mov byte ptr [di],'E' 16F3 47 inc di 16F4 FFFFFFAB stosw 16F5 FFFFFFB020 mov al,' ' 16F7 FFFFFFAA stosb 16F8 FFFFFF8B5F1E mov bx,[bx+NUMREGNAMES*2-2] 16FB FFFFFFE8FFFFFFE10A call skipcomma ;skip white spaces 16FE 3C0D cmp al,CR 1700 750F jne rr1aX ;if not end of line 1702 53 push bx .386 1703 66FFFFFF8B07 mov eax,[bx+0] .8086 1706 FFFFFFE85315 call hexdword 1709 FFFFFFE8FFFFFFD207 call getline0 ;prompt for new value 170C 5B pop bx 170D 3C0D cmp al,CR 170F 740F je rr1bX ;if no change required 1711 rr1aX: 1711 53 push bx 1712 FFFFFFE8670A call getdword 1715 FFFFFF8BFFFFFFCB mov cx,bx 1717 5B pop bx 1718 FFFFFFE8FFFFFFB90A call chkeol ;expect end of line here 171B FFFFFF8917 mov [bx+0],dx ;save new value 171D FFFFFF894F02 mov [bx+2],cx ;save new value 1720 rr1bX: 1720 FFFFFFC3 ret 1721 r_cmd endp 1721 rr_err: 1721 4E dec si ;back up one before flagging an error 1722 errorj9: 1722 FFFFFFE97F05 jmp cmd_error if RING0 endif ;--- S command - search for a string of bytes. 1725 s_cmd proc if RING0 endif 1725 FFFFFFE87809 call getrangeDS ;get address range into BX:(E)DX..BX:(E)CX 1728 FFFFFFE8FFFFFFB50A call skipcomm0 172B 51 push cx 172C 52 push dx 172D FFFFFFE8FFFFFFCA09 call getstr ;get string of bytes, size: di - (lineout+1) 1730 5A pop dx 1731 59 pop cx 1732 FFFFFF81FFFFFFEF 0000o sub di,offset line_out ;di = number of bytes to look for 1736 4F dec di ; minus one if ?PM endif 1737 2BFFFFFFCA sub cx,dx ;cx = number of bytes in search range minus one 1739 2BFFFFFFCF sub cx,di ;number of possible positions of string minus 1 173B 72FFFFFFE5 jb errorj9 ;if none 173D s_cont: 173D FFFFFFE82507 call prephack ; inc cx ;cx = number of possible positions of string sizeprfX ;xchg edx, edi 1740 FFFFFF87FFFFFFD7 xchg dx,di ;set (E)DI to offset 1742 FFFFFFE84B07 call dohack ;set debuggee's int 23/24 1745 sss1: ;<---- search next occurance 1745 FFFFFF8EFFFFFFC3 mov es, bx ;set the segment 1747 FFFFFFBE 0000o mov si,offset line_out ;si = address of search string 174A FFFFFFAC lodsb ;first character in al if ?PM endif 174B FFFFFFF2FFFFFFAE repne scasb ;look for first byte 174D 7403 je @F 174F FFFFFFAE scasb ;count in CX was cnt-1 1750 7510 jne sss3 ;if we're done 1752 @@: 1752 51 push cx 1753 57 push di 1754 FFFFFF8BFFFFFFCA mov cx,dx 1756 FFFFFFF3FFFFFFA6 repe cmpsb 1758 5F pop di 1759 7503 jne @F ;if not equal 175B FFFFFFE80700 call displaypos 175E @@: 175E 59 pop cx 175F 41 inc cx 1760 FFFFFFE2FFFFFFE3 loop sss1 ;go back for more 1762 sss3: 1762 FFFFFFE93607 jmp unhack ;set debugger's int 23/24 ;--- display position ;--- the search string is in line_out. ;--- so we have to write to [SI] ( which here points just behind search string ) 1765 displaypos: 1765 FFFFFFE83307 call unhack ;set debugger's int 23/24 1768 52 push dx sizeprfX ;xchg esi, edi 1769 FFFFFF87FFFFFFF7 xchg si,di ;render position right after search string 176B 57 push di ;v2.02 save pos on stack (in v2.0-v2.01, it was saved in CX) 176C 1E push ds ;v2.02 restore ES; needed for hex(d)word 176D 07 pop es @dispsegm bx 176E FFFFFF8BFFFFFFC3 1 mov ax,bx 1770 FFFFFFE8FFFFFFF214 1 call hexword 1773 FFFFFFB03A mov al,':' 1775 FFFFFFAA stosb if ?PM endif 1776 FFFFFF8D44FFFFFFFF lea ax,[si-1] 1779 FFFFFFE8FFFFFFE914 call hexword 177C s_cont3: 177C FFFFFFB80D0A mov ax,( LF shl 8 ) or CR 177F FFFFFFAB stosw 1780 5A pop dx ;get pos from stack 1781 FFFFFF8BFFFFFFCF mov cx, di 1783 2BFFFFFFCA sub cx, dx 1785 FFFFFFE80B15 call stdout ;write cx chars from ds:dx to stdout 1788 5A pop dx sizeprfX ;mov edi, esi 1789 FFFFFF8BFFFFFFFE mov di,si 178B FFFFFFE90207 jmp dohack ;set debuggee's int 23/24 178E s_cmd endp 178E tm_cmd proc 178E FFFFFFE84E0A call skipcomma 1791 3C0D cmp al,CR 1793 7412 jz ismodeget 1795 FFFFFFE8100A call getword 1798 FFFFFF83FFFFFFFA01 cmp dx,1 179B 7603 jna @F 179D FFFFFFE90405 jmp cmd_error 17A0 @@: 17A0 FFFFFFE8310A call chkeol ;expect end of line here 17A3 FFFFFF8816 0000o mov [tmode],dl ; ret 17A7 ismodeget: 17A7 FFFFFFBE 0000o mov si, offset tmode0 17AA FFFFFFA0 0000o mov al, [tmode] 17AD 2401 and al, 1 17AF 7403 jz @F 17B1 FFFFFFBE 0000o mov si, offset tmode1 17B4 @@: 17B4 56 push si 17B5 0430 add al, '0' 17B7 FFFFFFA2 0000o mov [tmodes2], al 17BA FFFFFFBE 0000o mov si, offset tmodes 17BD FFFFFFE8FFFFFF9214 call copystring 17C0 5E pop si 17C1 FFFFFFE8FFFFFF8E14 call copystring 17C4 FFFFFFE8FFFFFFC114 call putsline 17C7 FFFFFFC3 ret 17C8 tm_cmd endp ;--- T command - Trace. 17C8 t_cmd proc 17C8 3C0D cmp al, CR 17CA 7407 jz tt0 17CC 0C20 or al,TOLOWER 17CE 3D6D74 cmp ax,'tm' 17D1 74FFFFFFBB jz tm_cmd 17D3 tt0: ; mov [lastcmd], offset tt0 17D3 FFFFFFC706 0000o 0000o mov [lastcmd], offset t_cmd 17D9 FFFFFFE86508 call parse_pt ;process arguments 17DC @@: 17DC 51 push cx 17DD FFFFFFE80400 call trace1 17E0 59 pop cx 17E1 FFFFFFE2FFFFFFF9 loop @B 17E3 FFFFFFC3 ret 17E4 t_cmd endp ;--- trace one instruction 17E4 trace1 proc if ?PM endif if ?DPMI endif 17E4 33FFFFFFC9 xor cx,cx 17E6 FFFFFFE8FFFFFFBDFFFFFFF call getcseipbyte 17E9 3CFFFFFFCD cmp al,0CDh ; an INT instruction? 17EB 7513 jnz isstdtrace 17ED 41 inc cx 17EE FFFFFFE8FFFFFFB5FFFFFFF call getcseipbyte 17F1 3C03 cmp al,3 ; 2-byte INT 3? 17F3 740B jz isstdtrace 17F5 FFFFFFF606 0000o 01 test byte ptr [tmode], 1 ;TM=1? 17FA 7428 jz trace_int 17FC 3C01 cmp al,1 ; INT 1? 17FE 753B jnz step_int 1800 isstdtrace: 1800 FFFFFF800E 0035o 01 or byte ptr [regs.rFL+1],1h ;set single-step mode 1805 33FFFFFFC9 xor cx,cx 1807 FFFFFFE8FFFFFF9CFFFFFFF call getcseipbyte 180A 50 push ax 180B FFFFFFE8FFFFFFFB04 call run 180E 58 pop ax 180F 3CFFFFFF9C cmp al,9Ch ;was opcode "PUSHF"? 1811 7503 jnz @F 1813 FFFFFFE8FFFFFF9500 call clear_tf_onstack 1816 @@: 1816 FFFFFF803E 0000o 0F cmp [run_int], EXC01MSG 181B 7403 je tt1_1 181D FFFFFFE9FFFFFF9B00 jmp ue_int ;if some other interrupt ( is always "unexpected" ) 1820 tt1_1: 1820 FFFFFFE8FFFFFFAF12 call dumpregs 1823 FFFFFFC3 ret ; an INT is to be processed (TM is 0) ; to avoid the nasty x86 bug which makes IRET ; cause a debug exception 1 instruction too late ; a breakpoint is set behind the INT ; if the int will terminate the debuggee (int 21h, ah=4Ch) ; it is important that the breakpoint won't be restored! 1824 trace_int: if USEHWBP and ?DPMI endif if RING0 and USEHWBP ; no check for DebugR if USEHWBP is 1 else 1824 FFFFFFB90200 mov cx,2 1827 FFFFFFE86500 call iswriteablecseip ;is current CS:IP in ROM? 182A 72FFFFFFD4 jc isstdtrace ;then do standard trace endif 182C useproceed: @movs bx,[regs.rCS] 182C FFFFFF8B1E 002Ao 1 mov bx, [regs.rCS] sizeprfX ; mov esi,[regs.rIP] 1830 FFFFFF8B36 0030o mov si,[regs.rIP] if ?PM else 1834 FFFFFF83FFFFFFC602 add si, 2 endif 1837 FFFFFFE85AFFFFFFFD call doproceed1 ;set BP at BX:(E)SI and run debuggee 183A FFFFFFC3 ret ;--- current instruction is INT, TM is 1, single-step into the interrupt ;--- AL=int# 183B step_int: 183B FFFFFF8AFFFFFFD8 mov bl,al if ?PM endif if (RING0 eq 0) or V86M 183D step_int_rm: 183D FFFFFFB700 mov bh,0 183F 1E push ds if V86M else 1840 33FFFFFFC0 xor ax,ax 1842 FFFFFF8EFFFFFFD8 mov ds,ax 1844 FFFFFFD1FFFFFFE3 shl bx,1 ;stay 8086 compatible in real-mode! 1846 FFFFFFD1FFFFFFE3 shl bx,1 1848 FFFFFFFA cli 1849 FFFFFFC537 lds si,[bx+0] ; check if IVT is R/O? What's the purpose? 184B FFFFFF8A04 mov al,[si] 184D FFFFFF8034FFFFFFFF xor byte ptr [si],0FFh 1850 3A04 cmp al,[si] 1852 FFFFFF8804 mov [si],al 1854 FFFFFFFB sti 1855 7407 jz isrom 1857 FFFFFF8CFFFFFFDB mov bx,ds 1859 1F pop ds endif 185A FFFFFFE837FFFFFFFD call doproceed1 ; set bp at BX:ESI, then GO 185D FFFFFFC3 ret ife V86M 185E isrom: 185E FFFFFF8CFFFFFFD8 mov ax,ds 1860 1F pop ds 1861 FFFFFF8736 0030o xchg si,[regs.rIP] 1865 FFFFFF8706 002Ao xchg ax,[regs.rCS] 1869 FFFFFF8B0E 0034o mov cx,[regs.rFL] 186D 1E push ds 186E FFFFFF8B1E 002Co mov bx,[regs.rSP] 1872 FFFFFF8E1E 0028o mov ds,[regs.rSS] ;emulate an INT 1876 FFFFFF83FFFFFFEB06 sub bx,6 1879 46 inc si ;skip INT xx 187A 46 inc si 187B FFFFFF8937 mov [bx+0],si 187D FFFFFF894702 mov [bx+2],ax 1880 FFFFFF894F04 mov [bx+4],cx 1883 1F pop ds 1884 FFFFFF891E 002Co mov [regs.rSP],bx 1888 FFFFFF8026 0035o FFFFFF and byte ptr [regs.rFL+1],0FCh ;clear IF + TF 188D FFFFFFEBFFFFFF91 jmp tt1_1 endif endif 188F trace1 endp ;--- test if memory at CS:E/IP can be written to. ;--- return C if not ;--- used by T cmd. ;--- IN: CX=offset for (E)IP if RING0 and USEHWBP ; remove if RING==1 and USEHWBP==1 else 188F iswriteablecseip proc 188F FFFFFFE814FFFFFFFC call getcseipbyte ;get byte ptr at CS:EIP+CX 1892 FFFFFF8AFFFFFFE0 mov ah,al 1894 34FFFFFFFF xor al,0FFh 1896 FFFFFFE81DFFFFFFFC call setcseipbyte 1899 720E jc notwriteable 189B FFFFFFE808FFFFFFFC call getcseipbyte 189E 3AFFFFFFE0 cmp ah,al ;is it ROM? 18A0 7407 jz notwriteable 18A2 FFFFFF8AFFFFFFC4 mov al,ah 18A4 FFFFFFE80FFFFFFFFC call setcseipbyte 18A7 FFFFFFF8 clc 18A8 FFFFFFC3 ret 18A9 notwriteable: 18A9 FFFFFFF9 stc 18AA FFFFFFC3 ret 18AB iswriteablecseip endp endif ;--- clear TF in the copy of flags register onto the stack 18AB clear_tf_onstack proc 18AB 06 push es @movs es, [regs.rSS] 18AC FFFFFF8E06 0028o 1 mov es, [regs.rSS] if ?PM endif 18B0 FFFFFF8B1E 002Co mov bx,[regs.rSP] 18B4 26FFFFFF806701FFFFFFFE and byte ptr es:[bx+1],not 1 18B9 ctos_1: 18B9 07 pop es 18BA FFFFFFC3 ret 18BB clear_tf_onstack endp ;--- Print message about unexpected interrupt, dump registers, and end ;--- command. This code is used by G, P and T cmds. 18BB ue_int: 18BB FFFFFF8A16 0000o mov dl, [run_int] if RING0 and CATCHSYSREQ endif 18BF FFFFFFB600 mov dh, 0 18C1 FFFFFF81FFFFFFC2 0000o add dx, offset int0msg 18C5 FFFFFFE8FFFFFFB301 call int21ah9 ;print string if INT22 18C8 FFFFFF81FFFFFFFA 0000o cmp dx, offset progtrm 18CC 7403 je @F ;if it terminated, skip the registers endif 18CE FFFFFFE80112 call dumpregs 18D1 @@: 18D1 FFFFFFE936FFFFFFE8 jmp cmdloop ;back to the start ;--- "unexpected" exception in real-mode inside debugger ife RING0 if CATCHINT07 or CATCHINT0C or CATCHINT0D or SKIPBPINDBG 18D4 ue_intxx: if EXCCSIP endif 18D4 0E push cs 18D5 17 pop ss 18D6 2EFFFFFF8B26 0000o mov sp,cs:[top_sp] 18DB 51 push cx ; ip 18DC 52 push dx ; cs 18DD 50 push ax ; msg ;--- fall thru endif endif if ?PM or CATCHINT07 or CATCHINT0C or CATCHINT0D endif ;--- U command - disassemble. 18DE u_cmd proc 18DE FFFFFFC706 0000o 0000o mov [lastcmd],offset u_cmd 18E4 FFFFFFB92000 mov cx,20h ;default length 18E7 3C0D cmp al,CR 18E9 7415 je uuloop ;if no address was given @movs bx,[regs.rCS] 18EB FFFFFF8B1E 002Ao 1 mov bx, [regs.rCS] 18EF FFFFFFE8FFFFFFB207 call getrange ;get address range into bx:(e)dx/(e)cx 18F2 FFFFFFE8FFFFFFDF08 call chkeol ;expect end of line here sizeprfX ;mov [u_addr+0],edx 18F5 FFFFFF8916 0000o mov [u_addr+0],dx 18F9 FFFFFF891E 0004o mov [u_addr+4],bx sizeprfX ;inc ecx 18FD 41 inc cx sizeprfX ;sub ecx, edx 18FE 2BFFFFFFCA sub cx, dx ;--- At this point, e/cx holds the size ;--- the disassembler won't use any registers as parameters, ;--- it always disassembles the code at [u_addr] and updates ;--- that variable accordingly. 1900 uuloop: sizeprfX ;push ecx 1900 51 push cx 1901 FFFFFFE81A09 call disasm1 ;disassemble one instruction sizeprfX ;pop ecx 1904 59 pop cx if ?PM else 1905 2B0E 0000o sub cx, [dis_n] endif 1909 77FFFFFFF5 ja uuloop ;if we haven't reached the goal 190B FFFFFFC3 ret 190C u_cmd endp if WCMD 190C lockdrive: ;lock logical volume 190C 50 push ax 190D 53 push bx 190E 51 push cx 190F 52 push dx 1910 FFFFFF8AFFFFFFD8 mov bl,al 1912 FFFFFFFEFFFFFFC3 inc bl 1914 FFFFFFB700 mov bh,0 ;lock level (0 means what?) 1916 FFFFFFB94A08 mov cx,084Ah ;isn't this for non-FAT32 drives only? 1919 FFFFFFBA0100 mov dx,0001h ;permission flags (1=allow writes) 191C FFFFFFB80D44 mov ax,440Dh 191F FFFFFFCD21 int 21h 1921 5A pop dx 1922 59 pop cx 1923 5B pop bx 1924 58 pop ax 1925 FFFFFFC3 ret 1926 unlockdrive: 1926 50 push ax 1927 53 push bx 1928 51 push cx 1929 52 push dx 192A FFFFFF8AFFFFFFD8 mov bl,al 192C FFFFFFFEFFFFFFC3 inc bl ; mov bh,0 ;bh has no meaning for unlock 192E FFFFFFB96A08 mov cx,086Ah ;isn't this for non-FAT32 drives only? ; mov dx,0001h 1931 FFFFFFB80D44 mov ax,440Dh 1934 FFFFFFCD21 int 21h 1936 5A pop dx 1937 59 pop cx 1938 5B pop bx 1939 58 pop ax 193A FFFFFFC3 ret ;--- W command - write a program, or disk sectors, to disk. 193B w_cmd proc 193B FFFFFFE8FFFFFF9106 call parselw ;parse L and W argument format (out: bx:(e)dx=address) if WCMDFILE 193E 7463 jz write_file ;if request to write program endif if NOEXTENDER endif 1940 2EFFFFFF803E 0000o 02 cmp cs:[usepacket],2 1946 7217 jb ww0_1 1948 FFFFFF8AFFFFFFD0 mov dl,al ;A=0,B=1,C=2,... 194A FFFFFFBE0160 mov si,6001h ;write, assume "file data" if VDD endif 194D FFFFFFFEFFFFFFC2 inc dl ;A=1,B=2,C=3,... 194F FFFFFFE8FFFFFFBAFFFFFFF call lockdrive 1952 FFFFFFB80573 mov ax,7305h ;DS:(E)BX->packet 1955 FFFFFFF9 stc 1956 FFFFFFCD21 int 21h ;use int 21h here, not doscall 1958 FFFFFF9C pushf 1959 FFFFFFE8FFFFFFCAFFFFFFF call unlockdrive 195C FFFFFF9D popf 195D FFFFFFEB02 jmp ww0_2 if VDD endif 195F ww0_1: 195F FFFFFFCD26 int 26h 1961 ww0_2: 1961 FFFFFFB97772 mov cx,"rw" ;cx:dx="writ" 1964 FFFFFFBA6974 mov dx,"ti" ; jmp disp_diskresult ; fall thru to disp_diskresult 1967 w_cmd endp ;--- display disk access result ( C if error ) ;--- CX:DX="read"/"writ" 1967 disp_diskresult proc 1967 FFFFFF8CFFFFFFD3 mov bx,ss ;restore segment registers 1969 FFFFFF8EFFFFFFDB mov ds,bx 196B FFFFFF8B26 0000o mov sp,[top_sp] 196F FFFFFF8EFFFFFFC3 mov es, bx 1971 732D jnc ww3 ;if no error 1973 FFFFFF890E 0001o mov word ptr [szDrive+1], cx 1977 FFFFFF8916 0003o mov word ptr [szDrive+3], dx 197B FFFFFF8006 0000o 41 add [driveno], 'A' 1980 3C0C cmp al,0ch 1982 7602 jbe @F ;if in range 1984 FFFFFFB00C mov al,0ch 1986 @@: 1986 FFFFFF98 cbw ; shl ax,1 ; v2.0: removed - dskerrs is a byte offset table 1987 FFFFFF96 xchg si, ax 1988 FFFFFF8AFFFFFF84 0000o mov al, [si+dskerrs] 198C FFFFFFBE 0000o mov si, offset dskerr0 198F 03FFFFFFF0 add si, ax 1991 FFFFFFBF 0000o mov di, offset line_out 1994 FFFFFFE8FFFFFFBB12 call copystring 1997 FFFFFFBE 0000o mov si, offset szDrive 199A FFFFFFE8FFFFFFB512 call copystring 199D FFFFFFE8FFFFFFE812 call putsline 19A0 ww3: 19A0 FFFFFFE967FFFFFFE7 jmp cmdloop ;can't ret because stack is wrong 19A3 disp_diskresult endp endif if WCMDFILE ;--- Write to file. First check the file extension. ;--- size of file to be written is in client's BX:CX, ;--- default start address is DS:100h 19A3 write_file proc 19A3 FFFFFFA0 0000o mov al,[fileext] ;get flags of file extension 19A6 FFFFFFA80C test al,EXT_EXE + EXT_HEX 19A8 7405 jz @F ;if not EXE or HEX 19AA FFFFFFBA 0000o mov dx,offset nowhexe 19AD FFFFFFEB07 jmp exitwithmsg 19AF @@: 19AF 3C00 cmp al,0 19B1 7506 jnz ww7 ;if extension exists 19B3 FFFFFFBA 0000o mov dx,offset nownull 19B6 exitwithmsg: 19B6 FFFFFFE9FFFFFFC200 jmp int21ah9 ;--- File extension is OK; write it. First, create the file. ;--- bx:e/dx = start address 19B9 ww7: if ?DPMI endif 19B9 FFFFFFBD 0000o mov bp,offset line_out 19BC FFFFFF80FFFFFFFEFFFFFFF cmp dh,0feh 19BF 7207 jb @F ;if dx < fe00h 19C1 FFFFFF80FFFFFFEEFFFFFFF sub dh,0feh ;dx -= 0xfe00 19C4 FFFFFF81FFFFFFC3FFFFFFE add bx,0fe0h 19C8 @: 19C8 FFFFFF89560A mov [bp+10],dx ;save lower part of address in line_out+10 19CB FFFFFF8BFFFFFFF3 mov si,bx ;upper part goes into si if FMTEXE endif 19CD 33FFFFFFC9 xor cx,cx ;no attributes 19CF FFFFFFBAFFFFFF8000 mov dx,PSPS.DTA 19D2 FFFFFFB43C mov ah,3ch ;create file 19D4 FFFFFFE8FFFFFFEEFFFFFFF call doscall if FMTEXE endif 19D7 7279 jc io_error ;if error 19D9 50 push ax ;save file handle ;--- Print message about writing. 19DA FFFFFFBA 0000o mov dx,offset wwmsg1 19DD FFFFFFE8FFFFFF9B00 call int21ah9 ;print string 19E0 FFFFFFA1 0010o mov ax,[regs.rBX] 19E3 FFFFFF83FFFFFFF810 cmp ax,10h ;max size = 0fffffh 19E6 7202 jb @F ;if not too large 19E8 33FFFFFFC0 xor ax,ax ;too large: zero it out 19EA @@: 19EA FFFFFF894608 mov [bp+8],ax 19ED 0BFFFFFFC0 or ax,ax 19EF 7403 jz @F 19F1 FFFFFFE8FFFFFF8312 call hexnyb ;convert to hex digit and print 19F4 @@: 19F4 FFFFFFA1 0018o mov ax,[regs.rCX] 19F7 FFFFFF894606 mov [bp+6],ax 19FA FFFFFFE86812 call hexword 19FD FFFFFFE8FFFFFF8C12 call puts ;print size 1A00 FFFFFFBA 0000o mov dx,offset wwmsg2 1A03 FFFFFFE87500 call int21ah9 ;print string ;--- Now write the file. Size remaining is in line_out+6. 1A06 5B pop bx ;recover file handle 1A07 FFFFFF8B560A mov dx,[bp+10] ;address to write from is si:dx 1A0A ww11: 1A0A FFFFFFB800FFFFFFFE mov ax,0fe00h 1A0D 2BFFFFFFC2 sub ax,dx 1A0F FFFFFF807E0800 cmp byte ptr [bp+8],0 1A13 7508 jnz @F ;if more than 0fe00h bytes remaining 1A15 3B4606 cmp ax,[bp+6] 1A18 7203 jb @F ;ditto 1A1A FFFFFF8B4606 mov ax,[bp+6] 1A1D @@: 1A1D FFFFFF91 xchg ax,cx ;mov cx,ax 1A1E FFFFFF8EFFFFFFDE mov ds,si 1A20 FFFFFFB440 mov ah,40h ;write to file 1A22 FFFFFFCD21 int 21h ;use INT, not doscall 1A24 16 push ss ;restore DS 1A25 1F pop ds 1A26 3BFFFFFFC1 cmp ax,cx 1A28 7515 jne ww13 ;if disk full 1A2A 33FFFFFFD2 xor dx,dx ;next time write from xxxx:0 1A2C FFFFFF81FFFFFFC6FFFFFFE add si,0fe0h ;update segment pointer 1A30 294E06 sub [bp+6],cx 1A33 FFFFFF9F lahf 1A34 FFFFFF805E0800 sbb byte ptr [bp+8],0 1A38 75FFFFFFD0 jnz ww11 ;if more to go 1A3A FFFFFF9E sahf 1A3B 75FFFFFFCD jnz ww11 ;ditto 1A3D FFFFFFEB0E jmp ww14 ;done 1A3F ww13: 1A3F FFFFFFBA 0000o mov dx,offset diskful 1A42 FFFFFFE83600 call int21ah9 ;print string if FMTEXE endif 1A45 FFFFFFBAFFFFFF8000 mov dx,PSPS.DTA 1A48 FFFFFFB441 mov ah,41h ;unlink file 1A4A FFFFFFE878FFFFFFF6 call doscall if FMTEXE endif ;--- Close the file. 1A4D ww14: 1A4D FFFFFFB43E mov ah,3eh ;close file 1A4F FFFFFFCD21 int 21h 1A51 FFFFFFC3 ret 1A52 write_file endp endif if LCMDFILE or WCMDFILE ;--- Error opening file. This is also called by the load command. 1A52 io_error: 1A52 FFFFFF83FFFFFFF802 cmp ax,2 1A55 FFFFFFBA 0000o mov dx,offset doserr2 ;File not found 1A58 7421 je @F 1A5A FFFFFF83FFFFFFF803 cmp ax,3 1A5D FFFFFFBA 0000o mov dx,offset doserr3 ;Path not found 1A60 7419 je @F 1A62 FFFFFF83FFFFFFF805 cmp ax,5 1A65 FFFFFFBA 0000o mov dx,offset doserr5 ;Access denied 1A68 7411 je @F 1A6A FFFFFF83FFFFFFF808 cmp ax,8 1A6D FFFFFFBA 0000o mov dx,offset doserr8 ;Insufficient memory 1A70 7409 je @F 1A72 FFFFFFBF 0000o mov di,offset openerr1 1A75 FFFFFFE8FFFFFFED11 call hexword 1A78 FFFFFFBA 0000o mov dx,offset openerr ;Error ____ opening file 1A7B @@: ;--- fall thru endif 1A7B int21ah9: ife RING0 if 1 ;v2.0: check InDos, if set use stdout() 1A7B FFFFFFE83704 call InDos 1A7E 7506 jnz use_stdout endif 1A80 FFFFFFB409 mov ah,9 1A82 FFFFFFE840FFFFFFF6 call doscall 1A85 FFFFFFC3 ret endif if 1 ;v2.0: get size of $-string DS:DX, then call stdout; SI, CX not modified 1A86 use_stdout: 1A86 56 push si 1A87 51 push cx 1A88 FFFFFF8BFFFFFFF2 mov si, dx 1A8A @@: 1A8A FFFFFFAC lodsb 1A8B 3C24 cmp al, '$' 1A8D 75FFFFFFFB jnz @B 1A8F 4E dec si 1A90 2BFFFFFFF2 sub si, dx 1A92 FFFFFF8BFFFFFFCE mov cx, si 1A94 FFFFFFE8FFFFFFFC11 call stdout 1A97 59 pop cx 1A98 5E pop si 1A99 FFFFFFC3 ret endif if XCMDS ;--- X commands - manipulate EMS memory. ;--- XA - Allocate EMS. ;--- DX = pages 1A9A xa proc 1A9A FFFFFFE83707 call chkeol ;expect end of line here 1A9D FFFFFF8BFFFFFFDA mov bx,dx 1A9F FFFFFFB443 mov ah,43h ;allocate handle 1AA1 23FFFFFFDB and bx,bx 1AA3 7503 jnz @F 1AA5 FFFFFFB8005A mov ax,5A00h ;use the EMS 4.0 version to alloc 0 pages 1AA8 @@: 1AA8 FFFFFFE85901 call emscall 1AAB 52 push dx 1AAC FFFFFFBE 0000o mov si,offset xaans ; "Handle created: " 1AAF FFFFFFE8FFFFFFA011 call copystring 1AB2 58 pop ax 1AB3 FFFFFFE8FFFFFFAF11 call hexword 1AB6 FFFFFFE9FFFFFFCF11 jmp putsline ;print string and return 1AB9 xa endp ;--- XD - Deallocate EMS handle. ;--- DX = handle 1AB9 xd proc 1AB9 FFFFFFE81807 call chkeol ;expect end of line here 1ABC FFFFFFB445 mov ah,45h ;deallocate handle 1ABE FFFFFFE84301 call emscall 1AC1 52 push dx 1AC2 FFFFFFBE 0000o mov si,offset xdans ; "Handle deallocated: " 1AC5 FFFFFFE8FFFFFF8A11 call copystring 1AC8 58 pop ax 1AC9 FFFFFFE8FFFFFF9911 call hexword 1ACC FFFFFFE9FFFFFFB911 jmp putsline ;print string and return 1ACF xd endp ;--- x main dispatcher 1ACF x_cmd proc 1ACF 3C3F cmp al,'?' 1AD1 742A je xhelp ;if a call for help 1AD3 50 push ax 1AD4 FFFFFFE85C01 call emschk 1AD7 58 pop ax 1AD8 0C20 or al,TOLOWER 1ADA 3C73 cmp al,'s' 1ADC 7477 je xs ;if XS command 1ADE 50 push ax 1ADF FFFFFFE8FFFFFFFD06 call skipcomma 1AE2 FFFFFFE8FFFFFFC306 call getword 1AE5 59 pop cx 1AE6 FFFFFF80FFFFFFF961 cmp cl,'a' 1AE9 74FFFFFFAF je xa ;if XA command 1AEB FFFFFF80FFFFFFF964 cmp cl,'d' 1AEE 74FFFFFFC9 je xd ;if XD command 1AF0 FFFFFF80FFFFFFF972 cmp cl,'r' 1AF3 7411 je xr ;if XR command 1AF5 FFFFFF80FFFFFFF96D cmp cl,'m' 1AF8 7427 je xm ;if XM command 1AFA FFFFFFE9FFFFFFA701 jmp cmd_error 1AFD xhelp: 1AFD FFFFFFBA 0000o mov dx,offset xhelpmsg 1B00 FFFFFFB9FFFFFFB100 mov cx,size_xhelpmsg 1B03 FFFFFFE9FFFFFF8D11 jmp stdout ;print string and return 1B06 x_cmd endp ;--- XR - Reallocate EMS handle. ;--- DX = first argument (=handle) 1B06 xr proc 1B06 FFFFFF8BFFFFFFDA mov bx,dx 1B08 FFFFFFE8FFFFFFD406 call skipcomma 1B0B FFFFFFE8FFFFFF9A06 call getword ;get count argument into DX 1B0E FFFFFFE8FFFFFFC306 call chkeol ;expect end of line here 1B11 FFFFFF87FFFFFFDA xchg bx,dx 1B13 FFFFFFB451 mov ah,51h ;reallocate handle 1B15 FFFFFFE8FFFFFFEC00 call emscall 1B18 FFFFFFBE 0000o mov si,offset xrans ; "Handle reallocated: " 1B1B FFFFFFE83411 call copystring 1B1E FFFFFFE96711 jmp putsline ;print string and return 1B21 xr endp ;--- XM - Map EMS memory to physical page. ;--- DX = first argument [=logical page (FFFF means unmap)] 1B21 xm proc 1B21 FFFFFF8BFFFFFFDA mov bx,dx ;save it in BX 1B23 FFFFFFE8FFFFFFBA06 call skipcomm0 1B26 FFFFFFE8FFFFFF8906 call getbyte ;get physical page (DL) 1B29 52 push dx 1B2A FFFFFFE8FFFFFFB306 call skipcomm0 1B2D FFFFFFE87806 call getword ;get handle into DX 1B30 FFFFFFE8FFFFFFA106 call chkeol ;expect end of line 1B33 58 pop ax ;recover physical page into AL 1B34 50 push ax 1B35 FFFFFFB444 mov ah,44h ;function 5 - map memory 1B37 FFFFFFE8FFFFFFCA00 call emscall 1B3A FFFFFFBE 0000o mov si,offset xmans 1B3D FFFFFFE81211 call copystring 1B40 FFFFFF8BFFFFFFEF mov bp,di 1B42 FFFFFFBF 000Do mov di,offset line_out + xmans_pos1 1B45 FFFFFF93 xchg ax,bx ;mov ax,bx 1B46 FFFFFFE81C11 call hexword 1B49 FFFFFFBF 002Ao mov di,offset line_out + xmans_pos2 1B4C 58 pop ax 1B4D FFFFFFE81C11 call hexbyte 1B50 FFFFFF8BFFFFFFFD mov di,bp 1B52 FFFFFFE93311 jmp putsline ;print string and return 1B55 xm endp ;--- XS - Print EMS status. 1B55 xs proc 1B55 FFFFFFAC lodsb 1B56 FFFFFFE87B06 call chkeol ;no arguments allowed ; First print out the handles and handle sizes. This can be done either ; by trying all possible handles or getting a handle table. ; The latter is preferable, if it fits in memory. 1B59 FFFFFFB44B mov ah,4bh ;function 12 - get handle count 1B5B FFFFFFE8FFFFFFA600 call emscall 1B5E FFFFFF83FFFFFFFB42 cmp bx,( real_end - line_out ) / 4 1B61 761C jbe xs3 ;if we can do it by getting the table 1B63 33FFFFFFD2 xor dx,dx ;start handle 1B65 nexthdl: 1B65 FFFFFFB44C mov ah,4ch ;function 13 - get handle pages 1B67 FFFFFFCD67 int 67h 1B69 FFFFFF80FFFFFFFCFFFFFF8 cmp ah,83h ; error "invalid handle"? 1B6C 740B je xs2 ;if no such handle 1B6E 0AFFFFFFE4 or ah,ah 1B70 7403 jz @F 1B72 FFFFFFE9FFFFFF9600 jmp ems_err ;if other error 1B75 @@: 1B75 FFFFFF93 xchg ax,bx ;mov ax,bx 1B76 FFFFFFE8FFFFFFD600 call hndlshow 1B79 xs2: 1B79 FFFFFFFEFFFFFFC2 inc dl 1B7B 75FFFFFFE8 jnz nexthdl ;if more to be done 1B7D FFFFFFEB17 jmp xs5 ;done with this part ;--- Get the information in tabular form. 1B7F xs3: 1B7F FFFFFFB44D mov ah,4dh ;function 14 - get all handle pages 1B81 FFFFFFBF 0000o mov di,offset line_out 1B84 FFFFFFE87D00 call emscall 1B87 23FFFFFFDB and bx,bx ;has returned no of entries in BX 1B89 740B jz xs5 1B8B FFFFFF8BFFFFFFF7 mov si,di 1B8D @@: 1B8D FFFFFFAD lodsw 1B8E FFFFFF92 xchg ax,dx 1B8F FFFFFFAD lodsw 1B90 FFFFFFE8FFFFFFBC00 call hndlshow 1B93 4B dec bx 1B94 75FFFFFFF7 jnz @B ;if more to go 1B96 xs5: 1B96 FFFFFFBA 0000o mov dx,offset crlf 1B99 FFFFFFE8FFFFFFDFFFFFFFF call int21ah9 ;print string ; Next print the mappable physical address array. ; The size of the array shouldn't be a problem. 1B9C FFFFFFB80058 mov ax,5800h ;function 25 - get mappable phys. address array 1B9F FFFFFFBF 0000o mov di,offset line_out ;address to put array 1BA2 FFFFFFE85F00 call emscall 1BA5 FFFFFFBA 0000o mov dx,offset xsnopgs 1BA8 FFFFFFE32B jcxz xs7 ;NO mappable pages! 1BAA FFFFFF8BFFFFFFF7 mov si,di 1BAC xs6: 1BAC 51 push cx 1BAD FFFFFFAD lodsw 1BAE FFFFFFBF 0000o mov di,offset xsstr2b 1BB1 FFFFFFE8FFFFFFB110 call hexword 1BB4 FFFFFFAD lodsw 1BB5 FFFFFFBF 0000o mov di,offset xsstr2a 1BB8 FFFFFFE8FFFFFFB110 call hexbyte 1BBB FFFFFFBA 0000o mov dx,offset xsstr2 1BBE FFFFFFB91E00 mov cx,size_xsstr2 1BC1 FFFFFFE8FFFFFFCF10 call stdout ;print string 1BC4 59 pop cx ;end of loop 1BC5 FFFFFFF6FFFFFFC101 test cl,1 1BC8 7406 jz @F 1BCA FFFFFFBA 0000o mov dx,offset crlf ;blank line 1BCD FFFFFFE8FFFFFFABFFFFFFF call int21ah9 ;print string 1BD0 @@: 1BD0 FFFFFFE2FFFFFFDA loop xs6 1BD2 FFFFFFBA 0000o mov dx,offset crlf ;blank line 1BD5 xs7: 1BD5 FFFFFFE8FFFFFFA3FFFFFFF call int21ah9 ;print string ;--- Finally, print the cumulative totals. 1BD8 FFFFFFB442 mov ah,42h ;function 3 - get unallocated page count 1BDA FFFFFFE82700 call emscall 1BDD FFFFFF8BFFFFFFC2 mov ax,dx ;total pages available 1BDF 2BFFFFFFC3 sub ax,bx ;number of pages allocated 1BE1 FFFFFFBB 0000o mov bx,offset xsstrpg 1BE4 FFFFFFE8FFFFFF8200 call sumshow ;print the line 1BE7 FFFFFFB44B mov ah,4bh ;function 12 - get handle count 1BE9 FFFFFFE81800 call emscall 1BEC 53 push bx ;--- try EMS 4.0 function 5402h to get total number of handles 1BED FFFFFFB80254 mov ax,5402h 1BF0 FFFFFFCD67 int 67h ;don't use emscall, this function may fail! 1BF2 FFFFFF8BFFFFFFD3 mov dx,bx 1BF4 FFFFFF80FFFFFFFC00 cmp ah,0 1BF7 7403 jz @F 1BF9 FFFFFFBAFFFFFFFF00 mov dx,0ffh ;total number of handles 1BFC @@: 1BFC 58 pop ax ;ax = number of handles allocated 1BFD FFFFFFBB 0000o mov bx,offset xsstrhd 1C00 FFFFFFE86600 call sumshow ;print the line 1C03 FFFFFFC3 ret ;done 1C04 xs endp ;--- Call EMS ;--- in case of error, return to cmd loop 1C04 emscall proc if ?DPMI endif 1C04 FFFFFFCD67 int 67h 1C06 ems_call_done: 1C06 22FFFFFFE4 and ah,ah ;error? 1C08 7801 js ems_err 1C0A FFFFFFC3 ret ;return if OK 1C0B emscall endp ;--- ems error in AH 1C0B ems_err proc 1C0B FFFFFF8AFFFFFFC4 mov al,ah 1C0D 3CFFFFFF8B cmp al,8bh 1C0F 7F0D jg ce2 ;if out of range 1C11 FFFFFF98 cbw ;80->ff80 ... 8B->ff8B 1C12 FFFFFF8BFFFFFFD8 mov bx,ax 1C14 FFFFFFD1FFFFFFE3 shl bx,1 ;ff80->ff00 ... ff8B->ff16 1C16 FFFFFF8BFFFFFFB7 0100o mov si,[emserrs+100h+bx] 1C1A 0BFFFFFFF6 or si,si 1C1C 7509 jnz ems_err3 ;if there's a word there 1C1E ce2: 1C1E FFFFFFBF 0000o mov di,offset emserrxa 1C21 FFFFFFE84810 call hexbyte 1C24 FFFFFFBE 0000o mov si,offset emserrx 1C27 ems_err3:: 1C27 FFFFFFBF 0000o mov di,offset line_out 1C2A FFFFFFE82510 call copystring ;si->di 1C2D FFFFFFE85810 call putsline 1C30 FFFFFFE9FFFFFFD7FFFFFFE jmp cmdloop 1C33 ems_err endp ;--- Check for EMS 1C33 emschk proc if ?DPMI endif 1C33 06 push es 1C34 FFFFFFB86735 mov ax,3567h ;get interrupt vector 67h 1C37 FFFFFFCD21 int 21h 1C39 FFFFFF8CFFFFFFC0 mov ax,es 1C3B 07 pop es 1C3C 0BFFFFFFC3 or ax,bx 1C3E 740A jz echk2 1C40 emschk2: 1C40 FFFFFFB446 mov ah,46h ;get version ; int 67h 1C42 FFFFFFE8FFFFFFBFFFFFFFF call emscall 1C45 22FFFFFFE4 and ah,ah 1C47 7501 jnz echk2 1C49 FFFFFFC3 ret 1C4A echk2: 1C4A FFFFFFBE 0000o mov si,offset emsnot 1C4D FFFFFFEBFFFFFFD8 jmp ems_err3 1C4F emschk endp ;--- HNDLSHOW - Print XS line giving the handle and pages allocated. ; ;--- Entry DX Handle ; AX Number of pages ; ; Exit Line printed ; ; Uses ax,cl,di. 1C4F hndlshow proc 1C4F FFFFFFBF 0000o mov di,offset xsstr1b 1C52 FFFFFFE81010 call hexword 1C55 FFFFFF8BFFFFFFC2 mov ax,dx 1C57 FFFFFFBF 0000o mov di,offset xsstr1a 1C5A FFFFFFE80810 call hexword 1C5D 52 push dx 1C5E FFFFFFBA 0000o mov dx,offset xsstr1 1C61 FFFFFFB92600 mov cx,size_xsstr1 1C64 FFFFFFE82C10 call stdout 1C67 5A pop dx 1C68 FFFFFFC3 ret 1C69 hndlshow endp ;--- SUMSHOW - Print summary line for XS command. ; ;---Entry AX Number of xxxx's that have been used ; DX Total number of xxxx's ; BX Name of xxxx ; ; Exit String printed ; ; Uses AX, CX, DX, DI 1C69 sumshow proc 1C69 FFFFFFBF 0000o mov di,offset line_out 1C6C FFFFFFE81E00 call trimhex ; ax ( skip leading zeros ) 1C6F FFFFFFBE 0000o mov si,offset xsstr3 ; " of a total " 1C72 FFFFFFE8FFFFFFDD0F call copystring 1C75 FFFFFF92 xchg ax,dx ; mov ax,dx 1C76 FFFFFFE81400 call trimhex 1C79 FFFFFFBE 0000o mov si,offset xsstr3a ; " EMS " 1C7C FFFFFFE8FFFFFFD30F call copystring 1C7F FFFFFF8BFFFFFFF3 mov si,bx ; "pag"/"handl" 1C81 FFFFFFE8FFFFFFCE0F call copystring 1C84 FFFFFFBE 0000o mov si,offset xsstr3b ; "es have been allocated" 1C87 FFFFFFE8FFFFFFC80F call copystring 1C8A FFFFFFE9FFFFFFFB0F jmp putsline 1C8D sumshow endp ; TRIMHEX - Print word without leading zeroes. ; ; Entry AX Number to print ; DI Where to print it ; ; Uses AX, CX, DI. 1C8D trimhex proc 1C8D FFFFFFE8FFFFFFD50F call hexword 1C90 57 push di 1C91 FFFFFF83FFFFFFEF04 sub di,4 ;back up DI to start of word 1C94 FFFFFFB90300 mov cx,3 1C97 FFFFFFB030 mov al,'0' 1C99 @@: 1C99 FFFFFFAE scasb 1C9A 7506 jne @F ;return if not a '0' 1C9C FFFFFFC645FFFFFFFF20 mov byte ptr [di-1],' ' 1CA0 FFFFFFE2FFFFFFF7 loop @B 1CA2 @@: 1CA2 5F pop di 1CA3 FFFFFFC3 ret 1CA4 trimhex endp endif ;--- syntax error handler. ;--- in: SI->current char in line_in 1CA4 cmd_error proc 1CA4 FFFFFF8BFFFFFFCE mov cx,si 1CA6 FFFFFF81FFFFFFE9 0004o sub cx,offset line_in+4 1CAA 030E 0000o add cx,[promptlen] 1CAE FFFFFFBF 0000o mov di,offset line_out 1CB1 FFFFFF8BFFFFFFD7 mov dx,di 1CB3 FFFFFF83FFFFFFF97F cmp cx,127 1CB6 7705 ja @F ;if we're really messed up 1CB8 41 inc cx ;number of spaces to skip 1CB9 FFFFFFB020 mov al,' ' 1CBB FFFFFFF3FFFFFFAA rep stosb 1CBD @@: 1CBD FFFFFFBE 0000o mov si,offset errcarat 1CC0 FFFFFFB107 mov cl,sizeof errcarat 1CC2 FFFFFFF3FFFFFFA4 rep movsb 1CC4 FFFFFFE8FFFFFFC10F call putsline ;print string 1CC7 FFFFFFFF26 0000o jmp [errret] 1CCB cmd_error endp if LCMDFILE ;--- FREEMEM - cancel child process 1CCB freemem proc ; @dprintf "freemem enter" 1CCB FFFFFF8C0E 002Ao mov [regs.rCS],cs 1CCF FFFFFFC706 0030o 0000o mov [regs.rIP],offset fmem2 1CD5 FFFFFFC706 0034o 0202 mov [regs.rFL], 202h; v1.29: ensure TF is clear ( TF=1 may cause "memory corrupt" error if returning to DOS ) if ?DPMI endif 1CDB FFFFFF8C16 0028o mov [regs.rSS],ss 1CDF 50 push ax 1CE0 FFFFFF8926 002Co mov [regs.rSP],sp ; save sp-2 1CE4 58 pop ax 1CE5 FFFFFFE82100 call run ; @dprintf "freemem back from run" 1CE8 FFFFFF803E 0000o 54 cmp [run_int],INT22MSG ; v2.50: in case prog termination failed... 1CED 7403FFFFFFE9FFFFFFC9FFF jnz ue_int ; stop and display msg 1CF2 FFFFFFC3 ret 1CF3 fmem2: if ?DPMI else 1CF3 FFFFFFB8004C mov ax,4c00h ;quit endif 1CF6 FFFFFFCD21 int 21h 1CF8 freemem endp if INT2324 ;--- setint2324 is called by "run", to set debuggee's INT 23/24. ;--- Don't use INT 21h here, DOS might be "in use". ;--- Registers may be modified - will soon be set to debuggee's... ;--- counterpart is getint2324(). 1CF8 setint2324 proc 1CF8 FFFFFFBE 0000o mov si,offset run2324 if ?DPMI endif 1CFB 06 push es 1CFC 33FFFFFFFF xor di,di 1CFE FFFFFF8EFFFFFFC7 mov es, di 1D00 FFFFFFBFFFFFFF8C00 mov di,23h*4 1D03 FFFFFFA5 movsw 1D04 FFFFFFA5 movsw 1D05 FFFFFFA5 movsw 1D06 FFFFFFA5 movsw if ?DPMI endif 1D07 07 pop es 1D08 FFFFFFC3 ret if ?DPMI endif 1D09 setint2324 endp endif ; INT2324 endif ; LCMDFILE if RING0 endif if USEHWBP endif ; USEHWBP ;--- This is the routine that starts up the running program. 1D09 run proc if RING0 endif if USEHWBP endif if RING0 endif 1D09 FFFFFFE86703 call seteq ;set CS:E/IP to '=' address ;--- set debuggee context if VXCHG endif if ALTVID endif if LCMDFILE 1D0C FFFFFF8B1E 0000o mov bx,[pspdbe] 1D10 FFFFFFE8FFFFFF96FFFFFFF call setpsp ;set debuggee's PSP if INT2324 1D13 FFFFFFE8FFFFFFE2FFFFFFF call setint2324 ;set debuggee's int 23/24 endif endif if ?DPMI endif if FLATSS else 1D16 FFFFFF8926 0000o mov [run_sp],sp ;save stack position endif ife (DRIVER or BOOTDBG or RING0) ; 16.2.2021: check if saved SS is debugger's SS. If no, don't adjust saved SP. ; SS may be != saved SS if debugger is stopped in protected-mode - then the ; current DPMI real-mode stack may be stored in PSPS.SPSAV. if FMTEXE endif 1D1A FFFFFF8CFFFFFFD0 mov ax,ss 1D1C 3B063000 cmp ax,word ptr ds:[PSPS.SPSAV+2] 1D20 7508 jnz @F 1D22 2B26 0000o sub sp,[spadjust] 1D26 FFFFFF89262E00 mov word ptr ds:[PSPS.SPSAV],sp 1D2A @@: if FMTEXE endif endif ife RING0 1D2A FFFFFFFA cli endif if FLATSS endif if RING0 endif 1D2B FFFFFFBC 0000o mov sp,offset regs ife RING0 1D2E FFFFFF803E 0000o 03 cmp [machine],3 1D33 720A jb @F .386 1D35 6661 popad 1D37 07 pop es ;temporary load DS value into ES (to make sure it is valid) 1D38 07 pop es ;now load the true value for ES 1D39 0FFFFFFFA1 pop fs 1D3B 0FFFFFFFA9 pop gs 1D3D FFFFFFEB17 jmp loadss .8086 1D3F @@: 1D3F 5F pop di 1D40 5E pop si ;skip hi edi 1D41 5E pop si 1D42 5D pop bp ;skip hi esi 1D43 5D pop bp 1D44 FFFFFF83FFFFFFC406 add sp,6;skip hi ebp+reserved 1D47 5B pop bx 1D48 5A pop dx ;skip hi ebx 1D49 5A pop dx 1D4A 59 pop cx ;skip hi edx 1D4B 59 pop cx 1D4C 58 pop ax ;skip hi ecx 1D4D 58 pop ax 1D4E FFFFFF83FFFFFFC402 add sp,2;skip hi eax 1D51 07 pop es ; that's DS 1D52 07 pop es 1D53 FFFFFF83FFFFFFC404 add sp,2*2 ; skip places for FS,GS endif 1D56 loadss: 1D56 17 pop ss 1D57 patch_movsp label byte ;patch with 3Eh (=DS:) if cpu < 386 1D57 66 db 66h ;mov esp,[regs.rSP] 1D58 FFFFFF8B26 002Co mov sp,[regs.rSP] ;restore program stack 1D5C r0exit: sizeprf ;push dword ptr [regs.rFL] 00001D5C = 1D5C 1 curreip = $ 0006 1 _IDATA segment 0006 5C1D 1 dw curreip 0008 1 _IDATA ends 1D5C 66 1 db 66h 1D5D FFFFFFFF36 0034o push [regs.rFL] sizeprf ;push dword ptr [regs.rCS] 00001D61 = 1D61 1 curreip = $ 0008 1 _IDATA segment 0008 611D 1 dw curreip 000A 1 _IDATA ends 1D61 66 1 db 66h 1D62 FFFFFFFF36 002Ao push [regs.rCS] sizeprf ;push dword ptr [regs.rIP] 00001D66 = 1D66 1 curreip = $ 000A 1 _IDATA segment 000A 661D 1 dw curreip 000C 1 _IDATA ends 1D66 66 1 db 66h 1D67 FFFFFFFF36 0030o push [regs.rIP] 1D6B FFFFFFC606 0000o 00 mov [bInDbg],0 if RING0 else 1D70 FFFFFFF606 0035o 02 test byte ptr [regs.rFL+1],2 ;IF set? 1D75 FFFFFF8E1E 0020o mov ds,[regs.rDS] 1D79 7401 jz @F 1D7B FFFFFFFB sti ; required for ring3 protected mode if IOPL==0 1D7C @@: 1D7C patch_iret label byte ; patch with CFh (=IRET) if cpu < 386 endif .386 1D7C 66FFFFFFCF iretd ; jump to program .8086 1D7E run endp ;--- debugger entries if RING0 else include C C ;--- debugger entries for real-mode C ;--- a) program termination C ;--- b) exceptions ( 0, 1, 3, 6, 7, C, D, E ) C ;--- c) sysreq pressed C C ;--- v2.0: code changed so [run_int] is set only if entry is from C ;--- debuggee. If debugger is reentered because of an exception inside C ;--- the debugger, this must not be modified anymore. C C if INT22 C ;--- debugger's int 22h (program termination) handler. C ;--- there's no need to preserve registers. C 1D7E C intr22: 1D7E FFFFFFFA C cli 1D7F 2EFFFFFFC606 0000o 54 C mov cs:[run_int], INT22MSG ;remember interrupt type 1D85 2EFFFFFFC706 0000o C mov cs:[lastcmd], offset dmycmd 1D8C FFFFFFEB3D jmp intrtn_progtrm C C endif C C ;--- Interrupt 0 (divide error) handler. C 1D8E C intr00: 1D8E 2EFFFFFFC606 0000o 00 C mov cs:[run_int], EXC00MSG ;remember interrupt type 1D94 FFFFFFEB25 C jmp intrtnr ;jump to register saving routine C C C if CATCHINT01 C C ;--- Interrupt 1 (single-step interrupt) handler. C 1D96 C intr01: C if NOEXC01INDBG 1D96 2EFFFFFF803E 0000o 00 C cmp cs:[bInDbg],0 1D9C 7508 C jnz @F C endif 1D9E 2EFFFFFFC606 0000o 0F C mov cs:[run_int], EXC01MSG 1DA4 FFFFFFEB15 C jmp intrtnr C if NOEXC01INDBG 1DA6 C @@: 1DA6 FFFFFFCF C iret ; just ignore the exception if in debug C endif C C endif C C if CATCHINT06 C endif C C if CATCHINT07 C endif C C if CATCHINT0C C endif C C if CATCHINT0D C endif C C if CATCHSYSREQ C endif C C ;--- Interrupt 3 (breakpoint interrupt) handler. C 1DA7 C intr03: C if SKIPBPINDBG 1DA7 2EFFFFFF803E 0000o 00 C cmp cs:[bInDbg],0 1DAD 7406 C jz @F 1DAF FFFFFFB83200 C mov ax, EXC03MSG 1DB2 FFFFFFE91FFFFFFFFB C jmp ue_intxx 1DB5 C @@: C endif 1DB5 2EFFFFFFC606 0000o 32 C mov cs:[run_int], EXC03MSG ;remember interrupt type C 1DBB C intrtnr proc C 1DBB FFFFFFFA C cli ;just in case 1DBC 2EFFFFFF8F06 0030o C pop cs:[regs.rIP] ;recover things from stack C if ?PM C endif 1DC1 2EFFFFFF8F06 002Ao C pop cs:[regs.rCS] 1DC6 2EFFFFFF8F06 0034o C pop cs:[regs.rFL] 1DCB C intrtn_progtrm:: ;<--- int 22h 1DCB 2EFFFFFF8C16 0028o C mov cs:[regs.rSS],ss;save stack position C sizeprf 00001DD0 = 1DD0 1C curreip = $ 000C 1C _IDATA segment 000C FFFFFFD01D 1C dw curreip 000E 1C _IDATA ends 1DD0 66 1C db 66h 1DD1 2EFFFFFF8926 002Co C mov cs:[regs.rSP],sp 1DD6 FFFFFF8CFFFFFFCC C mov sp,cs ; "push cs", "pop ss" without modifying [SP-2] 1DD8 FFFFFF8EFFFFFFD4 C mov ss,sp 1DDA FFFFFFBC 0028o C mov sp,offset regs.rSS C C ;--- fall thru to intrtn C 1DDD C intrtnr endp endif ;--- fall thru ;--- also: entry DPMI protected-mode ;--- in: SS:SP=regs.rSS 1DDD intrtn proc ;--- DWORD pushs are safe here 1DDD 2EFFFFFF803E 0000o 03 cmp cs:[machine],3 1DE3 7217 jb @F .386 ife RING0 1DE5 66FFFFFF9C pushfd 1DE7 FFFFFF9D popf ;skip LoWord(EFL) 1DE8 36FFFFFF8F06 0036o pop word ptr ss:[regs.rFL+2] endif 1DED 6A00 push 0 1DEF FFFFFF9C pushf 1DF0 66FFFFFF9D popfd ;clear HiWord(EFL) inside debugger (resets AC flag) 1DF2 0FFFFFFFA8 push gs 1DF4 0FFFFFFFA0 push fs 1DF6 06 push es 1DF7 1E push ds 1DF8 6660 pushad 1DFA FFFFFFEB15 jmp intrtn1 .8086 1DFC @@: 1DFC FFFFFF83FFFFFFEC04 sub sp, 2*2 ; skip space for GS, FS 1DFF 06 push es 1E00 1E push ds 1E01 50 push ax 1E02 50 push ax 1E03 51 push cx 1E04 51 push cx 1E05 52 push dx 1E06 52 push dx 1E07 53 push bx 1E08 53 push bx 1E09 FFFFFF83FFFFFFEC06 sub sp,6 1E0C 55 push bp 1E0D 56 push si 1E0E 56 push si 1E0F 57 push di 1E10 57 push di 1E11 intrtn1:: ;<--- entry for int 22 if RING0 else 1E11 2EFFFFFF8B26 0000o mov sp,cs:[run_sp] ;restore running stack endif 1E16 FFFFFFFC cld @RestoreSeg ds 1E17 16 1 push ss 1E18 1F 1 pop ds ife RING0 1E19 FFFFFFFB sti ;interrupts back on endif ;if ?PM if ?DPMI endif ;endif ife (BOOTDBG or RING0) 1E1A FFFFFFE8FFFFFF9AFFFFFFF call getpsp 1E1D FFFFFF891E 0000o mov [pspdbe],bx endif 1E21 1E push ds 1E22 07 pop es 1E23 FFFFFFC606 0000o 01 mov [bInDbg],1 ; v2.0: must be set before setdbgexc0d0e ;--- set debugger context if INT2324 1E28 FFFFFFE81A00 call getint2324 ;save debuggee's int 23/24, set debugger's int 23/24 endif if ?DPMI endif if RING0 endif if USEHWBP endif if LCMDFILE 1E2B FFFFFFE879FFFFFFF2 call setpspdbg ;set debugger's PSP endif 1E2E FFFFFF8026 0035o FFFFFF and byte ptr [regs.rFL+1],not 1 ;clear single-step interrupt ; mov [bInDbg],1 ; v2.0: do this earlier ( see above ) if INT22 1E33 FFFFFF803E 0000o 54 cmp [run_int], INT22MSG 1E38 750A jnz @F if ?DPMI endif 1E3A FFFFFFB44D mov ah,4Dh 1E3C FFFFFFCD21 int 21h 1E3E FFFFFFBF 0000o mov di,offset progexit 1E41 FFFFFFE8210E call hexword 1E44 @@: endif ifdef FORCETEXT endif if VXCHG endif if ALTVID endif 1E44 FFFFFFC3 ret ifdef FORCETEXT endif 1E45 intrtn endp if USEHWBP endif if BCMD endif if VXCMD endif if VXCHG elseif VXCMD endif if ALTVID endif if INT2324 ;--- this is low-level, called on entry into the debugger. ;--- the debuggee's registers have already been saved here. ;--- 1. save IVT vectors 23/24 ("debuggee's") to [run2324] ;--- 2. restore IVT vectors 23/24 ("debugger's") from PSP:[CCIV] ;--- DS, ES = DGROUP ;--- Int 21h should not be used here! 1E45 getint2324 proc 1E45 FFFFFFBF 0000o mov di,offset run2324 if ?DPMI endif 1E48 33FFFFFFF6 xor si,si 1E4A FFFFFF8EFFFFFFDE mov ds,si 1E4C FFFFFFBEFFFFFF8C00 mov si,23h*4 1E4F 56 push si 1E50 FFFFFFA5 movsw ;save interrupt vector 23h 1E51 FFFFFFA5 movsw 1E52 FFFFFFA5 movsw ;save interrupt vector 24h 1E53 FFFFFFA5 movsw 1E54 5F pop di if FMTEXE else 1E55 06 push es 1E56 1F pop ds endif 1E57 33FFFFFFF6 xor si,si 1E59 FFFFFF8EFFFFFFC6 mov es, si 1E5B FFFFFFBE0E00 mov si,PSPS.CCIV ;move from debugger's PSP to IVT 1E5E FFFFFFA5 movsw 1E5F FFFFFFA5 movsw 1E60 FFFFFFA5 movsw 1E61 FFFFFFA5 movsw if FMTEXE endif 1E62 1E push ds 1E63 07 pop es 1E64 FFFFFFC3 ret if ?DPMI endif 1E65 getint2324 endp endif ; The next three subroutines concern the handling of INT 23 and 24. ; These interrupt vectors are saved and restored when running the ; child process, but are not active when DEBUG itself is running. ; It is still useful for the programmer to be able to check where INT 23 ; and 24 point, so these values are copied into the interrupt table ; during parts of the c, d, e, m, and s commands, so that they appear ; to be in effect. The e command also copies these values back. ; Between calls to dohack and unhack, there should be no calls to DOS, ; so that there is no possibility of these vectors being used when ; the child process is not running. ;--- for protected-mode, this whole procedure with prepare-do-undo is ;--- pretty useless - hence all three procs are dummies while in pm. ;--- OTOH, it might be useful, to adjust the DI cmd in protected-mode ;--- to return the debuggee's vectors for 23h/24h. ; PREPHACK - Set up for interrupt vector substitution. ; save current value of Int 23/24 (debugger's) to sav2324 ; Entry es = cs 1E65 prephack proc if INT2324 1E65 FFFFFF803E 0000o 00 cmp [hakstat],0 1E6A 7509 jnz @F ;if hack status error 1E6C 57 push di 1E6D FFFFFFBF 0000o mov di,offset sav2324 ;debugger's Int2324 1E70 FFFFFFE80D00 call store2324 ;copy IVT 23/24 to di (real-mode only) 1E73 5F pop di 1E74 FFFFFFC3 ret 1E75 @@: ;this is actually a programming error! 1E75 50 push ax 1E76 52 push dx 1E77 FFFFFFBA 0000o mov dx,offset ph_msg ;'error in sequence of calls to hack' 1E7A FFFFFFE8FFFFFFFEFFFFFFF call int21ah9 ;print string 1E7D 5A pop dx 1E7E 58 pop ax endif 1E7F FFFFFFC3 ret 1E80 prephack endp if INT2324 14C9 CONST segment 14C9 4572726F7220696E207365 ph_msg db 'Error in sequence of calls to hack.',CR,LF,'$' 14EF CONST ends ;--- get current int 23/24, store them at ES:DI ;--- DI is either sav2324 (debugger's) or run2324 (debuggee's) 1E80 store2324 proc if ?DPMI endif 1E80 1E push ds 1E81 56 push si 1E82 33FFFFFFF6 xor si,si 1E84 FFFFFF8EFFFFFFDE mov ds,si 1E86 FFFFFFBEFFFFFF8C00 mov si,4*23h 1E89 FFFFFFA5 movsw 1E8A FFFFFFA5 movsw 1E8B FFFFFFA5 movsw 1E8C FFFFFFA5 movsw 1E8D 5E pop si 1E8E 1F pop ds 1E8F _ret: 1E8F FFFFFFC3 ret 1E90 store2324 endp endif ; DOHACK - set debuggee's int 23/24 ; Entry ds = dgroup ; DOHACK/UNHACK: It's OK to do either of these twice in a row. ; In particular, the 's' command may do unhack twice in a row. 1E90 dohack proc if INT2324 1E90 FFFFFFC606 0000o 01 mov [hakstat],1 if ?DPMI endif 1E95 56 push si 1E96 FFFFFFBE 0000o mov si,offset run2324 ;debuggee's interrupt vectors 1E99 FFFFFFEB09 jmp hak1 endif ;--- UNHACK - set debugger's int 23/24 ;--- Entry ds = dgroup 1E9B unhack:: if INT2324 1E9B FFFFFFC606 0000o 00 mov [hakstat],0 if ?DPMI endif 1EA0 56 push si 1EA1 FFFFFFBE 0000o mov si,offset sav2324 ;debugger's interrupt vectors 1EA4 hak1: 1EA4 57 push di 1EA5 06 push es 1EA6 33FFFFFFFF xor di,di 1EA8 FFFFFF8EFFFFFFC7 mov es, di 1EAA FFFFFFBFFFFFFF8C00 mov di,4*23h 1EAD FFFFFFA5 movsw 1EAE FFFFFFA5 movsw 1EAF FFFFFFA5 movsw 1EB0 FFFFFFA5 movsw 1EB1 07 pop es 1EB2 5F pop di 1EB3 5E pop si 1EB4 _ret: endif 1EB4 FFFFFFC3 ret 1EB5 dohack endp ;--- InDos: return NZ if DOS cannot be used 1EB5 InDos: if ( BOOTDBG or RING0 ) else 1EB5 1E push ds 1EB6 56 push si if ?DPMI else 1EB7 FFFFFFC536 0000o lds si,[pInDOS] endif 1EBB FFFFFF803C00 cmp byte ptr [si],0 1EBE 5E pop si 1EBF 1F pop ds endif 1EC0 FFFFFFC3 ret 1EC1 stdoutal: 1EC1 51 push cx 1EC2 52 push dx 1EC3 50 push ax 1EC4 FFFFFFB90100 mov cx,1 if FLATSS else 1EC7 FFFFFF8BFFFFFFD4 mov dx,sp endif 1EC9 FFFFFFE8FFFFFFC70D call stdout 1ECC 58 pop ax 1ECD 5A pop dx 1ECE 59 pop cx 1ECF FFFFFFC3 ret 1ED0 fullbsout: 1ED0 FFFFFFB008 mov al,8 1ED2 FFFFFFE8FFFFFFECFFFFFFF call stdoutal 1ED5 FFFFFFB020 mov al,20h 1ED7 FFFFFFE8FFFFFFE7FFFFFFF call stdoutal 1EDA FFFFFFB008 mov al,8 1EDC FFFFFFEBFFFFFFE3 jmp stdoutal ; GETLINE - Print a prompt (address in DX, length in CX) and read a line ; of input. ; GETLINE0 - Same as above, but use the output line (so far), plus two ; spaces and a colon, as a prompt. ; GETLINE00 - Same as above, but use the output line (so far) as a prompt. ; Entry CX Length of prompt (getline only) ; DX Address of prompt string (getline only) ; ; DI Address + 1 of last character in prompt (getline0 and ; getline00 only) ; ; Exit AL First nonwhite character in input line ; SI Address of the next character after that ; Uses AH,BX,CX,DX,DI 1EDE getline0: 1EDE FFFFFFB82020 mov ax,' ' ;add two spaces and a colon 1EE1 FFFFFFAB stosw 1EE2 FFFFFFB03A mov al,':' 1EE4 FFFFFFAA stosb 1EE5 getline00: 1EE5 FFFFFFBA 0000o mov dx,offset line_out 1EE8 FFFFFF8BFFFFFFCF mov cx,di 1EEA 2BFFFFFFCA sub cx,dx 1EEC getline proc 1EEC FFFFFF890E 0000o mov [promptlen],cx ;save length of prompt 1EF0 FFFFFFE8FFFFFFA00D call stdout ;write prompt (string DX, size CX) if REDIRECT 1EF3 FFFFFFF606 0000o FFFFFF test [fStdin], AT_DEVICE 1EF8 7520 jnz gl5 ;jmp if tty input 1EFA FFFFFFC706 0000o 0000o mov [lastcmd], offset dmycmd ; This part reads the input line from a file (in the case of ; 'debug < file'). It is necessary to do this by hand because DOS ; function 0ah does not handle EOF correctly otherwise. This is ; especially important for debug because it traps Control-C. 1F00 FFFFFFE86C00 call fillbuf 1F03 7303FFFFFFE9FFFFFFA7FFF jc q_cmd 1F08 FFFFFF8936 0000o mov [bufnext], si 1F0C FFFFFF8B0E 0000o mov cx,[bufend] 1F10 FFFFFFBA 0002o mov dx,offset line_in + 2 1F13 2BFFFFFFCA sub cx,dx 1F15 FFFFFFE87B0D call stdout ;print out the received line 1F18 FFFFFFEB0D jmp gl6 ;done 1F1A gl5: endif ;--- input a line if stdin is a device (tty) 1F1A FFFFFFBA 0000o mov dx,offset line_in 1F1D FFFFFFE8FFFFFF95FFFFFFF call InDos 1F20 7511 jnz rawinput ife RING0 1F22 FFFFFFB40A mov ah,0ah ;buffered keyboard input 1F24 FFFFFFE8FFFFFF9EFFFFFFF call doscall endif 1F27 gl6: 1F27 FFFFFFB00A mov al,10 1F29 FFFFFFE8FFFFFF95FFFFFFF call stdoutal 1F2C FFFFFFBE 0002o mov si,offset line_in + 2 1F2F FFFFFFE8FFFFFFCF02 call skipwhite 1F32 FFFFFFC3 ret 1F33 rawinput: 1F33 57 push di 1F34 1E push ds 1F35 07 pop es 1F36 42 inc dx 1F37 42 inc dx 1F38 FFFFFF8BFFFFFFFA mov di,dx 1F3A rawnext: 1F3A FFFFFFB400 mov ah,00h if RING0 else 1F3C FFFFFFCD16 int 16h endif 1F3E 3C00 cmp al,0 1F40 74FFFFFFF8 jz rawnext 1F42 3CFFFFFFE0 cmp al,0E0h 1F44 74FFFFFFF4 jz rawnext 1F46 3C08 cmp al,08h 1F48 741B jz del_key 1F4A 3C7F cmp al,7Fh 1F4C 7417 jz del_key 1F4E FFFFFFAA stosb if RING0 endif 1F4F FFFFFFE86FFFFFFFFF call stdoutal 1F52 3C0D cmp al,0Dh 1F54 75FFFFFFE4 jnz rawnext 1F56 4F dec di 1F57 2BFFFFFFFA sub di,dx 1F59 FFFFFF8BFFFFFFC7 mov ax,di 1F5B FFFFFF8BFFFFFFFA mov di,dx 1F5D FFFFFF8845FFFFFFFF mov byte ptr [di-1],al 1F60 4A dec dx 1F61 4A dec dx 1F62 5F pop di 1F63 FFFFFFEBFFFFFFC2 jmp gl6 1F65 del_key: 1F65 3BFFFFFFFA cmp di,dx 1F67 74FFFFFFD1 jz rawnext 1F69 4F dec di 1F6A FFFFFFE863FFFFFFFF call fullbsout 1F6D FFFFFFEBFFFFFFCB jmp rawnext 1F6F getline endp if REDIRECT ; FILLBUF - Fill input buffer, read from a file. ; called by getline & within 'e' cmd in interactive mode. ; Exit SI Next readable byte ; Carry flag is set if and only if there is an error (e.g., eof) ; Uses None. 1F6F fillbuf proc 1F6F 50 push ax 1F70 53 push bx 1F71 51 push cx 1F72 52 push dx 1F73 FFFFFFBE 0002o mov si, offset line_in+2 1F76 56 push si ;--- read input bytewise until LF. ;--- note that debug expects CR/LF pairs - ;--- lines with just LF as EOL marker won't do. 1F77 @@: 1F77 FFFFFF8BFFFFFFD6 mov dx, si 1F79 FFFFFF81FFFFFFFA 0101o cmp dx, offset line_in+LINE_IN_LEN ; "line too long" is treated as EOF 1F7D 741A jz fb1 1F7F FFFFFFB90100 mov cx, 1 1F82 33FFFFFFDB xor bx, bx 1F84 FFFFFFB43F mov ah, 3fh ; read file 1F86 FFFFFFE83CFFFFFFF1 call doscall 1F89 720E jc fb1 1F8B 23FFFFFFC0 and ax,ax 1F8D 740A jz fb1 ; if eof 1F8F FFFFFF8A04 mov al,[si] 1F91 46 inc si 1F92 3C0A cmp al,LF 1F94 75FFFFFFE1 jnz @B 1F96 4E dec si ; the LF itself should NOT be handled by the cmds. 1F97 FFFFFFEB01 jmp fb2 1F99 fb1: 1F99 FFFFFFF9 stc 1F9A fb2: 1F9A FFFFFF8936 0000o mov [bufend], si 1F9E 5E pop si 1F9F 5A pop dx 1FA0 59 pop cx 1FA1 5B pop bx 1FA2 58 pop ax 1FA3 FFFFFFC3 ret 1FA4 fillbuf endp endif ; PARSECM - Parse arguments for C and M commands. ; Entry AL First nonwhite character of parameters ; SI Address of the character after that ; Exit DS:(E)SI Address from first parameter ; ES:(E)DI Address from second parameter ; (E)CX Length of address range minus one ; m cmd in real-mode expects dst segm:ofs in BX:DX 1FA4 parsecm proc 1FA4 FFFFFFE8FFFFFFBEFFFFFFF call prephack 1FA7 33FFFFFFC9 xor cx,cx 1FA9 FFFFFFE8FFFFFFF400 call getrangeDS ;get address range into bx:(e)dx bx:(e)cx 1FAC 53 push bx ;save segment first address ( src for m cmd ) if ?PM endif 1FAD 2BFFFFFFCA sub cx,dx ;number of bytes minus one if RING0 and V86M endif 1FAF 52 push dx 1FB0 51 push cx 1FB1 pc_01: 1FB1 FFFFFFE82C02 call skipcomm0 ;--- get the second ( destination ) address @movs bx,[regs.rDS] ; DS = default for "destination" 1FB4 FFFFFF8B1E 0020o 1 mov bx, [regs.rDS] if ?PM endif 1FB8 FFFFFFE82601 call getaddr ;get destination address into bx:(e)dx 1FBB 59 pop cx 1FBC FFFFFF8BFFFFFFF9 mov di,cx 1FBE 03FFFFFFFA add di,dx 1FC0 720A jc errorj7 ;if it wrapped around 1FC2 FFFFFFE80F02 call chkeol ;expect end of line 1FC5 FFFFFF8BFFFFFFFA mov di,dx 1FC7 FFFFFF8EFFFFFFC3 mov es, bx 1FC9 5E pop si 1FCA 1F pop ds 1FCB FFFFFFC3 ret 1FCC parsecm endp 1FCC errorj7: 1FCC FFFFFFE9FFFFFFD5FFFFFFF jmp cmd_error if LCMD or WCMD ; PARSELW - Parse command line for L and W commands. ; ; Entry AL First nonwhite character of parameters ; SI Address of the character after that ; ; Exit If there is at most one argument (program load/write), then the ; zero flag is set, and registers are set as follows: ; bx:(e)dx Transfer address ; ; If there are more arguments (absolute disk read/write), then the ; zero flag is clear, and registers are set as follows: ; ; [usepacket] == 0: ; AL Drive number ; CX Number of sectors to read ; DX Beginning logical sector number ; DS:BX Transfer address ; ; [usepacket] != 0: ; AL Drive number ; BX Offset of packet ; CX 0FFFFh 1FCF parselw proc 1FCF FFFFFF8B1E 002Ao mov bx,[regs.rCS] ;default segment 1FD3 FFFFFFBA0001 mov dx,100h ;default offset 1FD6 3C0D cmp al,CR 1FD8 744E je plw2 ;if no arguments ;--- v2.0: added IsWriteableBX since getaddr will no longer translate BX ;--- to a writeable selector. 1FDA FFFFFFE80401 call getaddr ;get buffer address into bx:(e)dx if ?PM endif 1FDD FFFFFFE80002 call skipcomm0 1FE0 3C0D cmp al,CR 1FE2 7444 je plw2 ;if only one argument 1FE4 53 push bx ;save segment 1FE5 52 push dx ;save offset 1FE6 FFFFFFBBFFFFFF8000 mov bx,80h ;max number of sectors to read 1FE9 FFFFFFF7FFFFFFDA neg dx 1FEB 7406 jz @F ;if address is zero 1FED FFFFFFB109 mov cl,9 1FEF FFFFFFD3FFFFFFEA shr dx,cl ;max number of sectors which can be read 1FF1 FFFFFF8BFFFFFFFA mov di,dx 1FF3 @@: 1FF3 FFFFFFE8FFFFFFBC01 call getbyte ;get drive number (DL) 1FF6 FFFFFFE8FFFFFFE701 call skipcomm0 1FF9 52 push dx ; add dl,'A' 1FFA FFFFFF8816 0000o mov [driveno],dl 1FFE FFFFFFE87B01 call getdword ;get relative sector number 2001 FFFFFFE8FFFFFFDC01 call skipcomm0 2004 53 push bx ;save sector number high 2005 52 push dx ;save sector number low 2006 56 push si ;in case we find an error 2007 FFFFFFE8FFFFFF9E01 call getword ;get sector count 200A 4A dec dx 200B 3BFFFFFFD7 cmp dx,di 200D 73FFFFFFBD jae errorj7 ;if too many sectors 200F 42 inc dx 2010 FFFFFF8BFFFFFFCA mov cx,dx 2012 FFFFFFE8FFFFFFBF01 call chkeol ;expect end of line 2015 FFFFFF803E 0000o 00 cmp [usepacket],0 201A 750D jnz plw3 ;if new-style packet called for 201C 5E pop si ;in case of error 201D 5A pop dx ;get LoWord starting logical sector number 201E 5B pop bx ;get HiWord 201F 0BFFFFFFDB or bx,bx ;just a 16bit sector number possible 2021 75FFFFFFA9 jnz errorj7 ;if too big 2023 58 pop ax ;drive number 2024 5B pop bx ;transfer buffer ofs 2025 1F pop ds ;transfer buffer seg 2026 0BFFFFFFC9 or cx,cx ;set nonzero flag 2028 plw2: 2028 FFFFFFC3 ret ;--- new style packet, [usepacket] != 0 2029 plw3: 2029 5B pop bx ;discard si 202A FFFFFFBB 0000o mov bx,offset packet 202D FFFFFF8F07 pop word ptr [bx].PACKET.secno+0 202F FFFFFF8F4702 pop word ptr [bx].PACKET.secno+2 2032 FFFFFF894F04 mov [bx].PACKET.numsecs,cx 2035 58 pop ax ;drive number 2036 FFFFFF8F4706 pop word ptr [bx].PACKET.dstofs 2039 5A pop dx 203A 33FFFFFFC9 xor cx,cx if ?PM endif 203C FFFFFF895708 mov [bx].PACKET.dstseg,dx ;PACKET.dstseg or HiWord(PACKET32.dstofs) 203F 49 dec cx ;set nonzero flag and make cx = -1 2040 FFFFFFC3 ret 2041 parselw endp endif ; PARSE_PT - Parse 'p' or 't' command. ; Entry AL First character of command ; SI Address of next character ; Exit CX Number of times to repeat ; Uses AH,BX,CX,DX. 2041 parse_pt proc 2041 FFFFFFE81500 call parseql ;get optional <=addr> argument 2044 FFFFFFE8FFFFFF9901 call skipcomm0 ;skip any white space 2047 FFFFFFB90100 mov cx,1 ;default count 204A 3C0D cmp al,CR 204C 740A je @F ;if no count given 204E FFFFFFE85701 call getword 2051 FFFFFFE8FFFFFF8001 call chkeol ;expect end of line here 2054 FFFFFF8BFFFFFFCA mov cx,dx 2056 FFFFFFE33A jcxz errorj10 ;must be at least 1 2058 @@: ; call seteq ;make the = operand take effect 2058 FFFFFFC3 ret 2059 parse_pt endp ; PARSEQL - Parse '=' operand for 'g', 'p' and 't' commands. ; Entry AL First character of command ; SI Address of next character ; Exit AL First character beyond range ; SI Address of the character after that ; eqflag Nonzero if an '=' operand was present ; eqladdr Address, if one was given ; Uses AH,BX,CX,(E)DX. 2059 parseql proc 2059 FFFFFF8B1E 002Ao mov bx,[regs.rCS] ;default segment 205D FFFFFFA2 0000o mov [eqflag],al 2060 3C3D cmp al,'=' 2062 750A jne peq1 ;if no '=' operand 2064 FFFFFFE8FFFFFF9A01 call skipwhite if ?DPMI endif if RING0 and V86M endif 2067 FFFFFFE87700 call getaddr ;get address into bx:(e)dx sizeprfX ;mov [eqladdr+0],edx 206A FFFFFF8916 0000o mov [eqladdr+0],dx if RING0 and V86M endif 206E peq1: 206E FFFFFF891E 0004o mov [eqladdr+4],bx 2072 FFFFFFC3 ret 2073 parseql endp ; SETEQ - Copy the = arguments to their place, if appropriate. This ; is not done immediately, because the g/p/t cmds may have syntax errors. ; Uses AX. 2073 seteq proc 2073 FFFFFF803E 0000o 3D cmp [eqflag],'=' ;'=' argument given? 2078 7511 jnz @F sizeprfX ;mov eax,[eqladdr+0] 207A FFFFFFA1 0000o mov ax,[eqladdr+0] sizeprfX ;mov [regs.rIP+0],eax 207D FFFFFFA3 0030o mov [regs.rIP+0],ax 2080 FFFFFFA1 0004o mov ax,[eqladdr+4] 2083 FFFFFFA3 002Ao mov [regs.rCS],ax 2086 FFFFFFC606 0000o 00 mov [eqflag],0 ;clear the flag 208B @@: 208B FFFFFFC3 ret 208C seteq endp ;--- get a valid offset for segment in BX ;--- in: BX=segment/selector ;--- out: offset in (E)DX 208C getofsforbx proc if ?PM endif sizeprfX ; v2.0: xor edx,edx 208C 33FFFFFFD2 xor dx, dx 208E FFFFFFE81701 call getword ; @dprintf "getofsforbx: edx=%lX", edx 2091 FFFFFFC3 ret 2092 getofsforbx endp 2092 errorj10: 2092 FFFFFFE90FFFFFFFFC jmp cmd_error ;--- a range is entered with the L/ength argument ;--- get a valid length for segment in BX ;--- L=0 means 64 kB (at least in 16bit mode) ;--- return with NC if value ok. 2095 getlenforbx proc if ?PM endif 2095 52 push dx 2096 FFFFFFE80F01 call getword 2099 FFFFFF8BFFFFFFCA mov cx,dx 209B 5A pop dx ; stc ; jcxz glfbx_2 ;0 means 64k 209C 49 dec cx 209D 03FFFFFFCA add cx,dx ;C if it wraps around 209F glfbx_2: 209F FFFFFFC3 ret 20A0 getlenforbx endp ;--- get range with default segment DS 20A0 getrangeDS proc @movs bx,[regs.rDS] 20A0 FFFFFF8B1E 0020o 1 mov bx, [regs.rDS] ;--- fall thru! 20A4 getrangeDS endp ; getrange - Get address range from input line. ; a range consists of: ; 1. a start address: [segment:]start-offset ; 2. an end-offset or a 'L' followed by a length. ; Entry AL First character of range ; SI Address of next character ; BX Default segment to use ; (E)CX Default length to use (or 0 if not allowed) ; Exit AL First character beyond range ; SI Address of the character after that ; BX:(E)DX First address in range ; BX:(E)CX Last address in range ; Uses AH 20A4 getrange proc ; used by c, d, m, s, u cmds 20A4 51 push cx 20A5 FFFFFFE83900 call getaddr ;get address into bx:(e)dx (sets bAddr32 if ?PM) 20A8 56 push si 20A9 FFFFFFE83401 call skipcomm0 20AC 3C20 cmp al,' ' 20AE 770F ja gr2 20B0 5E pop si ;restore si and cx 20B1 59 pop cx 20B2 FFFFFFE3FFFFFFDE jcxz errorj10 ;if a range is mandatory if ?PM endif 20B4 49 dec cx 20B5 03FFFFFFCA add cx,dx 20B7 7303 jnc gr1 ;if no wraparound 20B9 FFFFFFB9FFFFFFFFFFFFFFF mov cx,0ffffh ;go to end of segment 20BC gr1: 20BC 4E dec si ;restore al 20BD FFFFFFAC lodsb 20BE FFFFFFC3 ret 20BF gr2: 20BF 0C20 or al,TOLOWER 20C1 3C6C cmp al,'l' 20C3 740D je gr3 ;if a range is given ; call skipwh0 ;get next nonblank if ?PM endif 20C5 52 push dx 20C6 FFFFFFE8FFFFFFDF00 call getword 20C9 FFFFFF8BFFFFFFCA mov cx,dx 20CB 5A pop dx 20CC 3BFFFFFFD1 cmp dx,cx 20CE 770E ja errorj2 ;if empty range 20D0 FFFFFFEB08 jmp gr4 20D2 gr3: 20D2 FFFFFFE80A01 call skipcomma ;discard the 'l' 20D5 FFFFFFE8FFFFFFBDFFFFFFF call getlenforbx 20D8 7204 jc errorj2 20DA gr4: 20DA FFFFFF83FFFFFFC404 add sp,4 ;discard saved cx, si 20DD FFFFFFC3 ret 20DE getrange endp 20DE errorj2: 20DE FFFFFFE9FFFFFFC3FFFFFFF jmp cmd_error ; getaddr - Get address from input line. ; Entry AL First character of address ; SI Address of next character ; BX Default segment to use ; Exit AL First character beyond address ; SI Address of the character after that ; BX:(E)DX Address found ; Uses AH,CX 20E1 getaddr proc if ?PM endif 20E1 FFFFFFE8FFFFFFA8FFFFFFF call getofsforbx 20E4 56 push si 20E5 FFFFFFE81A01 call skipwh0 20E8 3C3A cmp al,':' 20EA 7404 je ga2 ;if this is a segment descriptor 20EC 5E pop si 20ED 4E dec si 20EE FFFFFFAC lodsb 20EF FFFFFFC3 ret 20F0 ga2: 20F0 58 pop ax ;throw away saved si @movs bx,dx ;mov segment into BX 20F1 FFFFFF8BFFFFFFDA 1 mov bx, dx 20F3 ga3: 20F3 FFFFFFE80B01 call skipwhite ;skip to next word if ?PM endif 20F6 FFFFFFE8FFFFFF93FFFFFFF call getofsforbx if ?PM endif 20F9 FFFFFFC3 ret 20FA getaddr endp ; GETSTR - Get string of bytes. Put the answer in line_out. ; Entry AL first character ; SI address of next character ; Exit [line_out] first byte of string ; DI address of last+1 byte of string ; Uses AX,CL,DL,SI 20FA getstr proc 20FA FFFFFFBF 0000o mov di,offset line_out 20FD 3C0D cmp al,CR 20FF 74FFFFFFDD je errorj2 ;we don't allow empty byte strings 2101 gs1: 2101 3C27 cmp al,"'" 2103 740C je gs2 ;if string 2105 3C22 cmp al,'"' 2107 7408 je gs2 ;ditto 2109 FFFFFFE8FFFFFFA600 call getbyte;byte in DL 210C FFFFFF8815 mov [di],dl ;store the byte 210E 47 inc di 210F FFFFFFEB13 jmp gs6 2111 gs2: 2111 FFFFFF8AFFFFFFE0 mov ah,al ;save quote character 2113 gs3: 2113 FFFFFFAC lodsb 2114 3AFFFFFFC4 cmp al,ah 2116 7407 je gs5 ;if possible end of string 2118 3C0D cmp al,CR 211A 74FFFFFFC2 je errorj2 ;if end of line 211C gs4: 211C FFFFFFAA stosb ;save character and continue 211D FFFFFFEBFFFFFFF4 jmp gs3 211F gs5: 211F FFFFFFAC lodsb 2120 3AFFFFFFC4 cmp al,ah 2122 74FFFFFFF8 je gs4 ;if doubled quote character 2124 gs6: 2124 FFFFFFE8FFFFFFB900 call skipcomm0 ;go back for more 2127 3C0D cmp al,CR 2129 75FFFFFFD6 jne gs1 ;if not done yet 212B FFFFFFC3 ret 212C getstr endp ;--- in: AL=first char ;--- SI->2. char ;--- out: value in BX:DX 212C issymbol proc 212C 50 push ax 212D 57 push di 212E 51 push cx 212F FFFFFFBF 0000o mov di,offset regnames 2132 FFFFFFB91000 mov cx,NUMREGNAMES 2135 FFFFFF8A24 mov ah,[si] ;get second char of name 2137 25FFFFFFDFFFFFFFDF and ax,TOUPPER_W 213A FFFFFF807C0141 cmp byte ptr [si+1],'A' 213E 7311 jnc maybenotasymbol 2140 FFFFFFF2FFFFFFAF repnz scasw 2142 7533 jnz notasymbol 2144 33FFFFFFDB xor bx,bx 2146 FFFFFF8B7D1E mov di, [di+NUMREGNAMES*2 - 2] 2149 getsymlow: 2149 FFFFFF8B15 mov dx,[di] 214B 46 inc si ;skip over second char 214C FFFFFFF8 clc 214D 59 pop cx 214E 5F pop di 214F 58 pop ax 2150 FFFFFFC3 ret 2151 maybenotasymbol: 2151 3C45 cmp al,'E' ;386 standard register names start with E 2153 7522 jnz notasymbol 2155 FFFFFF8A4401 mov al,[si+1] 2158 FFFFFF86FFFFFFC4 xchg al,ah 215A 25FFFFFFDFFFFFFFDF and ax,TOUPPER_W 215D 3D4950 cmp ax,"PI" 2160 7505 jnz @F 2162 FFFFFFBF 0030o mov di,offset regs.rIP 2165 FFFFFFEB0A jmp iseip 2167 @@: 2167 FFFFFFB90800 mov cx,8 ;scan for the 8 standard register names only 216A FFFFFFF2FFFFFFAF repnz scasw 216C 7509 jnz notasymbol 216E FFFFFF8B7D1E mov di,[di+NUMREGNAMES*2 - 2] 2171 iseip: 2171 FFFFFF8B5D02 mov bx,[di+2] ;get HiWord of DWORD register 2174 46 inc si 2175 FFFFFFEBFFFFFFD2 jmp getsymlow 2177 notasymbol: 2177 59 pop cx 2178 5F pop di 2179 58 pop ax 217A FFFFFFF9 stc 217B FFFFFFC3 ret 217C issymbol endp ; GETDWORD - Get (hex) dword from input line. ; Entry AL first character ; SI address of next character ; Exit BX:DX dword ; AL first character not in the word ; SI address of the next character after that ; Uses AH,CL 217C getdword proc 217C FFFFFFE8FFFFFFADFFFFFFF call issymbol 217F 7202 jc @F 2181 FFFFFFAC lodsb 2182 FFFFFFC3 ret 2183 @@: 2183 FFFFFFE83400 call getnyb 2186 721D jc errorj6 ;if error 2188 FFFFFF98 cbw 2189 FFFFFF92 xchg ax,dx 218A 33FFFFFFDB xor bx,bx ;clear high order word 218C nextchar: 218C FFFFFFAC lodsb 218D FFFFFFE82A00 call getnyb 2190 7212 jc done 2192 FFFFFFF6FFFFFFC7FFFFFFF test bh,0f0h 2195 750E jnz errorj6 ;if too big 2197 FFFFFFB90400 mov cx,4 219A @@: 219A FFFFFFD1FFFFFFE2 shl dx,1 ;double shift left 219C FFFFFFD1FFFFFFD3 rcl bx,1 219E FFFFFFE2FFFFFFFA loop @B 21A0 0AFFFFFFD0 or dl,al 21A2 FFFFFFEBFFFFFFE8 jmp nextchar 21A4 done: 21A4 FFFFFFC3 ret 21A5 getdword endp 21A5 errorj6: 21A5 FFFFFFE9FFFFFFFCFFFFFFF jmp cmd_error ; GETWORD - Get (hex) word from input line. ; Entry AL first character ; SI address of next character ; Exit DX word ; AL first character not in the word ; SI address of the next character after that ; Uses AH,CL 21A8 getword proc 21A8 53 push bx 21A9 FFFFFFE8FFFFFFD0FFFFFFF call getdword 21AC 23FFFFFFDB and bx,bx ;hiword clear? 21AE 5B pop bx 21AF 75FFFFFFF4 jnz errorj6 ;if error 21B1 FFFFFFC3 ret 21B2 getword endp ; GETBYTE - Get (hex) byte from input line into DL. ; Entry AL first character ; SI address of next character ; Exit DL byte ; AL first character not in the word ; SI address of the next character after that ; Uses AH,CL 21B2 getbyte: 21B2 FFFFFFE8FFFFFFF3FFFFFFF call getword 21B5 22FFFFFFF6 and dh,dh 21B7 75FFFFFFEC jnz errorj6 ;if error 21B9 FFFFFFC3 ret ;--- GETNYB - Convert the hex character in AL into a nybble. Return ;--- carry set in case of error. 21BA getnyb: 21BA 50 push ax 21BB 2C30 sub al,'0' 21BD 3C09 cmp al,9 21BF 760C jbe gn1 ;if normal digit 21C1 58 pop ax 21C2 50 push ax 21C3 0C20 or al,TOLOWER 21C5 2C61 sub al,'a' 21C7 3C05 cmp al,'f'-'a' 21C9 7706 ja gn2 ;if not a-f or A-F 21CB 040A add al,10 21CD gn1: 21CD 44 inc sp ;normal return (first pop old AX) 21CE 44 inc sp 21CF FFFFFFF8 clc 21D0 FFFFFFC3 ret 21D1 gn2: 21D1 58 pop ax ;error return 21D2 FFFFFFF9 stc 21D3 FFFFFFC3 ret ;--- CHKEOL1 - Check for end of line. 21D4 chkeol: 21D4 FFFFFFE82B00 call skipwh0 21D7 3C0D cmp al,CR 21D9 7501 jne errorj8 ;if not found 21DB FFFFFFC3 ret 21DC errorj8: 21DC FFFFFFE9FFFFFFC5FFFFFFF jmp cmd_error ; SKIPCOMMA - Skip white space, then an optional comma, and more white ; space. ; SKIPCOMM0 - Same as above, but we already have the character in AL. 21DF skipcomma: 21DF FFFFFFAC lodsb 21E0 skipcomm0: 21E0 FFFFFFE81F00 call skipwh0 21E3 3C2C cmp al,',' 21E5 750F jne sc2 ;if no comma 21E7 56 push si 21E8 FFFFFFE81600 call skipwhite 21EB 3C0D cmp al,CR 21ED 7504 jne sc1 ;if not end of line 21EF 5E pop si 21F0 FFFFFFB02C mov al,',' 21F2 FFFFFFC3 ret 21F3 sc1: 21F3 FFFFFF83FFFFFFC402 add sp,2 ;pop si into nowhere 21F6 sc2: 21F6 FFFFFFC3 ret ;--- SKIPALPHA - Skip alphabetic character, and then white space. 21F7 skipalpha: 21F7 FFFFFFAC lodsb 21F8 24FFFFFFDF and al,TOUPPER 21FA 2C41 sub al,'A' 21FC 3C19 cmp al,'Z'-'A' 21FE 76FFFFFFF7 jbe skipalpha 2200 4E dec si ; jmp skipwhite ;(control falls through) ;--- SKIPWHITE - Skip spaces and tabs. ;--- SKIPWH0 - Same as above, but we already have the character in AL. 2201 skipwhite: 2201 FFFFFFAC lodsb 2202 skipwh0: 2202 3C20 cmp al,' ' 2204 74FFFFFFFB je skipwhite 2206 3C09 cmp al,TAB 2208 74FFFFFFF7 je skipwhite 220A FFFFFFC3 ret ;--- IFSEP Compare AL with separators ' ', '\t', ',', ';', '='. 220B ifsep: 220B 3C20 cmp al,' ' 220D 740E je @F 220F 3C09 cmp al,TAB 2211 740A je @F 2213 3C2C cmp al,',' 2215 7406 je @F 2217 3C3B cmp al,';' 2219 7402 je @F 221B 3C3D cmp al,'=' 221D @@: 221D FFFFFFC3 ret ;--- disassembler code include C C ; Here is the start of the disassembly part of the program. C C ;--- flag bits preflags/preused C = 1 C PRESEG equ 1 ;segment prefix = 2 C PREREP equ 2 ;rep prefixes = 4 C PREREPZ equ 4 ;f3, not f2 = 8 C PRELOCK equ 8 ;lock prefix = 10 C PRE32D equ 10h ;flag for operand size (66h) = 20 C PRE32A equ 20h ;flag for address size (67h) = 40 C PREWAIT equ 40h ;prefix wait (not really a prefix) = 80 C GOTREGM equ 80h ;preused only: set if we have the reg/mem part C C ;--- equates for disflags: C = 1 C DIS_F_REPT equ 1 ;repeat after pop ss, etc. = 2 C DIS_F_SHOW equ 2 ;show memory contents = 4 C DIS_I_SHOW equ 4 ;there are memory contents to show = 8 C DIS_I_UNUSED equ 8 ;(internal) print " (unused)" = 10 C DIS_I_SHOWSIZ equ 10h ;(internal) always show the operand size = 20 C DIS_I_KNOWSIZ equ 20h ;(internal) we know the operand size of instr. = 80 C DIS_I_MEMACC equ 80h ;(internal) we're just accessing a mem ref ( dumpreg ) C C OT macro num > C exitm > C endm C C ;--- define "general purpose register" C DefGPR macro regist > C REG_®ist& equ ($ - rgnam816)/2 > C db "®ist&" > C endm C C ;--- register table C ;--- 0- 7: 8-bit registers C ;--- 8-15: 16-bit registers C ;--- 16-23: 32-bit registers C = 18 C REG_NO_GPR equ 24 C C ;--- define "segment register" C DefSR macro regist > C REG_®ist& equ REG_NO_GPR + ($ - segrgnam)/2 > C db "®ist&" > C endm C 00E0 C _DATA segment C 00E0 0000 C dis_n dw 0 ;number of bytes in instruction so far 00E2 0000 C dw 0 ;must follow dis_n (will always remain 0) 00E4 0000 C idxins dw 0 ;index of the instruction (unsqueezed) 00E6 0000 C addrr dw 0 ;address in mod r/m byte (16bit only) 00E8 0000 C sizeloc dw 0 ;address of size words in output line C C ;--- preflags and preused must be consecutive 00EA 00 C preflags db 0 ;flags for prefixes found so far 00EB 00 C preused db 0 ;flags for prefixes used so far C 00EC 00 C bInstr db 0 ;the main instruction byte 00ED 00 C rmsize db 0 ;<0 or 0 or >0 means mod r/m is 8 or 16 or 32 00EE 00 C segmnt db 0 ;segment determined by prefix (or otherwise) 00EF 00 C disflags db 0 ;flags for the disassembler 00F0 00 C disflags2 db 0 ;another copy of DIS_I_KNOWSIZ C 00F1 C _DATA ends C 14EF C CONST segment C C include C C ;--- This file was generated by mktables.exe. C C ;--- compressed table of the opcode types. C ;--- If the item has the format OT(xx), it refers to table 'oplists'. C ;--- Otherwise it's an offset for internal table 'dis_jmp2'. C 0000 C OTDATA segment C 0000 C optypes label byte 0000 101011110D0D4C4C C db 04h+OPTYPES_BASE,04h+OPTYPES_BASE,05h+OPTYPES_BASE,05h+OPTYPES_BASE,01h+OPTYPES_BASE,01h+OPTYPES_BASE,40h+OPTYPES_BASE,40h+OPTYPES_BASE ; 00 - 07 (main opcode part) 0008 101011110D0D4D02 C db 04h+OPTYPES_BASE,04h+OPTYPES_BASE,05h+OPTYPES_BASE,05h+OPTYPES_BASE,01h+OPTYPES_BASE,01h+OPTYPES_BASE,41h+OPTYPES_BASE, 002h ; 08 - 0f 0010 101011110D0D4E4E C db 04h+OPTYPES_BASE,04h+OPTYPES_BASE,05h+OPTYPES_BASE,05h+OPTYPES_BASE,01h+OPTYPES_BASE,01h+OPTYPES_BASE,42h+OPTYPES_BASE,42h+OPTYPES_BASE ; 10 - 17 0018 101011110D0D4F4F C db 04h+OPTYPES_BASE,04h+OPTYPES_BASE,05h+OPTYPES_BASE,05h+OPTYPES_BASE,01h+OPTYPES_BASE,01h+OPTYPES_BASE,43h+OPTYPES_BASE,43h+OPTYPES_BASE ; 18 - 1f 0020 101011110D0D0A0C C db 04h+OPTYPES_BASE,04h+OPTYPES_BASE,05h+OPTYPES_BASE,05h+OPTYPES_BASE,01h+OPTYPES_BASE,01h+OPTYPES_BASE, 00Ah,00h+OPTYPES_BASE ; 20 - 27 0028 101011110D0D0A0C C db 04h+OPTYPES_BASE,04h+OPTYPES_BASE,05h+OPTYPES_BASE,05h+OPTYPES_BASE,01h+OPTYPES_BASE,01h+OPTYPES_BASE, 00Ah,00h+OPTYPES_BASE ; 28 - 2f 0030 101011110D0D0A0C C db 04h+OPTYPES_BASE,04h+OPTYPES_BASE,05h+OPTYPES_BASE,05h+OPTYPES_BASE,01h+OPTYPES_BASE,01h+OPTYPES_BASE, 00Ah,00h+OPTYPES_BASE ; 30 - 37 0038 101011110D0D0A0C C db 04h+OPTYPES_BASE,04h+OPTYPES_BASE,05h+OPTYPES_BASE,05h+OPTYPES_BASE,01h+OPTYPES_BASE,01h+OPTYPES_BASE, 00Ah,00h+OPTYPES_BASE ; 38 - 3f 0040 1D1D1D1D1D1D1D1D C db 11h+OPTYPES_BASE,11h+OPTYPES_BASE,11h+OPTYPES_BASE,11h+OPTYPES_BASE,11h+OPTYPES_BASE,11h+OPTYPES_BASE,11h+OPTYPES_BASE,11h+OPTYPES_BASE ; 40 - 47 0048 1D1D1D1D1D1D1D1D C db 11h+OPTYPES_BASE,11h+OPTYPES_BASE,11h+OPTYPES_BASE,11h+OPTYPES_BASE,11h+OPTYPES_BASE,11h+OPTYPES_BASE,11h+OPTYPES_BASE,11h+OPTYPES_BASE ; 48 - 4f 0050 1D1D1D1D1D1D1D1D C db 11h+OPTYPES_BASE,11h+OPTYPES_BASE,11h+OPTYPES_BASE,11h+OPTYPES_BASE,11h+OPTYPES_BASE,11h+OPTYPES_BASE,11h+OPTYPES_BASE,11h+OPTYPES_BASE ; 50 - 57 0058 1D1D1D1D1D1D1D1D C db 11h+OPTYPES_BASE,11h+OPTYPES_BASE,11h+OPTYPES_BASE,11h+OPTYPES_BASE,11h+OPTYPES_BASE,11h+OPTYPES_BASE,11h+OPTYPES_BASE,11h+OPTYPES_BASE ; 58 - 5f 0060 0C0C13120A0A0A0A C db 00h+OPTYPES_BASE,00h+OPTYPES_BASE,07h+OPTYPES_BASE,06h+OPTYPES_BASE, 00Ah, 00Ah, 00Ah, 00Ah ; 60 - 67 0068 412D422B0C0C0C0C C db 35h+OPTYPES_BASE,21h+OPTYPES_BASE,36h+OPTYPES_BASE,1Fh+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE ; 68 - 6f 0070 3333333333333333 C db 27h+OPTYPES_BASE,27h+OPTYPES_BASE,27h+OPTYPES_BASE,27h+OPTYPES_BASE,27h+OPTYPES_BASE,27h+OPTYPES_BASE,27h+OPTYPES_BASE,27h+OPTYPES_BASE ; 70 - 77 0078 3333333333333333 C db 27h+OPTYPES_BASE,27h+OPTYPES_BASE,27h+OPTYPES_BASE,27h+OPTYPES_BASE,27h+OPTYPES_BASE,27h+OPTYPES_BASE,27h+OPTYPES_BASE,27h+OPTYPES_BASE ; 78 - 7f 0080 0404000410101111 C db 004h, 004h, 000h, 004h,04h+OPTYPES_BASE,04h+OPTYPES_BASE,05h+OPTYPES_BASE,05h+OPTYPES_BASE ; 80 - 87 0088 1010111136133704 C db 04h+OPTYPES_BASE,04h+OPTYPES_BASE,05h+OPTYPES_BASE,05h+OPTYPES_BASE,2Ah+OPTYPES_BASE,07h+OPTYPES_BASE,2Bh+OPTYPES_BASE, 004h ; 88 - 8f 0090 0C4A4A4A4A4A4A4A C db 00h+OPTYPES_BASE,3Eh+OPTYPES_BASE,3Eh+OPTYPES_BASE,3Eh+OPTYPES_BASE,3Eh+OPTYPES_BASE,3Eh+OPTYPES_BASE,3Eh+OPTYPES_BASE,3Eh+OPTYPES_BASE ; 90 - 97 0098 0C0C190C0C0C0C0C C db 00h+OPTYPES_BASE,00h+OPTYPES_BASE,0Dh+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE ; 98 - 9f 00A0 383839390C0C0C0C C db 2Ch+OPTYPES_BASE,2Ch+OPTYPES_BASE,2Dh+OPTYPES_BASE,2Dh+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE ; a0 - a7 00A8 0D0D0C0C0C0C0C0C C db 01h+OPTYPES_BASE,01h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE ; a8 - af 00B0 3A3A3A3A3A3A3A3A C db 2Eh+OPTYPES_BASE,2Eh+OPTYPES_BASE,2Eh+OPTYPES_BASE,2Eh+OPTYPES_BASE,2Eh+OPTYPES_BASE,2Eh+OPTYPES_BASE,2Eh+OPTYPES_BASE,2Eh+OPTYPES_BASE ; b0 - b7 00B8 3B3B3B3B3B3B3B3B C db 2Fh+OPTYPES_BASE,2Fh+OPTYPES_BASE,2Fh+OPTYPES_BASE,2Fh+OPTYPES_BASE,2Fh+OPTYPES_BASE,2Fh+OPTYPES_BASE,2Fh+OPTYPES_BASE,2Fh+OPTYPES_BASE ; b8 - bf 00C0 0404460C13130404 C db 004h, 004h,3Ah+OPTYPES_BASE,00h+OPTYPES_BASE,07h+OPTYPES_BASE,07h+OPTYPES_BASE, 004h, 004h ; c0 - c7 00C8 1E0C460C31320C0C C db 12h+OPTYPES_BASE,00h+OPTYPES_BASE,3Ah+OPTYPES_BASE,00h+OPTYPES_BASE,25h+OPTYPES_BASE,26h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE ; c8 - cf 00D0 040404043232000C C db 004h, 004h, 004h, 004h,26h+OPTYPES_BASE,26h+OPTYPES_BASE, 000h,00h+OPTYPES_BASE ; d0 - d7 00D8 0606060606060606 C db 006h, 006h, 006h, 006h, 006h, 006h, 006h, 006h ; d8 - df 00E0 333333332F2F3E3E C db 27h+OPTYPES_BASE,27h+OPTYPES_BASE,27h+OPTYPES_BASE,27h+OPTYPES_BASE,23h+OPTYPES_BASE,23h+OPTYPES_BASE,32h+OPTYPES_BASE,32h+OPTYPES_BASE ; e0 - e7 00E8 1818193330303F3F C db 0Ch+OPTYPES_BASE,0Ch+OPTYPES_BASE,0Dh+OPTYPES_BASE,27h+OPTYPES_BASE,24h+OPTYPES_BASE,24h+OPTYPES_BASE,33h+OPTYPES_BASE,33h+OPTYPES_BASE ; e8 - ef 00F0 0A000A0A0C0C0404 C db 00Ah, 000h, 00Ah, 00Ah,00h+OPTYPES_BASE,00h+OPTYPES_BASE, 004h, 004h ; f0 - f7 00F8 0C0C0C0C0C0C0404 C db 00h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE, 004h, 004h ; f8 - ff 0100 0E0E0E0E0E0E0E0E C db 02h+OPTYPES_BASE,02h+OPTYPES_BASE,02h+OPTYPES_BASE,02h+OPTYPES_BASE,02h+OPTYPES_BASE,02h+OPTYPES_BASE,02h+OPTYPES_BASE,02h+OPTYPES_BASE ; 100 - 107 (Intel group 1) 0108 0F0F0F0F0F0F0F0F C db 03h+OPTYPES_BASE,03h+OPTYPES_BASE,03h+OPTYPES_BASE,03h+OPTYPES_BASE,03h+OPTYPES_BASE,03h+OPTYPES_BASE,03h+OPTYPES_BASE,03h+OPTYPES_BASE ; 108 - 10f 0110 4343434343430043 C db 37h+OPTYPES_BASE,37h+OPTYPES_BASE,37h+OPTYPES_BASE,37h+OPTYPES_BASE,37h+OPTYPES_BASE,37h+OPTYPES_BASE, 000h,37h+OPTYPES_BASE ; 110 - 117 (Intel group 2) 0118 4444444444440044 C db 38h+OPTYPES_BASE,38h+OPTYPES_BASE,38h+OPTYPES_BASE,38h+OPTYPES_BASE,38h+OPTYPES_BASE,38h+OPTYPES_BASE, 000h,38h+OPTYPES_BASE ; 118 - 11f 0120 4545454545450045 C db 39h+OPTYPES_BASE,39h+OPTYPES_BASE,39h+OPTYPES_BASE,39h+OPTYPES_BASE,39h+OPTYPES_BASE,39h+OPTYPES_BASE, 000h,39h+OPTYPES_BASE ; 120 - 127 (Intel group 2a) 0128 0E001C1C1C1C1C1C C db 02h+OPTYPES_BASE, 000h,10h+OPTYPES_BASE,10h+OPTYPES_BASE,10h+OPTYPES_BASE,10h+OPTYPES_BASE,10h+OPTYPES_BASE,10h+OPTYPES_BASE ; 128 - 12f (Intel group 3) 0130 1C1C341A341A3400 C db 10h+OPTYPES_BASE,10h+OPTYPES_BASE,28h+OPTYPES_BASE,0Eh+OPTYPES_BASE,28h+OPTYPES_BASE,0Eh+OPTYPES_BASE,28h+OPTYPES_BASE, 000h ; 130 - 137 (Intel group 5) 0138 3435353535350000 C db 28h+OPTYPES_BASE,29h+OPTYPES_BASE,29h+OPTYPES_BASE,29h+OPTYPES_BASE,29h+OPTYPES_BASE,29h+OPTYPES_BASE, 000h, 000h ; 138 - 13f (Intel group 6) 0140 2929292934003529 C db 1Dh+OPTYPES_BASE,1Dh+OPTYPES_BASE,1Dh+OPTYPES_BASE,1Dh+OPTYPES_BASE,28h+OPTYPES_BASE, 000h,29h+OPTYPES_BASE,1Dh+OPTYPES_BASE ; 140 - 147 (Intel group 7) 0148 1F1F1F1F1F1F1F1F C db 13h+OPTYPES_BASE,13h+OPTYPES_BASE,13h+OPTYPES_BASE,13h+OPTYPES_BASE,13h+OPTYPES_BASE,13h+OPTYPES_BASE,13h+OPTYPES_BASE,13h+OPTYPES_BASE ; 148 - 14f (Coprocessor d8) 0150 2121282821212121 C db 15h+OPTYPES_BASE,15h+OPTYPES_BASE,1Ch+OPTYPES_BASE,1Ch+OPTYPES_BASE,15h+OPTYPES_BASE,15h+OPTYPES_BASE,15h+OPTYPES_BASE,15h+OPTYPES_BASE ; 150 - 157 0158 1F001F1F29252925 C db 13h+OPTYPES_BASE, 000h,13h+OPTYPES_BASE,13h+OPTYPES_BASE,1Dh+OPTYPES_BASE,19h+OPTYPES_BASE,1Dh+OPTYPES_BASE,19h+OPTYPES_BASE ; 158 - 15f (Coprocessor d9) 0160 2728080008080808 C db 1Bh+OPTYPES_BASE,1Ch+OPTYPES_BASE, 008h, 000h, 008h, 008h, 008h, 008h ; 160 - 167 0168 2424242424242424 C db 18h+OPTYPES_BASE,18h+OPTYPES_BASE,18h+OPTYPES_BASE,18h+OPTYPES_BASE,18h+OPTYPES_BASE,18h+OPTYPES_BASE,18h+OPTYPES_BASE,18h+OPTYPES_BASE ; 168 - 16f (Coprocessor da) 0170 2121212100080000 C db 15h+OPTYPES_BASE,15h+OPTYPES_BASE,15h+OPTYPES_BASE,15h+OPTYPES_BASE, 000h, 008h, 000h, 000h ; 170 - 177 0178 2400242400260026 C db 18h+OPTYPES_BASE, 000h,18h+OPTYPES_BASE,18h+OPTYPES_BASE, 000h,1Ah+OPTYPES_BASE, 000h,1Ah+OPTYPES_BASE ; 178 - 17f (Coprocessor db) 0180 2121212108282800 C db 15h+OPTYPES_BASE,15h+OPTYPES_BASE,15h+OPTYPES_BASE,15h+OPTYPES_BASE, 008h,1Ch+OPTYPES_BASE,1Ch+OPTYPES_BASE, 000h ; 180 - 187 0188 2020202020202020 C db 14h+OPTYPES_BASE,14h+OPTYPES_BASE,14h+OPTYPES_BASE,14h+OPTYPES_BASE,14h+OPTYPES_BASE,14h+OPTYPES_BASE,14h+OPTYPES_BASE,14h+OPTYPES_BASE ; 188 - 18f (Coprocessor dc) 0190 2222000022222222 C db 16h+OPTYPES_BASE,16h+OPTYPES_BASE, 000h, 000h,16h+OPTYPES_BASE,16h+OPTYPES_BASE,16h+OPTYPES_BASE,16h+OPTYPES_BASE ; 190 - 197 0198 2000202029002925 C db 14h+OPTYPES_BASE, 000h,14h+OPTYPES_BASE,14h+OPTYPES_BASE,1Dh+OPTYPES_BASE, 000h,1Dh+OPTYPES_BASE,19h+OPTYPES_BASE ; 198 - 19f (Coprocessor dd) 01A0 2700272728280000 C db 1Bh+OPTYPES_BASE, 000h,1Bh+OPTYPES_BASE,1Bh+OPTYPES_BASE,1Ch+OPTYPES_BASE,1Ch+OPTYPES_BASE, 000h, 000h ; 1a0 - 1a7 01A8 2525252525252525 C db 19h+OPTYPES_BASE,19h+OPTYPES_BASE,19h+OPTYPES_BASE,19h+OPTYPES_BASE,19h+OPTYPES_BASE,19h+OPTYPES_BASE,19h+OPTYPES_BASE,19h+OPTYPES_BASE ; 1a8 - 1af (Coprocessor de) 01B0 2323000823232323 C db 17h+OPTYPES_BASE,17h+OPTYPES_BASE, 000h, 008h,17h+OPTYPES_BASE,17h+OPTYPES_BASE,17h+OPTYPES_BASE,17h+OPTYPES_BASE ; 1b0 - 1b7 01B8 25002525261B261B C db 19h+OPTYPES_BASE, 000h,19h+OPTYPES_BASE,19h+OPTYPES_BASE,1Ah+OPTYPES_BASE,0Fh+OPTYPES_BASE,1Ah+OPTYPES_BASE,0Fh+OPTYPES_BASE ; 1b8 - 1bf (Coprocessor df) 01C0 0000000008282800 C db 000h, 000h, 000h, 000h, 008h,1Ch+OPTYPES_BASE,1Ch+OPTYPES_BASE, 000h ; 1c0 - 1c7 01C8 0C0C0C0C0C0C0C00 C db 00h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE, 000h ; 1c8 - 1cf (Coprocessor groups) 01D0 0C0C0C0C0C0C0C0C C db 00h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE ; 1d0 - 1d7 01D8 0C0C0C0C0C0C0C0C C db 00h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE ; 1d8 - 1df = 1E0 C SPARSE_BASE equ $ - optypes C C ;--- The rest of these are squeezed. 01E0 00040414140C0C0C C db 0, 004h, 004h,08h+OPTYPES_BASE,08h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE ;00 01E8 5254535556570C0C C db 46h+OPTYPES_BASE,48h+OPTYPES_BASE,47h+OPTYPES_BASE,49h+OPTYPES_BASE,4Ah+OPTYPES_BASE,4Bh+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE ;08 01F0 0C14141414141414 C db 00h+OPTYPES_BASE,08h+OPTYPES_BASE,08h+OPTYPES_BASE,08h+OPTYPES_BASE,08h+OPTYPES_BASE,08h+OPTYPES_BASE,08h+OPTYPES_BASE,08h+OPTYPES_BASE ;10 01F8 1414141414141414 C db 08h+OPTYPES_BASE,08h+OPTYPES_BASE,08h+OPTYPES_BASE,08h+OPTYPES_BASE,08h+OPTYPES_BASE,08h+OPTYPES_BASE,08h+OPTYPES_BASE,08h+OPTYPES_BASE ;18 C if MMXSUPP C else 0200 1400000C00001818 C db 08h+OPTYPES_BASE,0 ,0 ,00h+OPTYPES_BASE,0 ,0 ,0Ch+OPTYPES_BASE,0Ch+OPTYPES_BASE ;20 C endif 0208 1818181818181818 C db 0Ch+OPTYPES_BASE,0Ch+OPTYPES_BASE,0Ch+OPTYPES_BASE,0Ch+OPTYPES_BASE,0Ch+OPTYPES_BASE,0Ch+OPTYPES_BASE,0Ch+OPTYPES_BASE,0Ch+OPTYPES_BASE ;28 0210 1818181818184747 C db 0Ch+OPTYPES_BASE,0Ch+OPTYPES_BASE,0Ch+OPTYPES_BASE,0Ch+OPTYPES_BASE,0Ch+OPTYPES_BASE,0Ch+OPTYPES_BASE,3Bh+OPTYPES_BASE,3Bh+OPTYPES_BASE ;30 0218 4747474747474747 C db 3Bh+OPTYPES_BASE,3Bh+OPTYPES_BASE,3Bh+OPTYPES_BASE,3Bh+OPTYPES_BASE,3Bh+OPTYPES_BASE,3Bh+OPTYPES_BASE,3Bh+OPTYPES_BASE,3Bh+OPTYPES_BASE ;38 0220 4747474747475050 C db 3Bh+OPTYPES_BASE,3Bh+OPTYPES_BASE,3Bh+OPTYPES_BASE,3Bh+OPTYPES_BASE,3Bh+OPTYPES_BASE,3Bh+OPTYPES_BASE,44h+OPTYPES_BASE,44h+OPTYPES_BASE ;40 0228 0C16484951510C16 C db 00h+OPTYPES_BASE,0Ah+OPTYPES_BASE,3Ch+OPTYPES_BASE,3Dh+OPTYPES_BASE,45h+OPTYPES_BASE,45h+OPTYPES_BASE,00h+OPTYPES_BASE,0Ah+OPTYPES_BASE ;48 0230 4849141010131613 C db 3Ch+OPTYPES_BASE,3Dh+OPTYPES_BASE,08h+OPTYPES_BASE,04h+OPTYPES_BASE,04h+OPTYPES_BASE,07h+OPTYPES_BASE,0Ah+OPTYPES_BASE,07h+OPTYPES_BASE ;50 0238 133C3D041614143C C db 07h+OPTYPES_BASE,30h+OPTYPES_BASE,31h+OPTYPES_BASE, 004h,0Ah+OPTYPES_BASE,08h+OPTYPES_BASE,08h+OPTYPES_BASE,30h+OPTYPES_BASE ;58 0240 3D10100415151515 C db 31h+OPTYPES_BASE,04h+OPTYPES_BASE,04h+OPTYPES_BASE, 004h,09h+OPTYPES_BASE,09h+OPTYPES_BASE,09h+OPTYPES_BASE,09h+OPTYPES_BASE ;60 0248 151515151C1C1717 C db 09h+OPTYPES_BASE,09h+OPTYPES_BASE,09h+OPTYPES_BASE,09h+OPTYPES_BASE,10h+OPTYPES_BASE,10h+OPTYPES_BASE,0Bh+OPTYPES_BASE,0Bh+OPTYPES_BASE ;68 0250 17171B400E0C0C0C C db 0Bh+OPTYPES_BASE,0Bh+OPTYPES_BASE,0Fh+OPTYPES_BASE,34h+OPTYPES_BASE,02h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE ;70 0258 0C0C0C0C0C0C0C0C C db 00h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE,00h+OPTYPES_BASE ;78 0260 0C2A C db 00h+OPTYPES_BASE,1Eh+OPTYPES_BASE C 0262 C OTDATA ends C = 1000 C P186 equ 1000h = 2000 C P286 equ 2000h = 3000 C P386 equ 3000h = 4000 C P486 equ 4000h = 5000 C P586 equ 5000h = 6000 C P686 equ 6000h C 14EF 00 C align 2 C C ;--- compressed table of additional information. C ;--- Bits 0-11 are the offset of the mnemonics table if C ;--- the corresponding item in optypes is defined via OT(); C ;--- else it's a parameter for the optype processing. C ;--- Bits 12-15 are the cpu which introduced this opcode. C 14F0 C opinfo label word 14F0 1B001B001B001B00 C dw MN_ADD, MN_ADD, MN_ADD, MN_ADD ; 00 14F8 1B001B007B075C07 C dw MN_ADD, MN_ADD, MN_PUSH, MN_POP ; 04 1500 3907390739073907 C dw MN_OR, MN_OR, MN_OR, MN_OR ; 08 1508 390739077B07FFFFFFE001 C dw MN_OR, MN_OR, MN_PUSH, 01e0h ; 0c 1510 1600160016001600 C dw MN_ADC, MN_ADC, MN_ADC, MN_ADC ; 10 1518 160016007B075C07 C dw MN_ADC, MN_ADC, MN_PUSH, MN_POP ; 14 1520 2108210821082108 C dw MN_SBB, MN_SBB, MN_SBB, MN_SBB ; 18 1528 210821087B075C07 C dw MN_SBB, MN_SBB, MN_PUSH, MN_POP ; 1c 1530 2000200020002000 C dw MN_AND, MN_AND, MN_AND, MN_AND ; 20 1538 200020000100FFFFFFAA01 C dw MN_AND, MN_AND, 0001h, MN_DAA ; 24 1540 5409540954095409 C dw MN_SUB, MN_SUB, MN_SUB, MN_SUB ; 28 1548 540954090101FFFFFFAF01 C dw MN_SUB, MN_SUB, 0101h, MN_DAS ; 2c 1550 FFFFFF9909FFFFFF9909FFF C dw MN_XOR, MN_XOR, MN_XOR, MN_XOR ; 30 1558 FFFFFF9909FFFFFF9909010 C dw MN_XOR, MN_XOR, 0201h, MN_AAA ; 34 1560 6B016B016B016B01 C dw MN_CMP, MN_CMP, MN_CMP, MN_CMP ; 38 1568 6B016B0101031100 C dw MN_CMP, MN_CMP, 0301h, MN_AAS ; 3c 1570 3B053B053B053B05 C dw MN_INC, MN_INC, MN_INC, MN_INC ; 40 1578 3B053B053B053B05 C dw MN_INC, MN_INC, MN_INC, MN_INC ; 44 1580 FFFFFFBC01FFFFFFBC01FFF C dw MN_DEC, MN_DEC, MN_DEC, MN_DEC ; 48 1588 FFFFFFBC01FFFFFFBC01FFF C dw MN_DEC, MN_DEC, MN_DEC, MN_DEC ; 4c 1590 7B077B077B077B07 C dw MN_PUSH, MN_PUSH, MN_PUSH, MN_PUSH ; 50 1598 7B077B077B077B07 C dw MN_PUSH, MN_PUSH, MN_PUSH, MN_PUSH ; 54 15A0 5C075C075C075C07 C dw MN_POP, MN_POP, MN_POP, MN_POP ; 58 15A8 5C075C075C075C07 C dw MN_POP, MN_POP, MN_POP, MN_POP ; 5c 15B0 FFFFFF811761172B102520 C dw P186 + MN_PUSHA, P186 + MN_POPA, P186 + MN_BOUND, P286 + MN_ARPL ; 60 15B8 0134013510302030 C dw P386 + 0401h, P386 + 0501h, P386 + 0010h, P386 + 0020h ; 64 15C0 7B1731157B173115 C dw P186 + MN_PUSH, P186 + MN_IMUL, P186 + MN_PUSH, P186 + MN_IMUL ; 68 15C8 4015461547174E17 C dw P186 + MN_INSB, P186 + MN_INSW, P186 + MN_OUTSB, P186 + MN_OUTSW ; 6c 15D0 FFFFFFFB05FFFFFFE705FFF C dw MN_JO, MN_JNO, MN_JB, MN_JAE ; 70 15D8 1106FFFFFFF605FFFFFF850 C dw MN_JZ, MN_JNZ, MN_JBE, MN_JA ; 74 15E0 0D06FFFFFFF10503060806 C dw MN_JS, MN_JNS, MN_JPE, MN_JPO ; 78 15E8 FFFFFFA805FFFFFFA305FFF C dw MN_JL, MN_JGE, MN_JLE, MN_JG ; 7c 15F0 0001000100000801 C dw 0100h, 0100h, 0000h, 0108h ; 80 15F8 59095909FFFFFF8609FFFFF C dw MN_TEST, MN_TEST, MN_XCHG, MN_XCHG ; 84 1600 FFFFFFFD06FFFFFFFD06FFF C dw MN_MOV, MN_MOV, MN_MOV, MN_MOV ; 88 1608 FFFFFFFD063E06FFFFFFFD0 C dw MN_MOV, MN_LEA, MN_MOV, 02f8h ; 8c 1610 2F07FFFFFF8609FFFFFF860 C dw MN_NOP, MN_XCHG, MN_XCHG, MN_XCHG ; 90 1618 FFFFFF8609FFFFFF8609FFF C dw MN_XCHG, MN_XCHG, MN_XCHG, MN_XCHG ; 94 1620 5C00FFFFFFA00156006B09 C dw MN_CBW, MN_CWD, MN_CALL, MN_WAIT ; 98 1628 FFFFFF90076E07FFFFFFEA0 C dw MN_PUSHF, MN_POPF, MN_SAHF, MN_LAHF ; 9c 1630 FFFFFFFD06FFFFFFFD06FFF C dw MN_MOV, MN_MOV, MN_MOV, MN_MOV ; a0 1638 0207090770017701 C dw MN_MOVSB, MN_MOVSW, MN_CMPSB, MN_CMPSW ; a4 1640 590959093A094109 C dw MN_TEST, MN_TEST, MN_STOSB, MN_STOSW ; a8 1648 68066F0626082D08 C dw MN_LODSB, MN_LODSW, MN_SCASB, MN_SCASW ; ac 1650 FFFFFFFD06FFFFFFFD06FFF C dw MN_MOV, MN_MOV, MN_MOV, MN_MOV ; b0 1658 FFFFFFFD06FFFFFFFD06FFF C dw MN_MOV, MN_MOV, MN_MOV, MN_MOV ; b4 1660 FFFFFFFD06FFFFFFFD06FFF C dw MN_MOV, MN_MOV, MN_MOV, MN_MOV ; b8 1668 FFFFFFFD06FFFFFFFD06FFF C dw MN_MOV, MN_MOV, MN_MOV, MN_MOV ; bc 1670 20012001FFFFFFD307FFFFF C dw 0120h, 0120h, MN_RET, MN_RET ; c0 1678 2F06250600030003 C dw MN_LES, MN_LDS, 0300h, 0300h ; c4 1680 FFFFFFCA114316FFFFFFD80 C dw P186 + MN_ENTER, P186 + MN_LEAVE, MN_RETF, MN_RETF ; c8 1688 5205520557056B05 C dw MN_INT, MN_INT, MN_INTO, MN_IRET ; cc 1690 1001100118011801 C dw 0110h, 0110h, 0118h, 0118h ; d0 1698 0C0007000000FFFFFF9209 C dw MN_AAM, MN_AAD, 0000h, MN_XLATB ; d4 16A0 4801580168017801 C dw 0148h, 0158h, 0168h, 0178h ; d8 16A8 FFFFFF8801FFFFFF9801FFF C dw 0188h, 0198h, 01a8h, 01b8h ; dc 16B0 FFFFFFE106FFFFFFAF06FFF C dw MN_LOOPNZW, MN_LOOPZW, MN_LOOPW, MN_JCXZ ; e0 16B8 3705370542074207 C dw MN_IN, MN_IN, MN_OUT, MN_OUT ; e4 16C0 5600150615061506 C dw MN_CALL, MN_JMP, MN_JMP, MN_JMP ; e8 16C8 3705370542074207 C dw MN_IN, MN_IN, MN_OUT, MN_OUT ; ec 16D0 0800000002000600 C dw 0008h, 0000h, 0002h, 0006h ; f0 16D8 26057C0028012801 C dw MN_HLT, MN_CMC, 0128h, 0128h ; f4 16E0 67002B0971003509 C dw MN_CLC, MN_STC, MN_CLI, MN_STI ; f8 16E8 6C003009FFFFFFE0023001 C dw MN_CLD, MN_STD, 02e0h, 0130h ; fc 16F0 1B00390716002108 C dw MN_ADD, MN_OR, MN_ADC, MN_SBB ; 100 16F8 20005409FFFFFF99096B01 C dw MN_AND, MN_SUB, MN_XOR, MN_CMP ; 104 1700 1B00390716002108 C dw MN_ADD, MN_OR, MN_ADC, MN_SBB ; 108 1708 20005409FFFFFF99096B01 C dw MN_AND, MN_SUB, MN_XOR, MN_CMP ; 10c 1710 FFFFFFA907FFFFFFAE07FFF C dw MN_ROL, MN_ROR, MN_RCL, MN_RCR ; 110 1718 17081C080000FFFFFFF507 C dw MN_SHL, MN_SHR, 0000h, MN_SAR ; 114 1720 FFFFFFA907FFFFFFAE07FFF C dw MN_ROL, MN_ROR, MN_RCL, MN_RCR ; 118 1728 17081C080000FFFFFFF507 C dw MN_SHL, MN_SHR, 0000h, MN_SAR ; 11c 1730 FFFFFFA917FFFFFFAE17FFF C dw P186 + MN_ROL, P186 + MN_ROR, P186 + MN_RCL, P186 + MN_RCR ; 120 1738 17181C180000FFFFFFF517 C dw P186 + MN_SHL, P186 + MN_SHR, 0000h, P186 + MN_SAR ; 124 1740 5909000034072A07 C dw MN_TEST, 0000h, MN_NOT, MN_NEG ; 128 1748 25073105FFFFFFC1012B05 C dw MN_MUL, MN_IMUL, MN_DIV, MN_IDIV ; 12c 1750 3B05FFFFFFBC0156005600 C dw MN_INC, MN_DEC, MN_CALL, MN_CALL ; 130 1758 150615067B070000 C dw MN_JMP, MN_JMP, MN_PUSH, 0000h ; 134 1760 1F294F295626FFFFFFF826 C dw P286 + MN_SLDT, P286 + MN_STR, P286 + MN_LLDT, P286 + MN_LTR ; 138 1768 5F29652900000000 C dw P286 + MN_VERR, P286 + MN_VERW, 0000h, 0000h ; 13c 1770 07290D294A265026 C dw P286 + MN_SGDT, P286 + MN_SIDT, P286 + MN_LGDT, P286 + MN_LIDT ; 140 1778 252900005C266345 C dw P286 + MN_SMSW, 0000h, P286 + MN_LMSW, P486 + MN_INVLPG ; 144 1780 FFFFFFDE01FFFFFFAB03FFF C dw MN_FADD, MN_FMUL, MN_FCOM, MN_FCOMP ; 148 1788 FFFFFFA004FFFFFFB404FFF C dw MN_FSUB, MN_FSUBR, MN_FDIV, MN_FDIVR ; 14c 1790 FFFFFFDE01FFFFFFAB03FFF C dw MN_FADD, MN_FMUL, MN_FCOM, MN_FCOMP ; 150 1798 FFFFFFA004FFFFFFB404FFF C dw MN_FSUB, MN_FSUBR, MN_FDIV, MN_FDIVR ; 154 17A0 4A03000054045904 C dw MN_FLD, 0000h, MN_FST, MN_FSTP ; 158 17A8 FFFFFF9103FFFFFF8903760 C dw MN_FLDENV, MN_FNLDCW, MN_FNSTENV, MN_FNSTCW ; 15c 17B0 4A03070508030000 C dw MN_FLD, MN_FXCH, 0308h, 0000h ; 160 17B8 1003FFFFFFC801FFFFFFD00 C dw 0310h, 01c8h, 01d0h, 01d8h ; 164 17C0 FFFFFFEB01FFFFFFB803100 C dw MN_FIADD, MN_FIMUL, MN_FICOM, MN_FICOMP ; 168 17C8 FFFFFFAD04FFFFFFC304FFF C dw MN_FISUB, MN_FISUBR, MN_FIDIV, MN_FIDIVR ; 16c 17D0 256236622D627F62 C dw P686 + MN_FCMOVB, P686 + MN_FCMOVE, P686 + MN_FCMOVBE, P686 + MN_FCMOVU ; 170 17D8 0000180300000000 C dw 0000h, 0318h, 0000h, 0000h ; 174 17E0 1F0300003D034303 C dw MN_FILD, 0000h, MN_FIST, MN_FISTP ; 178 17E8 00004A0300005904 C dw 0000h, MN_FLD, 0000h, MN_FSTP ; 17c 17F0 516264625A626D62 C dw P686 + MN_FCMOVNB, P686 + MN_FCMOVNE, P686 + MN_FCMOVNBE, P686 + MN_FCMOVNU ; 180 17F8 2003FFFFFFD864FFFFFF956 C dw 0320h, P686 + MN_FUCOMI, P686 + MN_FCOMI, 0000h ; 184 1800 FFFFFFDE01FFFFFFAB03FFF C dw MN_FADD, MN_FMUL, MN_FCOM, MN_FCOMP ; 188 1808 FFFFFFA004FFFFFFB404FFF C dw MN_FSUB, MN_FSUBR, MN_FDIV, MN_FDIVR ; 18c 1810 FFFFFFDE01FFFFFFAB03000 C dw MN_FADD, MN_FMUL, 0000h, 0000h ; 190 1818 FFFFFFB404FFFFFFA004FFF C dw MN_FSUBR, MN_FSUB, MN_FDIVR, MN_FDIV ; 194 1820 4A03000054045904 C dw MN_FLD, 0000h, MN_FST, MN_FSTP ; 198 1828 FFFFFFEC0300000D04FFFFF C dw MN_FRSTOR, 0000h, MN_FNSAVE, MN_FNSTSW ; 19c 1830 0903000054045904 C dw MN_FFREE, 0000h, MN_FST, MN_FSTP ; 1a0 1838 FFFFFFD134FFFFFFE934000 C dw P386 + MN_FUCOM, P386 + MN_FUCOMP, 0000h, 0000h ; 1a4 1840 FFFFFFEB01FFFFFFB803100 C dw MN_FIADD, MN_FIMUL, MN_FICOM, MN_FICOMP ; 1a8 1848 FFFFFFAD04FFFFFFC304FFF C dw MN_FISUB, MN_FISUBR, MN_FIDIV, MN_FIDIVR ; 1ac 1850 FFFFFFE401FFFFFFB103000 C dw MN_FADDP, MN_FMULP, 0000h, 0328h ; 1b0 1858 FFFFFFBB04FFFFFFA604FFF C dw MN_FSUBRP, MN_FSUBP, MN_FDIVRP, MN_FDIVP ; 1b4 1860 1F0300003D034303 C dw MN_FILD, 0000h, MN_FIST, MN_FISTP ; 1b8 1868 FFFFFFF2011F03FFFFFFF80 C dw MN_FBLD, MN_FILD, MN_FBSTP, MN_FISTP ; 1bc 1870 0000000000000000 C dw 0000h, 0000h, 0000h, 0000h ; 1c0 1878 3003FFFFFFE064FFFFFF9C6 C dw 0330h, P686 + MN_FUCOMIP, P686 + MN_FCOMIP, 0000h ; 1c4 1880 4F0355035D036503 C dw MN_FLD1, MN_FLDL2T, MN_FLDL2E, MN_FLDPI ; 1c8 1888 6C0374037C030000 C dw MN_FLDLG2, MN_FLDLN2, MN_FLDZ, 0000h ; 1cc 1890 FFFFFFD1011605FFFFFFDC0 C dw MN_F2XM1, MN_FYL2X, MN_FPTAN, MN_FPATAN ; 1d0 1898 0D05FFFFFFD433FFFFFFB90 C dw MN_FXTRACT, P386 + MN_FPREM1, MN_FDECSTP, MN_FINCSTP ; 1d4 18A0 FFFFFFCD031D054D044434 C dw MN_FPREM, MN_FYL2XP1, MN_FSQRT, P386 + MN_FSINCOS ; 1d8 18A8 FFFFFFE30325043E34FFFFF C dw MN_FRNDINT, MN_FSCALE, P386 + MN_FSIN, P386 + MN_FCOS ; 1dc C ;--- The rest of these are squeezed. 18B0 0000380140012026 C dw 0, 0138h, 0140h, P286 + MN_LAR ;00 18B8 FFFFFFF32676205D457149 C dw P286 + MN_LSL, P286 + MN_CLTS, P486 + MN_INVD, P486 + MN_WBINVD ;04 18C0 FFFFFFFD36FFFFFFFD36FFF C dw P386 + MN_MOV, P386 + MN_MOV, P386 + MN_MOV, P386 + MN_MOV ;08 18C8 FFFFFFFD36FFFFFFFD36795 C dw P386 + MN_MOV, P386 + MN_MOV, P586 + MN_WRMSR, P586 + MN_RDTSC ;0C 18D0 FFFFFFB3573F611F61FFFFF C dw P586 + MN_RDMSR, P686 + MN_CMOVO, P686 + MN_CMOVNO, P686 + MN_CMOVB ;10 18D8 FFFFFF886064613761FFFFF C dw P686 + MN_CMOVAE, P686 + MN_CMOVZ, P686 + MN_CMOVNZ, P686 + MN_CMOVBE ;14 18E0 FFFFFF81605D612F614D61 C dw P686 + MN_CMOVA, P686 + MN_CMOVS, P686 + MN_CMOVNS, P686 + MN_CMOVPE ;18 18E8 5561FFFFFFBC60FFFFFFB46 C dw P686 + MN_CMOVPO, P686 + MN_CMOVL, P686 + MN_CMOVGE, P686 + MN_CMOVLE ;1C 18F0 FFFFFFAD60 C dw P686 + MN_CMOVG C if MMXSUPP C else 18F2 00000000000000000000 C dw 0, 0, 0, 0, 0 C endif 18FC FFFFFFFB35FFFFFFE735 C dw P386 + MN_JO, P386 + MN_JNO ;24 1900 FFFFFF81357C351136FFFFF C dw P386 + MN_JB, P386 + MN_JAE, P386 + MN_JZ, P386 + MN_JNZ ;28 1908 FFFFFF853578350D36FFFFF C dw P386 + MN_JBE, P386 + MN_JA, P386 + MN_JS, P386 + MN_JNS ;2C 1910 03360836FFFFFFA835FFFFF C dw P386 + MN_JPE, P386 + MN_JPO, P386 + MN_JL, P386 + MN_JGE ;30 1918 FFFFFFAC35FFFFFF9F35FFF C dw P386 + MN_JLE, P386 + MN_JG, P386 + MN_SETO, P386 + MN_SETNO ;34 1920 483841380139FFFFFFDA38 C dw P386 + MN_SETB, P386 + MN_SETAE, P386 + MN_SETZ, P386 + MN_SETNZ ;38 1928 4E383B38FFFFFFFB38FFFFF C dw P386 + MN_SETBE, P386 + MN_SETA, P386 + MN_SETS, P386 + MN_SETNS ;3C 1930 FFFFFFED38FFFFFFF4386E3 C dw P386 + MN_SETPE, P386 + MN_SETPO, P386 + MN_SETL, P386 + MN_SETGE ;40 1938 743861387B375C37 C dw P386 + MN_SETLE, P386 + MN_SETG, P386 + MN_PUSH, P386 + MN_POP ;44 1940 FFFFFF9951433013391339 C dw P586 + MN_CPUID, P386 + MN_BT, P386 + MN_SHLD, P386 + MN_SHLD ;48 1948 7B375C37FFFFFFE5575130 C dw P386 + MN_PUSH, P386 + MN_POP, P586 + MN_RSM, P386 + MN_BTS ;4C 1950 193919393135FFFFFF8541 C dw P386 + MN_SHRD, P386 + MN_SHRD, P386 + MN_IMUL, P486 + MN_CMPXCHG ;50 1958 FFFFFF85412A364C303436 C dw P486 + MN_CMPXCHG, P386 + MN_LSS, P386 + MN_BTR, P386 + MN_LFS ;54 1960 39361E371E37FFFFFFE802 C dw P386 + MN_LGS, P386 + MN_MOVZX, P386 + MN_MOVZX, 02e8h ;58 1968 4730323037301737 C dw P386 + MN_BTC, P386 + MN_BSF, P386 + MN_BSR, P386 + MN_MOVSX ;5C 1970 1737FFFFFF8049FFFFFF804 C dw P386 + MN_MOVSX, P486 + MN_XADD, P486 + MN_XADD, 02f0h ;60 1978 3C403C403C403C40 C dw P486 + MN_BSWAP, P486 + MN_BSWAP, P486 + MN_BSWAP, P486 + MN_BSWAP ;64 1980 3C403C403C403C40 C dw P486 + MN_BSWAP, P486 + MN_BSWAP, P486 + MN_BSWAP, P486 + MN_BSWAP ;68 1988 3B05FFFFFFBC0143305130 C dw MN_INC, MN_DEC, P386 + MN_BT, P386 + MN_BTS ;6C 1990 4C304730FFFFFF8E515C07 C dw P386 + MN_BTR, P386 + MN_BTC, P586 + MN_CMPXCHG8B, MN_POP ;70 1998 FFFFFFFD06FFFFFFBF03FFF C dw MN_MOV, MN_FNOP, MN_FCHS, MN_FABS ;74 19A0 FFFFFFCB040105FFFFFFF13 C dw MN_FTST, MN_FXAM, P386 + MN_FUCOMPP, MN_FNENI ;78 19A8 FFFFFFC9020C0235033524 C dw MN_FNDISI, MN_FNCLEX, MN_FNINIT, P286 + MN_FNSETPM ;7C 19B0 FFFFFFAB02FFFFFF9804 C dw MN_FCOMPP, MN_FNSTSW C C ;--- table converts unsqueezed numbers to squeezed. C ;--- 1E0-2DF are extended opcodes (0F xx). C C 19B4 C sqztab label byte 19B4 0102030400000500 C db 1, 2, 3, 4, 0, 0, 5, 0 ;1E0 19BC 0607000000000000 C db 6, 7, 0, 0, 0, 0, 0, 0 ;1E8 19C4 0000000000000000 C db 0, 0, 0, 0, 0, 0, 0, 0 ;1F0 19CC 0000000000000000 C db 0, 0, 0, 0, 0, 0, 0, 0 ;1F8 19D4 08090A0B0C000D00 C db 8, 9, 10, 11, 12, 0, 13, 0 ;200 19DC 0000000000000000 C db 0, 0, 0, 0, 0, 0, 0, 0 ;208 19E4 0E0F100000000000 C db 14, 15, 16, 0, 0, 0, 0, 0 ;210 19EC 0000000000000000 C db 0, 0, 0, 0, 0, 0, 0, 0 ;218 19F4 1112131415161718 C db 17, 18, 19, 20, 21, 22, 23, 24 ;220 19FC 191A1B1C1D1E1F20 C db 25, 26, 27, 28, 29, 30, 31, 32 ;228 1A04 0000000000000000 C db 0, 0, 0, 0, 0, 0, 0, 0 ;230 1A0C 0000000000000000 C db 0, 0, 0, 0, 0, 0, 0, 0 ;238 1A14 0000000000000000 C db 0, 0, 0, 0, 0, 0, 0, 0 ;240 1A1C 0000000000002122 C db 0, 0, 0, 0, 0, 0, 33, 34 ;248 1A24 0000000000000023 C db 0, 0, 0, 0, 0, 0, 0, 35 ;250 1A2C 0000000000002425 C db 0, 0, 0, 0, 0, 0, 36, 37 ;258 1A34 262728292A2B2C2D C db 38, 39, 40, 41, 42, 43, 44, 45 ;260 1A3C 2E2F303132333435 C db 46, 47, 48, 49, 50, 51, 52, 53 ;268 1A44 363738393A3B3C3D C db 54, 55, 56, 57, 58, 59, 60, 61 ;270 1A4C 3E3F404142434445 C db 62, 63, 64, 65, 66, 67, 68, 69 ;278 1A54 464748494A4B0000 C db 70, 71, 72, 73, 74, 75, 0, 0 ;280 1A5C 4C4D4E4F50510052 C db 76, 77, 78, 79, 80, 81, 0, 82 ;288 1A64 535455565758595A C db 83, 84, 85, 86, 87, 88, 89, 90 ;290 1A6C 00005B5C5D5E5F60 C db 0, 0, 91, 92, 93, 94, 95, 96 ;298 1A74 6162000000000063 C db 97, 98, 0, 0, 0, 0, 0, 99 ;2A0 1A7C 6465666768696A6B C db 100,101,102,103,104,105,106,107 ;2A8 1A84 0000000000000000 C db 0, 0, 0, 0, 0, 0, 0, 0 ;2B0 1A8C 0000000000000000 C db 0, 0, 0, 0, 0, 0, 0, 0 ;2B8 1A94 0000000000000000 C db 0, 0, 0, 0, 0, 0, 0, 0 ;2C0 1A9C 0000000000000000 C db 0, 0, 0, 0, 0, 0, 0, 0 ;2C8 1AA4 0000000000000000 C db 0, 0, 0, 0, 0, 0, 0, 0 ;2D0 1AAC 0000000000000000 C db 0, 0, 0, 0, 0, 0, 0, 0 ;2D8 C C ;--- 5 sparse groups C 1AB4 6C6D000000000000 C db 108,109, 0, 0, 0, 0, 0, 0 ;2E0 1ABC 000000006E6F7071 C db 0, 0, 0, 0,110,111,112,113 ;2E8 1AC4 0072000000000000 C db 0,114, 0, 0, 0, 0, 0, 0 ;2F0 1ACC 7300000000000000 C db 115, 0, 0, 0, 0, 0, 0, 0 ;2F8 1AD4 7400000000000000 C db 116, 0, 0, 0, 0, 0, 0, 0 ;300 C C ;--- 6 sparse fpu groups C = 308 C SFPGROUPS equ SPARSE_BASE + ( $ - sqztab ) = 320 C SFPGROUP3 equ SFPGROUPS + 8 * 3 1ADC 7500000000000000 C db 117, 0, 0, 0, 0, 0, 0, 0 ;308 1AE4 7677000078790000 C db 118,119, 0, 0,120,121, 0, 0 ;310 1AEC 007A000000000000 C db 0,122, 0, 0, 0, 0, 0, 0 ;318 1AF4 7B7C7D7E7F000000 C db 123,124,125,126,127, 0, 0, 0 ;320 1AFC 00FFFFFF80000000000000 C db 0,128, 0, 0, 0, 0, 0, 0 ;328 1B04 FFFFFF8100000000000000 C db 129, 0, 0, 0, 0, 0, 0, 0 ;330 C C ;--- table of mnemonics that change in the presence of a WAIT C ;--- instruction. C 1B0C 22032103200323035D01FFF C wtab1 dw 0322h,0321h,0320h,0323h,015dh,019eh,0324h,015fh 1B1C 5E013003FFFFFF9F01 C dw 015eh,0330h,019fh 1B22 C wtab2 label word 1B22 0502 C dw MN_FCLEX 1B24 FFFFFFC202 C dw MN_FDISI 1B26 FFFFFFFC02 C dw MN_FENI 1B28 2E03 C dw MN_FINIT 1B2A FFFFFF8203 C dw MN_FLDCW 1B2C 0604 C dw MN_FSAVE 1B2E 2D04 C dw MN_FSETPM 1B30 5F04 C dw MN_FSTCW 1B32 6E04 C dw MN_FSTENV 1B34 FFFFFF9104 C dw MN_FSTSW 1B36 FFFFFF9104 C dw MN_FSTSW = B C N_WTAB equ ($ - wtab2) / 2 C C ;--- table for operands which have a different mnemonic for C ;--- their 32 bit versions (66h prefix). C 1B38 FFFFFF9800FFFFFFA700FFF C ltabo1 dw 098h,0a7h,099h,015ch,019ch,019eh,015eh,06dh 1B48 FFFFFFCF00FFFFFFAD00FFF C dw 0cfh,0adh,0a5h,06fh,061h,09dh,060h,09ch 1B58 FFFFFFCB00FFFFFFCA00FFF C dw 0cbh,0cah,0afh,0abh 1B60 C ltabo2 label word 1B60 6100 C dw MN_CWDE 1B62 7E01 C dw MN_CMPSD 1B64 FFFFFFA501 C dw MN_CDQ 1B66 FFFFFFA203 C dw MN_FLDENVD 1B68 FFFFFFFD03 C dw MN_FRSTORD 1B6A 1D04 C dw MN_FSAVED 1B6C FFFFFF8804 C dw MN_FSTENVD 1B6E 4C05 C dw MN_INSD 1B70 7105 C dw MN_IRETD 1B72 7606 C dw MN_LODSD 1B74 1007 C dw MN_MOVSD 1B76 5507 C dw MN_OUTSD 1B78 6707 C dw MN_POPAD 1B7A 7407 C dw MN_POPFD 1B7C FFFFFF8807 C dw MN_PUSHAD 1B7E FFFFFF9707 C dw MN_PUSHFD 1B80 FFFFFFDE07 C dw MN_RETFD 1B82 FFFFFFDE07 C dw MN_RETFD 1B84 3408 C dw MN_SCASD 1B86 4809 C dw MN_STOSD = 14 C N_LTABO equ ($ - ltabo2) / 2 C C ;--- table for operands which have a different mnemonic for C ;--- their 32 bit versions (67h prefix). C 1B88 FFFFFFE300FFFFFFE200FFF C ltaba1 dw 0e3h,0e2h,0e1h,0e1h,0e0h,0e0h 1B94 C ltaba2 label word 1B94 FFFFFF9405 C dw MN_JECXZ 1B96 FFFFFF8A06 C dw MN_LOOPD 1B98 FFFFFFA706 C dw MN_LOOPED 1B9A FFFFFFB706 C dw MN_LOOPZD 1B9C FFFFFFD806 C dw MN_LOOPNED 1B9E FFFFFFEA06 C dw MN_LOOPNZD = 6 C N_LTABA equ ($ - ltaba2) / 2 C C ;--- table of lockable instructions C 1BA0 C locktab label word 1BA0 0A01020110001100080100 C dw 010ah,0102h,010h,011h,0108h,0100h,00h,01h 1BB0 0C01040120002100FFFFFF9 C dw 010ch,0104h,020h,021h,029bh,02efh,0293h,02eeh 1BC0 FFFFFF8B02FFFFFFED02FFF C dw 028bh,02edh,0290h,0291h,02e1h,0131h,02e0h,0130h 1BD0 2B012A0109010101080009 C dw 012bh,012ah,0109h,0101h,08h,09h,010bh,0103h 1BE0 180019000D010501280029 C dw 018h,019h,010dh,0105h,028h,029h,02a0h,02a1h 1BF0 FFFFFF8600FFFFFF87000E0 C dw 086h,087h,010eh,0106h,030h,031h = 2E C N_LOCK equ ($ - locktab) / 2 C C C ;--- table of obsolete-instruction values. C ;--- instructions are FENI, FDISI, FSETPM, MOV to/from TRx 1BFC 200321032403 C obsinst dw SFPGROUP3, SFPGROUP3+1, SFPGROUP3+4 1C02 04020602 C dw SPARSE_BASE+24h, SPARSE_BASE+26h C C ;--- Table for 16-bit mod r/m addressing. 8 = BX, 4 = BP, 2 = SI, 1 = DI. C 1C06 0A09060502010408 C rmtab db 8+2, 8+1, 4+2, 4+1, 2, 1, 4, 8 C C ;--- Tables of register names. C ;--- rgnam816/rgnam16/segrgnam must be consecutive. C ;--- also used by the line assembler C 1C0E C rgnam816 label word C DefGPR AL = 0 1C REG_AL equ ($ - rgnam816)/2 1C0E 414C 1C db "AL" C DefGPR CL = 1 1C REG_CL equ ($ - rgnam816)/2 1C10 434C 1C db "CL" C DefGPR DL = 2 1C REG_DL equ ($ - rgnam816)/2 1C12 444C 1C db "DL" C DefGPR BL = 3 1C REG_BL equ ($ - rgnam816)/2 1C14 424C 1C db "BL" C DefGPR AH = 4 1C REG_AH equ ($ - rgnam816)/2 1C16 4148 1C db "AH" C DefGPR CH = 5 1C REG_CH equ ($ - rgnam816)/2 1C18 4348 1C db "CH" C DefGPR DH = 6 1C REG_DH equ ($ - rgnam816)/2 1C1A 4448 1C db "DH" C DefGPR BH = 7 1C REG_BH equ ($ - rgnam816)/2 1C1C 4248 1C db "BH" 1C1E C rgnam16 label word C DefGPR AX = 8 1C REG_AX equ ($ - rgnam816)/2 1C1E 4158 1C db "AX" C DefGPR CX = 9 1C REG_CX equ ($ - rgnam816)/2 1C20 4358 1C db "CX" C DefGPR DX = A 1C REG_DX equ ($ - rgnam816)/2 1C22 4458 1C db "DX" C DefGPR BX = B 1C REG_BX equ ($ - rgnam816)/2 1C24 4258 1C db "BX" C DefGPR SP = C 1C REG_SP equ ($ - rgnam816)/2 1C26 5350 1C db "SP" C DefGPR BP = D 1C REG_BP equ ($ - rgnam816)/2 1C28 4250 1C db "BP" C DefGPR SI = E 1C REG_SI equ ($ - rgnam816)/2 1C2A 5349 1C db "SI" C DefGPR DI = F 1C REG_DI equ ($ - rgnam816)/2 1C2C 4449 1C db "DI" = 8 C N_REGS16 equ ( $ - rgnam16 ) / 2 1C2E C segrgnam label word C DefSR ES = 18 1C REG_ES equ REG_NO_GPR + ($ - segrgnam)/2 1C2E 4553 1C db "ES" C DefSR CS = 19 1C REG_CS equ REG_NO_GPR + ($ - segrgnam)/2 1C30 4353 1C db "CS" C DefSR SS = 1A 1C REG_SS equ REG_NO_GPR + ($ - segrgnam)/2 1C32 5353 1C db "SS" C DefSR DS = 1B 1C REG_DS equ REG_NO_GPR + ($ - segrgnam)/2 1C34 4453 1C db "DS" C DefSR FS = 1C 1C REG_FS equ REG_NO_GPR + ($ - segrgnam)/2 1C36 4653 1C db "FS" C DefSR GS = 1D 1C REG_GS equ REG_NO_GPR + ($ - segrgnam)/2 1C38 4753 1C db "GS" = 6 C N_SEGREGS equ ( $ - segrgnam ) / 2 C DefSR ST = 1E 1C REG_ST equ REG_NO_GPR + ($ - segrgnam)/2 1C3A 5354 1C db "ST" C DefSR MM = 1F 1C REG_MM equ REG_NO_GPR + ($ - segrgnam)/2 1C3C 4D4D 1C db "MM" C DefSR CR = 20 1C REG_CR equ REG_NO_GPR + ($ - segrgnam)/2 1C3E 4352 1C db "CR" C DefSR DR = 21 1C REG_DR equ REG_NO_GPR + ($ - segrgnam)/2 1C40 4452 1C db "DR" C DefSR TR = 22 1C REG_TR equ REG_NO_GPR + ($ - segrgnam)/2 1C42 5452 1C db "TR" = 1B C N_ALLREGS equ ( $ - rgnam816 ) / 2 C C ;--- address of debuggee's segment registers C ;--- used to display memory contents ( DIS_F_SHOW ) 1C44 22002A0028002000 C segrgaddr dw regs.rES,regs.rCS,regs.rSS,regs.rDS C if RING0 ; for DebugR, we also display FS/GS contents C endif C C ;--- Tables for handling of named prefixes. C 1C4C 262E363E6465 C prefixlist db 26h,2eh,36h,3eh,64h,65h ;segment prefixes (in order) 1C52 FFFFFF9BFFFFFFF0FFFFFFF C db 9bh,0f0h,0f2h,0f3h ;WAIT,LOCK,REPNE,REPE = A C N_PREFIX equ $ - prefixlist 1C56 6B096206FFFFFFCC07FFFFF C prefixmnem dw MN_WAIT,MN_LOCK,MN_REPNE,MN_REPE C 1C5E C CONST ends C 221E C disasm1: ;<--- standard entry 221E FFFFFFB000 C mov al, 0 C 2220 C disasm proc ;<--- entry with AL=disflags ( DIS_F_REPT & DIS_F_SHOW ) C 2220 FFFFFFA2 0000o C mov [disflags], al C 1C5E C CONST segment ; must be located inside disasm since local labels are used here C 1C5E C align 2 C C ; Jump table for OP_IMM, OP_RM, OP_M, OP_R_MOD, OP_MOFFS, OP_R, OP_R_ADD, C ; and OP_AX. C ; See orders of asm_jmp1 and bittab. C 1C5E C dis_jmp1 label word 1C5E 0000000000000000 C dw dop_imm, dop_rm, dop_m, dop_r_mod 1C66 0000000000000000 C dw dop_moffs, dop_r, dop_r_add, dop_ax C C ; jump table for displaying operands C ; See orders of asm_jmp1 and bittab. C 1C6E C dis_optab label word 1C6E 0000000000000000000000 C dw dop_m64, dop_mfloat, dop_mdouble, dop_m80, dop_mxx, dop_farmem ;00-05 1C7A 000000000000 C dw dop_farimm, dop_rel8, dop_rel1632 ;06-08 1C80 000000000000 C dw dop_st1, dop_sti, dop_cr ;09-11 1C86 0000000000000000 C dw dop_dr, dop_tr, dop_segreg, dop_imms8 ;12-15 1C8E 000000000000 C dw dop_imm8, dop_mmx, dop_shosiz ;16-18 C ;--- string items OP_1 .. OP_SS 1C94 3100 C db '1',0 ;19 1C96 3300 C db '3',0 ;20 1C98 4458 C db 'DX' ;21 1C9A 434C C db 'CL' ;22 1C9C 5354 C db 'ST' ;23 1C9E 4353445345534653475353 C db 'CS','DS','ES','FS','GS','SS' ;24-29 C C ;--- Jump table for a certain place. C ;--- the size of this table matches OPTYPES_BASE C 1CAA C dis_jmp2 label word 1CAA 0000 C dw disbad ;illegal instruction 1CAC 0000 C dw da_twobyte ;two byte instruction (0F xx) 1CAE 0000 C dw da_insgrp ;instruction group 1CB0 0000 C dw da_fpuins ;coprocessor instruction 1CB2 0000 C dw da_fpugrp ;coprocessor instruction group 1CB4 0000 C dw da_insprf ;instruction prefix (including 66h/67h) = C C OPTYPES_BASE equ $ - dis_jmp2 C 1CB6 C CONST ends C C if FLATSS C else C ; mov [savesp2],sp 2223 FFFFFF8926 0000o C mov [run_sp],sp C endif 2227 33FFFFFFC0 C xor ax,ax 2229 FFFFFFA3 0000o C mov [dis_n],ax 222C FFFFFFA3 0000o C mov word ptr [preflags],ax ;clear preflags and preused C if ?PM C endif 222F FFFFFFC606 0000o 03 C mov [segmnt],3 ;initially use DS segment 2234 FFFFFFC606 0000o FFFFFF C mov [rmsize],80h ;signed byte (-128): don't display any memory 2239 FFFFFFC706 0008o 0000 C mov word ptr [ai.dismach],0;no special machine needed, so far 223F FFFFFFE8FFFFFFBD07 C call disgetbyte ;get a byte of the instruction 2242 3CFFFFFF9B C cmp al,9bh ;wait instruction (must be the first prefix) 2244 7508 C jne da2 ;if not C C ; The wait instruction is actually a separate instruction as far as C ; the x86 is concerned, but we treat it as a prefix since there are C ; some mnemonics that incorporate it. But it has to be treated specially C ; since you can't do, e.g., seg cs wait ... but must do wait seg cs ... C ; instead. We'll catch it later if the wait instruction is not going to C ; be part of a shared mnemonic. C 2246 FFFFFF800E 0000o 40 C or [preflags],PREWAIT C C ; If we've found a prefix, we return here for the actual instruction C ; (or another prefix). C 224B C da1: 224B FFFFFFE8FFFFFFB107 C call disgetbyte 224E C da2: 224E FFFFFFA2 0000o C mov [bInstr],al ;save away the instruction 2251 FFFFFFB400 C mov ah,0 C C ;--- Now we have the sequence number of the instruction in AX. Look it up. C 2253 C da3: 2253 FFFFFF8BFFFFFFD8 C mov bx,ax 2255 FFFFFFA3 0000o C mov [idxins],ax ;save the compressed index 2258 3DFFFFFFE001 C cmp ax,SPARSE_BASE 225B 720A C jb @F ;if it's not from the squeezed part of the table 225D FFFFFF8AFFFFFF9F FE20o C mov bl,[sqztab+bx-SPARSE_BASE] 2261 FFFFFFB700 C mov bh,0 2263 FFFFFF81FFFFFFC3FFFFFFE C add bx,SPARSE_BASE ;bx = compressed index 2267 @: 2267 FFFFFF8AFFFFFF8F 0000o C mov cl,[optypes+bx] ;cx = opcode type 226B FFFFFFB500 C mov ch,0 226D FFFFFFD1FFFFFFE3 C shl bx,1 226F FFFFFF8BFFFFFF9F 0000o C mov bx,[opinfo+bx] ;bx = other info (mnemonic if a true instruction) 2273 FFFFFF8BFFFFFFF1 C mov si,cx 2275 FFFFFF8BFFFFFFC3 C mov ax,bx 2277 FFFFFFB10C C mov cl,12 2279 FFFFFFD3FFFFFFE8 C shr ax,cl 227B 3A06 0008o C cmp al,[ai.dismach] 227F 7203 C jb @F ;if a higher machine is already required 2281 FFFFFFA2 0008o C mov [ai.dismach],al ;set machine type 2284 C @@: 2284 FFFFFF80FFFFFFE70F C and bh,0fh ;=and bx,0fffh - remove the machine field 2287 FFFFFF83FFFFFFFE0C C cmp si,OPTYPES_BASE 228A 7357 C jae da13 ;if this is an actual instruction 228C FFFFFFFFFFFFFF94 0000o C call [dis_jmp2+si] ;otherwise, do more specific processing 2290 FFFFFFEBFFFFFFC1 C jmp da3 ;back for more C C ;--- dis_jmp2[1]: Two-byte instruction 0F xx: index 1E0-2DF. C 2292 C da_twobyte: 2292 FFFFFFE86A07 C call disgetbyte 2295 FFFFFFA2 0000o C mov [bInstr],al 2298 FFFFFFB400 C mov ah,0 229A 05FFFFFFE001 C add ax,SPARSE_BASE 229D FFFFFFC3 C ret C C ;--- dis_jmp2[2]: Instruction group. C ;--- BX contains "instruction base": 100h, 110h, ... C 229E C da_insgrp: 229E FFFFFFE8FFFFFFD506 C call getregmem_r ;get the middle 3 bits of the R/M byte 22A1 FFFFFF98 C cbw 22A2 03FFFFFFC3 C add ax,bx ;offset 22A4 FFFFFFC3 C ret C C ;--- dis_jmp2[3]: Coprocessor instruction. C ;--- BX contains "instruction base": 148h, 158h, ... C 22A5 C da_fpuins: 22A5 FFFFFF800E 0000o 10 C or [disflags], DIS_I_SHOWSIZ 22AA FFFFFF800E 0009o 01 C or [ai.dmflags], DM_COPR 22AF FFFFFFE8FFFFFFCE06 C call getregmem 22B2 3CFFFFFFC0 C cmp al,0c0h 22B4 72FFFFFFE8 C jb da_insgrp ;range 00-bfh is same as an instruction group 22B6 FFFFFFB103 C mov cl,3 22B8 FFFFFFD2FFFFFFE8 C shr al,cl ;C0-FF --> 18-1F 22BA 2C10 C sub al,18h-8 ;18-1F --> 08-0F 22BC FFFFFF98 C cbw 22BD 03FFFFFFC3 C add ax,bx ;offset 22BF FFFFFFC3 C ret C C ;--- dis_jmp2[4]: Coprocessor instruction group. C ;--- BX contains "instruction base": 1C8h, 1D0h, 1D8h C 22C0 C da_fpugrp: 22C0 FFFFFFA0 0002o C mov al,[ai.regmem] 22C3 2407 C and al,7 22C5 FFFFFF98 C cbw 22C6 03FFFFFFC3 C add ax,bx 22C8 FFFFFFC3 C ret C C ;--- dis_jmp2[5]: Instruction prefix. At this point, bl = prefix bits; bh = segment C 22C9 C da_insprf: C if 0 ; v2.01: removed - opsize/adrsize prefixes "toggle" just once C endif 22C9 FFFFFF841E 0000o C test bl,[preflags] 22CD 7511 C jnz disbad0 ;if there are duplicates 22CF 081E 0000o C or [preflags],bl 22D3 FFFFFFF6FFFFFFC301 C test bl,PRESEG 22D6 7404 C jz @F ;if not a segment 22D8 FFFFFF883E 0000o C mov [segmnt],bh ;save the segment 22DC C @@: 22DC 58 C pop ax ;discard return address 22DD FFFFFFE96BFFFFFFFF C jmp da1 C 22E0 C disbad0: 22E0 FFFFFFE91305 C jmp disbad ;we don't allow duplicate prefixes C C 22E3 C da13: 22E3 FFFFFF83FFFFFFEE0C C sub si, OPTYPES_BASE C C ;--- here: si=index for opindex to scan oplists table C 22E6 C da13a:: 22E6 FFFFFF8BFFFFFF84 0000o C mov ax, word ptr [opindex][si] 22EA FFFFFF8826 0000o C mov [bEndOplItem], ah 22EE FFFFFFB400 C mov ah, 00 22F0 FFFFFF8BFFFFFFF0 C mov si, ax C C if ?PM ; v2.01: update opsize/adrsize prefixes if D bit set AFTER prefixes have been read C endif C C ; OK. Here we go. This is an actual instruction. C ; BX=offset of mnemonic in mnlist C ; SI=offset of operand list in oplists C ; First print the op mnemonic. C 22F2 56 C push si 22F3 FFFFFF8DFFFFFFB7 0000o C lea si,[mnlist+bx] ;offset of mnemonic 22F7 FFFFFF81FFFFFFFE 003Co C cmp si,offset mnlist+MN_BSWAP 22FB 7505 C jne @F ;if not BSWAP 22FD FFFFFFE86B06 C call dischk32d 2300 74FFFFFFDE C jz disbad0 ;if no operand-size prefix 2302 C @@: 2302 FFFFFFE8FFFFFFAD06 C call showop ;print out the op code (at line_out+28) 2305 FFFFFFC706 0000o 0000 C mov [sizeloc],0 ;clear out this flag 230B 5E C pop si ;recover list of operands 230C FFFFFF81FFFFFFC6 0000o C add si,offset oplists C C ; Loop over operands. si -> operand type. C ; Fortunately the operands appear in the instruction in the same C ; order as they appear in the disassembly output. C 2310 C da14: 2310 FFFFFF8BFFFFFFC6 C mov ax, si 2312 2D 0000o C sub ax, offset oplists 2315 3A06 0000o C cmp al, [bEndOplItem] 2319 735B C jae da21 ;if we're done 231B FFFFFFC606 0000o 00 C mov [disflags2],0 ;clear out size-related flags 2320 FFFFFFAC C lodsb ;get the operand type 2321 3C40 C cmp al,OP_SIZE 2323 7237 C jb da18 ;if it's not size dependent 2325 FFFFFFC606 0000o 20 C mov [disflags2],DIS_I_KNOWSIZ ;indicate variable size 232A 3C60 C cmp al,OP_8 232C 731B C jae da16 ;if the size is fixed (8,16,32,64) 232E 3C50 C cmp al,OP_1632 2330 7309 C jae da15 ;if word or dword 2332 FFFFFFB4FFFFFFFF C mov ah,-1 2334 FFFFFFF606 0000o 01 C test [bInstr],1 2339 7416 C jz da17 ;if byte 233B C da15: 233B FFFFFF800E 0000o 10 C or [preused], PRE32D ;mark this flag as used 2340 FFFFFF8A26 0000o C mov ah,[preflags] 2344 FFFFFF80FFFFFFE410 C and ah, PRE32D ;this will be 10h for dword, 00h for word 2347 FFFFFFEB08 C jmp da17 ;done C 2349 C da16: 2349 FFFFFF8AFFFFFFE0 C mov ah,al ;OP_8, OP_16, OP_32 or OP_64 (we know which) 234B FFFFFF80FFFFFFE4FFFFFFF C and ah,0f0h ;this converts ah to <0 for byte, =0 for word, 234E FFFFFF80FFFFFFEC70 C sub ah,OP_16 ;and >0 for dword (byte=F0,word=0,dword=10,qword=20) C C ;--- Now we know the size (in ah); branch off to do the operand itself. C 2351 C da17: 2351 FFFFFF8AFFFFFFD8 C mov bl,al 2353 FFFFFF83FFFFFFE30E C and bx,0eh ;8 entries (IMM, RM, M, R_MOD, M_OFFS, R, R_ADD, AX) 2356 FFFFFFFFFFFFFF97 0000o C call [dis_jmp1+bx] ;print out the operand 235A FFFFFFEB15 C jmp da20 ;done with operand C C ;--- Sizeless operands. C 235C C da18: 235C FFFFFF98 C cbw 235D 3C28 C cmp al, OP_STR 235F FFFFFF93 C xchg ax,bx ; mov bx, ax 2360 FFFFFF8BFFFFFF87 FFFEo C mov ax,[dis_optab+bx-2] 2364 7209 C jb @F ;if it's not a string 2366 FFFFFFAB C stosw 2367 FFFFFF80FFFFFFFC00 C cmp ah,0 236A 7505 C jnz da20 ;if it's two characters 236C 4F C dec di 236D FFFFFFEB02 C jmp da20 ;done with operand 236F C @@: 236F FFFFFFFFFFFFFFD0 C call ax ;otherwise, do something else 2371 C da20: 2371 FFFFFFB02C C mov al,',' 2373 FFFFFFAA C stosb 2374 FFFFFFEBFFFFFF9A C jmp da14 ;check for another operand C C ;--- all operands done. C C ;------------------------------------------------------------------- C ;--- now check and loop for unused prefixes: C ;--- OPSIZE (66h), ADDRSIZE (67h), WAIT, segment, REP[N][Z], LOCK C C ;--- v2.50: the string instructions may have both 66h & 67h prefixes. C ;--- a 67h prefix will now be shown as a comment behind the opcode. C ;--- this code has been reworked. C 1CB6 C CONST segment C 1CB6 C txflags label byte 1CB6 40 C db PREWAIT ; a WAIT prefix hanging 1CB7 10 C db PRE32D ; opsize 66h 1CB8 20 C db PRE32A ; adrsize 67h 1CB9 01 C db PRESEG 1CBA 06 C db PREREP or PREREPZ 1CBB 08 C db PRELOCK C 1CBC C txsize label byte ; items in txtabs tables 1CBC 0B C db N_WTAB 1CBD 14 C db N_LTABO 1CBE 06 C db N_LTABA 1CBF 09 C db N_PRFXTAB 1CC0 05 C db N_REPNC 1CC1 2E C db N_LOCK C 1CC2 C txtabs label word 1CC2 0000 C dw offset wtab1 1CC4 0000 C dw offset ltabo1 1CC6 0000 C dw offset ltaba1 1CC8 0000 C dw offset prfxtab ; movsb/w, outsb/w, cmpsb/w, lodsb/w, xlat 1CCA 0000 C dw offset replist 1CCC 0000 C dw offset locktab C 1CCE C txprocs label word 1CCE 0000 C dw hdl_wait 1CD0 0000 C dw hdl_d32 1CD2 0000 C dw hdl_a32 1CD4 0000 C dw hdl_seg 1CD6 0000 C dw hdl_rep 1CD8 0000 C dw hdl_lock C 1CDA C strinstr label byte 1CDA 6C6D6E6F C db 6ch,6dh,6eh,6fh ; ins, outs 1CDE FFFFFFA4FFFFFFA5FFFFFFA C db 0A4h,0A5h,0A6h,0A7h ; movs, cmps, lods, scas, stos 1CE2 FFFFFFAAFFFFFFABFFFFFFA C db 0AAh,0ABh,0ACh,0ADh,0AEh,0AFh 1CE8 3B413332 C szA32 db ";A32" C if ?PM C endif 1CEC C CONST ends C C ;--- preflags: C ;--- CS 16-bit: if PRE32x == 1, a prefix has been found. C ;--- + PRE32D == 0: nothing done C ;--- + PRE32D == 1: CS=32: scan opc table, fnd: switch opcode, notfnd:bad prefix C ;--- + PRE32A == 0: nothing done C ;--- + PRE32A == 1: CS=32, scan opc table, fnd: switch opcode, notfnd: check str instr C ;--- CS 32-bit: if PRE32x == 1, no prefix has been found. C ;--- + PRE32D == 0, CS=16: scan opc table, fnd: exit, notfnd: bad prefix C ;--- + PRE32D == 1, CS=32: scan opc table, fnd: switch opcodes, notfnd: exit C ;--- + PRE32A == 0, CS=16: scan opc table, fnd: exit, notfnd: check str instr C ;--- + PRE32A == 1, CS=32: scan opc table, fnd: switch opcodes, notfnd: check str instr C C ;--- note: a prefix might be marked as "used" already. In this case it must be skipped! C C ;--- di=current output in line_out C ;--- may be changed by the prefix loop if a prefix has to be inserted. C 2376 C da21: 2376 FFFFFF807DFFFFFFFF2C C cmp byte ptr [di-1],',' ; skip the comma behind the last operand 237A 7501 C jnz @F 237C 4F C dec di 237D C @@: C ; @dprintf "da21, di=%X", di 237D 33FFFFFFDB C xor bx, bx 237F C nextflag: 237F FFFFFFA1 0000o C mov ax, word ptr [preflags] ; ah=preused C if ?PM C endif 2382 FFFFFFF6FFFFFFD4 C not ah 2384 22FFFFFFC4 C and al, ah ;skip flags that are set in preused 2386 FFFFFF84FFFFFF87 0000o C test al,[bx][txflags] 238A 741D C jz @F 238C FFFFFFA1 0000o C mov ax,[idxins] 238F FFFFFF8AFFFFFF8F 0000o C mov cl,[bx][txsize] 2393 FFFFFFB500 C mov ch,0 2395 53 C push bx 2396 FFFFFFD1FFFFFFE3 C shl bx,1 2398 FFFFFF8BFFFFFF97 0000o C mov dx,[bx][txtabs] 239C FFFFFFFFFFFFFF97 0000o C call [bx][txprocs] 23A0 5B C pop bx 23A1 FFFFFF8AFFFFFF87 0000o C mov al,[bx][txflags] 23A5 0806 0000o C or [preused], al ;mark this prefix as used 23A9 C @@: 23A9 43 C inc bx 23AA FFFFFF83FFFFFFFB06 C cmp bx, 6 23AD 72FFFFFFD0 C jb nextflag C ; @dprintf "da21 done: preflags=%X", word ptr preflags 23AF FFFFFFE9FFFFFFA000 C jmp da_done C 23B2 C hdl_scan_table: 23B2 57 C push di 23B3 FFFFFF8BFFFFFFFA C mov di, dx 23B5 51 C push cx 23B6 FFFFFFF2FFFFFFAF C repne scasw 23B8 59 C pop cx 23B9 750D C jnz @F 23BB 49 C dec cx 23BC FFFFFFD1FFFFFFE1 C shl cx, 1 23BE 03FFFFFFF9 C add di,cx ;position DI for opcode replacement 23C0 FFFFFF8B35 C mov si,[di] 23C2 FFFFFF81FFFFFFC6 0000o C add si,offset mnlist 23C6 33FFFFFFC9 C xor cx, cx ;ZF=1 23C8 C @@: 23C8 5F C pop di 23C9 FFFFFFC3 C ret C C ife ?PM 23CA C hdl_d32: C endif 23CA C hdl_wait: 23CA FFFFFFE8FFFFFFE5FFFFFFF C call hdl_scan_table 23CD 751B C jnz disbad2 23CF FFFFFFEB7B C jmp hdl_showop ;copy op mnemonic, preserve di C C if ?PM C endif C 23D1 C hdl_a32: 23D1 FFFFFFE8FFFFFFDEFFFFFFF C call hdl_scan_table ; check for the few opcodes that change with 67h prefix (LOOPx,JCXZ) 23D4 7502 C jnz @F C if ?PM C endif 23D6 FFFFFFEB74 C jmp hdl_showop ; switch opcode if found 23D8 C @@: C if ?PM C endif 23D8 57 C push di 23D9 FFFFFFBF 0000o C mov di, offset strinstr 23DC FFFFFFB90E00 C mov cx, 14 23DF FFFFFFF2FFFFFFAE C repnz scasb 23E1 5F C pop di 23E2 7506 C jnz disbad2 23E4 FFFFFFBE 0000o C mov si,offset szA32 C if ?PM C endif 23E7 FFFFFFA5 C movsw 23E8 FFFFFFA5 C movsw 23E9 C hdl_a32_ex: 23E9 FFFFFFC3 C ret C 23EA C disbad2: 23EA FFFFFFE90904 C jmp disbad C 23ED C hdl_seg: 23ED FFFFFF80FFFFFFFC00 C cmp ah,0 23F0 75FFFFFFF8 C jnz disbad2 ;if index > 256 23F2 57 C push di 23F3 FFFFFF8BFFFFFFFA C mov di,dx 23F5 FFFFFFF2FFFFFFAE C repne scasb 23F7 5F C pop di 23F8 75FFFFFFF0 C jne disbad2 ;if it's not on the list 23FA FFFFFFB90300 C mov cx,3 23FD FFFFFFE84206 C call moveover 2400 57 C push di 2401 FFFFFFBF 001Co C mov di,offset line_out+MNEMONOFS 2404 FFFFFFE8FFFFFF9E05 C call showseg ;show segment register 2407 FFFFFFB03A C mov al,':' 2409 FFFFFFAA C stosb 240A 5F C pop di C ; or [preused],PRESEG ;mark it as used 240B FFFFFFC3 C ret C C ;--- ax=instr, cx=items in table, dx=offset table C 240C C hdl_rep: 240C FFFFFF80FFFFFFFC00 C cmp ah,0 240F 75FFFFFFD9 C jnz disbad2 ;if not in the first 256 bytes 2411 24FFFFFFFE C and al,not 1 ;clear bit0 (MOVSW -> MOVSB) 2413 57 C push di 2414 FFFFFF8BFFFFFFFA C mov di,dx ;scan those for REP first 2416 FFFFFFF2FFFFFFAE C repne scasb 2418 FFFFFFBE 07C1o C mov si,offset mnlist+MN_REP 241B 7426 C je hdl_insprf ;if one of the REP instructions 241D FFFFFFB102 C mov cl,N_REPALL - N_REPNC 241F FFFFFFF2FFFFFFAE C repne scasb 2421 75FFFFFFC7 C jne disbad2 ;if not one of the REPE/REPNE instructions 2423 FFFFFFBE 07C6o C mov si,offset mnlist+MN_REPE C ; test [preused],PREREPZ ; v2.50: isn't set yet with the new code, 2426 FFFFFFF606 0000o 04 C test [preflags],PREREPZ ; but we may use [preflags]. 242B 7516 C jnz hdl_insprf ;if REPE 242D FFFFFFBE 07CCo C mov si,offset mnlist+MN_REPNE 2430 FFFFFFEB11 C jmp hdl_insprf ;it's REPNE C 2432 C hdl_lock: 2432 57 C push di 2433 FFFFFF8BFFFFFFFA C mov di,dx 2435 FFFFFFF2FFFFFFAF C repne scasw 2437 75FFFFFFB1 C jne disbad2 ;if not in the approved list 2439 FFFFFFF606 0000o 01 C test [preused],PRESEG 243E 74FFFFFFAA C jz disbad2 ;if memory was not accessed 2440 FFFFFFBE 0662o C mov si,offset mnlist+MN_LOCK C ; or [preused],PRELOCK C C ;--- Slip in another mnemonic: REP/REPE/REPNE/LOCK. C ;--- SI = offset of mnemonic, what should be C ;--- DI is on the stack. C 2443 C hdl_insprf: 2443 5F C pop di 2444 FFFFFFB90800 C mov cx,8 2447 56 C push si 2448 FFFFFFE8FFFFFFF705 C call moveover 244B 5E C pop si 244C C hdl_showop: 244C 57 C push di 244D FFFFFFE86205 C call showop 2450 5F C pop di 2451 FFFFFFC3 C ret C C ;--- Done with instruction. Erase the size indicator, if appropriate. C 2452 C da_done: 2452 FFFFFF8B0E 0000o C mov cx,[sizeloc] 2456 FFFFFF83FFFFFFF900 C cmp cx,0 2459 741D C jz da28b ;if there was no size given 245B FFFFFFA0 0000o C mov al,[disflags] 245E FFFFFFA810 C test al,DIS_I_SHOWSIZ 2460 7516 C jnz da28b ;if we need to show the size 2462 FFFFFFA820 C test al,DIS_I_KNOWSIZ 2464 7412 C jz da28b ;if the size is not known already 2466 FFFFFF87FFFFFFCF C xchg cx,di 2468 FFFFFF8BFFFFFFF7 C mov si,di ;save old di 246A FFFFFFB020 C mov al,' ' 246C C @@: 246C FFFFFFAE C scasb ;skip size name 246D 75FFFFFFFD C jne @B ;if not done yet C ;(The above is the same as repne scasb, but C ;has no effect on cx.) 246F FFFFFF83FFFFFFC704 C add di,4 ;skip 'PTR ' 2472 FFFFFF87FFFFFFF7 C xchg si,di 2474 2BFFFFFFCE C sub cx,si 2476 FFFFFFF3FFFFFFA4 C rep movsb ;move the line C C ;--- Now we're really done. Print out the bytes on the left. C 2478 C da28b: 2478 57 C push di ;print start of disassembly line 2479 FFFFFFBF 0000o C mov di,offset line_out C @dispsegm [u_addr+4];print segment part of address 247C FFFFFFA1 0004o 1C mov ax,[u_addr+4] 247F FFFFFFE8FFFFFFE307 1C call hexword 2482 FFFFFFB03A C mov al,':' 2484 FFFFFFAA C stosb C sizeprfX ;mov eax,[u_addr+0] 2485 FFFFFFA1 0000o C mov ax,[u_addr+0] 2488 FFFFFFE8FFFFFFCF07 C call DispOfs 248B FFFFFFB020 C mov al,' ' 248D FFFFFFAA C stosb 248E FFFFFF8B1E 0000o C mov bx,[dis_n] 2492 C @@: 2492 FFFFFFBE 001Bo C mov si,offset line_out+MNEMONOFS - 1 2495 2BFFFFFFF7 C sub si, di 2497 FFFFFFD1FFFFFFEE C shr si, 1 2499 3BFFFFFFDE C cmp bx,si 249B 7E19 C jle da29 ;if it's a short instruction which fits in one line 249D 2BFFFFFFDE C sub bx,si 249F 53 C push bx 24A0 FFFFFF8BFFFFFFDE C mov bx,si 24A2 57 C push di 24A3 FFFFFFE8FFFFFF8605 C call disshowbytes 24A6 FFFFFFE8FFFFFFDF07 C call putsline 24A9 59 C pop cx 24AA 5B C pop bx 24AB FFFFFFBF 0000o C mov di,offset line_out 24AE 2BFFFFFFCF C sub cx,di 24B0 FFFFFFB020 C mov al,' ' 24B2 FFFFFFF3FFFFFFAA C rep stosb 24B4 FFFFFFEBFFFFFFDC C jmp @B 24B6 C da29: 24B6 FFFFFFE87305 C call disshowbytes 24B9 FFFFFFB020 C mov al,' ' ;pad to op code 24BB FFFFFFB9 001Co C mov cx,offset line_out+MNEMONOFS 24BE 2BFFFFFFCF C sub cx,di 24C0 7202 C jc @F 24C2 FFFFFFF3FFFFFFAA C rep stosb 24C4 C @@: 24C4 5F C pop di 24C5 FFFFFFF606 0000o 08 C test [disflags], DIS_I_UNUSED 24CA 740D C jz da32 ;if we don't print ' (unused)' 24CC FFFFFFBE 0000o C mov si,offset unused 24CF FFFFFF807DFFFFFFFF20 C cmp byte ptr [di-1],' ' 24D3 7501 C jne @F ;if there's already a space here 24D5 46 C inc si 24D6 C @@: 24D6 FFFFFFE87907 C call copystring ;si->di C C ;--- Print info. on minimal processor needed. C 24D9 C da32: 24D9 57 C push di 24DA FFFFFFBF 0000o C mov di,offset obsinst 24DD FFFFFF8B0E 0000o C mov cx,[idxins] 24E1 FFFFFFE8FFFFFF8F05 C call showmach ;show the machine type, if needed 24E4 5F C pop di 24E5 FFFFFFE30E C jcxz da32f ;if no message C C ;--- Print a message on the far right. C 24E7 FFFFFFB8 004Fo C mov ax,offset line_out+79 24EA 2BFFFFFFC1 C sub ax,cx 24EC 51 C push cx 24ED FFFFFFE87005 C call tab_to ;tab out to the location 24F0 59 C pop cx 24F1 FFFFFFF3FFFFFFA4 C rep movsb ;copy the string 24F3 FFFFFFEB64 C jmp da32z ;done C C ;--- Dump referenced memory location. C ;--- v2.50: skip this if instruction is LEA! C 24F5 C da32f: 24F5 FFFFFFA0 0000o C mov al,[disflags] 24F8 3406 C xor al,DIS_F_SHOW + DIS_I_SHOW 24FA FFFFFFA806 C test al,DIS_F_SHOW + DIS_I_SHOW 24FC 755B C jnz da32z ;if there is no memory location to show C 24FE FFFFFF803E 0000o FFFFFF C cmp [bInstr], 8Dh ; v2.50: don't show mem contents for lea! 2503 7454 C jz da32z C C ife RING0 ; for DebugR, FS/GS memory contents aren't skipped 2505 FFFFFF803E 0000o 03 C cmp [segmnt],3 250A 774D C ja da32z ;if FS or GS C endif 250C FFFFFFB8 0047o C mov ax,offset line_out+79-8 ; room for ss:oooo=bb|wwww|dddddddd 250F FFFFFFB90200 C mov cx,2 2512 FFFFFF803E 0000o 00 C cmp [rmsize],0 2517 7C08 C jl da32h ;if byte 2519 7403 C jz @F ;if word 251B FFFFFF83FFFFFFC104 C add cx, 4 ; 4 more chars 251E C @@: 251E FFFFFF83FFFFFFC102 C add cx, 2 ; 2 more chars 2521 C da32h: 2521 2BFFFFFFC1 C sub ax, cx 2523 51 C push cx 2524 FFFFFFE83905 C call tab_to 2527 FFFFFFE87B04 C call showseg ;show segment register 252A FFFFFFB03A C mov al,':' 252C FFFFFFAA C stosb 252D FFFFFFA1 0000o C mov ax,[addrr] 2530 FFFFFFE83207 C call hexword ;show offset 2533 FFFFFFB03D C mov al,'=' 2535 FFFFFFAA C stosb 2536 FFFFFFA0 0000o C mov al,[segmnt] ;segment number 2539 FFFFFF98 C cbw 253A FFFFFFD1FFFFFFE0 C shl ax,1 253C FFFFFF93 C xchg ax,bx ;mov bx,ax 253D FFFFFF8BFFFFFF9F 0000o C mov bx,[segrgaddr+bx] ;get address of value C if ?PM C endif 2541 59 C pop cx 2542 FFFFFFD0FFFFFFE9 C shr cl, 1 C ;--- v2.0: just read the bytes that the instruction would 2544 1E C push ds C @movs ds, [bx] 2545 FFFFFF8E1F 1C mov ds, [bx] 2547 C ds_is_set: 2547 2EFFFFFF8B1E 0000o C mov bx, cs:[addrr] 254C 03FFFFFFD9 C add bx, cx 254E C @@: 254E 4B C dec bx 254F FFFFFF8A07 C mov al, [bx] 2551 FFFFFFE81807 C call hexbyte ;display byte 2554 FFFFFFFEFFFFFFC9 C dec cl 2556 75FFFFFFF6 C jnz @B 2558 1F C pop ds C if ?PM C endif C 2559 C da32z: 2559 FFFFFFE82507 C call trimputs ;print (rest of) disassembled line 255C FFFFFFA0 0000o C mov al,[disflags] 255F FFFFFFA801 C test al,DIS_F_REPT 2561 7419 C jz da34 ;if we're not allowed to repeat ourselves 2563 FFFFFFA808 C test al,DIS_I_UNUSED 2565 7512 C jnz @F ;if we printed ' (unused)' 2567 FFFFFFA1 0000o C mov ax,[idxins] 256A FFFFFF83FFFFFFF817 C cmp ax,17h 256D 740A C je @F ;if it was 'pop ss' 256F 3DFFFFFF8E00 C cmp ax,8eh 2572 7405 C je @F ;if it was 'mov ss,--' 2574 3DFFFFFFFB00 C cmp ax,0fbh 2577 7503 C jne da34 ;if it was not 'sti' 2579 C @@: 2579 FFFFFFE9FFFFFFA2FFFFFFF C jmp disasm1 257C C da34: 257C FFFFFFC3 C ret C C ;--- MOD R/M (OP_RM) C 257D C dop_rm: 257D FFFFFFE80004 C call getregmem 2580 3CFFFFFFC0 C cmp al,0c0h 2582 7203 C jb dop05 2584 FFFFFFE9FFFFFF8901 C jmp dop_r1 ;if pure register reference 2587 C dop05: ;<--- used by OP_M, OP_M64, OP_M80 2587 FFFFFFE83F04 C call showsize ;print out size in AH 258A C dop06: ;<--- used by OP_MOFFS, OP_MXX, OP_MFLOAT, OP_MDOUBLE 258A FFFFFF800E 0000o 01 C or [preused],PRESEG ;needed even if there's no segment override C ;because handling of LOCK prefix relies on it 258F FFFFFFF606 0000o 01 C test [preflags],PRESEG 2594 7406 C jz @F ;if no segment override 2596 FFFFFFE80C04 C call showseg ;print segment name 2599 FFFFFFB03A C mov al,':' 259B FFFFFFAA C stosb 259C C @@: 259C FFFFFFA0 0002o C mov al,[ai.regmem] 259F 24FFFFFFC7 C and al,0c7h 25A1 FFFFFF800E 0000o 20 C or [preused], PRE32A 25A6 FFFFFFF606 0000o 20 C test [preflags], PRE32A 25AB 7403 C jz @F 25AD FFFFFFE9FFFFFF9C00 C jmp dop18 ;if 32-bit addressing 25B0 C @@: 25B0 FFFFFF800E 0000o 04 C or [disflags], DIS_I_SHOW ;we'd like to show this address 25B5 FFFFFFC706 0000o 0000 C mov [addrr],0 ; zero out the address initially 25BB 3C06 C cmp al,6 25BD FFFFFF93 C xchg ax,bx ;mov bx,ax 25BE FFFFFFB05B C mov al,'[' 25C0 FFFFFFAA C stosb 25C1 747B C je dop16 ;if [xxxx] 25C3 FFFFFF83FFFFFFE307 C and bx,7 25C6 FFFFFF8AFFFFFF9F 0000o C mov bl,[rmtab+bx] 25CA FFFFFFF6FFFFFFC308 C test bl,8 25CD 7519 C jnz dop09 ;if BX 25CF FFFFFFF6FFFFFFC304 C test bl,4 25D2 7428 C jz dop11 ;if not BP 25D4 FFFFFFB84250 C mov ax,'PB' ;"BP" 25D7 FFFFFF8B0E 0008o C mov cx,[regs.rBP] 25DB FFFFFFF606 0000o 01 C test [preflags],PRESEG 25E0 750D C jnz dop10 ;if segment override 25E2 FFFFFFFE0E 0000o C dec [segmnt] ;default is now SS 25E6 FFFFFFEB07 C jmp dop10 25E8 C dop09: 25E8 FFFFFFB84258 C mov ax,'XB' ;"BX" 25EB FFFFFF8B0E 0010o C mov cx,[regs.rBX] C 25EF C dop10: 25EF FFFFFF890E 0000o C mov [addrr],cx ;print it out, etc. 25F3 FFFFFFAB C stosw 25F4 FFFFFFF6FFFFFFC303 C test bl,2+1 25F7 741A C jz dop13 ;if done 25F9 FFFFFFB02B C mov al,'+' 25FB FFFFFFAA C stosb 25FC C dop11: 25FC FFFFFFB85349 C mov ax,'IS' ;"SI" 25FF FFFFFF8B0E 0004o C mov cx,[regs.rSI] 2603 FFFFFFF6FFFFFFC301 C test bl,1 2606 7406 C jz @F ;if SI 2608 FFFFFFB044 C mov al,'D' ;"DI" 260A FFFFFF8B0E 0000o C mov cx,[regs.rDI] 260E C @@: 260E 010E 0000o C add [addrr],cx ; base+index ([BX+SI, .... ) 2612 FFFFFFAB C stosw 2613 C dop13: 2613 FFFFFFF606 0002o FFFFFF C test [ai.regmem], 0c0h 2618 742E C jz dop17 ;if no displacement 261A FFFFFFF606 0002o FFFFFF C test [ai.regmem], 80h 261F 751A C jnz dop15 ;if word displacement 2621 FFFFFFE8FFFFFFDB03 C call disgetbyte 2624 FFFFFF98 C cbw 2625 0106 0000o C add [addrr],ax ; [base][+index]+byte 2629 3C00 C cmp al,0 262B FFFFFFB42B C mov ah,'+' 262D 7D04 C jge @F ;if >= 0 262F FFFFFFB42D C mov ah,'-' 2631 FFFFFFF6FFFFFFD8 C neg al 2633 C @@: 2633 FFFFFF8825 C mov [di],ah 2635 47 C inc di 2636 FFFFFFE83306 C call hexbyte ;print the byte displacement 2639 FFFFFFEB0D C jmp dop17 ;done 263B C dop15: 263B FFFFFFB02B C mov al,'+' 263D FFFFFFAA C stosb 263E C dop16: ;<--- pure 16bit offset 263E FFFFFFE8FFFFFFD403 C call disgetword 2641 0106 0000o C add [addrr],ax 2645 FFFFFFE81D06 C call hexword ;print word displacement 2648 C dop17: 2648 FFFFFFB05D C mov al,']' 264A FFFFFFAA C stosb 264B FFFFFFC3 C ret C C ;--- 32-bit MOD REG R/M addressing. C 264C C dop18: 264C 3C05 C cmp al,5 264E 7508 C jne @F ;if not just a disp32 address C ;--- render "[xxxxxxxx]" 2650 C dop18a: 2650 FFFFFFB05B C mov al,'[' 2652 FFFFFFAA C stosb 2653 FFFFFFE84003 C call disp32 ;get & display 32bit offset 2656 FFFFFFEBFFFFFFF0 C jmp dop17 ;last the ']' C 2658 C @@: 2658 50 C push ax 2659 2407 C and al,7 265B 3C04 C cmp al,4 265D 7506 C jne @F ;if no SIB 265F FFFFFFE8FFFFFF9D03 C call disgetbyte ;get and save it 2662 FFFFFFA2 0003o C mov [ai.sibbyte],al 2665 C @@: 2665 58 C pop ax 2666 FFFFFFA8FFFFFF80 C test al,80h 2668 7516 C jnz dop22 ;if disp32 266A FFFFFFA840 C test al,40h 266C 7415 C jz dop23 ;if no disp8 266E FFFFFFE8FFFFFF8E03 C call disgetbyte 2671 3C00 C cmp al,0 2673 7D06 C jge @F ;if >= 0 2675 FFFFFFF6FFFFFFD8 C neg al 2677 FFFFFFC6052D C mov byte ptr [di],'-' 267A 47 C inc di 267B C @@: 267B FFFFFFE8FFFFFFEE05 C call hexbyte 267E FFFFFFEB03 C jmp dop23 ;done C C ;--- for 32-bit, the disassembler displays offsets first; C ;--- example: mov ax,00001000[ebx][edi] C 2680 C dop22: C ;--- v2.50: put offset in square brackets: mov ax,[00001000][ebx][edi] C ; call disp32 ;get and display 32bit offset 2680 FFFFFFE8FFFFFFCDFFFFFFF C call dop18a ;get and display 32bit offset C 2683 C dop23: 2683 FFFFFFA0 0002o C mov al,[ai.regmem] 2686 2407 C and al,7 2688 3C04 C cmp al,4 268A 7403FFFFFFE9FFFFFFA902 C jne showsqreg32 ;if no SIB 268F FFFFFFA0 0003o C mov al,[ai.sibbyte] C if 1 ;bugfix: make 'u' correctly handle [ESP],[ESP+x] 2692 3C24 C cmp al,24h 2694 7505 C jnz @F 2696 FFFFFFB004 C mov al,4 2698 FFFFFFE9FFFFFF9D02 C jmp showsqreg32 269B C @@: C endif 269B 2407 C and al,7 269D 3C05 C cmp al,5 269F 750C C jne @F ;if not [EBP] 26A1 FFFFFFF606 0002o FFFFFF C test [ai.regmem], 0c0h 26A6 7505 C jnz @F ;if MOD != 0 26A8 FFFFFFE8FFFFFFEB02 C call disp32 ;get and show 32-bit displacement instead of [EBP] 26AB FFFFFFEB03 C jmp dop25 C 26AD C @@: 26AD FFFFFFE8FFFFFF8802 C call showsqreg32; render "[E®]"; al=reg 26B0 C dop25: 26B0 FFFFFFA0 0003o C mov al,[ai.sibbyte] 26B3 FFFFFFD0FFFFFFE8 C shr al,1 26B5 FFFFFFD0FFFFFFE8 C shr al,1 26B7 FFFFFFD0FFFFFFE8 C shr al,1 26B9 2407 C and al,7 26BB 3C04 C cmp al,4 26BD 742F C je disbad1 ;if illegal C 26BF FFFFFFE87602 C call showsqreg32; render "[E®]; al=reg 26C2 4F C dec di ; remove "]" C 26C3 FFFFFF8A26 0003o C mov ah,[ai.sibbyte] 26C7 FFFFFFF6FFFFFFC4FFFFFFC C test ah,0c0h 26CA 7414 C jz dop27 ;if SS = 0 26CC FFFFFFB02A C mov al,'*' 26CE FFFFFFAA C stosb 26CF FFFFFFB032 C mov al,'2' 26D1 FFFFFFF6FFFFFFC4FFFFFF8 C test ah,80h 26D4 7409 C jz @F ;if *2 26D6 FFFFFFB034 C mov al,'4' 26D8 FFFFFFF6FFFFFFC440 C test ah,40h 26DB 7402 C jz @F ;if *4 26DD FFFFFFB038 C mov al,'8' 26DF C @@: 26DF FFFFFFAA C stosb 26E0 C dop27: 26E0 FFFFFFB05D C mov al,']' 26E2 FFFFFFAA C stosb 26E3 FFFFFFC3 C ret C C ;--- Memory-only reference (OP_M) C 26E4 C dop_m: 26E4 FFFFFFE8FFFFFF9902 C call getregmem 26E7 3CFFFFFFC0 C cmp al,0c0h 26E9 7303 C jae disbad1 ;if it's a register reference 26EB FFFFFFE9FFFFFF99FFFFFFF C jmp dop05 C 26EE C disbad1: 26EE FFFFFFE90501 C jmp disbad ;this is not supposed to happen C C ;--- Register reference from MOD R/M part (OP_R_MOD) C 26F1 C dop_r_mod: 26F1 FFFFFFE8FFFFFF8C02 C call getregmem 26F4 3CFFFFFFC0 C cmp al,0c0h 26F6 72FFFFFFF6 C jb disbad1 ;if it's a memory reference 26F8 FFFFFFEB16 C jmp dop_r1 C C ;--- Memory offset reference (OP_MOFFS) C 26FA C dop_moffs: 26FA FFFFFFE8FFFFFFCC02 C call showsize ;print the size and save various things 26FD FFFFFFB005 C mov al,5 26FF FFFFFFF606 0000o 20 C test [preflags], PRE32A 2704 7501 C jnz @F ;if 32-bit addressing 2706 40 C inc ax 2707 C @@: 2707 FFFFFFA2 0002o C mov [ai.regmem],al 270A FFFFFFE97DFFFFFFFE C jmp dop06 ;don't show size C C ;--- Pure register reference (OP_R) C 270D C dop_r: 270D FFFFFFE86602 C call getregmem_r 2710 C dop_r1: ;<--- used by OP_RM, OP_R_MOD, OP_R_ADD, OP_AX 2710 2407 C and al,7 ;entry point for regs from MOD R/M, and others 2712 FFFFFF8A0E 0000o C mov cl,[disflags2] 2716 080E 0000o C or [disflags],cl ;if it was variable size operand, the size C ;should now be marked as known. 271A FFFFFF80FFFFFFFC00 C cmp ah,0 271D 7C0D C jl dop_reg ;if byte register 271F 7409 C jz dop_wordreg ;if word register 2721 FFFFFF80FFFFFFFC20 C cmp ah,20h ;qword register (mmx)? 2724 7410 C jz dop_regmmx 2726 FFFFFFC60545 C mov byte ptr [di],'E' 2729 47 C inc di 272A C dop_wordreg: 272A 0408 C add al,8 ; use the 16-bit names ( rgnam16 ) 272C C dop_reg: 272C FFFFFF98 C cbw 272D FFFFFFD1FFFFFFE0 C shl ax,1 272F FFFFFF93 C xchg ax,bx ; mov bx,ax 2730 FFFFFF8BFFFFFF87 0000o C mov ax,[rgnam816+bx]; get the register name 2734 FFFFFFAB C stosw 2735 FFFFFFC3 C ret 2736 C dop_regmmx: 2736 50 C push ax 2737 FFFFFFB84D4D C mov ax,"MM" 273A FFFFFFAB C stosw 273B 58 C pop ax 273C 0430 C add al,'0' 273E FFFFFFAA C stosb 273F FFFFFFC3 C ret C C ;--- Register number embedded in the instruction (OP_R_ADD) C 2740 C dop_r_add: 2740 FFFFFFA0 0000o C mov al,[bInstr] 2743 FFFFFFEBFFFFFFCB C jmp dop_r1 C C ;--- AL or AX or EAX (OP_AX) C 2745 C dop_ax: 2745 FFFFFFB000 C mov al,0 2747 FFFFFFEBFFFFFFC7 C jmp dop_r1 C C ;--- QWORD mem (OP_M64). C ;--- this operand type is used by: C ;--- + cmpxchg8b C ;--- + fild, fistp C 2749 C dop_m64: C ; mov ax,'Q' ;print 'Q' +'WORD' 2749 FFFFFFB420 C mov ah,20h ;size QWORD 274B FFFFFFEB21 C jmp dop40 C C ;--- FLOAT (=REAL4) mem (OP_MFLOAT). C 274D C dop_mfloat: 274D FFFFFFB8464C C mov ax,'LF' 2750 FFFFFFAB C stosw 2751 FFFFFFB04F C mov al,'O' 2753 FFFFFFAA C stosb 2754 FFFFFFB84154 C mov ax,'TA' 2757 FFFFFFEB0B C jmp dop38c C C ;--- DOUBLE (=REAL8) mem (OP_MDOUBLE). C 2759 C dop_mdouble: 2759 FFFFFFB8444F C mov ax,'OD' 275C FFFFFFAB C stosw 275D FFFFFFB85542 C mov ax,'BU' 2760 FFFFFFAB C stosw 2761 FFFFFFB84C45 C mov ax,'EL' 2764 C dop38c: 2764 FFFFFFAB C stosw 2765 FFFFFFE8FFFFFF8B02 C call showptr 2768 FFFFFFEB2E C jmp dop42a C C ;--- TBYTE (=REAL10) mem (OP_M80). C 276A C dop_m80: 276A FFFFFFB854FFFFFFFF C mov ax,0ff00h+'T' ;print 't' + 'byte' 276D FFFFFFAA C stosb 276E C dop40: 276E FFFFFFE80F02 C call getregmem 2771 3CFFFFFFC0 C cmp al,0c0h 2773 732D C jae disbad5 ;if it's a register reference 2775 FFFFFF8026 0000o FFFFFF C and [disflags],not DIS_F_SHOW ;don't show this 277A FFFFFFE90AFFFFFFFE C jmp dop05 C C ;--- far memory (OP_FARMEM). C ;--- this is either a FAR16 (DWORD) or FAR32 (FWORD) pointer C 277D C dop_farmem: 277D FFFFFFB84641 C mov ax,'AF' ;store "FAR" 2780 FFFFFFAB C stosw 2781 FFFFFFB052 C mov al,'R' 2783 FFFFFFAA C stosb 2784 FFFFFFB83136 C mov ax,"61" ;FAR16 2787 FFFFFFE8FFFFFFE101 C call dischk32d 278A 7403 C jz @F 278C FFFFFFB83332 C mov ax,"23" ;FAR32 278F C @@: 278F FFFFFFAB C stosw 2790 FFFFFFB020 C mov al,' ' 2792 FFFFFFAA C stosb C ; call showptr C C ;--- mem (OP_MXX). C 2793 C dop_mxx: 2793 FFFFFF8026 0000o FFFFFF C and [disflags],not DIS_F_SHOW ;don't show this 2798 C dop42a: 2798 FFFFFFE8FFFFFFE501 C call getregmem 279B 3CFFFFFFC0 C cmp al,0c0h 279D 7303 C jae disbad5 ;if it's a register reference 279F FFFFFFE9FFFFFFE8FFFFFFF C jmp dop06 ;don't show size C 27A2 C disbad5: 27A2 FFFFFFEB52 C jmp disbad C C ;--- Check for ST(1) (OP_1CHK). C 27A4 C dop_st1: 27A4 58 C pop ax ;discard return address 27A5 FFFFFFA0 0002o C mov al,[ai.regmem] 27A8 2407 C and al,7 27AA 3C01 C cmp al,1 27AC 7403 C je @F ;if it's ST(1) 27AE FFFFFFE95FFFFFFFFB C jmp da14 ;another operand (but no comma) 27B1 C @@: 27B1 FFFFFFE9FFFFFFC2FFFFFFF C jmp da21 ;end of list C C ;--- store segment register name (OP_SEGREG). C 27B4 C dop_segreg: 27B4 FFFFFFE8FFFFFFBF01 C call getregmem_r 27B7 3C06 C cmp al,6 27B9 733B C jae disbad ;if not a segment register 27BB 3C02 C cmp al,2 27BD 7405 C je @F ;if SS 27BF FFFFFF8026 0000o FFFFFF C and [disflags],not DIS_F_REPT ;clear flag: don't repeat 27C4 C @@: 27C4 3C04 C cmp al,4 27C6 7205 C jb @F ;if not FS or GS 27C8 FFFFFFC606 0008o 03 C mov [ai.dismach],3 ;(no new 486-686 instructions involve seg regs) 27CD C @@: 27CD 0410 C add al,8+8 ;segreg names are behind 8-bit/16-bit regnames 27CF FFFFFFE95AFFFFFFFF C jmp dop_reg ;go print it out C C ;--- Sign-extended immediate byte (OP_IMMS8). "push xx" C 27D2 C dop_imms8: 27D2 FFFFFFE87401 C call showsizeop 27D5 FFFFFFE82702 C call disgetbyte 27D8 3C00 C cmp al,0 27DA FFFFFF93 C xchg ax,bx ;mov bl,al 27DB FFFFFFB02B C mov al,'+' 27DD 7D04 C jge @F ;if >= 0 27DF FFFFFFF6FFFFFFDB C neg bl 27E1 FFFFFFB02D C mov al,'-' 27E3 C @@: 27E3 FFFFFFAA C stosb 27E4 FFFFFF93 C xchg ax,bx ;mov al,bl 27E5 FFFFFFEB03 C jmp dop59a ;call hexbyte and return C C ;--- Immediate byte (OP_IMM8). C 27E7 C dop_imm8: 27E7 FFFFFFE81502 C call disgetbyte 27EA C dop59a: 27EA FFFFFFE97F04 C jmp hexbyte ;call hexbyte and return C C ;--- Set flag to always show size (OP_SHOSIZ). C 27ED C dop_shosiz: 27ED FFFFFF800E 0000o 10 C or [disflags],DIS_I_SHOWSIZ 27F2 58 C pop ax ;discard return address 27F3 FFFFFFE91AFFFFFFFB C jmp da14 ;next operand C 27F6 C disasm endp C C ;--- v2.50: return value in SI has changed C ;--- up to v2.50, si returned an offset for the oplists table ( + OPTYPES_BASE ) C ;--- since v2.50, si returns just an index (for table opindex). C 27F6 C disbad proc C if FLATSS C else 27F6 FFFFFF8B26 0000o C mov sp,[run_sp] ;pop junk off stack C endif 27FA FFFFFFB8 0000o C mov ax,offset da13a ; the address where we "return" to 27FD 50 C push ax 27FE FFFFFFC706 0000o 0000 C mov [dis_n],0 2804 FFFFFFC706 0000o 0000 C mov word ptr [preflags],0 ;clear preflags and preused 280A FFFFFFC606 0000o FFFFFF C mov [rmsize],80h ;don't display any memory 280F FFFFFFC706 0008o 0000 C mov word ptr [ai.dismach],0 ;forget about the machine type 2815 FFFFFF8026 0000o FFFFFF C and [disflags],not DIS_I_SHOW ;and flags 281A FFFFFFE8FFFFFFE201 C call disgetbyte 281D FFFFFFBF 0000o C mov di,offset prefixlist 2820 FFFFFFB90A00 C mov cx,N_PREFIX 2823 FFFFFFF2FFFFFFAE C repne scasb 2825 740B C je @F ;if it's a named prefix 2827 FFFFFFFF0E 0000o C dec [dis_n] ;reset cnt to 0 again 282B FFFFFFBBFFFFFFB401 C mov bx,MN_DB ;offset of 'DB' mnemonic C ; mov si,OPLIST_26+OPTYPES_BASE;this says OP_IMM8 282E FFFFFFBE2600 C mov si,26h ;v2.50: index 26h: this says OP_IMM8 2831 FFFFFFC3 C ret 2832 C @@: 2832 FFFFFF800E 0000o 08 C or [disflags],DIS_I_UNUSED ;print special flag 2837 FFFFFFBB0900 C mov bx,N_PREFIX-1 283A 2BFFFFFFD9 C sub bx,cx 283C FFFFFF83FFFFFFFB06 C cmp bx,6 ;the first 6 items are segment prefixes 283F 7209 C jb @F ;if SEG directive 2841 FFFFFFD1FFFFFFE3 C shl bx,1 ;prefix wait, lock, repe, repne 2843 FFFFFF8BFFFFFF9F FFF4o C mov bx,[prefixmnem+bx-6*2] C ; mov si,OPTYPES_BASE ;no operand 2847 33FFFFFFF6 C xor si, si ;v2.50: index 0, first item, no operand 2849 FFFFFFC3 C ret 284A C @@: C ;--- an unused segment prefix C ; lea si,[bx+OPLIST_40+OPTYPES_BASE] ;OPLIST_40 is OP_ES, size 2 284A FFFFFF8D7740 C lea si,[bx+40h] ;v2.50: 40h is index for OP_ES 284D FFFFFFBBFFFFFFFA07 C mov bx,MN_SEG 2850 FFFFFFC3 C ret 2851 C disbad endp C C ;--- relative jumps C 2851 C dop_relxx proc C C ;--- 8-bit relative jump (OP_REL8) C ;--- v2.50: correctly handle a 8-bit short jmp with a size prefix C 2851 C dop_rel8:: 2851 FFFFFFE8FFFFFFAB01 C call disgetbyte 2854 FFFFFF98 C cbw 2855 FFFFFFE81301 C call dischk32d 2858 7404 C jz dop_rel16 285A FFFFFF99 C cwd 285B FFFFFF92 C xchg ax, dx 285C FFFFFFEB17 C jmp dop_dispdwd C 285E C dop_rel16: ;16-bit distance ( also used for 8-bit short distances 285E 0306 0000o C add ax,[u_addr] 2862 0306 0000o C add ax,[dis_n] 2866 FFFFFFE9FFFFFFFC03 C jmp hexword ;call hexword and return C C ;--- 16/32-bit relative jump (OP_REL1632) C ;--- v2.50: a 16-bit relative call/jmp in 32-bit will clear hiword(eip)! C ;--- to make this evident, display a WORD only! C 2869 C dop_rel1632:: 2869 FFFFFFE8FFFFFFA901 C call disgetword 286C FFFFFFE8FFFFFFFC00 C call dischk32d 286F 74FFFFFFED C jz dop_rel16 ;if not 32-bit distance 2871 FFFFFF92 C xchg ax, dx 2872 FFFFFFE8FFFFFFA001 C call disgetword 2875 C dop_dispdwd: ; relative distance in ax:dx 2875 FFFFFF8B1E 0000o C mov bx,[u_addr+0] 2879 031E 0000o C add bx,[dis_n] 287D 03FFFFFFD3 C add dx,bx 287F 1306 0002o C adc ax,[u_addr+2] 2883 FFFFFFE8FFFFFFDF03 C call hexword 2886 FFFFFF92 C xchg ax,dx 2887 FFFFFFE9FFFFFFDB03 C jmp hexword ;call hexword and return C 288A C dop_relxx endp C C ;--- Here are the routines for printing out the operands themselves. C C ;--- CRx (OP_CR), DRx (OP_DR), TRx (OP_TR), MMx (OP_MMX) C 288A C dop_cr proc 288A FFFFFFE8FFFFFFE900 C call getregmem_r 288D FFFFFFBB4352 C mov bx,"RC" ; "CRx" 2890 3C04 C cmp al,4 2892 7713 C ja disbad4 ;if too large 2894 7505 C jne @F 2896 FFFFFFC606 0008o 05 C mov [ai.dismach],5 ;CR4 is new to the 586 289B C @@: 289B FFFFFF813E 0000o 0202 C cmp [idxins],SPARSE_BASE+22h 28A1 752D C jne dop55 ;if not MOV CRx,xx 28A3 3C01 C cmp al,1 28A5 7529 C jne dop55 ;if not CR1 28A7 C disbad4: 28A7 FFFFFFE94CFFFFFFFF C jmp disbad ;can't MOV CR1,xx C C ;--- DRx (OP_DR). C 28AA C dop_dr:: 28AA FFFFFFE8FFFFFFC900 C call getregmem_r 28AD FFFFFFBB4452 C mov bx,"RD" ; "DRx" 28B0 FFFFFFB9FFFFFFFFFFFFFFF C mov cx,-1 ; no max or illegal value (remove?) 28B3 FFFFFFEB1B C jmp dop55 C C ;--- MMx (OP_MMX) C 28B5 C dop_mmx:: 28B5 FFFFFFE8FFFFFFBE00 C call getregmem_r 28B8 FFFFFFBB4D4D C mov bx,"MM" ; "MMx" 28BB FFFFFFEB13 C jmp dop55 C C ;--- TRx (OP_TR). C 28BD C dop_tr:: 28BD FFFFFFE8FFFFFFB600 C call getregmem_r 28C0 3C03 C cmp al,3 28C2 72FFFFFFE3 C jb disbad4 ;if too small 28C4 3C06 C cmp al,6 28C6 7305 C jae @F ;if TR6-7 28C8 FFFFFFC606 0008o 04 C mov [ai.dismach],4 ;TR3-5 are new to the 486 28CD C @@: 28CD FFFFFFBB5452 C mov bx,"RT" ; "TRx" 28D0 C dop55: 28D0 FFFFFF93 C xchg ax,bx 28D1 FFFFFFAB C stosw ;store XX 28D2 FFFFFF93 C xchg ax,bx 28D3 0C30 C or al,'0' 28D5 FFFFFFAA C stosb 28D6 FFFFFFC3 C ret 28D7 C dop_cr endp C C ;--- ST(I) (OP_STI). C 28D7 C dop_sti proc 28D7 FFFFFFA0 0002o C mov al,[ai.regmem] 28DA 2407 C and al,7 28DC FFFFFF93 C xchg ax,bx ;mov bx,ax 28DD FFFFFFB85354 C mov ax,'TS' 28E0 FFFFFFAB C stosw ;store ST(bl) 28E1 FFFFFFB028 C mov al,'(' 28E3 FFFFFFAA C stosb 28E4 FFFFFFB83029 C mov ax,')0' 28E7 0AFFFFFFC3 C or al,bl 28E9 FFFFFFAB C stosw 28EA FFFFFFC3 C ret 28EB C dop_sti endp C C ;--- far immediate (OP_FARIMM). Either FAR16 or FAR32 C 28EB C dop_farimm proc 28EB FFFFFF8BFFFFFFDC C mov bx, sp 28ED FFFFFFE82501 C call disgetword 28F0 50 C push ax 28F1 FFFFFFE87700 C call dischk32d 28F4 7404 C jz @F ; if not 32-bit address 28F6 FFFFFFE81C01 C call disgetword 28F9 50 C push ax 28FA C @@: 28FA FFFFFFE81801 C call disgetword ; get segment part 28FD FFFFFFE86503 C call hexword 2900 FFFFFFB03A C mov al,':' 2902 FFFFFFAA C stosb 2903 C @@: 2903 58 C pop ax 2904 FFFFFFE85E03 C call hexword 2907 3BFFFFFFDC C cmp bx, sp 2909 75FFFFFFF8 C jnz @B 290B FFFFFFC3 C ret 290C C dop_farimm endp C C ;--- Immediate data (OP_IMM) C 290C C dop_imm proc 290C FFFFFF80FFFFFFFC00 C cmp ah,0 290F 7C20 C jl dop03 ;if just a byte 2911 FFFFFF9C C pushf 2912 FFFFFFF606 0000o 10 C test [disflags], DIS_I_SHOWSIZ 2917 7406 C jz @F ;if we don't need to show the size 2919 FFFFFFE8FFFFFFAD00 C call showsize ;print size in AH 291C FFFFFF83FFFFFFEF04 C sub di,4 ;erase "PTR " 291F C @@: 291F FFFFFFE8FFFFFFF300 C call disgetword 2922 FFFFFF9D C popf 2923 7408 C jz @F ;if just a word 2925 50 C push ax 2926 FFFFFFE8FFFFFFEC00 C call disgetword ;print the high order word 2929 FFFFFFE83903 C call hexword 292C 58 C pop ax 292D C @@: 292D FFFFFFE83503 C call hexword 2930 FFFFFFC3 C ret C 2931 C dop03: 2931 FFFFFFE8FFFFFFCB00 C call disgetbyte ;print immediate byte 2934 FFFFFFE83503 C call hexbyte 2937 FFFFFFC3 C ret 2938 C dop_imm endp C C ;--- 32-bit addressing without SIB C ;--- store "[E®]" at DI C 2938 C showsqreg32 proc 2938 FFFFFF98 C cbw 2939 FFFFFFD1FFFFFFE0 C shl ax,1 293B FFFFFF93 C xchg ax,bx 293C FFFFFFB85B45 C mov ax, 'E[' 293F FFFFFFAB C stosw 2940 FFFFFF8BFFFFFF87 0000o C mov ax, [rgnam16+bx] 2944 FFFFFFAB C stosw 2945 FFFFFFB05D C mov al,']' 2947 FFFFFFAA C stosb 2948 FFFFFFC3 C ret 2949 C showsqreg32 endp C 2949 C showsizeop proc C ;--- for PUSH imm8 add D/W to opcode if size differs from default (WORD/DWORD) 2949 FFFFFF803E 0000o 6A C cmp [bInstr],6ah 294E 751A C jnz sso_skip 2950 FFFFFFE81800 C call dischk32d C if ?PM C else 2953 FFFFFFB400 C mov ah,0 C endif 2955 FFFFFFB057 C mov al,'W' 2957 FFFFFFF6FFFFFFC410 C test ah, PRE32D 295A 7502 C jnz @F 295C FFFFFFB044 C mov al,'D' 295E C @@: 295E 3226 0000o C xor ah,[preflags] 2962 FFFFFFF6FFFFFFC410 C test ah, PRE32D 2965 7403 C jz sso_skip 2967 FFFFFF8845FFFFFFFC C mov [di-4],al 296A C sso_skip: 296A FFFFFFC3 C ret 296B C showsizeop endp C C ;--- DISCHK32D - Check for 32 bit operand size prefix (66h). C 296B C dischk32d proc 296B FFFFFF800E 0000o 10 C or [preused], PRE32D 2970 FFFFFFF606 0000o 10 C test [preflags], PRE32D 2975 FFFFFFC3 C ret 2976 C dischk32d endp C C ; GETREGMEM_R - Get the reg part of the reg/mem part of the instruction C ; Uses CL C 2976 C getregmem_r proc 2976 FFFFFFE80700 C call getregmem 2979 FFFFFFB103 C mov cl,3 297B FFFFFFD2FFFFFFE8 C shr al,cl 297D 2407 C and al,7 297F FFFFFFC3 C ret 2980 C getregmem_r endp C C ;--- GETREGMEM - Get the reg/mem part of the instruction C 2980 C getregmem proc 2980 FFFFFFF606 0000o FFFFFF C test [preused],GOTREGM 2985 750B C jnz @F ;if we have it already 2987 FFFFFF800E 0000o FFFFFF C or [preused],GOTREGM 298C FFFFFFE87000 C call disgetbyte ;get the byte 298F FFFFFFA2 0002o C mov [ai.regmem],al ;save it away 2992 C @@: 2992 FFFFFFA0 0002o C mov al,[ai.regmem] 2995 FFFFFFC3 C ret 2996 C getregmem endp C C ; DISP32 - Print 32-bit displacement for addressing modes. C ; Entry None C ; Exit None C ; Uses AX C 2996 C disp32 proc 2996 FFFFFFE87C00 C call disgetword 2999 50 C push ax 299A FFFFFFE87800 C call disgetword 299D FFFFFFE8FFFFFFC502 C call hexword 29A0 58 C pop ax 29A1 FFFFFFE8FFFFFFC102 C call hexword 29A4 FFFFFFC3 C ret 29A5 C disp32 endp C C ; SHOWSEG - Show the segment descriptor in SEGMNT C ; Entry DI Where to put it C ; Exit DI Updated C ; Uses AX, BX C 29A5 C showseg proc 29A5 FFFFFFA0 0000o C mov al,[segmnt] ;segment number 29A8 FFFFFF98 C cbw 29A9 FFFFFFD1FFFFFFE0 C shl ax,1 29AB FFFFFF93 C xchg ax,bx ;mov bx,ax 29AC FFFFFF8BFFFFFF87 0000o C mov ax, [segrgnam+bx] ;get register name 29B0 FFFFFFAB C stosw 29B1 FFFFFFC3 C ret 29B2 C showseg endp C C ; SHOWOP Show the op code C ; Entry SI Null-terminated string containing the op mnemonic C ; Exit DI Address of next available byte in output line C ; (>= offset line_out + 32 due to padding) C ; Uses AL C 29B2 C showop proc 29B2 FFFFFFBF 001Co C mov di,offset line_out+MNEMONOFS 29B5 C @@: 29B5 FFFFFFAC C lodsb 29B6 FFFFFF8AFFFFFFE0 C mov ah,al 29B8 247F C and al,7Fh 29BA FFFFFFAA C stosb 29BB 22FFFFFFE4 C and ah,ah 29BD 79FFFFFFF6 C jns @B 29BF FFFFFFB020 C mov al,' ' 29C1 C @@: 29C1 FFFFFFAA C stosb 29C2 FFFFFF81FFFFFFFF 0024o C cmp di,offset line_out+MNEMONOFS+8 29C6 72FFFFFFF9 C jb @B 29C8 FFFFFFC3 C ret 29C9 C showop endp C C ; SHOWSIZE - Print a description of the size C ; Entry AH 10h=DWORD, 00h=WORD, F0h=BYTE, 20h=QWORD C ; Uses AX C C ; SHOWPTR - Print " PTR" C ; Uses AX C C ; SHOWDWD - Print "DWORD PTR" C ; Uses AX C 29C9 C showsize proc 29C9 FFFFFF8826 0000o C mov [rmsize],ah ;save r/m size 29CD FFFFFF893E 0000o C mov [sizeloc],di;save where we're putting this 29D1 FFFFFFB051 C mov al,'Q' 29D3 FFFFFF80FFFFFFFC20 C cmp ah,20h 29D6 7412 C jz showqwd 29D8 FFFFFF80FFFFFFFC00 C cmp ah,0 29DB 7F0B C jg showdwd ;if dword 29DD 740C C je showwd ;if word 29DF FFFFFFB84259 C mov ax,'YB' 29E2 FFFFFFAB C stosw 29E3 FFFFFFB85445 C mov ax,'ET' 29E6 FFFFFFEB0A C jmp ssz3 29E8 C showdwd:: ;<--- 29E8 FFFFFFB044 C mov al,'D' 29EA C showqwd: 29EA FFFFFFAA C stosb 29EB C showwd: 29EB FFFFFFB8574F C mov ax,'OW' 29EE FFFFFFAB C stosw 29EF FFFFFFB85244 C mov ax,'DR' 29F2 C ssz3: 29F2 FFFFFFAB C stosw 29F3 C showptr:: ;<--- 29F3 FFFFFFB82050 C mov ax,'P ' 29F6 FFFFFFAB C stosw 29F7 FFFFFFB85452 C mov ax,'RT' 29FA FFFFFFAB C stosw 29FB FFFFFFB020 C mov al,' ' 29FD FFFFFFAA C stosb 29FE FFFFFFC3 C ret 29FF C showsize endp C C ; DISGETBYTE - Get byte for disassembler. C ; Entry None C ; Exit AL Next byte in instruction stream C ; Uses None C 29FF C disgetbyte proc 29FF 1E C push ds C if ?PM C endif 2A00 56 C push si 2A01 FFFFFF8B36 0000o C mov si,[u_addr] 2A05 0336 0000o C add si,[dis_n] ;index to the right byte 2A09 FFFFFF8E1E 0004o C mov ds,[u_addr+4] 2A0D FFFFFFAC C lodsb ;get the byte 2A0E 5E C pop si 2A0F 1F C pop ds 2A10 FFFFFFFF06 0000o C inc [dis_n] ;indicate that we've gotten this byte 2A14 FFFFFFC3 C ret C if ?PM C endif 2A15 C disgetbyte endp C C ; DISGETWORD - Get word for disassembler. C ; Entry None C ; Exit AX Next word C ; Uses None C 2A15 C disgetword proc 2A15 1E C push ds C if ?PM C endif 2A16 56 C push si 2A17 FFFFFF8B36 0000o C mov si,[u_addr] 2A1B 0336 0000o C add si,[dis_n] ;index to the right byte 2A1F FFFFFF8E1E 0004o C mov ds,[u_addr+4] 2A23 FFFFFFAD C lodsw 2A24 5E C pop si 2A25 1F C pop ds 2A26 FFFFFF8306 0000o 02 C add [dis_n],2 2A2B FFFFFFC3 C ret C if ?PM C endif 2A2C C disgetword endp C C ; DISSHOWBYTES - Show bytes for the disassembler. C ; Entry BX Number of bytes (must be > 0) C ; Exit u_addr updated C ; Uses BX, SI. C 2A2C C disshowbytes proc C if ?PM C endif 2A2C FFFFFF8B36 0000o C mov si,[u_addr] 2A30 FFFFFF8E1E 0004o C mov ds,[u_addr+4] 2A34 C @@: 2A34 FFFFFFAC C lodsb 2A35 FFFFFFE83402 C call hexbyte 2A38 4B C dec bx 2A39 75FFFFFFF9 C jnz @B C @RestoreSeg ds 2A3B 16 1C push ss 2A3C 1F 1C pop ds 2A3D FFFFFF8936 0000o C mov [u_addr],si 2A41 FFFFFFC3 C ret C if ?PM C endif 2A42 C disshowbytes endp C C ; MOVEOVER - Move the line to the right - disassembler subfunction. C ; used to insert prefixes - called by code in the "prefix loop" only. C ; Entry DI Last address + 1 of line so far C ; Exit CX Number of bytes to move C ; DI Updated C ; Uses SI C 2A42 C moveover proc 2A42 FFFFFF833E 0000o 00 C cmp [sizeloc],0 2A47 7404 C je @F ;if sizeloc not saved 2A49 010E 0000o C add [sizeloc],cx 2A4D C @@: 2A4D FFFFFF8BFFFFFFF7 C mov si,di 2A4F 03FFFFFFF9 C add di,cx 2A51 FFFFFF8BFFFFFFCF C mov cx,di 2A53 FFFFFF81FFFFFFE9 001Co C sub cx,offset line_out+MNEMONOFS 2A57 57 C push di 2A58 FFFFFFFD C std 2A59 4E C dec si 2A5A 4F C dec di 2A5B FFFFFFF3FFFFFFA4 C rep movsb 2A5D 5F C pop di 2A5E FFFFFFFC C cld 2A5F FFFFFFC3 C ret 2A60 C moveover endp C C ; TAB_TO - Space fill until reaching the column indicated by AX. C ; (Print a new line if necessary.) C 2A60 C tab_to proc 2A60 50 C push ax 2A61 2BFFFFFFC7 C sub ax,di 2A63 7706 C ja @F ;if there's room on this line 2A65 FFFFFFE81902 C call trimputs 2A68 FFFFFFBF 0000o C mov di,offset line_out 2A6B C @@: 2A6B 59 C pop cx 2A6C 2BFFFFFFCF C sub cx,di 2A6E FFFFFFB020 C mov al,' ' 2A70 FFFFFFF3FFFFFFAA C rep stosb ;space fill to the right end 2A72 FFFFFFC3 C ret 2A73 C tab_to endp C ; SHOWMACH - Return strings ; "[needs _86]" or "[needs _87]", ; "[needs math coprocessor]" or "[obsolete]" ; Entry di -> table of obsolete instructions ( 5 items ) ; cx -> instruction ; Exit si Address of string ; cx Length of string, or 0 if not needed ; Uses al, di 2A73 showmach proc 2A73 FFFFFFBE 0000o mov si,offset needsmsg ;candidate message 2A76 FFFFFFF606 0009o 01 test [ai.dmflags],DM_COPR 2A7B 741E jz is_cpu ;if not a coprocessor instruction 2A7D FFFFFFC6440937 mov byte ptr [si+9],'7' ;change message text ('x87') 2A81 FFFFFFA0 0000o mov al,[mach_87] 2A84 FFFFFF803E 0000o 00 cmp [has_87],0 2A89 7517 jnz sm2 ;if it has a coprocessor 2A8B FFFFFFA0 0000o mov al,[machine] 2A8E 3A06 0008o cmp al,[ai.dismach] 2A92 7214 jb sm3 ;if we display the message 2A94 FFFFFFBE 0000o mov si,offset needsmath ;print this message instead 2A97 FFFFFFB91800 mov cx,sizeof needsmath 2A9A FFFFFFC3 ret 2A9B is_cpu: 2A9B FFFFFFC6440936 mov byte ptr [si+9],'6' ;reset message text ('x86') 2A9F FFFFFFA0 0000o mov al,[machine] 2AA2 sm2: 2AA2 3A06 0008o cmp al,[ai.dismach] 2AA6 730C jae sm4 ;if no message (so far) 2AA8 sm3: 2AA8 FFFFFFA0 0008o mov al,[ai.dismach] 2AAB 0430 add al,'0' 2AAD FFFFFF884407 mov [si+7],al 2AB0 FFFFFFB90B00 mov cx,sizeof needsmsg ;length of the message 2AB3 FFFFFFC3 ret ;--- Check for obsolete instruction. 2AB4 sm4: 2AB4 FFFFFFBE 0000o mov si,offset obsolete ;candidate message 2AB7 FFFFFF8BFFFFFFC1 mov ax,cx ;get info on this instruction 2AB9 FFFFFFB90500 mov cx,5 2ABC FFFFFFF2FFFFFFAF repne scasw 2ABE 7511 jne @F ;if no matches 2AC0 FFFFFFBF 0004o mov di,offset obsmach + 5 - 1 2AC3 2BFFFFFFF9 sub di,cx 2AC5 33FFFFFFC9 xor cx,cx ;clear CX: no message 2AC7 FFFFFFA0 0000o mov al,[mach_87] 2ACA 3A05 cmp al,[di] 2ACC 7E03 jle @F ;if this machine is OK 2ACE FFFFFFB90A00 mov cx,sizeof obsolete 2AD1 @@: 2AD1 FFFFFFC3 ret 2AD2 showmach endp ;--- DUMPREGS - Dump registers and print 1 disassembled line at CS:EIP. 2AD2 dumpregs proc ; @dprintf "dumpregs" 2AD2 FFFFFFBE 0000o mov si,offset regnames 2AD5 FFFFFFBF 0000o mov di,offset line_out 2AD8 FFFFFFB90500 mov cx, 5 2ADB FFFFFFBB 0000o mov bx,offset regfmt16 2ADE FFFFFFF606 0000o 01 test [rmode],RM_386REGS 2AE3 7403 jz @F 2AE5 FFFFFFBB 0000o mov bx,offset regfmt32 2AE8 @@: 2AE8 nextgrp: 2AE8 51 push cx 2AE9 FFFFFF8A0F mov cl, [bx+0] 2AEB FFFFFF83FFFFFFE17F and cx,7fh 2AEE 53 push bx 2AEF FFFFFFFF5701 call word ptr [bx+1] 2AF2 5B pop bx 2AF3 FFFFFFF607FFFFFF80 test byte ptr [bx],80h 2AF6 7405 jz @F 2AF8 FFFFFFE8FFFFFF8D01 call putsline 2AFB FFFFFF8BFFFFFFFA mov di, dx 2AFD @@: 2AFD FFFFFF83FFFFFFC303 add bx, sizeof FMTITEM 2B00 59 pop cx 2B01 FFFFFFE2FFFFFFE5 loop nextgrp if RING0 endif ;--- display 1 disassembled line at CS:[E]IP 2B03 FFFFFFBE 0030o mov si, offset regs.rIP 2B06 FFFFFFBF 0000o mov di, offset u_addr 2B09 FFFFFFA5 movsw 2B0A FFFFFFA5 movsw @movs ax,[regs.rCS] ; problem: if V86M and v86-mode, this will be the scratch sel 2B0B FFFFFFA1 002Ao 1 mov ax, [regs.rCS] 2B0E FFFFFFAB stosw 2B0F FFFFFFB003 mov al, DIS_F_REPT or DIS_F_SHOW 2B11 FFFFFFE80CFFFFFFF7 call disasm ;--- 'r' resets default setting for 'u' to CS:[E]IP sizeprf ; mov eax, [regs.rIP] 00002B14 = 2B14 1 curreip = $ 000E 1 _IDATA segment 000E 142B 1 dw curreip 0010 1 _IDATA ends 2B14 66 1 db 66h 2B15 FFFFFFA1 0030o mov ax,[regs.rIP] sizeprf ; mov [u_addr], eax 00002B18 = 2B18 1 curreip = $ 0010 1 _IDATA segment 0010 182B 1 dw curreip 0012 1 _IDATA ends 2B18 66 1 db 66h 2B19 FFFFFFA3 0000o mov [u_addr],ax 2B1C FFFFFFC3 ret 00000000 FMTITEM struct 00000000 bNum db ? 00000001 wAdr dw ? 00000003 FMTITEM ends ;--- 16bit: 8 std regs, NL, skip 2, 4 seg regs, IP, flags ;--- 32bit: 6 std regs, NL, 2 std regs+IP+FL, flags, NL, 6 seg regs 1CEC CONST segment 1CEC FFFFFF88000002000004000 regfmt16 FMTITEM <88h,dmpr1w>,<2,skipregs>,<4,dmpr1w>,<1,dmpip>,<80h,dmpflags> 1CFB regfmt32 label FMTITEM 1CFB FFFFFF860000 FMTITEM <86h,dmpr1d> 1CFE 040000 FMTITEM <4,dmpr1d> 1D01 FFFFFF800000 FMTITEM <80h,dmpflags> 1D04 000000 FMTITEM <0,prepsr> 1D07 FFFFFF860000 FMTITEM <86h,dmpr1w> 1D0A CONST ends 2B1D skipregs: 2B1D FFFFFFF3FFFFFFAD rep lodsw 2B1F FFFFFFC3 ret 2B20 prepsr: 2B20 FFFFFFBE 0014o mov si, offset regnames+10*2 ; just position SI to segment regs 2B23 FFFFFFC3 ret 2B24 dmpip: 2B24 FFFFFFBE 0010o mov si, offset regnames+8*2 ;--- fall thru ;--- Function to print multiple WORD register entries. ;--- SI->register names (2 bytes) ;--- CX=count 2B27 dmpr1w: 2B27 FFFFFFA5 movsw 2B28 FFFFFFB03D mov al,'=' 2B2A FFFFFFAA stosb 2B2B FFFFFF8B5C1E mov bx,[si+NUMREGNAMES*2-2] 2B2E FFFFFF8B07 mov ax,[bx] 2B30 FFFFFFE83201 call hexword 2B33 FFFFFFB020 mov al,' ' 2B35 FFFFFFAA stosb 2B36 FFFFFFE2FFFFFFEF loop dmpr1w 2B38 FFFFFFC3 ret ;--- Function to print multiple DWORD register entries. ;--- SI->register names (2 bytes) ;--- CX=count 2B39 dmpr1d: 2B39 FFFFFFB045 mov al,'E' 2B3B FFFFFFAA stosb 2B3C FFFFFFA5 movsw 2B3D FFFFFFB03D mov al,'=' 2B3F FFFFFFAA stosb 2B40 FFFFFF8B5C1E mov bx,[si+NUMREGNAMES*2-2] .386 2B43 66FFFFFF8B07 mov eax,[bx] .8086 2B46 FFFFFFE81301 call hexdword 2B49 FFFFFFB020 mov al,' ' 2B4B FFFFFFAA stosb 2B4C FFFFFFE2FFFFFFEB loop dmpr1d 2B4E FFFFFFC3 ret if RING0 endif 2B4F dumpregs endp if USEFP2STR endif ;--- the layout for FSAVE/FRSTOR depends on mode and 16/32bit if 0 endif 1D0A CONST segment 1D0A fregnames label byte 1D0A 435753575457 db "CW", "SW", "TW" 1D10 4F50433D49503D44503D db "OPC=", "IP=", "DP=" 1D1A 656D707479 dEmpty db "empty" 1D1F 4E614E dNaN db "NaN" 1D22 CONST ends ;--- dumpregsFPU - Dump Floating Point Registers ;--- modifies SI, DI, [E]AX, BX, CX, [E]DX ;--- Note: value of CR0 bits 1=MP,2=EM,3=TS may have unwanted effects: ;--- 1. if MP=1 and TS=1, an fwait will raise exc 07 ;--- 2. if EM=1, any fpu opcode will raise exc 07. 2B4F dumpregsFPU proc if RING0 endif 2B4F FFFFFFBF 0000o mov di,offset line_out 2B52 FFFFFFBE 0000o mov si,offset fregnames 2B55 FFFFFFBB 0002o mov bx,offset line_in + 2 sizeprf 00002B58 = 2B58 1 curreip = $ 0012 1 _IDATA segment 0012 582B 1 dw curreip 0014 1 _IDATA ends 2B58 66 1 db 66h 2B59 FFFFFFDD37 fnsave [bx] ;--- display CW. SW and TW 2B5B FFFFFFB90300 mov cx,3 2B5E nextfpr: 2B5E FFFFFFA5 movsw 2B5F FFFFFFB03D mov al,'=' 2B61 FFFFFFAA stosb 2B62 FFFFFF87FFFFFFF3 xchg si,bx sizeprf ;lodsd 00002B64 = 2B64 1 curreip = $ 0014 1 _IDATA segment 0014 642B 1 dw curreip 0016 1 _IDATA ends 2B64 66 1 db 66h 2B65 FFFFFFAD lodsw 2B66 FFFFFF87FFFFFFF3 xchg si,bx 2B68 50 push ax 2B69 FFFFFFE8FFFFFFF900 call hexword 2B6C FFFFFFB020 mov al,' ' 2B6E FFFFFFAA stosb 2B6F FFFFFFE2FFFFFFED loop nextfpr ;--- display OPC ;--- in 16bit format protected-mode, there's no OPC ;--- for 32bit, there's one, but the location is different from real-mode 2B71 53 push bx if ?DPMI endif 2B72 FFFFFFA5 movsw 2B73 FFFFFFA5 movsw 2B74 FFFFFF87FFFFFFF3 xchg si,bx sizeprf ;lodsd 00002B76 = 2B76 1 curreip = $ 0016 1 _IDATA segment 0016 762B 1 dw curreip 0018 1 _IDATA ends 2B76 66 1 db 66h 2B77 FFFFFFAD lodsw ;skip word/dword 2B78 FFFFFFAD lodsw 2B79 FFFFFF87FFFFFFF3 xchg si,bx 2B7B 25FFFFFFFF07 and ax,07FFh ;bits 0-10 only 2B7E FFFFFFE8FFFFFFE400 call hexword 2B81 FFFFFFB020 mov al,' ' 2B83 FFFFFFAA stosb 2B84 noopc: 2B84 5B pop bx ;--- display IP and DP 2B85 FFFFFFB102 mov cl,2 ;ch is 0 already 2B87 nextfp: 2B87 51 push cx 2B88 FFFFFFA5 movsw 2B89 FFFFFFA4 movsb 2B8A FFFFFF87FFFFFFF3 xchg si,bx sizeprf ;lodsd 00002B8C = 2B8C 1 curreip = $ 0018 1 _IDATA segment 0018 FFFFFF8C2B 1 dw curreip 001A 1 _IDATA ends 2B8C 66 1 db 66h 2B8D FFFFFFAD lodsw sizeprf ;mov edx,eax 00002B8E = 2B8E 1 curreip = $ 001A 1 _IDATA segment 001A FFFFFF8E2B 1 dw curreip 001C 1 _IDATA ends 2B8E 66 1 db 66h 2B8F FFFFFF8BFFFFFFD0 mov dx,ax sizeprf ;lodsd 00002B91 = 2B91 1 curreip = $ 001C 1 _IDATA segment 001C FFFFFF912B 1 dw curreip 001E 1 _IDATA ends 2B91 66 1 db 66h 2B92 FFFFFFAD lodsw 2B93 FFFFFF87FFFFFFF3 xchg si,bx if ?DPMI endif 2B95 FFFFFFB10C mov cl,12 sizeprf ;shr eax,cl 00002B97 = 2B97 1 curreip = $ 001E 1 _IDATA segment 001E FFFFFF972B 1 dw curreip 0020 1 _IDATA ends 2B97 66 1 db 66h 2B98 FFFFFFD3FFFFFFE8 shr ax,cl 2B9A FFFFFF803E 0000o 03 cmp [machine],3 2B9F 7205 jb @F 2BA1 FFFFFFE8FFFFFFC100 call hexword 2BA4 FFFFFFEB03 jmp fppm 2BA6 @@: 2BA6 FFFFFFE8FFFFFFCE00 call hexnyb ;convert to hex digit and print 2BA9 fppm: sizeprfX ;mov eax,edx 2BA9 FFFFFF8BFFFFFFC2 mov ax,dx if ?DPMI endif 2BAB FFFFFFE8FFFFFFB700 call hexword 2BAE fppm32: 2BAE FFFFFFB020 mov al,' ' 2BB0 FFFFFFAA stosb 2BB1 59 pop cx 2BB2 FFFFFFE2FFFFFFD3 loop nextfp 2BB4 FFFFFF87FFFFFFF3 xchg si,bx 2BB6 FFFFFFE8FFFFFFC800 call trimputs ;--- display ST0 - ST7 2BB9 5D pop bp ;get TW 2BBA 58 pop ax ;get SW 2BBB 5A pop dx ;get CW (not used) 2BBC FFFFFFB10A mov cl,10 2BBE FFFFFFD3FFFFFFE8 shr ax, cl ;mov TOP to bits 1-3 2BC0 240E and al, 00001110b 2BC2 FFFFFF8AFFFFFFC8 mov cl, al 2BC4 FFFFFFD3FFFFFFCD ror bp, cl 2BC6 FFFFFFB130 mov cl,'0' 2BC8 nextst: ;<- next float to display 2BC8 FFFFFFBF 0000o mov di,offset line_out 2BCB 56 push si 2BCC 51 push cx 2BCD FFFFFFB85354 mov ax,"TS" 2BD0 FFFFFFAB stosw 2BD1 FFFFFF8AFFFFFFC1 mov al,cl 2BD3 FFFFFFB43D mov ah,'=' 2BD5 FFFFFFAB stosw 2BD6 FFFFFF8BFFFFFFC5 mov ax,bp 2BD8 FFFFFFD1FFFFFFCD ror bp,1 ;remain 8086 compatible here! 2BDA FFFFFFD1FFFFFFCD ror bp,1 2BDC 2403 and al,3 ;00=valid,01=zero,02=NaN,03=Empty 2BDE 741B jz isvalid 2BE0 FFFFFFBE 0000o mov si,offset dEmpty 2BE3 FFFFFFB105 mov cl, sizeof dEmpty 2BE5 3C03 cmp al,3 2BE7 740E jz @F 2BE9 FFFFFFBE 0000o mov si,offset dNaN 2BEC FFFFFFB103 mov cl, sizeof dNaN 2BEE 3C02 cmp al,2 2BF0 7405 jz @F 2BF2 FFFFFFB030 mov al,'0' 2BF4 FFFFFFAA stosb 2BF5 FFFFFFB100 mov cl,0 2BF7 @@: 2BF7 FFFFFFF3FFFFFFA4 rep movsb 2BF9 FFFFFFEB15 jmp regoutdone 2BFB isvalid: if USEFP2STR else 2BFB FFFFFFB105 mov cl, 5 2BFD @@: 2BFD FFFFFFAD lodsw 2BFE 50 push ax 2BFF FFFFFFE2FFFFFFFC loop @B 2C01 58 pop ax 2C02 FFFFFFE86000 call hexword 2C05 FFFFFFB02E mov al,'.' 2C07 FFFFFFAA stosb 2C08 FFFFFFB104 mov cl,4 2C0A @@: 2C0A 58 pop ax 2C0B FFFFFFE85700 call hexword 2C0E FFFFFFE2FFFFFFFA loop @B endif 2C10 regoutdone: 2C10 FFFFFFB020 mov al,' ' 2C12 @@: 2C12 FFFFFFAA stosb 2C13 FFFFFF81FFFFFFFF 001Ao cmp di, offset line_out+26 2C17 72FFFFFFF9 jb @B 2C19 58 pop ax 2C1A 50 push ax 2C1B FFFFFFA801 test al,1 2C1D 7404 jz @F 2C1F FFFFFFB80D0A mov ax, 0A0Dh 2C22 FFFFFFAB stosw 2C23 @@: 2C23 FFFFFFE86600 call puts 2C26 59 pop cx 2C27 5E pop si 2C28 FFFFFF83FFFFFFC60A add si,10 ;sizeof TBYTE 2C2B FFFFFFFEFFFFFFC1 inc cl 2C2D FFFFFF80FFFFFFF938 cmp cl,'8' 2C30 75FFFFFF96 jnz nextst .286 ;avoid WAIT prefix sizeprf 00002C32 = 2C32 1 curreip = $ 0020 1 _IDATA segment 0020 322C 1 dw curreip 0022 1 _IDATA ends 2C32 66 1 db 66h 2C33 FFFFFFDD26 0002o frstor [line_in + 2] .8086 2C37 FFFFFFC3 ret 2C38 dumpregsFPU endp ;--- DMPFLAGS - Dump flags output. 2C38 dmpflags proc 2C38 FFFFFFBE 0000o mov si,offset flgbits 2C3B FFFFFFB90800 mov cx,8 ;lengthof flgbits 2C3E nextitem: 2C3E FFFFFFAD lodsw 2C3F FFFFFF8506 0034o test ax,[regs.rFL] 2C43 FFFFFF8B440E mov ax,[si+16-2] 2C46 7403 jz @F ;if not asserted 2C48 FFFFFF8B441E mov ax,[si+32-2] 2C4B @@: 2C4B FFFFFFAB stosw 2C4C FFFFFFB020 mov al,' ' 2C4E FFFFFFAA stosb 2C4F FFFFFFE2FFFFFFED loop nextitem 2C51 FFFFFFC3 ret 2C52 dmpflags endp if MMXSUPP endif ;--- copystring - copy non-empty null-terminated string. ;--- SI->string ;--- DI->buffer ;--- modifies SI, DI, AL 2C52 copystring proc 2C52 FFFFFFAC lodsb 2C53 @@: 2C53 FFFFFFAA stosb 2C54 FFFFFFAC lodsb 2C55 3C00 cmp al,0 2C57 75FFFFFFFA jne @B 2C59 FFFFFFC3 ret 2C5A copystring endp ;--- display 16/32-bit offset in E/AX 2C5A DispOfs proc if ?PM endif 2C5A FFFFFFEB09 jmp hexword 2C5C DispOfs endp ; HEXDWORD - Print hex dword (in EAX). ; clears HiWord(EAX) ; HEXWORD - Print hex word (in AX). ; HEXBYTE - Print hex byte (in AL). ; HEXNYB - Print hex digit. ; Uses al, di. 2C5C hexdword proc 2C5C 50 push ax .386 2C5D 66FFFFFFC1FFFFFFE810 shr eax,16 .8086 2C61 FFFFFFE80100 call hexword 2C64 58 pop ax 2C65 hexdword endp ;fall through! 2C65 hexword proc 2C65 50 push ax 2C66 FFFFFF8AFFFFFFC4 mov al,ah 2C68 FFFFFFE80100 call hexbyte 2C6B 58 pop ax 2C6C hexword endp ;fall through! 2C6C hexbyte: 2C6C 50 push ax if RING0 else 2C6D 51 push cx 2C6E FFFFFFB104 mov cl,4 2C70 FFFFFFD2FFFFFFE8 shr al,cl endif 2C72 FFFFFFE80200 call hexnyb ife RING0 2C75 59 pop cx endif 2C76 58 pop ax 2C77 hexnyb: 2C77 240F and al,0fh 2C79 04FFFFFF90 add al,90h ;these four instructions change to ascii hex 2C7B 27 daa 2C7C 1440 adc al,40h 2C7E 27 daa 2C7F FFFFFFAA stosb 2C80 FFFFFFC3 ret ; TRIMPUTS - Trim excess blanks from string and print (with CR/LF). ; PUTSLINE - Add CR/LF to string and print it. ; PUTS - Print string through DI. 2C81 trimputs: 2C81 4F dec di 2C82 FFFFFF803D20 cmp byte ptr [di],' ' 2C85 74FFFFFFFA je trimputs 2C87 47 inc di 2C88 putsline: 2C88 FFFFFFB80D0A mov ax,LF * 256 + CR 2C8B FFFFFFAB stosw 2C8C puts: 2C8C FFFFFF8BFFFFFFCF mov cx,di 2C8E FFFFFFBA 0000o mov dx,offset line_out 2C91 2BFFFFFFCA sub cx,dx ;--- fall thru' ;--- stdout: write DS:DX, size CX to STDOUT (1) ;--- modifies ax 2C93 stdout proc if RING0 else 2C93 FFFFFFE81FFFFFFFF2 call InDos 2C96 53 push bx 2C97 750A jnz @F 2C99 FFFFFFBB0100 mov bx,1 ;standard output 2C9C FFFFFFB440 mov ah,40h ;write to file 2C9E FFFFFFE824FFFFFFE4 call doscall 2CA1 5B pop bx 2CA2 FFFFFFC3 ret 2CA3 @@: ;use BIOS for output endif 2CA3 FFFFFFE313 jcxz nooutput 2CA5 56 push si 2CA6 FFFFFF8BFFFFFFF2 mov si,dx 2CA8 nextchar: 2CA8 FFFFFFAC lodsb 2CA9 FFFFFF8A3E 0000o mov bh,[vpage] ;v2.0: use the current video page 2CAD 3C09 cmp al, TAB ;v2.0: handle tabs 2CAF 7409 jz istab 2CB1 FFFFFFB40E mov ah,0Eh if RING0 else 2CB3 FFFFFFCD10 int 10h endif 2CB5 donetab: 2CB5 FFFFFFE2FFFFFFF1 loop nextchar 2CB7 5E pop si 2CB8 nooutput: 2CB8 5B pop bx 2CB9 FFFFFFC3 ret ;--- interpret TAB in BIOS output 2CBA istab: 2CBA 51 push cx 2CBB 52 push dx 2CBC FFFFFFB403 mov ah, 3 if RING0 else 2CBE FFFFFFCD10 int 10h endif 2CC0 FFFFFF8AFFFFFFCA mov cl, dl 2CC2 FFFFFF83FFFFFFE107 and cx, 7 ; 0 1 2 3 4 5 6 7 2CC5 FFFFFF80FFFFFFE908 sub cl, 8 ;-8 -7 -6 -5 -4 -3 -2 -1 2CC8 FFFFFFF6FFFFFFD9 neg cl ; 8 7 6 5 4 3 2 1 2CCA @@: 2CCA FFFFFFB8200E mov ax, 0E20h if RING0 else 2CCD FFFFFFCD10 int 10h endif 2CCF FFFFFFE2FFFFFFF9 loop @B 2CD1 5A pop dx 2CD2 59 pop cx 2CD3 FFFFFFEBFFFFFFE0 jmp donetab 2CD5 stdout endp ifdef _DEBUG endif if LCMDFILE 2CD5 createdummytask proc 2CD5 FFFFFFBF 0000o mov di, offset regs 2CD8 FFFFFFB91C00 mov cx, sizeof regs / 2 2CDB 33FFFFFFC0 xor ax, ax 2CDD FFFFFFF3FFFFFFAB rep stosw 2CDF FFFFFFB448 mov ah,48h ;get largest free block 2CE1 FFFFFFBBFFFFFFFFFFFFFFF mov bx,-1 2CE4 FFFFFFCD21 int 21h 2CE6 FFFFFF83FFFFFFFB11 cmp bx,11h ;must be at least 110h bytes!!! 2CE9 7303FFFFFFE9FFFFFF8100 jc ct_done 2CEE FFFFFFB448 mov ah,48h ;allocate it 2CF0 FFFFFFCD21 int 21h 2CF2 727B jc ct_done ;shouldn't happen 2CF4 FFFFFFFE06 0031o inc byte ptr [regs.rIP+1] ;set IP=100h 2CF8 FFFFFFE8FFFFFFBCFFFFFFE call setespefl ; set regs.rSP/rFL 2CFB 53 push bx 2CFC FFFFFFBF 0020o mov di,offset regs.rDS ;init regs.rDS,regs.rES 2CFF FFFFFFAB stosw 2D00 FFFFFFAB stosw 2D01 FFFFFFBF 0028o mov di,offset regs.rSS ;init regs.rSS,regs.rCS 2D04 FFFFFFAB stosw 2D05 FFFFFFAB stosw 2D06 FFFFFFE865FFFFFFE5 call setup_adu ; setup default for a/d/u cmds 2D09 FFFFFF93 xchg ax, bx ; bx = CS; bx:dx = where to load program 2D0A FFFFFF8EFFFFFFC3 mov es, bx 2D0C 58 pop ax ;get size of memory block 2D0D FFFFFF8BFFFFFFD0 mov dx,ax 2D0F 03FFFFFFD3 add dx,bx 2D11 26FFFFFF89160200 mov es:[PSPS.ALASAP],dx 2D16 3D0010 cmp ax,1000h 2D19 7602 jbe @F ;if memory left <= 64K 2D1B 33FFFFFFC0 xor ax,ax ;ax = 1000h (same thing, after shifting) 2D1D @@: 2D1D FFFFFFB104 mov cl,4 2D1F FFFFFFD3FFFFFFE0 shl ax,cl 2D21 48 dec ax 2D22 48 dec ax 2D23 FFFFFFA3 002Co mov [regs.rSP],ax 2D26 FFFFFF97 xchg ax,di ;es:di = child stack pointer 2D27 33FFFFFFC0 xor ax,ax 2D29 FFFFFFAB stosw ;push 0 on client's stack ;--- Create a PSP 2D2A FFFFFFB455 mov ah,55h ;create child PSP 2D2C FFFFFF8CFFFFFFC2 mov dx,es 2D2E 26FFFFFF8B360200 mov si,es:[PSPS.ALASAP] 2D33 FFFFFFF8 clc ;works around OS/2 bug 2D34 FFFFFFCD21 int 21h 2D36 26FFFFFFC7060A00 0000o mov word ptr es:[PSPS.TPIV+0],offset intr22 2D3D 26FFFFFF8C0E0C00 mov word ptr es:[PSPS.TPIV+2],cs 2D42 FFFFFF803E 0000o 00 cmp [bInit],0 2D47 750A jnz @F 2D49 FFFFFFFE06 0000o inc [bInit] 2D4D 26FFFFFFC6060001FFFFFFC mov byte ptr es:[100h],0C3h ;place opcode for 'RET' at CS:IP 2D53 @@: 2D53 FFFFFF8C06 0000o mov [pspdbe],es ;--- set owner and name to newly created PSP 2D57 FFFFFF8CFFFFFFC0 mov ax,es 2D59 48 dec ax 2D5A FFFFFF8EFFFFFFC0 mov es, ax 2D5C 40 inc ax 2D5D 26FFFFFFA30100 mov es:[0001],ax 2D61 26FFFFFFC606080000 mov byte ptr es:[0008],0 2D67 1E push ds ;restore ES 2D68 07 pop es 2D69 FFFFFFE8FFFFFFD9FFFFFFF call getint2324 ; v2.0 init [run2324] 2D6C FFFFFFE838FFFFFFE3 call setpspdbg ;set debugger's PSP 2D6F ct_done: 2D6F FFFFFFC3 ret 2D70 createdummytask endp endif if ?DPMI endif if RING0 endif 2D70 endoftext16 label byte 2D70 _TEXT ends 00F1 _DATA segment ;--- I/O buffers. (End of permanently resident part.) 00F1 FFFFFFFF000D line_in db 255,0,CR ;length = 257 000000F4 = 1F3 line_out equ line_in+LINE_IN_LEN+1;length = 1 + 263 000000F4 = 2FB real_end equ line_in+LINE_IN_LEN+1+264 if USEHWBP endif 00F4 _DATA ends 0000 _ITEXT segment if RING0 endif ;--- initcont is located at the start of _ITEXT because either ;--- a word is written into this segment ( the "mov [bx], ..." below ) ;--- or SP has to be adjusted before memory is freed. ;--- ax,bx=top of memory 0000 initcont: if DRIVER or RING0 or BOOTDBG else 0000 FFFFFFC606 0000o 01 mov [bInDbg], 1 ; v2.01: variable is set only when debug is entered via interrupt if FMTEXE else 0005 1E push ds 0006 07 pop es endif 0007 FFFFFFB104 mov cl, 4 0009 FFFFFFD3FFFFFFEB shr bx, cl 000B FFFFFF8BFFFFFFE0 mov sp, ax 000D FFFFFFB44A mov ah, 4Ah 000F FFFFFFCD21 int 21h ;free rest of DOS memory 0011 FFFFFFC606 FFFFo 30 mov byte ptr [line_out-1],'0' ;initialize line_out? 0016 FFFFFF803E 0000o 00 cmp [fileext],0 001B 7403 jz @F if FMTEXE endif 001D FFFFFFE8 0000r call loadfile 0020 @@: if ALTVID endif 0020 FFFFFFE9 0000r jmp cmdloop endif ;--------------------------------------- ;--- Debug initialization code. ;--------------------------------------- ife (DRIVER or BOOTDBG or RING0) 0023 4445425547207665727369 imsg1 db "DEBUG",' version ','2.50',CR,LF,LF 0038 55736167653A2044454255 db 'Usage: ', "DEBUG", ' ' if ALTVID or USEHWBP endif 0045 5B5B64726976653A5D5B70 db '[[drive:][path]progname [arglist]]',CR,LF if ALTVID or USEHWBP endif 0069 2070726F676E616D653A20 db ' progname: (executable) file to debug or examine',CR,LF 009B 206172676C6973743A2070 db ' arglist: parameters given to program',CR,LF,LF 00C3 466F722061206C69737420 db 'For a list of debugging commands, ' 00E5 72756E2044454255472061 db 'run ', "DEBUG", ' and type ? at the prompt.',CR,LF,'$' 010B 496E76616C696420737769 imsg2 db 'Invalid switch - ' 011C 780D0A24 imsg2a db 'x',CR,LF,'$' endif if ?DPMI endif if VDD endif if DRIVER endif ;--- initialization. ;--- BOOTDBG: no cmdline ;--- RING0: ESI -> cmdline ( linear address ) ;--- DRIVER: cmdline in init_req.cmdline ;--- anything else: PSP:80h ;--- register (E)BP must be preserved! if FMTEXE endif 0120 initcode proc 0120 FFFFFFFC cld if RING0 elseif DRIVER elseif BOOTDBG else 0121 FFFFFF8CFFFFFFC8 mov ax, cs if FMTEXE endif 0123 FFFFFFA3 0004o mov word ptr [execblk.cmdtail+2],ax 0126 FFFFFFA3 0008o mov word ptr [execblk.fcb1+2],ax 0129 FFFFFFA3 000Co mov word ptr [execblk.fcb2+2],ax if FMTEXE endif endif 012C FFFFFFA3 0000o mov [wDgroup], ax ; this will set alias [pspdbg] if FMTEXE==0 ;--- Check for console input vs. input from a file or other device. if REDIRECT 012F FFFFFFB80044 mov ax,4400h ;IOCTL--get info 0132 33FFFFFFDB xor bx,bx ;stdin 0134 FFFFFFCD21 int 21h 0136 7204 jc @F 0138 FFFFFF8816 0000o mov [fStdin],dl 013C @@: 013C FFFFFFB80044 mov ax,4400h ;IOCTL--get info 013F FFFFFFBB0100 mov bx,1 ;stdout 0142 FFFFFFCD21 int 21h 0144 7204 jc @F 0146 FFFFFF8816 0000o mov [fStdout],dl 014A @@: endif ife RING0 ; Determine the processor type. This is adapted from code in the ; Pentium Family User's Manual, Volume 3: Architecture and ; Programming Manual, Intel Corp., 1994, Chapter 5. That code contains ; the following comment: ; This program has been developed by Intel Corporation. ; Software developers have Intel's permission to incorporate ; this source code into your software royalty free. ; Intel 8086 CPU check. ; Bits 12-15 of the FLAGS register are always set on the 8086 processor. ; Probably the 186 as well. 014A 54 push sp 014B 58 pop ax 014C 3BFFFFFFC4 cmp ax,sp 014E 7579 jnz init6 ;if 8086 or 80186 (can't tell them apart) ; Intel 286 CPU check. ; Bits 12-15 of the flags register are always clear on the ; Intel 286 processor in real-address mode. 0150 FFFFFFC606 0000o 02 mov [machine],2 0155 FFFFFF9C pushf ;get original flags into AX 0156 58 pop ax 0157 0D00FFFFFFF0 or ax,0f000h ;try to set bits 12-15 015A 50 push ax ;save new flags value on stack 015B FFFFFF9D popf ;replace current flags value 015C FFFFFF9C pushf ;get new flags 015D 58 pop ax ;store new flags in AX 015E FFFFFFF6FFFFFFC4FFFFFFF test ah,0f0h ;if bits 12-15 clear, CPU = 80286 0161 7466 jz init6 ;if 80286 ; Intel 386 CPU check. ; The AC bit, bit #18, is a new bit introduced in the EFLAGS ; register on the Intel486 DX cpu to generate alignment faults. ; This bit cannot be set on the Intel386 CPU. 0163 FFFFFFFE06 0000o inc [machine] ; It is now safe to use 32-bit opcode/operands. if USEHWBP endif endif .386 0167 FFFFFF8BFFFFFFDC mov bx,sp ;save current stack pointer to align 0169 FFFFFF83FFFFFFE4FFFFFFF and sp,not 3 ;align stack to avoid AC fault 016C 66FFFFFF9C pushfd ;push original EFLAGS 016E 6658 pop eax ;get original EFLAGS 0170 66FFFFFF8BFFFFFFC8 mov ecx,eax ;save original EFLAGS in CX 0173 663500000400 xor eax,40000h ;flip (XOR) AC bit in EFLAGS 0179 6650 push eax ;put new EFLAGS value on stack 017B 66FFFFFF9D popfd ;replace EFLAGS value 017D 66FFFFFF9C pushfd ;get new EFLAGS 017F 6658 pop eax ;store new EFLAGS value in EAX 0181 663BFFFFFFC1 cmp eax,ecx 0184 743D jz init5 ;if 80386 CPU ; Intel486 DX CPU, Intel487 SX NDP, and Intel486 SX CPU check. ; Checking for ability to set/clear ID flag (bit 21) in EFLAGS ; which indicates the presence of a processor with the ability ; to use the CPUID instruction. ; inc [machine] ;it's a 486 0186 66FFFFFF8BFFFFFFC1 mov eax,ecx ;get original EFLAGS 0189 663500002000 xor eax,200000h ;flip (XOR) ID bit in EFLAGS 018F 6650 push eax ;save new EFLAGS value on stack 0191 66FFFFFF9D popfd ;replace current EFLAGS value 0193 66FFFFFF9C pushfd ;get new EFLAGS 0195 6658 pop eax ;store new EFLAGS in EAX 0197 663BFFFFFFC1 cmp eax,ecx ;check if it's changed 019A 7427 je init5 ;if it's a 486 (can't toggle ID bit) 019C 6651 push ecx 019E 66FFFFFF9D popfd ;restore AC bit in EFLAGS first 01A0 FFFFFF8BFFFFFFE3 mov sp,bx ;restore original stack pointer ;--- Execute CPUID instruction. .586 01A2 6633FFFFFFC0 xor eax,eax ;set up input for CPUID instruction 01A5 0FFFFFFFA2 cpuid 01A7 66FFFFFF83FFFFFFF801 cmp eax,1 01AB 7C1C jl init6 ;if 1 is not a valid input value for CPUID 01AD 6633FFFFFFC0 xor eax,eax ;otherwise, run CPUID with ax = 1 01B0 6640 inc eax 01B2 0FFFFFFFA2 cpuid if MMXSUPP endif 01B4 FFFFFF8AFFFFFFC4 mov al,ah 01B6 240F and al,0fh ;bits 8-11 are the model number 01B8 3C06 cmp al,6 01BA 7602 jbe init3 ;if <= 6 01BC FFFFFFB006 mov al,6 ;if > 6, set it to 6 01BE init3: 01BE FFFFFFA2 0000o mov [machine],al;save it 01C1 FFFFFFEB06 jmp init6 ;don't restore SP 01C3 init5: 01C3 6651 push ecx 01C5 66FFFFFF9D popfd ;restore AC bit in EFLAGS first 01C7 FFFFFF8BFFFFFFE3 mov sp,bx ;restore original stack pointer ife RING0 .8086 ;back to 1980s technology endif ; Next determine the type of FPU in a system and set the mach_87 ; variable with the appropriate value. ; Coprocessor check. ; The algorithm is to determine whether the floating-point ; status and control words can be written to. If not, no ; coprocessor exists. If the status and control words can be ; written to, the correct coprocessor is then determined ; depending on the processor ID. The Intel386 CPU can ; work with either an Intel 287 NDP or an Intel387 NDP. ; The infinity of the coprocessormust be checked ; to determine the correct coprocessor ID. 01C9 init6: ife RING0 01C9 FFFFFF8BFFFFFFEC mov bp, sp = bp-2 BPOFS equ endif 01CB FFFFFFA0 0000o mov al,[machine] 01CE FFFFFFA2 0000o mov [mach_87],al ;by default, set mach_87 to machine 01D1 FFFFFFFE06 0000o inc [has_87] 01D5 3C05 cmp al,5 ;a Pentium or above always will have a FPU 01D7 7349 jnc init7 01D9 FFFFFFFE0E 0000o dec [has_87] 01DD FFFFFFDBFFFFFFE3 fninit ;reset FP status word 01DF FFFFFFB85A5A mov ax,5a5ah ;init with non-zero value 01E2 50 push ax 01E3 FFFFFFDD7EFFFFFFFE fnstsw [bp-2] ;save FP status word 01E6 58 pop ax ;check FP status word 01E7 3C00 cmp al,0 01E9 7537 jne init7 ;if no FPU present 01EB 50 push ax 01EC FFFFFFD97EFFFFFFFE fnstcw [bp-2] ;save FP control word 01EF 58 pop ax ;check FP control word 01F0 253F10 and ax,103fh ;see if selected parts look OK 01F3 FFFFFF83FFFFFFF83F cmp ax,3fh 01F6 752A jne init7 ;if no FPU present 01F8 FFFFFFFE06 0000o inc [has_87] ;there's an FPU ;--- If we're using a 386, check for 287 vs. 387 by checking whether ;--- +infinity = -infinity. 01FC FFFFFF803E 0000o 03 cmp [machine],3 0201 751F jne init7 ;if not a 386 0203 FFFFFF9BFFFFFFD9FFFFFFE fld1 ;must use default control from FNINIT 0206 FFFFFF9BFFFFFFD9FFFFFFE fldz ;form infinity 0209 FFFFFF9BFFFFFFDEFFFFFFF fdivp ST(1),ST ;1 / 0 = infinity 020C FFFFFF9BFFFFFFD9FFFFFFC fld ST ;form negative infinity 020F FFFFFF9BFFFFFFD9FFFFFFE fchs 0212 FFFFFF9BFFFFFFDEFFFFFFD fcompp ;see if they are the same and remove them if RING0 else 0215 50 push ax 0216 FFFFFF9BFFFFFFDD7EFFFFF fstsw [bp-2] ;look at status from FCOMPP 021A 58 pop ax endif 021B FFFFFF9E sahf 021C 7504 jnz init7 ;if they are different, then it's a 387 021E FFFFFFFE0E 0000o dec [mach_87] ;otherwise, it's a 287 0222 init7: ;--- remove size and addr prefixes if cpu is < 80386 ; mov [machine], 2; activate to test non-386 code branches ife RING0 0222 FFFFFF803E 0000o 03 cmp [machine],3 0227 7317 jnb nopatch 0229 FFFFFFBE 0000o mov si,offset patches 022C FFFFFFB91100 mov cx,cntpatch 022F @@: 022F FFFFFFAD lodsw 0230 FFFFFF93 xchg ax,bx 0231 FFFFFFC607FFFFFF90 mov byte ptr [bx],90h 0234 FFFFFFE2FFFFFFF9 loop @B 0236 FFFFFFC606 0000o 3E mov [patch_movsp],3Eh ;set ("unnecessary") DS segment prefix 023B FFFFFFC606 0000o FFFFFF mov [patch_iret],0CFh ;code for IRET 0240 nopatch: endif ;--- Check DOS version ife (BOOTDBG or RING0) 0240 FFFFFFB80030 mov ax,3000h ;check DOS version 0243 FFFFFFCD21 int 21h 0245 FFFFFF86FFFFFFC4 xchg al,ah 0247 3D1F03 cmp ax,31fh 024A 720D jb init2 ;if version < 3.3, then don't use new INT 25h method 024C FFFFFFFE06 0000o inc [usepacket] if VDD endif 0250 3D0A07 cmp ax,070Ah 0253 7204 jb init2 0255 isntordos71: 0255 FFFFFFFE06 0000o inc [usepacket] ;enable FAT32 access method for L/W 0259 init2: endif ;--- Interpret switches and erase them from the command line. ife BOOTDBG ife RING0 0259 FFFFFFB80037 mov ax,3700h ;get switch character in DL 025C FFFFFFCD21 int 21h 025E FFFFFF8816 0000o mov [swchar],dl 0262 FFFFFF80FFFFFFFA2F cmp dl,'/' 0265 7504 jne @F 0267 FFFFFF8816 0000o mov [swch1],dl 026B @@: endif if RING0 elseif DRIVER else 026B FFFFFFBEFFFFFF8100 mov si,PSPS.DTA+1 if FMTEXE else = I_SRC equ <> endif endif 026E contparse: 026E @@: if RING0 elseif DRIVER else 026E FFFFFFAC lodsb endif 026F 3C20 cmp al,' ' 0271 74FFFFFFFB je @B 0273 3C09 cmp al,TAB 0275 74FFFFFFF7 je @B ;--- Process the /? switch (or the [swchar]? switch). ;--- If swchar != / and /? occurs, make sure nothing follows. 0277 3A06 0000o cmp al,[swchar] 027B 7404 je @F ;if switch character 027D 3C2F cmp al,'/' 027F 751D jne doneoptions ;if not the help switch 0281 @@: if RING0 elseif DRIVER else 0281 FFFFFFAC lodsb 0282 3C3F cmp al,'?' 0284 7509 jne @F ;helpexit: ; Print help message and exit 0286 FFFFFFBA 0000o mov dx,offset imsg1 ;command-line help message ; call int21ah9 ;v2.0: int21ah9 cannot be used ( pInDOS not yet set ) 0289 FFFFFFB409 mov ah,9 028B FFFFFFCD21 int 21h 028D FFFFFFCD20 int 20h ;done 028F @@: endif if ALTVID endif ;--- ||| Other switches may go here. if USEHWBP endif if MCLOPT and ( CATCHINT0C or CATCHINT0D ) endif if RING0 and CATCHINT41 endif if RING0 and V86M endif ife (DRIVER or RING0) ; those versions ignore invalid cmdline args 028F FFFFFFA2 0000o mov [imsg2a],al 0292 FFFFFFBA 0000o mov dx,offset imsg2 ;Invalid switch ; call int21ah9 ;v2.0: int21ah9 cannot be used ( pInDOS not yet set ) 0295 FFFFFFB409 mov ah,9 0297 FFFFFFCD21 int 21h 0299 FFFFFFB8014C mov ax,4c01h ;Quit and return error status 029C FFFFFFCD21 int 21h endif 029E doneoptions: ife (DRIVER or RING0) 029E 4E dec si if FMTEXE endif 029F FFFFFFAC lodsb 02A0 FFFFFFE8 0000r call n_cmd ; Feed the remaining command line to the 'n' command. if FMTEXE endif endif endif ; ife BOOTDBG if BOOTDBG endif if DMCMD 02A3 FFFFFFB452 mov ah,52h ;get list of lists 02A5 FFFFFFCD21 int 21h 02A7 26FFFFFF8B47FFFFFFFE mov ax,es:[bx-2] ;start of MCBs 02AB FFFFFFA3 0000o mov [wMCB],ax endif ife (BOOTDBG or RING0) 02AE FFFFFFB434 mov ah,34h 02B0 FFFFFFCD21 int 21h 02B2 FFFFFF891E 0000o mov word ptr [pInDOS+0],bx 02B6 FFFFFF8C06 0002o mov word ptr [pInDOS+2],es endif ;--- get address of DOS swappable DATA area ;--- to be used to get/set PSP and thus avoid DOS calls ;--- will not work for DOS < 3 if USESDA 02BA 1E push ds 02BB FFFFFFB8065D mov ax,5D06h 02BE FFFFFFCD21 int 21h 02C0 FFFFFF8CFFFFFFD8 mov ax,ds 02C2 1F pop ds 02C3 7207 jc @F 02C5 FFFFFF8936 0000o mov word ptr [pSDA+0],si 02C9 FFFFFFA3 0002o mov word ptr [pSDA+2],ax 02CC @@: endif if ?DPMI endif ;--- setup hardware bp usage if USEHWBP endif 02CC 1E push ds 02CD 07 pop es if INT22 if FMTEXE endif ;--- Save and modify termination address and the parent PSP field. 02CE FFFFFFBE0A00 mov si,PSPS.TPIV 02D1 FFFFFFBF 0000o mov di,offset psp22 02D4 FFFFFFA5 movsw 02D5 FFFFFFA5 movsw 02D6 FFFFFFC744FFFFFFFC mov word ptr [si-4],offset intr22dbg 02DB FFFFFF8C4CFFFFFFFE mov [si-2],cs 02DE FFFFFFBE1600 mov si,PSPS.PARENT 02E1 FFFFFFA5 movsw 02E2 FFFFFF8C4CFFFFFFFE mov [si-2],cs if FMTEXE else 02E5 FFFFFF8C0E 0000o mov [pspdbe],cs ;indicate there is no debuggee loaded yet endif endif if VXCHG endif ;--- Set up interrupt vectors. 02E9 FFFFFFB90400 mov cx, NUMINTS 02EC FFFFFFBE 0000o mov si, offset inttab 02EF FFFFFFBF 0000o mov di, offset intsave if RING0 elseif BOOTDBG endif 02F2 @@: 02F2 FFFFFFAC lodsb if RING0 elseif BOOTDBG else 02F3 FFFFFFB435 mov ah, 35h 02F5 FFFFFFCD21 int 21h 02F7 FFFFFF891D mov [di+0], bx 02F9 FFFFFF8C4502 mov [di+2], es 02FC FFFFFF92 xchg ax, dx ;save int # in dl endif ; mov ax, [si] ;get address 02FD FFFFFFAD lodsw ;get address (16-bit offset) if RING0 elseif BOOTDBG else 02FE FFFFFF92 xchg ax, dx ;AL=int#, DX=offset 02FF FFFFFFB425 mov ah, 25h ;set interrupt vector 0301 FFFFFFCD21 int 21h endif ; add si, 2 0303 FFFFFF83FFFFFFC704 add di, sizeof DWORD 0306 FFFFFFE2FFFFFFEA loop @B ;--- prepare to shrink DEBUG and set its stack 0308 FFFFFFB8 020Fo mov ax, offset real_end + STACKSIZ + 15 030B 24FFFFFFF0 and al, not 15 ; debug's top of stack 030D FFFFFF8BFFFFFFD8 mov bx, ax if FLATSS else 030F FFFFFFA3 0000o mov [top_sp], ax endif 0312 FFFFFFE9FFFFFFEBFFFFFFF jmp initcont 0315 initcode endp 0315 _ITEXT ends 0022 _IDATA segment = 11 cntpatch = ($ - patches) / 2 0022 _IDATA ends end start Binary Map: Segment Pos(file) RVA Size(fil) Size(mem) --------------------------------------------------------------- _TEXT 0 100 2C70 2C70 CONST 2C70 2D70 1D22 1D22 ASMDATA 4992 4A92 711 711 OTDATA 50A4 51A4 262 262 _DATA 5308 5408 F4 F4 _ITEXT 53FC 54FC 315 315 _IDATA 5712 5812 22 22 --------------------------------------------------------------- 5734 5734 Macros: N a m e Type @CatStr . . . . . . . . . . . . Func @Environ . . . . . . . . . . . . Func @InStr . . . . . . . . . . . . . Func @RestoreSeg . . . . . . . . . . Proc @SizeStr . . . . . . . . . . . . Func @SubStr . . . . . . . . . . . . Func @dispsegm . . . . . . . . . . . Proc @movs . . . . . . . . . . . . . Proc AGRP . . . . . . . . . . . . . . Func DefGPR . . . . . . . . . . . . . Proc DefSR . . . . . . . . . . . . . Proc OT . . . . . . . . . . . . . . . Func endvariant . . . . . . . . . . . Proc fpvariant . . . . . . . . . . . Proc mne . . . . . . . . . . . . . . Proc opl . . . . . . . . . . . . . . Proc sizeprf . . . . . . . . . . . . Proc sizeprfX . . . . . . . . . . . . Proc variant . . . . . . . . . . . . Proc Structures and Unions: N a m e Size/Ofs Type AINSTR . . . . . . . . . . . . . E rmaddr . . . . . . . . . . . . 0 Word regmem . . . . . . . . . . . . 2 Byte sibbyte . . . . . . . . . . . 3 Byte immaddr . . . . . . . . . . . 4 Word xxaddr . . . . . . . . . . . . 6 Word dismach . . . . . . . . . . . 8 Byte dmflags . . . . . . . . . . . 9 Byte opcode_or . . . . . . . . . . A Byte opsize . . . . . . . . . . . . B Byte varflags . . . . . . . . . . . C Byte reqsize . . . . . . . . . . . D Byte DMPJT . . . . . . . . . . . . . 8 pDispOfs . . . . . . . . . . . 0 Word pGetB . . . . . . . . . . . . 2 Word pLoad . . . . . . . . . . . . 4 Word pEnd . . . . . . . . . . . . . 6 Word EXECS . . . . . . . . . . . . . 16 environ . . . . . . . . . . . 0 Word cmdtail . . . . . . . . . . . 2 DWord fcb1 . . . . . . . . . . . . . 6 DWord fcb2 . . . . . . . . . . . . . A DWord sssp . . . . . . . . . . . . . E DWord csip . . . . . . . . . . . . . 12 DWord FMTITEM . . . . . . . . . . . . 3 bNum . . . . . . . . . . . . . 0 Byte wAdr . . . . . . . . . . . . . 1 Word INTITEM . . . . . . . . . . . . 3 bInt . . . . . . . . . . . . . 0 Byte wOfs . . . . . . . . . . . . . 1 Word OPRND . . . . . . . . . . . . . C flags . . . . . . . . . . . . 0 Byte sizearg . . . . . . . . . . . 2 Byte sizedis . . . . . . . . . . . 3 Byte . . . . . . . . . . . . . . . 4 reg1 . . . . . . . . . . . . 4 Byte numadd . . . . . . . . . . . 4 Byte . . . . . . . . . . . . . . . 5 . . . . . . . . . . . . . . 5 reg2 . . . . . . . . . . . 5 Byte index . . . . . . . . . . 6 Byte num2 . . . . . . . . . . . . 5 Word orednum . . . . . . . . . . . 7 Byte num . . . . . . . . . . . . . 8 DWord PACKET . . . . . . . . . . . . . A secno . . . . . . . . . . . . 0 DWord numsecs . . . . . . . . . . . 4 Word dstofs . . . . . . . . . . . . 6 Word dstseg . . . . . . . . . . . . 8 Word PSPS . . . . . . . . . . . . . . 100 ALASAP . . . . . . . . . . . . 2 Word TPIV . . . . . . . . . . . . . A DWord CCIV . . . . . . . . . . . . . E DWord CEIV . . . . . . . . . . . . . 12 DWord PARENT . . . . . . . . . . . . 16 Word SPSAV . . . . . . . . . . . . 2E DWord FCB1 . . . . . . . . . . . . . 5C Byte[16] FCB2 . . . . . . . . . . . . . 6C Byte[16] DTA . . . . . . . . . . . . . 80 Byte[128] REGS . . . . . . . . . . . . . . 38 rDI . . . . . . . . . . . . . 0 Word[2] rSI . . . . . . . . . . . . . 4 Word[2] rBP . . . . . . . . . . . . . 8 Word[2] rBX . . . . . . . . . . . . . 10 Word[2] rDX . . . . . . . . . . . . . 14 Word[2] rCX . . . . . . . . . . . . . 18 Word[2] rAX . . . . . . . . . . . . . 1C Word[2] rDS . . . . . . . . . . . . . 20 Word rES . . . . . . . . . . . . . 22 Word rFS . . . . . . . . . . . . . 24 Word rGS . . . . . . . . . . . . . 26 Word rSS . . . . . . . . . . . . . 28 Word rCS . . . . . . . . . . . . . 2A Word rSP . . . . . . . . . . . . . 2C Word[2] rIP . . . . . . . . . . . . . 30 Word[2] rFL . . . . . . . . . . . . . 34 Word[2] Segments and Groups: N a m e Size Length Align Combine Class DGROUP . . . . . . . . . . . . . GROUP _TEXT . . . . . . . . . . . . . 16 Bit 2D70 DWord Public 'CODE' CONST . . . . . . . . . . . . . 16 Bit 1D22 Word Public 'DATA' ASMDATA . . . . . . . . . . . . 16 Bit 0711 Word Public 'DATA' OTDATA . . . . . . . . . . . . . 16 Bit 0262 Word Public 'DATA' _DATA . . . . . . . . . . . . . 16 Bit 00F4 DWord Public 'DATA' _ITEXT . . . . . . . . . . . . . 16 Bit 0315 Word Public 'I_CODE' _IDATA . . . . . . . . . . . . . 16 Bit 0022 Word Public 'I_DATA' Procedures, parameters and locals: N a m e Type Value Segment Length DispOfs . . . . . . . . . . . . P Near 2C5A _TEXT 0002 Private DoFCB . . . . . . . . . . . . . P Near 13F2 _TEXT 0059 Private nn7 . . . . . . . . . . . . . L Near 1402 _TEXT L&_0084 . . . . . . . . . . . L Near 1421 _TEXT L&_0085 . . . . . . . . . . . L Near 143B _TEXT L&_0082 . . . . . . . . . . . L Near 140A _TEXT L&_0083 . . . . . . . . . . . L Near 141A _TEXT L&_0081 . . . . . . . . . . . L Near 13F2 _TEXT nn10 . . . . . . . . . . . . . L Near 1422 _TEXT a_cmd . . . . . . . . . . . . . P Near 01D6 _TEXT 098E Private L&_0015 . . . . . . . . . . . L Near 0494 _TEXT L&_0012 . . . . . . . . . . . L Near 03D4 _TEXT L&_0013 . . . . . . . . . . . L Near 043E _TEXT L&_0050 . . . . . . . . . . . L Near 0A9E _TEXT ao38a . . . . . . . . . . . . L Near 0ACD _TEXT L&_0010 . . . . . . . . . . . L Near 02E6 _TEXT ao08_1 . . . . . . . . . . . . L Near 093F _TEXT L&_0051 . . . . . . . . . . . L Near 0AB6 _TEXT L&_0011 . . . . . . . . . . . L Near 030C _TEXT aa14 . . . . . . . . . . . . . L Near 0278 _TEXT aa15 . . . . . . . . . . . . . L Near 029A _TEXT aa20m . . . . . . . . . . . . L Near 030F _TEXT aa16 . . . . . . . . . . . . . L Near 02A6 _TEXT aa17 . . . . . . . . . . . . . L Near 02A9 _TEXT ab00a . . . . . . . . . . . . L Near 038D _TEXT aa00a . . . . . . . . . . . . L Near 01E4 _TEXT ao43r . . . . . . . . . . . . L Near 0B12 _TEXT ab14 . . . . . . . . . . . . . L Near 0497 _TEXT ab15 . . . . . . . . . . . . . L Near 04D9 _TEXT ab16 . . . . . . . . . . . . . L Near 04DC _TEXT ab17 . . . . . . . . . . . . . L Near 04DF _TEXT aa18 . . . . . . . . . . . . . L Near 02CF _TEXT ab10 . . . . . . . . . . . . . L Near 046B _TEXT ab11 . . . . . . . . . . . . . L Near 046E _TEXT ab12 . . . . . . . . . . . . . L Near 0486 _TEXT ab13 . . . . . . . . . . . . . L Near 0488 _TEXT ac14 . . . . . . . . . . . . . L Near 079C _TEXT ac16 . . . . . . . . . . . . . L Near 07C9 _TEXT ao44 . . . . . . . . . . . . . L Near 0B13 _TEXT aop_m . . . . . . . . . . . . L Near 08F3 _TEXT ao45 . . . . . . . . . . . . . L Near 0B21 _TEXT ab18 . . . . . . . . . . . . . L Near 04E6 _TEXT ac10 . . . . . . . . . . . . . L Near 0754 _TEXT ao07 . . . . . . . . . . . . . L Near 0928 _TEXT ao46 . . . . . . . . . . . . . L Near 0B39 _TEXT ab19 . . . . . . . . . . . . . L Near 04E9 _TEXT ac11 . . . . . . . . . . . . . L Near 0771 _TEXT L&_0048 . . . . . . . . . . . L Near 0A44 _TEXT ao47 . . . . . . . . . . . . . L Near 0B40 _TEXT L&_0008 . . . . . . . . . . . L Near 0258 _TEXT ac12 . . . . . . . . . . . . . L Near 0774 _TEXT L&_0049 . . . . . . . . . . . L Near 0A94 _TEXT ao40 . . . . . . . . . . . . . L Near 0AE6 _TEXT L&_0009 . . . . . . . . . . . L Near 02C6 _TEXT ab99 . . . . . . . . . . . . . L Near 06A4 _TEXT L&_0046 . . . . . . . . . . . L Near 09E2 _TEXT ao41 . . . . . . . . . . . . . L Near 0AE7 _TEXT L&_0006 . . . . . . . . . . . L Near 022F _TEXT aop_r_mod . . . . . . . . . . L Near 08F3 _TEXT L&_0047 . . . . . . . . . . . L Near 0A38 _TEXT ao42 . . . . . . . . . . . . . L Near 0AF5 _TEXT L&_0007 . . . . . . . . . . . L Near 0245 _TEXT L&_0044 . . . . . . . . . . . L Near 0993 _TEXT ao43 . . . . . . . . . . . . . L Near 0AFA _TEXT L&_0045 . . . . . . . . . . . L Near 09B6 _TEXT L&_0042 . . . . . . . . . . . L Near 0962 _TEXT L&_0043 . . . . . . . . . . . L Near 0984 _TEXT L&_0040 . . . . . . . . . . . L Near 08BE _TEXT ao08 . . . . . . . . . . . . . L Near 093A _TEXT L&_0041 . . . . . . . . . . . L Near 094F _TEXT ao48 . . . . . . . . . . . . . L Near 0B47 _TEXT ao49 . . . . . . . . . . . . . L Near 0B4F _TEXT aa06 . . . . . . . . . . . . . L Near 0251 _TEXT ab01b . . . . . . . . . . . . L Near 0398 _TEXT ab01a . . . . . . . . . . . . L Near 0397 _TEXT aop_rel1632 . . . . . . . . . L Near 0A22 _TEXT aa01 . . . . . . . . . . . . . L Near 01F2 _TEXT aasizchk . . . . . . . . . . . L Near 0B56 _TEXT aa02 . . . . . . . . . . . . . L Near 0221 _TEXT aa03 . . . . . . . . . . . . . L Near 0225 _TEXT ab04 . . . . . . . . . . . . . L Near 03A6 _TEXT ab05 . . . . . . . . . . . . . L Near 03AF _TEXT ab44 . . . . . . . . . . . . . L Near 0683 _TEXT ab45 . . . . . . . . . . . . . L Near 06A1 _TEXT aa_exit . . . . . . . . . . . L Near 0275 _TEXT ab07 . . . . . . . . . . . . . L Near 03EE _TEXT sto_dd . . . . . . . . . . . . L Near 0374 _TEXT ab00 . . . . . . . . . . . . . L Near 037F _TEXT aop_rel8 . . . . . . . . . . . L Near 09CD _TEXT ab01 . . . . . . . . . . . . . L Near 0392 _TEXT ab40 . . . . . . . . . . . . . L Near 0656 _TEXT sto_db . . . . . . . . . . . . L Near 037D _TEXT ab02 . . . . . . . . . . . . . L Near 039B _TEXT ab03 . . . . . . . . . . . . . L Near 03A3 _TEXT ab42 . . . . . . . . . . . . . L Near 067C _TEXT ab43 . . . . . . . . . . . . . L Near 0682 _TEXT ac04 . . . . . . . . . . . . . L Near 06CD _TEXT ao34 . . . . . . . . . . . . . L Near 0AA2 _TEXT ac05 . . . . . . . . . . . . . L Near 06D0 _TEXT ao35 . . . . . . . . . . . . . L Near 0AA6 _TEXT ac06 . . . . . . . . . . . . . L Near 0714 _TEXT ao37 . . . . . . . . . . . . . L Near 0AB8 _TEXT ab08 . . . . . . . . . . . . . L Near 041A _TEXT ab09 . . . . . . . . . . . . . L Near 041B _TEXT ac01 . . . . . . . . . . . . . L Near 06A8 _TEXT ac02 . . . . . . . . . . . . . L Near 06B6 _TEXT L&_0038 . . . . . . . . . . . L Near 089A _TEXT L&_0039 . . . . . . . . . . . L Near 08AD _TEXT L&_0036 . . . . . . . . . . . L Near 0847 _TEXT sto_dw . . . . . . . . . . . . L Near 037A _TEXT L&_0037 . . . . . . . . . . . L Near 0887 _TEXT L&_0034 . . . . . . . . . . . L Near 07FD _TEXT L&_0035 . . . . . . . . . . . L Near 0825 _TEXT aa01x . . . . . . . . . . . . L Near 01F2 _TEXT ac08 . . . . . . . . . . . . . L Near 0733 _TEXT L&_0032 . . . . . . . . . . . L Near 07DD _TEXT ao38 . . . . . . . . . . . . . L Near 0ABF _TEXT ac09 . . . . . . . . . . . . . L Near 0751 _TEXT L&_0033 . . . . . . . . . . . L Near 07E7 _TEXT ao39 . . . . . . . . . . . . . L Near 0AD0 _TEXT L&_0030 . . . . . . . . . . . L Near 0788 _TEXT ac20_1 . . . . . . . . . . . . L Near 080D _TEXT L&_0031 . . . . . . . . . . . L Near 07B5 _TEXT aop_ax . . . . . . . . . . . . L Near 0922 _TEXT ab34 . . . . . . . . . . . . . L Near 05E6 _TEXT aop_imm . . . . . . . . . . . L Near 0911 _TEXT ab30 . . . . . . . . . . . . . L Near 0581 _TEXT ao22_1 . . . . . . . . . . . . L Near 09C8 _TEXT ab31 . . . . . . . . . . . . . L Near 05B1 _TEXT ab32 . . . . . . . . . . . . . L Near 05B4 _TEXT aop_moffs . . . . . . . . . . L Near 0917 _TEXT ao45a . . . . . . . . . . . . L Near 0B30 _TEXT ac30 . . . . . . . . . . . . . L Near 08D7 _TEXT ao23_1 . . . . . . . . . . . . L Near 09F6 _TEXT ao27 . . . . . . . . . . . . . L Near 0A4C _TEXT aop_sti . . . . . . . . . . . L Near 0A7B _TEXT ab39 . . . . . . . . . . . . . L Near 0650 _TEXT ac31 . . . . . . . . . . . . . L Near 08DC _TEXT ac32 . . . . . . . . . . . . . L Near 08E8 _TEXT L&_0028 . . . . . . . . . . . L Near 06FD _TEXT ac33 . . . . . . . . . . . . . L Near 08F0 _TEXT aop_r_add . . . . . . . . . . L Near 0907 _TEXT ao22 . . . . . . . . . . . . . L Near 09BD _TEXT L&_0029 . . . . . . . . . . . L Near 0731 _TEXT L&_0026 . . . . . . . . . . . L Near 0679 _TEXT L&_0027 . . . . . . . . . . . L Near 06C6 _TEXT aop_mmx . . . . . . . . . . . L Near 0A82 _TEXT aa13b . . . . . . . . . . . . L Near 0272 _TEXT L&_0024 . . . . . . . . . . . L Near 062D _TEXT L&_0025 . . . . . . . . . . . L Near 0644 _TEXT L&_0022 . . . . . . . . . . . L Near 05FB _TEXT ao28 . . . . . . . . . . . . . L Near 0A56 _TEXT aa13a . . . . . . . . . . . . L Near 0271 _TEXT L&_0023 . . . . . . . . . . . L Near 0614 _TEXT ao29 . . . . . . . . . . . . . L Near 0A77 _TEXT L&_0020 . . . . . . . . . . . L Near 05AC _TEXT aa24 . . . . . . . . . . . . . L Near 034F _TEXT L&_0021 . . . . . . . . . . . L Near 05D5 _TEXT aa25 . . . . . . . . . . . . . L Near 0352 _TEXT aa26 . . . . . . . . . . . . . L Near 0353 _TEXT aa27 . . . . . . . . . . . . . L Near 035A _TEXT aa20 . . . . . . . . . . . . . L Near 02EF _TEXT aa21 . . . . . . . . . . . . . L Near 0320 _TEXT aa15_1 . . . . . . . . . . . . L Near 029D _TEXT aa22 . . . . . . . . . . . . . L Near 033D _TEXT aa23 . . . . . . . . . . . . . L Near 033F _TEXT aop_farimm . . . . . . . . . . L Near 09AE _TEXT ab24 . . . . . . . . . . . . . L Near 053B _TEXT ab25 . . . . . . . . . . . . . L Near 053E _TEXT aop_rm . . . . . . . . . . . . L Near 08F3 _TEXT ab26 . . . . . . . . . . . . . L Near 053F _TEXT ab27 . . . . . . . . . . . . . L Near 0554 _TEXT ab30b . . . . . . . . . . . . L Near 0598 _TEXT ab30a . . . . . . . . . . . . L Near 0595 _TEXT ao_err1 . . . . . . . . . . . L Near 0A74 _TEXT ab21 . . . . . . . . . . . . . L Near 0522 _TEXT ab23 . . . . . . . . . . . . . L Near 0536 _TEXT ac24 . . . . . . . . . . . . . L Near 0859 _TEXT ac25 . . . . . . . . . . . . . L Near 0865 _TEXT ao14 . . . . . . . . . . . . . L Near 0984 _TEXT ao15 . . . . . . . . . . . . . L Near 099C _TEXT ao16 . . . . . . . . . . . . . L Near 09A4 _TEXT ab28 . . . . . . . . . . . . . L Near 0573 _TEXT aop_r . . . . . . . . . . . . L Near 08F8 _TEXT ao17 . . . . . . . . . . . . . L Near 09A5 _TEXT ac21 . . . . . . . . . . . . . L Near 0812 _TEXT L&_0018 . . . . . . . . . . . L Near 052D _TEXT ao11 . . . . . . . . . . . . . L Near 0963 _TEXT aop_cr . . . . . . . . . . . . L Near 0A86 _TEXT ao50 . . . . . . . . . . . . . L Near 0B51 _TEXT L&_0019 . . . . . . . . . . . L Near 057E _TEXT ao12 . . . . . . . . . . . . . L Near 0966 _TEXT ao51 . . . . . . . . . . . . . L Near 0B55 _TEXT L&_0016 . . . . . . . . . . . L Near 04C1 _TEXT ao13 . . . . . . . . . . . . . L Near 0976 _TEXT L&_0017 . . . . . . . . . . . L Near 0505 _TEXT L&_0014 . . . . . . . . . . . L Near 0456 _TEXT aaconvindex . . . . . . . . . . P Near 0C1B _TEXT 0023 Private aacv1 . . . . . . . . . . . . L Near 0C37 _TEXT aacv2 . . . . . . . . . . . . L Near 0C3A _TEXT aageti . . . . . . . . . . . . . P Near 0BB1 _TEXT 006A Private aag1a . . . . . . . . . . . . L Near 0BF2 _TEXT aag4 . . . . . . . . . . . . . L Near 0BF7 _TEXT aag5 . . . . . . . . . . . . . L Near 0C00 _TEXT aag6 . . . . . . . . . . . . . L Near 0C10 _TEXT aag7 . . . . . . . . . . . . . L Near 0C18 _TEXT aag1 . . . . . . . . . . . . . L Near 0BC4 _TEXT aag2 . . . . . . . . . . . . . L Near 0BF3 _TEXT aag3 . . . . . . . . . . . . . L Near 0BF5 _TEXT aagetreg . . . . . . . . . . . . P Near 0C3E _TEXT 0042 Private aagr1 . . . . . . . . . . . . L Near 0C69 _TEXT aagr2 . . . . . . . . . . . . L Near 0C7A _TEXT aagr3 . . . . . . . . . . . . L Near 0C7E _TEXT aaifnum . . . . . . . . . . . . P Near 0B9B _TEXT 0016 Private aai1 . . . . . . . . . . . . . L Near 0BAF _TEXT aai2 . . . . . . . . . . . . . L Near 0BB0 _TEXT ao90 . . . . . . . . . . . . . . P Near 0B64 _TEXT 0037 Private L&_0052 . . . . . . . . . . . L Near 0B73 _TEXT L&_0053 . . . . . . . . . . . L Near 0B89 _TEXT ao92 . . . . . . . . . . . . . L Near 0B7F _TEXT ao93 . . . . . . . . . . . . . L Near 0B8D _TEXT c_cmd . . . . . . . . . . . . . P Near 0C80 _TEXT 0070 Private cc2 . . . . . . . . . . . . . L Near 0CEB _TEXT cc1 . . . . . . . . . . . . . L Near 0C84 _TEXT c_cont . . . . . . . . . . . . L Near 0C95 _TEXT L&_0054 . . . . . . . . . . . L Near 0CA1 _TEXT clear_tf_onstack . . . . . . . . P Near 18AB _TEXT 0010 Private ctos_1 . . . . . . . . . . . . L Near 18B9 _TEXT cmd_error . . . . . . . . . . . P Near 1CA4 _TEXT 0027 Private L&_0117 . . . . . . . . . . . L Near 1CBD _TEXT cmdloop . . . . . . . . . . . . P Near 010A _TEXT 0076 Private cmd4 . . . . . . . . . . . . . L Near 0174 _TEXT L&_0004 . . . . . . . . . . . L Near 014D _TEXT L&_0002 . . . . . . . . . . . L Near 012A _TEXT L&_0003 . . . . . . . . . . . L Near 013F _TEXT L&_0001 . . . . . . . . . . . L Near 0122 _TEXT errorj1 . . . . . . . . . . . L Near 017D _TEXT copystring . . . . . . . . . . . P Near 2C52 _TEXT 0008 Private L&_0191 . . . . . . . . . . . L Near 2C53 _TEXT createdummytask . . . . . . . . P Near 2CD5 _TEXT 009B Private ct_done . . . . . . . . . . . L Near 2D6F _TEXT L&_0194 . . . . . . . . . . . L Near 2D1D _TEXT L&_0195 . . . . . . . . . . . L Near 2D53 _TEXT d_cmd . . . . . . . . . . . . . P Near 0D6D _TEXT 00C6 Private end16 . . . . . . . . . . . . L Near 0E2E _TEXT getb16 . . . . . . . . . . . . L Near 0E1F _TEXT nextbyte . . . . . . . . . . . L Near 0DEE _TEXT dd1_1 . . . . . . . . . . . . L Near 0D93 _TEXT dd2 . . . . . . . . . . . . . L Near 0DA0 _TEXT dd1 . . . . . . . . . . . . . L Near 0D85 _TEXT dd7 . . . . . . . . . . . . . L Near 0DFF _TEXT dd8 . . . . . . . . . . . . . L Near 0E01 _TEXT load16 . . . . . . . . . . . . L Near 0E1D _TEXT nextline . . . . . . . . . . . L Near 0DB0 _TEXT L&_0056 . . . . . . . . . . . L Near 0E2A _TEXT disasm . . . . . . . . . . . . . P Near 2220 _TEXT 05D6 Private dop_r1 . . . . . . . . . . . . L Near 2710 _TEXT da17 . . . . . . . . . . . . . L Near 2351 _TEXT da16 . . . . . . . . . . . . . L Near 2349 _TEXT hdl_scan_table . . . . . . . . L Near 23B2 _TEXT da15 . . . . . . . . . . . . . L Near 233B _TEXT da14 . . . . . . . . . . . . . L Near 2310 _TEXT dop13 . . . . . . . . . . . . L Near 2613 _TEXT da3 . . . . . . . . . . . . . L Near 2253 _TEXT da13 . . . . . . . . . . . . . L Near 22E3 _TEXT dop10 . . . . . . . . . . . . L Near 25EF _TEXT da2 . . . . . . . . . . . . . L Near 224E _TEXT dop11 . . . . . . . . . . . . L Near 25FC _TEXT da1 . . . . . . . . . . . . . L Near 224B _TEXT dop16 . . . . . . . . . . . . L Near 263E _TEXT dop_st1 . . . . . . . . . . . L Near 27A4 _TEXT dop17 . . . . . . . . . . . . L Near 2648 _TEXT dop15 . . . . . . . . . . . . L Near 263B _TEXT hdl_rep . . . . . . . . . . . L Near 240C _TEXT hdl_seg . . . . . . . . . . . L Near 23ED _TEXT dop18 . . . . . . . . . . . . L Near 264C _TEXT L&_0148 . . . . . . . . . . . L Near 254E _TEXT da32f . . . . . . . . . . . . L Near 24F5 _TEXT L&_0149 . . . . . . . . . . . L Near 2579 _TEXT dop_imms8 . . . . . . . . . . L Near 27D2 _TEXT da18 . . . . . . . . . . . . . L Near 235C _TEXT L&_0146 . . . . . . . . . . . L Near 24D6 _TEXT dop_wordreg . . . . . . . . . L Near 272A _TEXT L&_0147 . . . . . . . . . . . L Near 251E _TEXT L&_0144 . . . . . . . . . . . L Near 2492 _TEXT L&_0145 . . . . . . . . . . . L Near 24C4 _TEXT dop42a . . . . . . . . . . . . L Near 2798 _TEXT L&_0142 . . . . . . . . . . . L Near 23D8 _TEXT dop_r . . . . . . . . . . . . L Near 270D _TEXT dop_mdouble . . . . . . . . . L Near 2759 _TEXT L&_0143 . . . . . . . . . . . L Near 246C _TEXT da32h . . . . . . . . . . . . L Near 2521 _TEXT L&_0140 . . . . . . . . . . . L Near 23A9 _TEXT L&_0141 . . . . . . . . . . . L Near 23C8 _TEXT disbad0 . . . . . . . . . . . L Near 22E0 _TEXT disbad1 . . . . . . . . . . . L Near 26EE _TEXT disbad2 . . . . . . . . . . . L Near 23EA _TEXT disbad5 . . . . . . . . . . . L Near 27A2 _TEXT hdl_insprf . . . . . . . . . . L Near 2443 _TEXT da_fpuins . . . . . . . . . . L Near 22A5 _TEXT da32z . . . . . . . . . . . . L Near 2559 _TEXT dop_segreg . . . . . . . . . . L Near 27B4 _TEXT dop_m64 . . . . . . . . . . . L Near 2749 _TEXT dop40 . . . . . . . . . . . . L Near 276E _TEXT dop06 . . . . . . . . . . . . L Near 258A _TEXT hdl_a32_ex . . . . . . . . . . L Near 23E9 _TEXT dop_ax . . . . . . . . . . . . L Near 2745 _TEXT dop_mfloat . . . . . . . . . . L Near 274D _TEXT dop05 . . . . . . . . . . . . L Near 2587 _TEXT da_insgrp . . . . . . . . . . L Near 229E _TEXT dop09 . . . . . . . . . . . . L Near 25E8 _TEXT L&_0138 . . . . . . . . . . . L Near 236F _TEXT dop_farmem . . . . . . . . . . L Near 277D _TEXT L&_0139 . . . . . . . . . . . L Near 237D _TEXT dop_r_add . . . . . . . . . . L Near 2740 _TEXT L&_0136 . . . . . . . . . . . L Near 22DC _TEXT dop_r_mod . . . . . . . . . . L Near 26F1 _TEXT L&_0137 . . . . . . . . . . . L Near 2302 _TEXT L&_0134 . . . . . . . . . . . L Near 2267 _TEXT dop_m . . . . . . . . . . . . L Near 26E4 _TEXT L&_0135 . . . . . . . . . . . L Near 2284 _TEXT dop_mxx . . . . . . . . . . . L Near 2793 _TEXT dop_shosiz . . . . . . . . . . L Near 27ED _TEXT nextflag . . . . . . . . . . . L Near 237F _TEXT ds_is_set . . . . . . . . . . L Near 2547 _TEXT da34 . . . . . . . . . . . . . L Near 257C _TEXT hdl_showop . . . . . . . . . . L Near 244C _TEXT da32 . . . . . . . . . . . . . L Near 24D9 _TEXT da_fpugrp . . . . . . . . . . L Near 22C0 _TEXT dop_rm . . . . . . . . . . . . L Near 257D _TEXT L&_0164 . . . . . . . . . . . L Near 27CD _TEXT dop_regmmx . . . . . . . . . . L Near 2736 _TEXT L&_0165 . . . . . . . . . . . L Near 27E3 _TEXT L&_0162 . . . . . . . . . . . L Near 27B1 _TEXT da28b . . . . . . . . . . . . L Near 2478 _TEXT L&_0163 . . . . . . . . . . . L Near 27C4 _TEXT dop_moffs . . . . . . . . . . L Near 26FA _TEXT L&_0160 . . . . . . . . . . . L Near 2707 _TEXT L&_0161 . . . . . . . . . . . L Near 278F _TEXT dop_imm8 . . . . . . . . . . . L Near 27E7 _TEXT hdl_wait . . . . . . . . . . . L Near 23CA _TEXT dop38c . . . . . . . . . . . . L Near 2764 _TEXT da_twobyte . . . . . . . . . . L Near 2292 _TEXT hdl_d32 . . . . . . . . . . . L Near 23CA _TEXT dop22 . . . . . . . . . . . . L Near 2680 _TEXT dop23 . . . . . . . . . . . . L Near 2683 _TEXT hdl_lock . . . . . . . . . . . L Near 2432 _TEXT da21 . . . . . . . . . . . . . L Near 2376 _TEXT da20 . . . . . . . . . . . . . L Near 2371 _TEXT dop27 . . . . . . . . . . . . L Near 26E0 _TEXT dop25 . . . . . . . . . . . . L Near 26B0 _TEXT dop_m80 . . . . . . . . . . . L Near 276A _TEXT da_insprf . . . . . . . . . . L Near 22C9 _TEXT dop18a . . . . . . . . . . . . L Near 2650 _TEXT L&_0158 . . . . . . . . . . . L Near 26AD _TEXT dop59a . . . . . . . . . . . . L Near 27EA _TEXT da29 . . . . . . . . . . . . . L Near 24B6 _TEXT L&_0159 . . . . . . . . . . . L Near 26DF _TEXT L&_0156 . . . . . . . . . . . L Near 267B _TEXT L&_0157 . . . . . . . . . . . L Near 269B _TEXT L&_0154 . . . . . . . . . . . L Near 2658 _TEXT L&_0155 . . . . . . . . . . . L Near 2665 _TEXT L&_0152 . . . . . . . . . . . L Near 260E _TEXT da_done . . . . . . . . . . . L Near 2452 _TEXT L&_0153 . . . . . . . . . . . L Near 2633 _TEXT L&_0150 . . . . . . . . . . . L Near 259C _TEXT dop_reg . . . . . . . . . . . L Near 272C _TEXT L&_0151 . . . . . . . . . . . L Near 25B0 _TEXT hdl_a32 . . . . . . . . . . . L Near 23D1 _TEXT disbad . . . . . . . . . . . . . P Near 27F6 _TEXT 005B Private L&_0166 . . . . . . . . . . . L Near 2832 _TEXT L&_0167 . . . . . . . . . . . L Near 284A _TEXT dischk32d . . . . . . . . . . . P Near 296B _TEXT 000B Private disgetbyte . . . . . . . . . . . P Near 29FF _TEXT 0016 Private disgetword . . . . . . . . . . . P Near 2A15 _TEXT 0017 Private disp32 . . . . . . . . . . . . . P Near 2996 _TEXT 000F Private disp_diskresult . . . . . . . . P Near 1967 _TEXT 003C Private L&_0102 . . . . . . . . . . . L Near 1986 _TEXT ww3 . . . . . . . . . . . . . L Near 19A0 _TEXT disshowbytes . . . . . . . . . . P Near 2A2C _TEXT 0016 Private L&_0178 . . . . . . . . . . . L Near 2A34 _TEXT dm_cmd . . . . . . . . . . . . . P Near 0CF0 _TEXT 007D Private setds2si . . . . . . . . . . . L Near 0D68 _TEXT mcbisfree . . . . . . . . . . L Near 0D5A _TEXT mcbout_done . . . . . . . . . L Near 0D66 _TEXT setds2bx . . . . . . . . . . . L Near 0D6A _TEXT nextmcb . . . . . . . . . . . L Near 0D06 _TEXT nextmcbchar . . . . . . . . . L Near 0D52 _TEXT L&_0055 . . . . . . . . . . . L Near 0D1F _TEXT dmpflags . . . . . . . . . . . . P Near 2C38 _TEXT 001A Private nextitem . . . . . . . . . . . L Near 2C3E _TEXT L&_0190 . . . . . . . . . . . L Near 2C4B _TEXT dohack . . . . . . . . . . . . . P Near 1E90 _TEXT 0025 Private _ret . . . . . . . . . . . . . L Near 1EB4 _TEXT hak1 . . . . . . . . . . . . . L Near 1EA4 _TEXT dop_cr . . . . . . . . . . . . . P Near 288A _TEXT 004D Private dop55 . . . . . . . . . . . . L Near 28D0 _TEXT disbad4 . . . . . . . . . . . L Near 28A7 _TEXT L&_0168 . . . . . . . . . . . L Near 289B _TEXT L&_0169 . . . . . . . . . . . L Near 28CD _TEXT dop_farimm . . . . . . . . . . . P Near 28EB _TEXT 0021 Private L&_0170 . . . . . . . . . . . L Near 28FA _TEXT L&_0171 . . . . . . . . . . . L Near 2903 _TEXT dop_imm . . . . . . . . . . . . P Near 290C _TEXT 002C Private dop03 . . . . . . . . . . . . L Near 2931 _TEXT L&_0172 . . . . . . . . . . . L Near 291F _TEXT L&_0173 . . . . . . . . . . . L Near 292D _TEXT dop_relxx . . . . . . . . . . . P Near 2851 _TEXT 0039 Private dop_rel16 . . . . . . . . . . L Near 285E _TEXT dop_dispdwd . . . . . . . . . L Near 2875 _TEXT dop_sti . . . . . . . . . . . . P Near 28D7 _TEXT 0014 Private dumpregs . . . . . . . . . . . . P Near 2AD2 _TEXT 007D Private skipregs . . . . . . . . . . . L Near 2B1D _TEXT nextgrp . . . . . . . . . . . L Near 2AE8 _TEXT L&_0182 . . . . . . . . . . . L Near 2AE8 _TEXT L&_0183 . . . . . . . . . . . L Near 2AFD _TEXT dmpr1w . . . . . . . . . . . . L Near 2B27 _TEXT dmpr1d . . . . . . . . . . . . L Near 2B39 _TEXT dmpip . . . . . . . . . . . . L Near 2B24 _TEXT prepsr . . . . . . . . . . . . L Near 2B20 _TEXT dumpregsFPU . . . . . . . . . . P Near 2B4F _TEXT 00E9 Private isvalid . . . . . . . . . . . L Near 2BFB _TEXT noopc . . . . . . . . . . . . L Near 2B84 _TEXT regoutdone . . . . . . . . . . L Near 2C10 _TEXT L&_0188 . . . . . . . . . . . L Near 2C12 _TEXT nextst . . . . . . . . . . . . L Near 2BC8 _TEXT L&_0189 . . . . . . . . . . . L Near 2C23 _TEXT L&_0186 . . . . . . . . . . . L Near 2BFD _TEXT L&_0187 . . . . . . . . . . . L Near 2C0A _TEXT L&_0184 . . . . . . . . . . . L Near 2BA6 _TEXT L&_0185 . . . . . . . . . . . L Near 2BF7 _TEXT nextfpr . . . . . . . . . . . L Near 2B5E _TEXT fppm32 . . . . . . . . . . . . L Near 2BAE _TEXT fppm . . . . . . . . . . . . . L Near 2BA9 _TEXT nextfp . . . . . . . . . . . . L Near 2B87 _TEXT e_cmd . . . . . . . . . . . . . P Near 0E36 _TEXT 011C Private e_newline . . . . . . . . . . L Near 0F0A _TEXT ee1 . . . . . . . . . . . . . L Near 0E71 _TEXT ee9 . . . . . . . . . . . . . L Near 0EC4 _TEXT ee8 . . . . . . . . . . . . . L Near 0EBD _TEXT storebyte . . . . . . . . . . L Near 0F30 _TEXT e_bs . . . . . . . . . . . . . L Near 0EF7 _TEXT ee10 . . . . . . . . . . . . . L Near 0ED4 _TEXT e_done . . . . . . . . . . . . L Near 0F2D _TEXT e_nextl . . . . . . . . . . . L Near 0E78 _TEXT e_nextc . . . . . . . . . . . L Near 0EA3 _TEXT e_nextb . . . . . . . . . . . L Near 0E84 _TEXT e_spcr . . . . . . . . . . . . L Near 0F11 _TEXT e_minus . . . . . . . . . . . L Near 0F00 _TEXT L&_0058 . . . . . . . . . . . L Near 0EBC _TEXT L&_0059 . . . . . . . . . . . L Near 0ED0 _TEXT L&_0057 . . . . . . . . . . . L Near 0E5A _TEXT sb_done . . . . . . . . . . . L Near 0F51 _TEXT ems_err . . . . . . . . . . . . P Near 1C0B _TEXT 0028 Private ce2 . . . . . . . . . . . . . L Near 1C1E _TEXT emscall . . . . . . . . . . . . P Near 1C04 _TEXT 0007 Private ems_call_done . . . . . . . . L Near 1C06 _TEXT emschk . . . . . . . . . . . . . P Near 1C33 _TEXT 001C Private echk2 . . . . . . . . . . . . L Near 1C4A _TEXT emschk2 . . . . . . . . . . . L Near 1C40 _TEXT ensuredebuggeeloaded . . . . . . P Near 10D0 _TEXT 0017 Private L&_0064 . . . . . . . . . . . L Near 10E5 _TEXT f_cmd . . . . . . . . . . . . . P Near 0F52 _TEXT 0048 Private partial16 . . . . . . . . . . L Near 0F89 _TEXT nextcopy16 . . . . . . . . . . L Near 0F80 _TEXT onebyte16 . . . . . . . . . . L Near 0F8F _TEXT exit . . . . . . . . . . . . . L Near 0F97 _TEXT ff_01 . . . . . . . . . . . . L Near 0F5A _TEXT fillbuf . . . . . . . . . . . . P Near 1F6F _TEXT 0035 Private fb2 . . . . . . . . . . . . . L Near 1F9A _TEXT fb1 . . . . . . . . . . . . . L Near 1F99 _TEXT L&_0126 . . . . . . . . . . . L Near 1F77 _TEXT freemem . . . . . . . . . . . . P Near 1CCB _TEXT 002D Private fmem2 . . . . . . . . . . . . L Near 1CF3 _TEXT g_cmd . . . . . . . . . . . . . P Near 0FC4 _TEXT 0052 Private gg_parsebp_done . . . . . . . L Near 0FEB _TEXT _ret . . . . . . . . . . . . . L Near 1012 _TEXT gg_exit . . . . . . . . . . . L Near 1013 _TEXT nextbp . . . . . . . . . . . . L Near 0FCD _TEXT gg_ok . . . . . . . . . . . . L Near 100F _TEXT getaddr . . . . . . . . . . . . P Near 20E1 _TEXT 0019 Private ga3 . . . . . . . . . . . . . L Near 20F3 _TEXT ga2 . . . . . . . . . . . . . L Near 20F0 _TEXT getcseipbyte . . . . . . . . . . P Near 14A6 _TEXT 0010 Private getdword . . . . . . . . . . . . P Near 217C _TEXT 0029 Private done . . . . . . . . . . . . . L Near 21A4 _TEXT L&_0132 . . . . . . . . . . . L Near 219A _TEXT L&_0131 . . . . . . . . . . . L Near 2183 _TEXT nextchar . . . . . . . . . . . L Near 218C _TEXT getint2324 . . . . . . . . . . . P Near 1E45 _TEXT 0020 Private getlenforbx . . . . . . . . . . P Near 2095 _TEXT 000B Private glfbx_2 . . . . . . . . . . . L Near 209F _TEXT getline . . . . . . . . . . . . P Near 1EEC _TEXT 0083 Private gl6 . . . . . . . . . . . . . L Near 1F27 _TEXT gl5 . . . . . . . . . . . . . L Near 1F1A _TEXT rawinput . . . . . . . . . . . L Near 1F33 _TEXT rawnext . . . . . . . . . . . L Near 1F3A _TEXT del_key . . . . . . . . . . . L Near 1F65 _TEXT getofsforbx . . . . . . . . . . P Near 208C _TEXT 0006 Private getpsp . . . . . . . . . . . . . P Near 10B7 _TEXT 000E Private getrange . . . . . . . . . . . . P Near 20A4 _TEXT 003A Private gr3 . . . . . . . . . . . . . L Near 20D2 _TEXT gr2 . . . . . . . . . . . . . L Near 20BF _TEXT gr1 . . . . . . . . . . . . . L Near 20BC _TEXT gr4 . . . . . . . . . . . . . L Near 20DA _TEXT getrangeDS . . . . . . . . . . . P Near 20A0 _TEXT 0004 Private getregmem . . . . . . . . . . . P Near 2980 _TEXT 0016 Private L&_0175 . . . . . . . . . . . L Near 2992 _TEXT getregmem_r . . . . . . . . . . P Near 2976 _TEXT 000A Private getstr . . . . . . . . . . . . . P Near 20FA _TEXT 0032 Private gs3 . . . . . . . . . . . . . L Near 2113 _TEXT gs2 . . . . . . . . . . . . . L Near 2111 _TEXT gs1 . . . . . . . . . . . . . L Near 2101 _TEXT gs6 . . . . . . . . . . . . . L Near 2124 _TEXT gs5 . . . . . . . . . . . . . L Near 211F _TEXT gs4 . . . . . . . . . . . . . L Near 211C _TEXT getword . . . . . . . . . . . . P Near 21A8 _TEXT 000A Private h_cmd . . . . . . . . . . . . . P Near 1016 _TEXT 0044 Private hh32 . . . . . . . . . . . . . L Near 1026 _TEXT L&_0062 . . . . . . . . . . . L Near 1038 _TEXT L&_0063 . . . . . . . . . . . L Near 1052 _TEXT hexdword . . . . . . . . . . . . P Near 2C5C _TEXT 0009 Private hexword . . . . . . . . . . . . P Near 2C65 _TEXT 0007 Private hndlshow . . . . . . . . . . . . P Near 1C4F _TEXT 001A Private i_cmd . . . . . . . . . . . . . P Near 105A _TEXT 004D Private ii_4 . . . . . . . . . . . . . L Near 109E _TEXT ii_5 . . . . . . . . . . . . . L Near 10A3 _TEXT ii_1 . . . . . . . . . . . . . L Near 107E _TEXT ii_2 . . . . . . . . . . . . . L Near 1082 _TEXT ii_3 . . . . . . . . . . . . . L Near 1098 _TEXT initcode . . . . . . . . . . . . P Near 0120 _ITEXT 01F5 Private contparse . . . . . . . . . . L Near 026E _ITEXT init3 . . . . . . . . . . . . L Near 01BE _ITEXT init2 . . . . . . . . . . . . L Near 0259 _ITEXT init5 . . . . . . . . . . . . L Near 01C3 _ITEXT init7 . . . . . . . . . . . . L Near 0222 _ITEXT init6 . . . . . . . . . . . . L Near 01C9 _ITEXT L&_0204 . . . . . . . . . . . L Near 02CC _ITEXT L&_0205 . . . . . . . . . . . L Near 02F2 _ITEXT L&_0202 . . . . . . . . . . . L Near 0281 _ITEXT L&_0203 . . . . . . . . . . . L Near 028F _ITEXT L&_0200 . . . . . . . . . . . L Near 026B _ITEXT L&_0201 . . . . . . . . . . . L Near 026E _ITEXT doneoptions . . . . . . . . . L Near 029E _ITEXT nopatch . . . . . . . . . . . L Near 0240 _ITEXT L&_0198 . . . . . . . . . . . L Near 014A _ITEXT L&_0199 . . . . . . . . . . . L Near 022F _ITEXT L&_0197 . . . . . . . . . . . L Near 013C _ITEXT isntordos71 . . . . . . . . . L Near 0255 _ITEXT intrtn . . . . . . . . . . . . . P Near 1DDD _TEXT 0068 Private L&_0124 . . . . . . . . . . . L Near 1E44 _TEXT L&_0123 . . . . . . . . . . . L Near 1DFC _TEXT intrtnr . . . . . . . . . . . . P Near 1DBB _TEXT 0022 Private issymbol . . . . . . . . . . . . P Near 212C _TEXT 0050 Private notasymbol . . . . . . . . . . L Near 2177 _TEXT L&_0130 . . . . . . . . . . . L Near 2167 _TEXT iseip . . . . . . . . . . . . L Near 2171 _TEXT maybenotasymbol . . . . . . . L Near 2151 _TEXT getsymlow . . . . . . . . . . L Near 2149 _TEXT iswriteablecseip . . . . . . . . P Near 188F _TEXT 001C Private notwriteable . . . . . . . . . L Near 18A9 _TEXT l_cmd . . . . . . . . . . . . . P Near 10E7 _TEXT 003C Private ll1 . . . . . . . . . . . . . L Near 110D _TEXT ll0_1 . . . . . . . . . . . . L Near 1102 _TEXT ll0_2 . . . . . . . . . . . . L Near 1104 _TEXT l_err . . . . . . . . . . . . L Near 1120 _TEXT loadfile . . . . . . . . . . . . P Near 1123 _TEXT 0094 Private cl_exit . . . . . . . . . . . L Near 11B0 _TEXT ll7 . . . . . . . . . . . . . L Near 1164 _TEXT ll6 . . . . . . . . . . . . . L Near 115F _TEXT ll9 . . . . . . . . . . . . . L Near 1178 _TEXT noregmodify . . . . . . . . . L Near 118B _TEXT L&_0066 . . . . . . . . . . . L Near 1176 _TEXT L&_0065 . . . . . . . . . . . L Near 1135 _TEXT ll11 . . . . . . . . . . . . . L Near 119F _TEXT ll10 . . . . . . . . . . . . . L Near 1182 _TEXT loadpgm . . . . . . . . . . . . P Near 11C4 _TEXT 00BE Private L&_0070 . . . . . . . . . . . L Near 121F _TEXT L&_0068 . . . . . . . . . . . L Near 11E2 _TEXT L&_0069 . . . . . . . . . . . L Near 120E _TEXT L&_0067 . . . . . . . . . . . L Near 11D8 _TEXT m_cmd . . . . . . . . . . . . . P Near 12D5 _TEXT 005A Private ismove . . . . . . . . . . . . L Near 12F4 _TEXT L&_0074 . . . . . . . . . . . L Near 1328 _TEXT L&_0073 . . . . . . . . . . . L Near 12EF _TEXT m3 . . . . . . . . . . . . . . L Near 1317 _TEXT mach . . . . . . . . . . . . . . P Near 1282 _TEXT 001C Private L&_0071 . . . . . . . . . . . L Near 129D _TEXT mach_query . . . . . . . . . . . P Near 132F _TEXT 0033 Private L&_0076 . . . . . . . . . . . L Near 135C _TEXT L&_0075 . . . . . . . . . . . L Near 1340 _TEXT mc_cmd . . . . . . . . . . . . . P Near 12A1 _TEXT 0034 Private L&_0072 . . . . . . . . . . . L Near 12BE _TEXT set_mpc . . . . . . . . . . . L Near 12CB _TEXT moveover . . . . . . . . . . . . P Near 2A42 _TEXT 001E Private L&_0179 . . . . . . . . . . . L Near 2A4D _TEXT n_cmd . . . . . . . . . . . . . P Near 1362 _TEXT 0090 Private L&_0080 . . . . . . . . . . . L Near 13E4 _TEXT L&_0078 . . . . . . . . . . . L Near 13A1 _TEXT L&_0079 . . . . . . . . . . . L Near 13C2 _TEXT L&_0077 . . . . . . . . . . . L Near 1381 _TEXT nn3c . . . . . . . . . . . . . L Near 13B7 _TEXT nn3d . . . . . . . . . . . . . L Near 13B9 _TEXT notail . . . . . . . . . . . . L Near 13F1 _TEXT nn3 . . . . . . . . . . . . . L Near 1385 _TEXT nextc . . . . . . . . . . . . L Near 1368 _TEXT o_cmd . . . . . . . . . . . . . P Near 144B _TEXT 005B Private oo_2 . . . . . . . . . . . . . L Near 1473 _TEXT oo_1 . . . . . . . . . . . . . L Near 146F _TEXT oo_4 . . . . . . . . . . . . . L Near 148E _TEXT oo_5 . . . . . . . . . . . . . L Near 1498 _TEXT p_cmd . . . . . . . . . . . . . P Near 14E4 _TEXT 00CB Private getnextb . . . . . . . . . . . L Near 1588 _TEXT L&_0088 . . . . . . . . . . . L Near 1551 _TEXT L&_0086 . . . . . . . . . . . L Near 150B _TEXT L&_0087 . . . . . . . . . . . L Near 1516 _TEXT instrloop . . . . . . . . . . L Near 14E7 _TEXT back2top . . . . . . . . . . . L Near 1542 _TEXT nextprf . . . . . . . . . . . L Near 14EF _TEXT pp6 . . . . . . . . . . . . . L Near 1544 _TEXT pp5 . . . . . . . . . . . . . L Near 151C _TEXT dotrace . . . . . . . . . . . L Near 156A _TEXT addeip . . . . . . . . . . . . L Near 1585 _TEXT pp13 . . . . . . . . . . . . . L Near 157C _TEXT proceed2 . . . . . . . . . . . L Near 155F _TEXT proceed1 . . . . . . . . . . . L Near 1562 _TEXT proceed0 . . . . . . . . . . . L Near 1565 _TEXT pp15 . . . . . . . . . . . . . L Near 1580 _TEXT doproceed2 . . . . . . . . . . L Near 1590 _TEXT proceed4 . . . . . . . . . . . L Near 1559 _TEXT parse_pt . . . . . . . . . . . . P Near 2041 _TEXT 0018 Private L&_0128 . . . . . . . . . . . L Near 2058 _TEXT parsecm . . . . . . . . . . . . P Near 1FA4 _TEXT 0028 Private pc_01 . . . . . . . . . . . . L Near 1FB1 _TEXT parselw . . . . . . . . . . . . P Near 1FCF _TEXT 0072 Private plw3 . . . . . . . . . . . . . L Near 2029 _TEXT plw2 . . . . . . . . . . . . . L Near 2028 _TEXT L&_0127 . . . . . . . . . . . L Near 1FF3 _TEXT parseql . . . . . . . . . . . . P Near 2059 _TEXT 001A Private peq1 . . . . . . . . . . . . . L Near 206E _TEXT prephack . . . . . . . . . . . . P Near 1E65 _TEXT 001B Private L&_0125 . . . . . . . . . . . L Near 1E75 _TEXT q_cmd . . . . . . . . . . . . . P Near 15AF _TEXT 0036 Private norestore . . . . . . . . . . L Near 15D0 _TEXT nextint . . . . . . . . . . . L Near 15BB _TEXT r_cmd . . . . . . . . . . . . . P Near 1623 _TEXT 00FE Private L&_0093 . . . . . . . . . . . L Near 162A _TEXT rr1aX . . . . . . . . . . . . L Near 1711 _TEXT rr3 . . . . . . . . . . . . . L Near 169D _TEXT rr2 . . . . . . . . . . . . . L Near 1677 _TEXT rr6 . . . . . . . . . . . . . L Near 16CD _TEXT rr5 . . . . . . . . . . . . . L Near 16C8 _TEXT rr4 . . . . . . . . . . . . . L Near 16C1 _TEXT rr2a . . . . . . . . . . . . . L Near 1690 _TEXT rr2b . . . . . . . . . . . . . L Near 1697 _TEXT rr1a . . . . . . . . . . . . . L Near 166E _TEXT rr1b . . . . . . . . . . . . . L Near 1676 _TEXT rr1bX . . . . . . . . . . . . L Near 1720 _TEXT L&_0094 . . . . . . . . . . . L Near 1639 _TEXT readmem . . . . . . . . . . . . P Near 14DB _TEXT 0009 Private rn_cmd . . . . . . . . . . . . . P Near 160E _TEXT 0015 Private L&_0091 . . . . . . . . . . . L Near 1618 _TEXT L&_0092 . . . . . . . . . . . L Near 1622 _TEXT run . . . . . . . . . . . . . . P Near 1D09 _TEXT 0075 Private loadss . . . . . . . . . . . . L Near 1D56 _TEXT r0exit . . . . . . . . . . . . L Near 1D5C _TEXT L&_0120 . . . . . . . . . . . L Near 1D7C _TEXT L&_0118 . . . . . . . . . . . L Near 1D2A _TEXT L&_0119 . . . . . . . . . . . L Near 1D3F _TEXT rx_cmd . . . . . . . . . . . . . P Near 15E5 _TEXT 0029 Private L&_0090 . . . . . . . . . . . L Near 1609 _TEXT L&_0089 . . . . . . . . . . . L Near 15EF _TEXT rx_exit . . . . . . . . . . . L Near 160D _TEXT s_cmd . . . . . . . . . . . . . P Near 1725 _TEXT 0069 Private s_cont3 . . . . . . . . . . . L Near 177C _TEXT s_cont . . . . . . . . . . . . L Near 173D _TEXT sss3 . . . . . . . . . . . . . L Near 1762 _TEXT sss1 . . . . . . . . . . . . . L Near 1745 _TEXT displaypos . . . . . . . . . . L Near 1765 _TEXT L&_0096 . . . . . . . . . . . L Near 175E _TEXT L&_0095 . . . . . . . . . . . L Near 1752 _TEXT setbps . . . . . . . . . . . . . P Near 0F9D _TEXT 0027 Private setbps_ex . . . . . . . . . . L Near 0FAD _TEXT L&_0060 . . . . . . . . . . . L Near 0FB9 _TEXT L&_0061 . . . . . . . . . . . L Near 0FC3 _TEXT nextbp . . . . . . . . . . . . L Near 0FA4 _TEXT setcseipbyte . . . . . . . . . . P Near 14B6 _TEXT 0012 Private seteq . . . . . . . . . . . . . P Near 2073 _TEXT 0019 Private L&_0129 . . . . . . . . . . . L Near 208B _TEXT setespefl . . . . . . . . . . . P Near 11B7 _TEXT 000D Private setint2324 . . . . . . . . . . . P Near 1CF8 _TEXT 0011 Private setpsp . . . . . . . . . . . . . P Near 10A9 _TEXT 000E Private showmach . . . . . . . . . . . . P Near 2A73 _TEXT 005F Private sm3 . . . . . . . . . . . . . L Near 2AA8 _TEXT sm2 . . . . . . . . . . . . . L Near 2AA2 _TEXT sm4 . . . . . . . . . . . . . L Near 2AB4 _TEXT L&_0181 . . . . . . . . . . . L Near 2AD1 _TEXT is_cpu . . . . . . . . . . . . L Near 2A9B _TEXT showop . . . . . . . . . . . . . P Near 29B2 _TEXT 0017 Private L&_0176 . . . . . . . . . . . L Near 29B5 _TEXT L&_0177 . . . . . . . . . . . L Near 29C1 _TEXT showseg . . . . . . . . . . . . P Near 29A5 _TEXT 000D Private showsize . . . . . . . . . . . . P Near 29C9 _TEXT 0036 Private showwd . . . . . . . . . . . . L Near 29EB _TEXT showqwd . . . . . . . . . . . L Near 29EA _TEXT ssz3 . . . . . . . . . . . . . L Near 29F2 _TEXT showsizeop . . . . . . . . . . . P Near 2949 _TEXT 0022 Private L&_0174 . . . . . . . . . . . L Near 295E _TEXT sso_skip . . . . . . . . . . . L Near 296A _TEXT showsqreg32 . . . . . . . . . . P Near 2938 _TEXT 0011 Private stdout . . . . . . . . . . . . . P Near 2C93 _TEXT 0042 Private nooutput . . . . . . . . . . . L Near 2CB8 _TEXT donetab . . . . . . . . . . . L Near 2CB5 _TEXT nextchar . . . . . . . . . . . L Near 2CA8 _TEXT istab . . . . . . . . . . . . L Near 2CBA _TEXT L&_0192 . . . . . . . . . . . L Near 2CA3 _TEXT L&_0193 . . . . . . . . . . . L Near 2CCA _TEXT store2324 . . . . . . . . . . . P Near 1E80 _TEXT 0010 Private _ret . . . . . . . . . . . . . L Near 1E8F _TEXT sumshow . . . . . . . . . . . . P Near 1C69 _TEXT 0024 Private t_cmd . . . . . . . . . . . . . P Near 17C8 _TEXT 001C Private tt0 . . . . . . . . . . . . . L Near 17D3 _TEXT L&_0099 . . . . . . . . . . . L Near 17DC _TEXT tab_to . . . . . . . . . . . . . P Near 2A60 _TEXT 0013 Private L&_0180 . . . . . . . . . . . L Near 2A6B _TEXT tm_cmd . . . . . . . . . . . . . P Near 178E _TEXT 003A Private ismodeget . . . . . . . . . . L Near 17A7 _TEXT L&_0098 . . . . . . . . . . . L Near 17B4 _TEXT L&_0097 . . . . . . . . . . . L Near 17A0 _TEXT trace1 . . . . . . . . . . . . . P Near 17E4 _TEXT 00AB Private step_int_rm . . . . . . . . . L Near 183D _TEXT trace_int . . . . . . . . . . L Near 1824 _TEXT L&_0100 . . . . . . . . . . . L Near 1816 _TEXT useproceed . . . . . . . . . . L Near 182C _TEXT isstdtrace . . . . . . . . . . L Near 1800 _TEXT tt1_1 . . . . . . . . . . . . L Near 1820 _TEXT step_int . . . . . . . . . . . L Near 183B _TEXT isrom . . . . . . . . . . . . L Near 185E _TEXT trimhex . . . . . . . . . . . . P Near 1C8D _TEXT 0017 Private L&_0116 . . . . . . . . . . . L Near 1CA2 _TEXT L&_0115 . . . . . . . . . . . L Near 1C99 _TEXT u_cmd . . . . . . . . . . . . . P Near 18DE _TEXT 002E Private uuloop . . . . . . . . . . . . L Near 1900 _TEXT w_cmd . . . . . . . . . . . . . P Near 193B _TEXT 002C Private ww0_1 . . . . . . . . . . . . L Near 195F _TEXT ww0_2 . . . . . . . . . . . . L Near 1961 _TEXT waitkey . . . . . . . . . . . . P Near 0199 _TEXT 002F Private nowait . . . . . . . . . . . . L Near 01C7 _TEXT write_file . . . . . . . . . . . P Near 19A3 _TEXT 00AF Private L&_0106 . . . . . . . . . . . L Near 19F4 _TEXT L&_0107 . . . . . . . . . . . L Near 1A1D _TEXT L&_0104 . . . . . . . . . . . L Near 19C8 _TEXT L&_0105 . . . . . . . . . . . L Near 19EA _TEXT L&_0103 . . . . . . . . . . . L Near 19AF _TEXT ww13 . . . . . . . . . . . . . L Near 1A3F _TEXT ww11 . . . . . . . . . . . . . L Near 1A0A _TEXT ww14 . . . . . . . . . . . . . L Near 1A4D _TEXT ww7 . . . . . . . . . . . . . L Near 19B9 _TEXT exitwithmsg . . . . . . . . . L Near 19B6 _TEXT writeasm . . . . . . . . . . . . P Near 01C8 _TEXT 0005 Private writeasmn . . . . . . . . . . . P Near 01CD _TEXT 0009 Private L&_0005 . . . . . . . . . . . L Near 01CF _TEXT nowrite . . . . . . . . . . . L Near 01D5 _TEXT writemem . . . . . . . . . . . . P Near 14C8 _TEXT 0013 Private done . . . . . . . . . . . . . L Near 14D5 _TEXT err . . . . . . . . . . . . . L Near 14D9 _TEXT x_cmd . . . . . . . . . . . . . P Near 1ACF _TEXT 0037 Private xhelp . . . . . . . . . . . . L Near 1AFD _TEXT xa . . . . . . . . . . . . . . . P Near 1A9A _TEXT 001F Private L&_0110 . . . . . . . . . . . L Near 1AA8 _TEXT xd . . . . . . . . . . . . . . . P Near 1AB9 _TEXT 0016 Private xm . . . . . . . . . . . . . . . P Near 1B21 _TEXT 0034 Private xr . . . . . . . . . . . . . . . P Near 1B06 _TEXT 001B Private xs . . . . . . . . . . . . . . . P Near 1B55 _TEXT 00AF Private nexthdl . . . . . . . . . . . L Near 1B65 _TEXT xs3 . . . . . . . . . . . . . L Near 1B7F _TEXT xs2 . . . . . . . . . . . . . L Near 1B79 _TEXT xs7 . . . . . . . . . . . . . L Near 1BD5 _TEXT xs6 . . . . . . . . . . . . . L Near 1BAC _TEXT xs5 . . . . . . . . . . . . . L Near 1B96 _TEXT L&_0114 . . . . . . . . . . . L Near 1BFC _TEXT L&_0112 . . . . . . . . . . . L Near 1B8D _TEXT L&_0113 . . . . . . . . . . . L Near 1BD0 _TEXT L&_0111 . . . . . . . . . . . L Near 1B75 _TEXT Symbols: N a m e Type Value Attr ?DPMI . . . . . . . . . . . . . Number 0h ?PM . . . . . . . . . . . . . . Number 0h @VecAttr . . . . . . . . . . . . Text @dprintf . . . . . . . . . . . . Text ; ALTVID . . . . . . . . . . . . . Number 0h AMF_A32 . . . . . . . . . . . . Number 4h AMF_ADDR . . . . . . . . . . . . Number 80h AMF_D16 . . . . . . . . . . . . Number 40h AMF_D32 . . . . . . . . . . . . Number 1h AMF_FSGS . . . . . . . . . . . . Number 20h AMF_MSEG . . . . . . . . . . . . Number 10h AMF_SIB . . . . . . . . . . . . Number 8h AMF_WAIT . . . . . . . . . . . . Number 2h ARG_DEREF . . . . . . . . . . . Number 1h ARG_FARADDR . . . . . . . . . . Number 20h ARG_IMMED . . . . . . . . . . . Number 10h ARG_JUSTREG . . . . . . . . . . Number 4h ARG_MODRM . . . . . . . . . . . Number 2h ARG_WEIRDREG . . . . . . . . . . Number 8h ASMMOD . . . . . . . . . . . . . Number 4Ch ASM_AAX . . . . . . . . . . . . Number F7h ASM_D16 . . . . . . . . . . . . Number F8h ASM_D32 . . . . . . . . . . . . Number F9h ASM_DB . . . . . . . . . . . . . Number FEh ASM_DD . . . . . . . . . . . . . Number FCh ASM_DW . . . . . . . . . . . . . Number FDh ASM_END . . . . . . . . . . . . Number FFh ASM_LOCKABLE . . . . . . . . . . Number F4h ASM_LOCKREP . . . . . . . . . . Number F5h ASM_MACH0 . . . . . . . . . . . Number EDh ASM_MACH1 . . . . . . . . . . . Number EEh ASM_MACH2 . . . . . . . . . . . Number EFh ASM_MACH3 . . . . . . . . . . . Number F0h ASM_MACH4 . . . . . . . . . . . Number F1h ASM_MACH5 . . . . . . . . . . . Number F2h ASM_MACH6 . . . . . . . . . . . Number F3h ASM_OPOFF . . . . . . . . . . . Number 10h ASM_ORG . . . . . . . . . . . . Number FBh ASM_SEG . . . . . . . . . . . . Number F6h ASM_WAIT . . . . . . . . . . . . Number FAh AT_DEVICE . . . . . . . . . . . Number 80h BCMD . . . . . . . . . . . . . . Number 0h BOOTDBG . . . . . . . . . . . . Number 0h BPOFS . . . . . . . . . . . . . Text bp-2 BS . . . . . . . . . . . . . . . Number 8h CATCHEXC06 . . . . . . . . . . . Number 0h CATCHEXC07 . . . . . . . . . . . Number 0h CATCHEXC0C . . . . . . . . . . . Number 0h CATCHINT01 . . . . . . . . . . . Number 1h CATCHINT03 . . . . . . . . . . . Number 1h CATCHINT06 . . . . . . . . . . . Number 0h CATCHINT07 . . . . . . . . . . . Number 0h CATCHINT0C . . . . . . . . . . . Number 0h CATCHINT0D . . . . . . . . . . . Number 0h CATCHINT41 . . . . . . . . . . . Number 0h CATCHSYSREQ . . . . . . . . . . Number 0h CR . . . . . . . . . . . . . . . Number Dh CS32 . . . . . . . . . . . . . . Number 40h CURROFS . . . . . . . . . . . . L Near 703h ASMDATA DBGNAME . . . . . . . . . . . . Text "DEBUG" DBGNAME2 . . . . . . . . . . . . Text "Debug" DGCMD . . . . . . . . . . . . . Number 0h DICMD . . . . . . . . . . . . . Number 0h DIS_F_REPT . . . . . . . . . . . Number 1h DIS_F_SHOW . . . . . . . . . . . Number 2h DIS_I_KNOWSIZ . . . . . . . . . Number 20h DIS_I_MEMACC . . . . . . . . . . Number 80h DIS_I_SHOW . . . . . . . . . . . Number 4h DIS_I_SHOWSIZ . . . . . . . . . Number 10h DIS_I_UNUSED . . . . . . . . . . Number 8h DLCMD . . . . . . . . . . . . . Number 0h DMCMD . . . . . . . . . . . . . Number 1h DMPPFX . . . . . . . . . . . . . Text DM_COPR . . . . . . . . . . . . Number 1h DM_MMX . . . . . . . . . . . . . Number 2h DPCMD . . . . . . . . . . . . . Number 0h DPCMDR0 . . . . . . . . . . . . Number 0h DRIVER . . . . . . . . . . . . . Number 0h DTCMD . . . . . . . . . . . . . Number 0h DXCMD . . . . . . . . . . . . . Number 0h ENDCMD . . . . . . . . . . . . . Text 'x' EXC00MSG . . . . . . . . . . . . Number 0h EXC01MSG . . . . . . . . . . . . Number Fh EXC03MSG . . . . . . . . . . . . Number 32h EXCCSIP . . . . . . . . . . . . Number 0h EXT_COM . . . . . . . . . . . . Number 2h EXT_EXE . . . . . . . . . . . . Number 4h EXT_HEX . . . . . . . . . . . . Number 8h EXT_OTHER . . . . . . . . . . . Number 1h FLATSS . . . . . . . . . . . . . Number 0h FMTEXE . . . . . . . . . . . . . Number 0h GOTREGM . . . . . . . . . . . . Number 80h INT22 . . . . . . . . . . . . . Number 1h INT22MSG . . . . . . . . . . . . Number 54h INT2324 . . . . . . . . . . . . Number 1h INTVEC . . . . . . . . . . . . . Text DWORD I_SRC . . . . . . . . . . . . . Text InDos . . . . . . . . . . . . . L Near 1EB5h _TEXT L&_0101 . . . . . . . . . . . . L Near 18D1h _TEXT L&_0108 . . . . . . . . . . . . L Near 1A7Bh _TEXT L&_0109 . . . . . . . . . . . . L Near 1A8Ah _TEXT L&_0121 . . . . . . . . . . . . L Near 1DA6h _TEXT L&_0122 . . . . . . . . . . . . L Near 1DB5h _TEXT L&_0133 . . . . . . . . . . . . L Near 221Dh _TEXT L&_0196 . . . . . . . . . . . . L Near 20h _ITEXT LCMD . . . . . . . . . . . . . . Number 1h LCMDFILE . . . . . . . . . . . . Number 1h LF . . . . . . . . . . . . . . . Number Ah LINE_IN_LEN . . . . . . . . . . Number 101h LMODE . . . . . . . . . . . . . Number 0h MCLOPT . . . . . . . . . . . . . Number 1h MMXSUPP . . . . . . . . . . . . Number 0h MNEMONOFS . . . . . . . . . . . Number 1Ch MN_AAA . . . . . . . . . . . . . Number 2h MN_AAD . . . . . . . . . . . . . Number 7h MN_AAM . . . . . . . . . . . . . Number Ch MN_AAS . . . . . . . . . . . . . Number 11h MN_ADC . . . . . . . . . . . . . Number 16h MN_ADD . . . . . . . . . . . . . Number 1Bh MN_AND . . . . . . . . . . . . . Number 20h MN_ARPL . . . . . . . . . . . . Number 25h MN_BOUND . . . . . . . . . . . . Number 2Bh MN_BSF . . . . . . . . . . . . . Number 32h MN_BSR . . . . . . . . . . . . . Number 37h MN_BSWAP . . . . . . . . . . . . Number 3Ch MN_BT . . . . . . . . . . . . . Number 43h MN_BTC . . . . . . . . . . . . . Number 47h MN_BTR . . . . . . . . . . . . . Number 4Ch MN_BTS . . . . . . . . . . . . . Number 51h MN_CALL . . . . . . . . . . . . Number 56h MN_CBW . . . . . . . . . . . . . Number 5Ch MN_CDQ . . . . . . . . . . . . . Number 1A5h MN_CLC . . . . . . . . . . . . . Number 67h MN_CLD . . . . . . . . . . . . . Number 6Ch MN_CLI . . . . . . . . . . . . . Number 71h MN_CLTS . . . . . . . . . . . . Number 76h MN_CMC . . . . . . . . . . . . . Number 7Ch MN_CMOVA . . . . . . . . . . . . Number 81h MN_CMOVAE . . . . . . . . . . . Number 88h MN_CMOVB . . . . . . . . . . . . Number 90h MN_CMOVBE . . . . . . . . . . . Number 97h MN_CMOVC . . . . . . . . . . . . Number 9Fh MN_CMOVE . . . . . . . . . . . . Number A6h MN_CMOVG . . . . . . . . . . . . Number ADh MN_CMOVGE . . . . . . . . . . . Number B4h MN_CMOVL . . . . . . . . . . . . Number BCh MN_CMOVLE . . . . . . . . . . . Number C3h MN_CMOVNA . . . . . . . . . . . Number CBh MN_CMOVNAE . . . . . . . . . . . Number D3h MN_CMOVNB . . . . . . . . . . . Number DCh MN_CMOVNBE . . . . . . . . . . . Number E4h MN_CMOVNC . . . . . . . . . . . Number EDh MN_CMOVNE . . . . . . . . . . . Number F5h MN_CMOVNG . . . . . . . . . . . Number FDh MN_CMOVNGE . . . . . . . . . . . Number 105h MN_CMOVNL . . . . . . . . . . . Number 10Eh MN_CMOVNLE . . . . . . . . . . . Number 116h MN_CMOVNO . . . . . . . . . . . Number 11Fh MN_CMOVNP . . . . . . . . . . . Number 127h MN_CMOVNS . . . . . . . . . . . Number 12Fh MN_CMOVNZ . . . . . . . . . . . Number 137h MN_CMOVO . . . . . . . . . . . . Number 13Fh MN_CMOVP . . . . . . . . . . . . Number 146h MN_CMOVPE . . . . . . . . . . . Number 14Dh MN_CMOVPO . . . . . . . . . . . Number 155h MN_CMOVS . . . . . . . . . . . . Number 15Dh MN_CMOVZ . . . . . . . . . . . . Number 164h MN_CMP . . . . . . . . . . . . . Number 16Bh MN_CMPSB . . . . . . . . . . . . Number 170h MN_CMPSD . . . . . . . . . . . . Number 17Eh MN_CMPSW . . . . . . . . . . . . Number 177h MN_CMPXCHG . . . . . . . . . . . Number 185h MN_CMPXCHG8B . . . . . . . . . . Number 18Eh MN_CPUID . . . . . . . . . . . . Number 199h MN_CS . . . . . . . . . . . . . Number 803h MN_CWD . . . . . . . . . . . . . Number 1A0h MN_CWDE . . . . . . . . . . . . Number 61h MN_DAA . . . . . . . . . . . . . Number 1AAh MN_DAS . . . . . . . . . . . . . Number 1AFh MN_DB . . . . . . . . . . . . . Number 1B4h MN_DD . . . . . . . . . . . . . Number 1B8h MN_DEC . . . . . . . . . . . . . Number 1BCh MN_DIV . . . . . . . . . . . . . Number 1C1h MN_DS . . . . . . . . . . . . . Number 80Bh MN_DW . . . . . . . . . . . . . Number 1C6h MN_ENTER . . . . . . . . . . . . Number 1CAh MN_ES . . . . . . . . . . . . . Number 7FFh MN_F2XM1 . . . . . . . . . . . . Number 1D1h MN_FABS . . . . . . . . . . . . Number 1D8h MN_FADD . . . . . . . . . . . . Number 1DEh MN_FADDP . . . . . . . . . . . . Number 1E4h MN_FBLD . . . . . . . . . . . . Number 1F2h MN_FBSTP . . . . . . . . . . . . Number 1F8h MN_FCHS . . . . . . . . . . . . Number 1FFh MN_FCLEX . . . . . . . . . . . . Number 205h MN_FCMOVA . . . . . . . . . . . Number 214h MN_FCMOVAE . . . . . . . . . . . Number 21Ch MN_FCMOVB . . . . . . . . . . . Number 225h MN_FCMOVBE . . . . . . . . . . . Number 22Dh MN_FCMOVE . . . . . . . . . . . Number 236h MN_FCMOVNA . . . . . . . . . . . Number 23Eh MN_FCMOVNAE . . . . . . . . . . Number 247h MN_FCMOVNB . . . . . . . . . . . Number 251h MN_FCMOVNBE . . . . . . . . . . Number 25Ah MN_FCMOVNE . . . . . . . . . . . Number 264h MN_FCMOVNU . . . . . . . . . . . Number 26Dh MN_FCMOVNZ . . . . . . . . . . . Number 276h MN_FCMOVU . . . . . . . . . . . Number 27Fh MN_FCMOVZ . . . . . . . . . . . Number 287h MN_FCOM . . . . . . . . . . . . Number 28Fh MN_FCOMI . . . . . . . . . . . . Number 295h MN_FCOMIP . . . . . . . . . . . Number 29Ch MN_FCOMP . . . . . . . . . . . . Number 2A4h MN_FCOMPP . . . . . . . . . . . Number 2ABh MN_FCOS . . . . . . . . . . . . Number 2B3h MN_FDECSTP . . . . . . . . . . . Number 2B9h MN_FDISI . . . . . . . . . . . . Number 2C2h MN_FDIV . . . . . . . . . . . . Number 2D1h MN_FDIVP . . . . . . . . . . . . Number 2D7h MN_FDIVR . . . . . . . . . . . . Number 2E5h MN_FDIVRP . . . . . . . . . . . Number 2ECh MN_FENI . . . . . . . . . . . . Number 2FCh MN_FFREE . . . . . . . . . . . . Number 309h MN_FIADD . . . . . . . . . . . . Number 1EBh MN_FICOM . . . . . . . . . . . . Number 310h MN_FICOMP . . . . . . . . . . . Number 317h MN_FIDIV . . . . . . . . . . . . Number 2DEh MN_FIDIVR . . . . . . . . . . . Number 2F4h MN_FILD . . . . . . . . . . . . Number 31Fh MN_FIMUL . . . . . . . . . . . . Number 3B8h MN_FINCSTP . . . . . . . . . . . Number 325h MN_FINIT . . . . . . . . . . . . Number 32Eh MN_FIST . . . . . . . . . . . . Number 33Dh MN_FISTP . . . . . . . . . . . . Number 343h MN_FISUB . . . . . . . . . . . . Number 4ADh MN_FISUBR . . . . . . . . . . . Number 4C3h MN_FLD . . . . . . . . . . . . . Number 34Ah MN_FLD1 . . . . . . . . . . . . Number 34Fh MN_FLDCW . . . . . . . . . . . . Number 382h MN_FLDENV . . . . . . . . . . . Number 391h MN_FLDENVD . . . . . . . . . . . Number 3A2h MN_FLDENVW . . . . . . . . . . . Number 399h MN_FLDL2E . . . . . . . . . . . Number 35Dh MN_FLDL2T . . . . . . . . . . . Number 355h MN_FLDLG2 . . . . . . . . . . . Number 36Ch MN_FLDLN2 . . . . . . . . . . . Number 374h MN_FLDPI . . . . . . . . . . . . Number 365h MN_FLDZ . . . . . . . . . . . . Number 37Ch MN_FMUL . . . . . . . . . . . . Number 3ABh MN_FMULP . . . . . . . . . . . . Number 3B1h MN_FNCLEX . . . . . . . . . . . Number 20Ch MN_FNDISI . . . . . . . . . . . Number 2C9h MN_FNENI . . . . . . . . . . . . Number 302h MN_FNINIT . . . . . . . . . . . Number 335h MN_FNLDCW . . . . . . . . . . . Number 389h MN_FNOP . . . . . . . . . . . . Number 3BFh MN_FNSAVE . . . . . . . . . . . Number 40Dh MN_FNSETPM . . . . . . . . . . . Number 435h MN_FNSTCW . . . . . . . . . . . Number 466h MN_FNSTENV . . . . . . . . . . . Number 476h MN_FNSTSW . . . . . . . . . . . Number 498h MN_FPATAN . . . . . . . . . . . Number 3C5h MN_FPREM . . . . . . . . . . . . Number 3CDh MN_FPREM1 . . . . . . . . . . . Number 3D4h MN_FPTAN . . . . . . . . . . . . Number 3DCh MN_FRNDINT . . . . . . . . . . . Number 3E3h MN_FRSTOR . . . . . . . . . . . Number 3ECh MN_FRSTORD . . . . . . . . . . . Number 3FDh MN_FRSTORW . . . . . . . . . . . Number 3F4h MN_FS . . . . . . . . . . . . . Number 80Fh MN_FSAVE . . . . . . . . . . . . Number 406h MN_FSAVED . . . . . . . . . . . Number 41Dh MN_FSAVEW . . . . . . . . . . . Number 415h MN_FSCALE . . . . . . . . . . . Number 425h MN_FSETPM . . . . . . . . . . . Number 42Dh MN_FSIN . . . . . . . . . . . . Number 43Eh MN_FSINCOS . . . . . . . . . . . Number 444h MN_FSQRT . . . . . . . . . . . . Number 44Dh MN_FST . . . . . . . . . . . . . Number 454h MN_FSTCW . . . . . . . . . . . . Number 45Fh MN_FSTENV . . . . . . . . . . . Number 46Eh MN_FSTENVD . . . . . . . . . . . Number 488h MN_FSTENVW . . . . . . . . . . . Number 47Fh MN_FSTP . . . . . . . . . . . . Number 459h MN_FSTSW . . . . . . . . . . . . Number 491h MN_FSUB . . . . . . . . . . . . Number 4A0h MN_FSUBP . . . . . . . . . . . . Number 4A6h MN_FSUBR . . . . . . . . . . . . Number 4B4h MN_FSUBRP . . . . . . . . . . . Number 4BBh MN_FTST . . . . . . . . . . . . Number 4CBh MN_FUCOM . . . . . . . . . . . . Number 4D1h MN_FUCOMI . . . . . . . . . . . Number 4D8h MN_FUCOMIP . . . . . . . . . . . Number 4E0h MN_FUCOMP . . . . . . . . . . . Number 4E9h MN_FUCOMPP . . . . . . . . . . . Number 4F1h MN_FWAIT . . . . . . . . . . . . Number 4FAh MN_FXAM . . . . . . . . . . . . Number 501h MN_FXCH . . . . . . . . . . . . Number 507h MN_FXTRACT . . . . . . . . . . . Number 50Dh MN_FYL2X . . . . . . . . . . . . Number 516h MN_FYL2XP1 . . . . . . . . . . . Number 51Dh MN_GS . . . . . . . . . . . . . Number 813h MN_HLT . . . . . . . . . . . . . Number 526h MN_IDIV . . . . . . . . . . . . Number 52Bh MN_IMUL . . . . . . . . . . . . Number 531h MN_IN . . . . . . . . . . . . . Number 537h MN_INC . . . . . . . . . . . . . Number 53Bh MN_INSB . . . . . . . . . . . . Number 540h MN_INSD . . . . . . . . . . . . Number 54Ch MN_INSW . . . . . . . . . . . . Number 546h MN_INT . . . . . . . . . . . . . Number 552h MN_INTO . . . . . . . . . . . . Number 557h MN_INVD . . . . . . . . . . . . Number 55Dh MN_INVLPG . . . . . . . . . . . Number 563h MN_IRET . . . . . . . . . . . . Number 56Bh MN_IRETD . . . . . . . . . . . . Number 571h MN_JA . . . . . . . . . . . . . Number 578h MN_JAE . . . . . . . . . . . . . Number 57Ch MN_JB . . . . . . . . . . . . . Number 581h MN_JBE . . . . . . . . . . . . . Number 585h MN_JC . . . . . . . . . . . . . Number 58Ah MN_JCXZ . . . . . . . . . . . . Number 58Eh MN_JE . . . . . . . . . . . . . Number 59Bh MN_JECXZ . . . . . . . . . . . . Number 594h MN_JG . . . . . . . . . . . . . Number 59Fh MN_JGE . . . . . . . . . . . . . Number 5A3h MN_JL . . . . . . . . . . . . . Number 5A8h MN_JLE . . . . . . . . . . . . . Number 5ACh MN_JMP . . . . . . . . . . . . . Number 615h MN_JNA . . . . . . . . . . . . . Number 5B1h MN_JNAE . . . . . . . . . . . . Number 5B6h MN_JNB . . . . . . . . . . . . . Number 5BCh MN_JNBE . . . . . . . . . . . . Number 5C1h MN_JNC . . . . . . . . . . . . . Number 5C7h MN_JNE . . . . . . . . . . . . . Number 5CCh MN_JNG . . . . . . . . . . . . . Number 5D1h MN_JNGE . . . . . . . . . . . . Number 5D6h MN_JNL . . . . . . . . . . . . . Number 5DCh MN_JNLE . . . . . . . . . . . . Number 5E1h MN_JNO . . . . . . . . . . . . . Number 5E7h MN_JNP . . . . . . . . . . . . . Number 5ECh MN_JNS . . . . . . . . . . . . . Number 5F1h MN_JNZ . . . . . . . . . . . . . Number 5F6h MN_JO . . . . . . . . . . . . . Number 5FBh MN_JP . . . . . . . . . . . . . Number 5FFh MN_JPE . . . . . . . . . . . . . Number 603h MN_JPO . . . . . . . . . . . . . Number 608h MN_JS . . . . . . . . . . . . . Number 60Dh MN_JZ . . . . . . . . . . . . . Number 611h MN_LAHF . . . . . . . . . . . . Number 61Ah MN_LAR . . . . . . . . . . . . . Number 620h MN_LDS . . . . . . . . . . . . . Number 625h MN_LEA . . . . . . . . . . . . . Number 63Eh MN_LEAVE . . . . . . . . . . . . Number 643h MN_LES . . . . . . . . . . . . . Number 62Fh MN_LFS . . . . . . . . . . . . . Number 634h MN_LGDT . . . . . . . . . . . . Number 64Ah MN_LGS . . . . . . . . . . . . . Number 639h MN_LIDT . . . . . . . . . . . . Number 650h MN_LLDT . . . . . . . . . . . . Number 656h MN_LMSW . . . . . . . . . . . . Number 65Ch MN_LOCK . . . . . . . . . . . . Number 662h MN_LODSB . . . . . . . . . . . . Number 668h MN_LODSD . . . . . . . . . . . . Number 676h MN_LODSW . . . . . . . . . . . . Number 66Fh MN_LOOP . . . . . . . . . . . . Number 67Dh MN_LOOPD . . . . . . . . . . . . Number 68Ah MN_LOOPE . . . . . . . . . . . . Number 698h MN_LOOPED . . . . . . . . . . . Number 6A7h MN_LOOPEW . . . . . . . . . . . Number 69Fh MN_LOOPNE . . . . . . . . . . . Number 6C7h MN_LOOPNED . . . . . . . . . . . Number 6D8h MN_LOOPNEW . . . . . . . . . . . Number 6CFh MN_LOOPNZ . . . . . . . . . . . Number 6BFh MN_LOOPNZD . . . . . . . . . . . Number 6EAh MN_LOOPNZW . . . . . . . . . . . Number 6E1h MN_LOOPW . . . . . . . . . . . . Number 683h MN_LOOPZ . . . . . . . . . . . . Number 691h MN_LOOPZD . . . . . . . . . . . Number 6B7h MN_LOOPZW . . . . . . . . . . . Number 6AFh MN_LSL . . . . . . . . . . . . . Number 6F3h MN_LSS . . . . . . . . . . . . . Number 62Ah MN_LTR . . . . . . . . . . . . . Number 6F8h MN_MOV . . . . . . . . . . . . . Number 6FDh MN_MOVSB . . . . . . . . . . . . Number 702h MN_MOVSD . . . . . . . . . . . . Number 710h MN_MOVSW . . . . . . . . . . . . Number 709h MN_MOVSX . . . . . . . . . . . . Number 717h MN_MOVZX . . . . . . . . . . . . Number 71Eh MN_MUL . . . . . . . . . . . . . Number 725h MN_NEG . . . . . . . . . . . . . Number 72Ah MN_NOP . . . . . . . . . . . . . Number 72Fh MN_NOT . . . . . . . . . . . . . Number 734h MN_OR . . . . . . . . . . . . . Number 739h MN_ORG . . . . . . . . . . . . . Number 73Dh MN_OUT . . . . . . . . . . . . . Number 742h MN_OUTSB . . . . . . . . . . . . Number 747h MN_OUTSD . . . . . . . . . . . . Number 755h MN_OUTSW . . . . . . . . . . . . Number 74Eh MN_POP . . . . . . . . . . . . . Number 75Ch MN_POPA . . . . . . . . . . . . Number 761h MN_POPAD . . . . . . . . . . . . Number 767h MN_POPF . . . . . . . . . . . . Number 76Eh MN_POPFD . . . . . . . . . . . . Number 774h MN_PUSH . . . . . . . . . . . . Number 77Bh MN_PUSHA . . . . . . . . . . . . Number 781h MN_PUSHAD . . . . . . . . . . . Number 788h MN_PUSHF . . . . . . . . . . . . Number 790h MN_PUSHFD . . . . . . . . . . . Number 797h MN_RCL . . . . . . . . . . . . . Number 79Fh MN_RCR . . . . . . . . . . . . . Number 7A4h MN_RDMSR . . . . . . . . . . . . Number 7B3h MN_RDTSC . . . . . . . . . . . . Number 7BAh MN_REP . . . . . . . . . . . . . Number 7C1h MN_REPE . . . . . . . . . . . . Number 7C6h MN_REPNE . . . . . . . . . . . . Number 7CCh MN_RET . . . . . . . . . . . . . Number 7D3h MN_RETF . . . . . . . . . . . . Number 7D8h MN_RETFD . . . . . . . . . . . . Number 7DEh MN_ROL . . . . . . . . . . . . . Number 7A9h MN_ROR . . . . . . . . . . . . . Number 7AEh MN_RSM . . . . . . . . . . . . . Number 7E5h MN_SAHF . . . . . . . . . . . . Number 7EAh MN_SAL . . . . . . . . . . . . . Number 7F0h MN_SAR . . . . . . . . . . . . . Number 7F5h MN_SBB . . . . . . . . . . . . . Number 821h MN_SCASB . . . . . . . . . . . . Number 826h MN_SCASD . . . . . . . . . . . . Number 834h MN_SCASW . . . . . . . . . . . . Number 82Dh MN_SEG . . . . . . . . . . . . . Number 7FAh MN_SETA . . . . . . . . . . . . Number 83Bh MN_SETAE . . . . . . . . . . . . Number 841h MN_SETB . . . . . . . . . . . . Number 848h MN_SETBE . . . . . . . . . . . . Number 84Eh MN_SETC . . . . . . . . . . . . Number 855h MN_SETE . . . . . . . . . . . . Number 85Bh MN_SETG . . . . . . . . . . . . Number 861h MN_SETGE . . . . . . . . . . . . Number 867h MN_SETL . . . . . . . . . . . . Number 86Eh MN_SETLE . . . . . . . . . . . . Number 874h MN_SETNA . . . . . . . . . . . . Number 87Bh MN_SETNAE . . . . . . . . . . . Number 882h MN_SETNB . . . . . . . . . . . . Number 88Ah MN_SETNBE . . . . . . . . . . . Number 891h MN_SETNC . . . . . . . . . . . . Number 899h MN_SETNE . . . . . . . . . . . . Number 8A0h MN_SETNG . . . . . . . . . . . . Number 8A7h MN_SETNGE . . . . . . . . . . . Number 8AEh MN_SETNL . . . . . . . . . . . . Number 8B6h MN_SETNLE . . . . . . . . . . . Number 8BDh MN_SETNO . . . . . . . . . . . . Number 8C5h MN_SETNP . . . . . . . . . . . . Number 8CCh MN_SETNS . . . . . . . . . . . . Number 8D3h MN_SETNZ . . . . . . . . . . . . Number 8DAh MN_SETO . . . . . . . . . . . . Number 8E1h MN_SETP . . . . . . . . . . . . Number 8E7h MN_SETPE . . . . . . . . . . . . Number 8EDh MN_SETPO . . . . . . . . . . . . Number 8F4h MN_SETS . . . . . . . . . . . . Number 8FBh MN_SETZ . . . . . . . . . . . . Number 901h MN_SGDT . . . . . . . . . . . . Number 907h MN_SHL . . . . . . . . . . . . . Number 817h MN_SHLD . . . . . . . . . . . . Number 913h MN_SHR . . . . . . . . . . . . . Number 81Ch MN_SHRD . . . . . . . . . . . . Number 919h MN_SIDT . . . . . . . . . . . . Number 90Dh MN_SLDT . . . . . . . . . . . . Number 91Fh MN_SMSW . . . . . . . . . . . . Number 925h MN_SS . . . . . . . . . . . . . Number 807h MN_STC . . . . . . . . . . . . . Number 92Bh MN_STD . . . . . . . . . . . . . Number 930h MN_STI . . . . . . . . . . . . . Number 935h MN_STOSB . . . . . . . . . . . . Number 93Ah MN_STOSD . . . . . . . . . . . . Number 948h MN_STOSW . . . . . . . . . . . . Number 941h MN_STR . . . . . . . . . . . . . Number 94Fh MN_SUB . . . . . . . . . . . . . Number 954h MN_TEST . . . . . . . . . . . . Number 959h MN_VERR . . . . . . . . . . . . Number 95Fh MN_VERW . . . . . . . . . . . . Number 965h MN_WAIT . . . . . . . . . . . . Number 96Bh MN_WBINVD . . . . . . . . . . . Number 971h MN_WRMSR . . . . . . . . . . . . Number 979h MN_XADD . . . . . . . . . . . . Number 980h MN_XCHG . . . . . . . . . . . . Number 986h MN_XLAT . . . . . . . . . . . . Number 98Ch MN_XLATB . . . . . . . . . . . . Number 992h MN_XOR . . . . . . . . . . . . . Number 999h NOEXC01INDBG . . . . . . . . . . Number 1h NOEXTENDER . . . . . . . . . . . Number 0h NUMINTS . . . . . . . . . . . . Number 4h NUMREGNAMES . . . . . . . . . . Number 10h N_ALLREGS . . . . . . . . . . . Number 1Bh N_LOCK . . . . . . . . . . . . . Number 2Eh N_LTABA . . . . . . . . . . . . Number 6h N_LTABO . . . . . . . . . . . . Number 14h N_PREFIX . . . . . . . . . . . . Number Ah N_PRFXTAB . . . . . . . . . . . Number 9h N_REGS16 . . . . . . . . . . . . Number 8h N_REPALL . . . . . . . . . . . . Number 7h N_REPNC . . . . . . . . . . . . Number 5h N_SEGREGS . . . . . . . . . . . Number 6h N_WTAB . . . . . . . . . . . . . Number Bh OPLIST_00 . . . . . . . . . . . Number 0h OPLIST_01 . . . . . . . . . . . Number 0h OPLIST_02 . . . . . . . . . . . Number 2h OPLIST_03 . . . . . . . . . . . Number 4h OPLIST_04 . . . . . . . . . . . Number 6h OPLIST_05 . . . . . . . . . . . Number 8h OPLIST_06 . . . . . . . . . . . Number Ah OPLIST_07 . . . . . . . . . . . Number Ch OPLIST_08 . . . . . . . . . . . Number Eh OPLIST_09 . . . . . . . . . . . Number 10h OPLIST_0A . . . . . . . . . . . Number 11h OPLIST_0B . . . . . . . . . . . Number 13h OPLIST_0C . . . . . . . . . . . Number 15h OPLIST_0D . . . . . . . . . . . Number 16h OPLIST_0E . . . . . . . . . . . Number 17h OPLIST_0F . . . . . . . . . . . Number 18h OPLIST_10 . . . . . . . . . . . Number 19h OPLIST_11 . . . . . . . . . . . Number 1Ah OPLIST_12 . . . . . . . . . . . Number 1Bh OPLIST_13 . . . . . . . . . . . Number 1Dh OPLIST_14 . . . . . . . . . . . Number 1Eh OPLIST_15 . . . . . . . . . . . Number 1Fh OPLIST_16 . . . . . . . . . . . Number 21h OPLIST_17 . . . . . . . . . . . Number 23h OPLIST_18 . . . . . . . . . . . Number 26h OPLIST_19 . . . . . . . . . . . Number 27h OPLIST_1A . . . . . . . . . . . Number 28h OPLIST_1B . . . . . . . . . . . Number 29h OPLIST_1C . . . . . . . . . . . Number 2Ah OPLIST_1D . . . . . . . . . . . Number 2Ch OPLIST_1E . . . . . . . . . . . Number 2Dh OPLIST_1F . . . . . . . . . . . Number 2Eh OPLIST_20 . . . . . . . . . . . Number 31h OPLIST_21 . . . . . . . . . . . Number 34h OPLIST_22 . . . . . . . . . . . Number 37h OPLIST_23 . . . . . . . . . . . Number 3Ah OPLIST_24 . . . . . . . . . . . Number 3Ch OPLIST_25 . . . . . . . . . . . Number 3Eh OPLIST_26 . . . . . . . . . . . Number 3Fh OPLIST_27 . . . . . . . . . . . Number 40h OPLIST_28 . . . . . . . . . . . Number 41h OPLIST_29 . . . . . . . . . . . Number 42h OPLIST_2A . . . . . . . . . . . Number 43h OPLIST_2B . . . . . . . . . . . Number 45h OPLIST_2C . . . . . . . . . . . Number 47h OPLIST_2D . . . . . . . . . . . Number 49h OPLIST_2E . . . . . . . . . . . Number 4Bh OPLIST_2F . . . . . . . . . . . Number 4Dh OPLIST_30 . . . . . . . . . . . Number 4Fh OPLIST_31 . . . . . . . . . . . Number 52h OPLIST_32 . . . . . . . . . . . Number 55h OPLIST_33 . . . . . . . . . . . Number 57h OPLIST_34 . . . . . . . . . . . Number 59h OPLIST_35 . . . . . . . . . . . Number 5Ah OPLIST_36 . . . . . . . . . . . Number 5Bh OPLIST_37 . . . . . . . . . . . Number 5Dh OPLIST_38 . . . . . . . . . . . Number 5Fh OPLIST_39 . . . . . . . . . . . Number 61h OPLIST_3A . . . . . . . . . . . Number 63h OPLIST_3B . . . . . . . . . . . Number 64h OPLIST_3C . . . . . . . . . . . Number 65h OPLIST_3D . . . . . . . . . . . Number 68h OPLIST_3E . . . . . . . . . . . Number 6Bh OPLIST_3F . . . . . . . . . . . Number 6Dh OPLIST_40 . . . . . . . . . . . Number 6Fh OPLIST_41 . . . . . . . . . . . Number 70h OPLIST_42 . . . . . . . . . . . Number 71h OPLIST_43 . . . . . . . . . . . Number 72h OPLIST_44 . . . . . . . . . . . Number 73h OPLIST_45 . . . . . . . . . . . Number 74h OPLIST_46 . . . . . . . . . . . Number 75h OPLIST_47 . . . . . . . . . . . Number 77h OPLIST_48 . . . . . . . . . . . Number 79h OPLIST_49 . . . . . . . . . . . Number 7Bh OPLIST_4A . . . . . . . . . . . Number 7Dh OPLIST_4B . . . . . . . . . . . Number 7Fh OPTYPES_BASE . . . . . . . . . . Number Ch OP_1 . . . . . . . . . . . . . . Number 28h OP_16 . . . . . . . . . . . . . Number 70h OP_1632 . . . . . . . . . . . . Number 50h OP_1CHK . . . . . . . . . . . . Number 14h OP_3 . . . . . . . . . . . . . . Number 2Ah OP_32 . . . . . . . . . . . . . Number 80h OP_64 . . . . . . . . . . . . . Number 90h OP_8 . . . . . . . . . . . . . . Number 60h OP_ALL . . . . . . . . . . . . . Number 40h OP_AX . . . . . . . . . . . . . Number Eh OP_CL . . . . . . . . . . . . . Number 2Eh OP_CR . . . . . . . . . . . . . Number 18h OP_CS . . . . . . . . . . . . . Number 32h OP_DR . . . . . . . . . . . . . Number 1Ah OP_DS . . . . . . . . . . . . . Number 34h OP_DX . . . . . . . . . . . . . Number 2Ch OP_ES . . . . . . . . . . . . . Number 36h OP_FARIMM . . . . . . . . . . . Number Eh OP_FARMEM . . . . . . . . . . . Number Ch OP_FS . . . . . . . . . . . . . Number 38h OP_GS . . . . . . . . . . . . . Number 3Ah OP_IMM . . . . . . . . . . . . . Number 0h OP_IMM8 . . . . . . . . . . . . Number 22h OP_IMMS8 . . . . . . . . . . . . Number 20h OP_M . . . . . . . . . . . . . . Number 4h OP_M64 . . . . . . . . . . . . . Number 2h OP_M80 . . . . . . . . . . . . . Number 8h OP_MDOUBLE . . . . . . . . . . . Number 6h OP_MFLOAT . . . . . . . . . . . Number 4h OP_MMX . . . . . . . . . . . . . Number 24h OP_MOFFS . . . . . . . . . . . . Number 8h OP_MXX . . . . . . . . . . . . . Number Ah OP_R . . . . . . . . . . . . . . Number Ah OP_REL1632 . . . . . . . . . . . Number 12h OP_REL8 . . . . . . . . . . . . Number 10h OP_RM . . . . . . . . . . . . . Number 2h OP_R_ADD . . . . . . . . . . . . Number Ch OP_R_MOD . . . . . . . . . . . . Number 6h OP_SEGREG . . . . . . . . . . . Number 1Eh OP_SHOSIZ . . . . . . . . . . . Number 26h OP_SIZE . . . . . . . . . . . . Number 40h OP_SS . . . . . . . . . . . . . Number 3Ch OP_ST . . . . . . . . . . . . . Number 30h OP_STI . . . . . . . . . . . . . Number 16h OP_STR . . . . . . . . . . . . . Number 28h OP_TR . . . . . . . . . . . . . Number 1Ch P186 . . . . . . . . . . . . . . Number 1000h P286 . . . . . . . . . . . . . . Number 2000h P386 . . . . . . . . . . . . . . Number 3000h P486 . . . . . . . . . . . . . . Number 4000h P586 . . . . . . . . . . . . . . Number 5000h P686 . . . . . . . . . . . . . . Number 6000h PPLEN . . . . . . . . . . . . . Number 1Fh PP_ADRSIZ . . . . . . . . . . . Number 1h PP_OPSIZ . . . . . . . . . . . . Number 2h PP_PREFIX . . . . . . . . . . . Number 80h PP_VARSIZ . . . . . . . . . . . Number 40h PRE32A . . . . . . . . . . . . . Number 20h PRE32D . . . . . . . . . . . . . Number 10h PRELOCK . . . . . . . . . . . . Number 8h PREREP . . . . . . . . . . . . . Number 2h PREREPZ . . . . . . . . . . . . Number 4h PRESEG . . . . . . . . . . . . . Number 1h PREWAIT . . . . . . . . . . . . Number 40h QCMD . . . . . . . . . . . . . . Number 1h REDIRECT . . . . . . . . . . . . Number 1h REG_AH . . . . . . . . . . . . . Number 4h REG_AL . . . . . . . . . . . . . Number 0h REG_AX . . . . . . . . . . . . . Number 8h REG_BH . . . . . . . . . . . . . Number 7h REG_BL . . . . . . . . . . . . . Number 3h REG_BP . . . . . . . . . . . . . Number Dh REG_BX . . . . . . . . . . . . . Number Bh REG_CH . . . . . . . . . . . . . Number 5h REG_CL . . . . . . . . . . . . . Number 1h REG_CR . . . . . . . . . . . . . Number 20h REG_CS . . . . . . . . . . . . . Number 19h REG_CX . . . . . . . . . . . . . Number 9h REG_DH . . . . . . . . . . . . . Number 6h REG_DI . . . . . . . . . . . . . Number Fh REG_DL . . . . . . . . . . . . . Number 2h REG_DR . . . . . . . . . . . . . Number 21h REG_DS . . . . . . . . . . . . . Number 1Bh REG_DX . . . . . . . . . . . . . Number Ah REG_ES . . . . . . . . . . . . . Number 18h REG_FS . . . . . . . . . . . . . Number 1Ch REG_GS . . . . . . . . . . . . . Number 1Dh REG_MM . . . . . . . . . . . . . Number 1Fh REG_NO_GPR . . . . . . . . . . . Number 18h REG_SI . . . . . . . . . . . . . Number Eh REG_SP . . . . . . . . . . . . . Number Ch REG_SS . . . . . . . . . . . . . Number 1Ah REG_ST . . . . . . . . . . . . . Number 1Eh REG_TR . . . . . . . . . . . . . Number 22h RING0 . . . . . . . . . . . . . Number 0h RM_386REGS . . . . . . . . . . . Number 1h SFPGROUP3 . . . . . . . . . . . Number 320h SFPGROUPS . . . . . . . . . . . Number 308h SIZ_BYTE . . . . . . . . . . . . Number 1h SIZ_DOUBLE . . . . . . . . . . . Number 7h SIZ_DWORD . . . . . . . . . . . Number 4h SIZ_FAR . . . . . . . . . . . . Number Ch SIZ_FLOAT . . . . . . . . . . . Number 6h SIZ_LONG . . . . . . . . . . . . Number Ah SIZ_NEAR . . . . . . . . . . . . Number Bh SIZ_NONE . . . . . . . . . . . . Number 0h SIZ_QWORD . . . . . . . . . . . Number 5h SIZ_SHORT . . . . . . . . . . . Number 9h SIZ_TBYTE . . . . . . . . . . . Number 8h SIZ_WORD . . . . . . . . . . . . Number 2h SKIPBPINDBG . . . . . . . . . . Number 1h SPARSE_BASE . . . . . . . . . . Number 1E0h STACKSIZ . . . . . . . . . . . . Number 200h SYSRQINT . . . . . . . . . . . . Number 9h TAB . . . . . . . . . . . . . . Number 9h TOLOWER . . . . . . . . . . . . Number 20h TOUPPER . . . . . . . . . . . . Number DFh TOUPPER_W . . . . . . . . . . . Number DFDFh USEFP2STR . . . . . . . . . . . Number 0h USEHWBP . . . . . . . . . . . . Number 0h USESDA . . . . . . . . . . . . . Number 1h USEUNREAL . . . . . . . . . . . Number 0h V86M . . . . . . . . . . . . . . Number 0h VAR_D16 . . . . . . . . . . . . Number 20h VAR_D32 . . . . . . . . . . . . Number 40h VAR_LOCKABLE . . . . . . . . . . Number 1h VAR_MODRM . . . . . . . . . . . Number 2h VAR_SIZ_FORCD . . . . . . . . . Number 8h VAR_SIZ_GIVN . . . . . . . . . . Number 4h VAR_SIZ_NEED . . . . . . . . . . Number 10h VDD . . . . . . . . . . . . . . Number 0h VERSION . . . . . . . . . . . . Text 2.50 VXCHG . . . . . . . . . . . . . Number 0h VXCMD . . . . . . . . . . . . . Number 0h WCMD . . . . . . . . . . . . . . Number 1h WCMDFILE . . . . . . . . . . . . Number 1h XCMDS . . . . . . . . . . . . . Number 1h a_addr . . . . . . . . . . . . . Word[3] 3Eh _DATA a_obstab . . . . . . . . . . . . Word[5] 13F1h CONST a_opcode . . . . . . . . . . . . Word CEh _DATA a_opcode2 . . . . . . . . . . . Word D0h _DATA aa_saved_prefix . . . . . . . . Byte CAh _DATA aa_seg_pre . . . . . . . . . . . Byte CBh _DATA aadbsto . . . . . . . . . . . . Word[3] 145Fh CONST aam_args . . . . . . . . . . . . Byte[2] 1410h CONST addrr . . . . . . . . . . . . . Word E6h _DATA agroups . . . . . . . . . . . . Word 9ECh CONST ai . . . . . . . . . . . . . . . AINSTR D2h _DATA ainfo . . . . . . . . . . . . . Number EDDh asm_jmp1 . . . . . . . . . . . . Word 1466h CONST asm_mn_flags . . . . . . . . . . Byte C8h _DATA asm_regnum . . . . . . . . . . . Byte 1438h CONST asm_siznum . . . . . . . . . . . Byte[4] 1459h CONST asmtab . . . . . . . . . . . . . Byte 0h ASMDATA bEndOplItem . . . . . . . . . . Byte C9h _DATA bInDbg . . . . . . . . . . . . . Byte 32h _DATA bInit . . . . . . . . . . . . . Byte 5Bh _DATA bInstr . . . . . . . . . . . . . Byte ECh _DATA bittab . . . . . . . . . . . . . Byte 1412h CONST bp_writeerr . . . . . . . . . . L Near 15A6h _TEXT bufend . . . . . . . . . . . . . Word 3Ch _DATA bufnext . . . . . . . . . . . . Word 3Ah _DATA cantwritebp . . . . . . . . . . Byte[25] 5FBh CONST chkeol . . . . . . . . . . . . . L Near 21D4h _TEXT cmdlist . . . . . . . . . . . . Word 0h CONST cntpatch . . . . . . . . . . . . Number 11h crlf . . . . . . . . . . . . . . Byte[2] 3EAh CONST curreip . . . . . . . . . . . . L Near 2C32h _TEXT dEmpty . . . . . . . . . . . . . Byte[5] 1D1Ah CONST dNaN . . . . . . . . . . . . . . Byte[3] 1D1Fh CONST d_addr . . . . . . . . . . . . . Word[3] 44h _DATA da13a . . . . . . . . . . . . . L Near 22E6h _TEXT dd16 . . . . . . . . . . . . . . DMPJT 14B2h CONST dis_jmp1 . . . . . . . . . . . . Word 1C5Eh CONST dis_jmp2 . . . . . . . . . . . . Word 1CAAh CONST dis_n . . . . . . . . . . . . . Word E0h _DATA dis_optab . . . . . . . . . . . Word 1C6Eh CONST disasm1 . . . . . . . . . . . . L Near 221Eh _TEXT disflags . . . . . . . . . . . . Byte EFh _DATA disflags2 . . . . . . . . . . . Byte F0h _DATA diskful . . . . . . . . . . . . Byte[12] 66Fh CONST dmycmd . . . . . . . . . . . . . L Near 180h _TEXT dop_dr . . . . . . . . . . . . . L Near 28AAh _TEXT dop_mmx . . . . . . . . . . . . L Near 28B5h _TEXT dop_rel1632 . . . . . . . . . . L Near 2869h _TEXT dop_rel8 . . . . . . . . . . . . L Near 2851h _TEXT dop_tr . . . . . . . . . . . . . L Near 28BDh _TEXT doproceed1 . . . . . . . . . . . L Near 1594h _TEXT doscall . . . . . . . . . . . . L Near 10C5h _TEXT doscall_rm . . . . . . . . . . . L Near 10C5h _TEXT doserr2 . . . . . . . . . . . . Byte[17] 695h CONST doserr3 . . . . . . . . . . . . Byte[17] 6A6h CONST doserr5 . . . . . . . . . . . . Byte[16] 6B7h CONST doserr8 . . . . . . . . . . . . Byte[22] 6C7h CONST driveno . . . . . . . . . . . . Byte[2] 4D2h CONST dskerr0 . . . . . . . . . . . . Byte[20] 3FAh CONST dskerr1 . . . . . . . . . . . . Byte[19] 40Eh CONST dskerr2 . . . . . . . . . . . . Byte[16] 421h CONST dskerr3 . . . . . . . . . . . . Byte[16] 431h CONST dskerr4 . . . . . . . . . . . . Byte[17] 441h CONST dskerr6 . . . . . . . . . . . . Byte[11] 452h CONST dskerr7 . . . . . . . . . . . . Byte[19] 45Dh CONST dskerr8 . . . . . . . . . . . . Byte[17] 470h CONST dskerr9 . . . . . . . . . . . . Byte[14] 481h CONST dskerra . . . . . . . . . . . . Byte[12] 48Fh CONST dskerrb . . . . . . . . . . . . Byte[11] 49Bh CONST dskerrc . . . . . . . . . . . . Byte[16] 4A6h CONST dskerrs . . . . . . . . . . . . Byte[2] 4B6h CONST ee0a . . . . . . . . . . . . . . L Near E63h _TEXT ems_err3 . . . . . . . . . . . . L Near 1C27h _TEXT emserr1 . . . . . . . . . . . . Byte[19] 6EFh CONST emserr3 . . . . . . . . . . . . Byte[17] 702h CONST emserr5 . . . . . . . . . . . . Byte[16] 713h CONST emserr7 . . . . . . . . . . . . Byte[21] 723h CONST emserr8 . . . . . . . . . . . . Byte[20] 738h CONST emserr9 . . . . . . . . . . . . Byte[16] 74Ch CONST emserra . . . . . . . . . . . . Byte[26] 75Ch CONST emserrb . . . . . . . . . . . . Byte[27] 776h CONST emserrs . . . . . . . . . . . . Word[10] 79Eh CONST emserrx . . . . . . . . . . . . Byte[10] 791h CONST emserrxa . . . . . . . . . . . . Byte[3] 79Bh CONST emsnot . . . . . . . . . . . . . Byte[18] 6DDh CONST end_mnlist . . . . . . . . . . . Byte 13A4h CONST endoftext16 . . . . . . . . . . Byte 2D70h _TEXT eqflag . . . . . . . . . . . . . Byte 5Ah _DATA eqladdr . . . . . . . . . . . . Word[3] 50h _DATA errcarat . . . . . . . . . . . . Byte[7] 3F3h CONST errorj10 . . . . . . . . . . . . L Near 2092h _TEXT errorj2 . . . . . . . . . . . . L Near 20DEh _TEXT errorj3 . . . . . . . . . . . . L Near 129Eh _TEXT errorj4 . . . . . . . . . . . . L Near E33h _TEXT errorj6 . . . . . . . . . . . . L Near 21A5h _TEXT errorj7 . . . . . . . . . . . . L Near 1FCCh _TEXT errorj8 . . . . . . . . . . . . L Near 21DCh _TEXT errorj9 . . . . . . . . . . . . L Near 1722h _TEXT errret . . . . . . . . . . . . . Word 4h _DATA execblk . . . . . . . . . . . . EXECS 78h _DATA exts . . . . . . . . . . . . . . Byte 14BAh CONST extsend . . . . . . . . . . . . L Near 14C9h CONST fStdin . . . . . . . . . . . . . Byte 33h _DATA fStdout . . . . . . . . . . . . Byte 34h _DATA fileext . . . . . . . . . . . . Byte 5Ch _DATA flgbits . . . . . . . . . . . . Word[8] 7Ch CONST flgnams . . . . . . . . . . . . Byte[16] 8Ch CONST flgnons . . . . . . . . . . . . Byte[16] 9Ch CONST fregnames . . . . . . . . . . . Byte 1D0Ah CONST fullbsout . . . . . . . . . . . L Near 1ED0h _TEXT getbyte . . . . . . . . . . . . L Near 21B2h _TEXT getline0 . . . . . . . . . . . . L Near 1EDEh _TEXT getline00 . . . . . . . . . . . L Near 1EE5h _TEXT getnyb . . . . . . . . . . . . . L Near 21BAh _TEXT gg_1 . . . . . . . . . . . . . . L Near FEEh _TEXT gn1 . . . . . . . . . . . . . . L Near 21CDh _TEXT gn2 . . . . . . . . . . . . . . L Near 21D1h _TEXT hakstat . . . . . . . . . . . . Byte 2Ch _DATA has_287 . . . . . . . . . . . . Byte[10] 507h CONST has_87 . . . . . . . . . . . . . Byte 30h _DATA has_copr . . . . . . . . . . . . Byte[18] 4F5h CONST helpmsg . . . . . . . . . . . . Byte[13] EDh CONST helpmsg2 . . . . . . . . . . . . Byte 334h CONST hexbyte . . . . . . . . . . . . L Near 2C6Ch _TEXT hexnyb . . . . . . . . . . . . . L Near 2C77h _TEXT idxins . . . . . . . . . . . . . Word E4h _DATA ifsep . . . . . . . . . . . . . L Near 220Bh _TEXT imsg1 . . . . . . . . . . . . . Byte[21] 23h _ITEXT imsg2 . . . . . . . . . . . . . Byte[17] 10Bh _ITEXT imsg2a . . . . . . . . . . . . . Byte[4] 11Ch _ITEXT inceip . . . . . . . . . . . . . L Near 1583h _TEXT initcont . . . . . . . . . . . . L Near 0h _ITEXT int0msg . . . . . . . . . . . . Byte[15] 580h CONST int1msg . . . . . . . . . . . . Byte[35] 58Fh CONST int21ah9 . . . . . . . . . . . . L Near 1A7Bh _TEXT int3msg . . . . . . . . . . . . Byte[34] 5B2h CONST intr00 . . . . . . . . . . . . . L Near 1D8Eh _TEXT intr01 . . . . . . . . . . . . . L Near 1D96h _TEXT intr03 . . . . . . . . . . . . . L Near 1DA7h _TEXT intr22 . . . . . . . . . . . . . L Near 1D7Eh _TEXT intr22dbg . . . . . . . . . . . L Near 103h _TEXT intrtn1 . . . . . . . . . . . . L Near 1E11h _TEXT intrtn_progtrm . . . . . . . . . L Near 1DCBh _TEXT intsave . . . . . . . . . . . . DWord 68h _DATA inttab . . . . . . . . . . . . . INTITEM 30h CONST io_error . . . . . . . . . . . . L Near 1A52h _TEXT isdebuggeeloaded . . . . . . . . L Near 10C8h _TEXT lastcmd . . . . . . . . . . . . Word 56h _DATA line_in . . . . . . . . . . . . Byte[3] F1h _DATA line_out . . . . . . . . . . . . Byte 1F3h _DATA lockdrive . . . . . . . . . . . L Near 190Ch _TEXT locktab . . . . . . . . . . . . Word 1BA0h CONST ltaba1 . . . . . . . . . . . . . Word[6] 1B88h CONST ltaba2 . . . . . . . . . . . . . Word 1B94h CONST ltabo1 . . . . . . . . . . . . . Word[8] 1B38h CONST ltabo2 . . . . . . . . . . . . . Word 1B60h CONST mach_87 . . . . . . . . . . . . Byte 31h _DATA machine . . . . . . . . . . . . Byte 2Dh _DATA mneminfo . . . . . . . . . . . . Word CCh _DATA mnlist . . . . . . . . . . . . . Byte A08h CONST modrmtab . . . . . . . . . . . . Byte[8] 1400h CONST msg8088 . . . . . . . . . . . . Byte[8] 4D4h CONST msgx86 . . . . . . . . . . . . . Byte[4] 4DCh CONST needsmath . . . . . . . . . . . Byte[24] 55Eh CONST needsmsg . . . . . . . . . . . . Byte[11] 553h CONST no_copr . . . . . . . . . . . . Byte[21] 4E0h CONST nowhexe . . . . . . . . . . . . Byte[38] 614h CONST nownull . . . . . . . . . . . . Byte[35] 63Ah CONST obsinst . . . . . . . . . . . . Word[3] 1BFCh CONST obsmach . . . . . . . . . . . . Byte[5] 13FBh CONST obsolete . . . . . . . . . . . . Byte[10] 576h CONST oldi00 . . . . . . . . . . . . . DWord 68h _DATA oldi01 . . . . . . . . . . . . . DWord 6Ch _DATA oldi03 . . . . . . . . . . . . . DWord 70h _DATA openerr . . . . . . . . . . . . Byte[6] 67Bh CONST openerr1 . . . . . . . . . . . . Byte[20] 681h CONST opidx . . . . . . . . . . . . . Number 4Ch opindex . . . . . . . . . . . . Byte 13A4h CONST opinfo . . . . . . . . . . . . . Word 14F0h CONST oplists . . . . . . . . . . . . Byte 96Bh CONST optypes . . . . . . . . . . . . Byte 0h OTDATA pInDOS . . . . . . . . . . . . . DWord 24h _DATA pSDA . . . . . . . . . . . . . . DWord 28h _DATA packet . . . . . . . . . . . . . PACKET 5Eh _DATA parent . . . . . . . . . . . . . Word 20h _DATA patch_iret . . . . . . . . . . . Byte 1D7Ch _TEXT patch_movsp . . . . . . . . . . Byte 1D57h _TEXT patches . . . . . . . . . . . . Word 0h _IDATA ph_msg . . . . . . . . . . . . . Byte[38] 14C9h CONST ppbytes . . . . . . . . . . . . Byte[10] ACh CONST ppinfo . . . . . . . . . . . . . Byte[10] CBh CONST prefixlist . . . . . . . . . . . Byte[6] 1C4Ch CONST prefixmnem . . . . . . . . . . . Word[4] 1C56h CONST preflags . . . . . . . . . . . . Byte EAh _DATA presskey . . . . . . . . . . . . Byte[6] 3EDh CONST preused . . . . . . . . . . . . Byte EBh _DATA prfxtab . . . . . . . . . . . . Byte[9] 95Bh CONST printhelp . . . . . . . . . . . L Near 181h _TEXT progexit . . . . . . . . . . . . Byte[8] 5F3h CONST progtrm . . . . . . . . . . . . Byte[31] 5D4h CONST prompt1 . . . . . . . . . . . . Byte EBh CONST prompt2 . . . . . . . . . . . . Byte ECh CONST promptlen . . . . . . . . . . . Word 38h _DATA psp22 . . . . . . . . . . . . . Word[2] 1Ch _DATA pspdbe . . . . . . . . . . . . . Word 8h _DATA pspdbg . . . . . . . . . . . . . Word Ah _DATA puts . . . . . . . . . . . . . . L Near 2C8Ch _TEXT putsline . . . . . . . . . . . . L Near 2C88h _TEXT real_end . . . . . . . . . . . . Byte 2FBh _DATA regfmt16 . . . . . . . . . . . . FMTITEM[5] 1CECh CONST regfmt32 . . . . . . . . . . . . FMTITEM 1CFBh CONST regnames . . . . . . . . . . . . Byte[32] 3Ch CONST regofs . . . . . . . . . . . . . Word[16] 5Ch CONST regs . . . . . . . . . . . . . . REGS 90h _DATA regs386 . . . . . . . . . . . . Byte[11] 511h CONST replist . . . . . . . . . . . . Byte[5] 964h CONST resetbp1 . . . . . . . . . . . . L Near FBAh _TEXT resetbps . . . . . . . . . . . . L Near F9Ah _TEXT rgnam16 . . . . . . . . . . . . Word 1C1Eh CONST rgnam816 . . . . . . . . . . . . Word 1C0Eh CONST rmode . . . . . . . . . . . . . Byte 2Eh _DATA rmsize . . . . . . . . . . . . . Byte EDh _DATA rmtab . . . . . . . . . . . . . Byte[8] 1C06h CONST rr_err . . . . . . . . . . . . . L Near 1721h _TEXT run2324 . . . . . . . . . . . . Word[4] Ch _DATA run_int . . . . . . . . . . . . Byte[2] 58h _DATA run_intw . . . . . . . . . . . . Word 58h _DATA run_sp . . . . . . . . . . . . . Word 2h _DATA sav2324 . . . . . . . . . . . . Word[4] 14h _DATA sc1 . . . . . . . . . . . . . . L Near 21F3h _TEXT sc2 . . . . . . . . . . . . . . L Near 21F6h _TEXT segmnt . . . . . . . . . . . . . Byte EEh _DATA segrgaddr . . . . . . . . . . . Word[4] 1C44h CONST segrgnam . . . . . . . . . . . . Word 1C2Eh CONST setbp1 . . . . . . . . . . . . . L Near FAEh _TEXT setpspdbg . . . . . . . . . . . L Near 10A7h _TEXT setup_adu . . . . . . . . . . . L Near 126Eh _TEXT showdwd . . . . . . . . . . . . L Near 29E8h _TEXT showptr . . . . . . . . . . . . L Near 29F3h _TEXT size_helpmsg2 . . . . . . . . . Number B8h size_xhelpmsg . . . . . . . . . Number B1h size_xsstr1 . . . . . . . . . . Number 26h size_xsstr2 . . . . . . . . . . Number 1Eh sizeloc . . . . . . . . . . . . Word E8h _DATA sizetcnam . . . . . . . . . . . Byte[24] 1441h CONST skipalpha . . . . . . . . . . . L Near 21F7h _TEXT skipcomm0 . . . . . . . . . . . L Near 21E0h _TEXT skipcomma . . . . . . . . . . . L Near 21DFh _TEXT skipwh0 . . . . . . . . . . . . L Near 2202h _TEXT skipwhite . . . . . . . . . . . L Near 2201h _TEXT spadjust . . . . . . . . . . . . Word 6h _DATA sqztab . . . . . . . . . . . . . Byte 19B4h CONST start . . . . . . . . . . . . . L Near 100h _TEXT Public stdoutal . . . . . . . . . . . . L Near 1EC1h _TEXT storebpdef . . . . . . . . . . . L Near FE1h _TEXT strinstr . . . . . . . . . . . . Byte 1CDAh CONST swch1 . . . . . . . . . . . . . Byte 37h _DATA swchar . . . . . . . . . . . . . Byte 35h _DATA szA32 . . . . . . . . . . . . . Byte[4] 1CE8h CONST szDrive . . . . . . . . . . . . Byte[15] 4C3h CONST tmode . . . . . . . . . . . . . Byte 2Fh _DATA tmode0 . . . . . . . . . . . . . Byte[10] 53Fh CONST tmode1 . . . . . . . . . . . . . Byte[7] 538h CONST tmodes . . . . . . . . . . . . . Byte[14] 51Ch CONST tmodes2 . . . . . . . . . . . . Byte[14] 52Ah CONST tmpstr . . . . . . . . . . . . . Text "XO",'R'+80h top_sp . . . . . . . . . . . . . Word 0h _DATA trimputs . . . . . . . . . . . . L Near 2C81h _TEXT txflags . . . . . . . . . . . . Byte 1CB6h CONST txprocs . . . . . . . . . . . . Word 1CCEh CONST txsize . . . . . . . . . . . . . Byte 1CBCh CONST txtabs . . . . . . . . . . . . . Word 1CC2h CONST u_addr . . . . . . . . . . . . . Word[3] 4Ah _DATA ue_int . . . . . . . . . . . . . L Near 18BBh _TEXT ue_intxx . . . . . . . . . . . . L Near 18D4h _TEXT unhack . . . . . . . . . . . . . L Near 1E9Bh _TEXT unlockdrive . . . . . . . . . . L Near 1926h _TEXT unused . . . . . . . . . . . . . Byte[10] 549h CONST use_stdout . . . . . . . . . . . L Near 1A86h _TEXT usepacket . . . . . . . . . . . Byte 5Dh _DATA vpage . . . . . . . . . . . . . Byte 36h _DATA wDgroup . . . . . . . . . . . . Word Ah _DATA wMCB . . . . . . . . . . . . . . Word 22h _DATA wtab1 . . . . . . . . . . . . . Word[8] 1B0Ch CONST wtab2 . . . . . . . . . . . . . Word 1B22h CONST wwmsg1 . . . . . . . . . . . . . Byte[9] 65Dh CONST wwmsg2 . . . . . . . . . . . . . Byte[9] 666h CONST xaans . . . . . . . . . . . . . Byte[17] 867h CONST xdans . . . . . . . . . . . . . Byte[21] 878h CONST xhelpmsg . . . . . . . . . . . . Byte[33] 7B6h CONST xmans . . . . . . . . . . . . . Byte[13] 8A0h CONST xmans_pos1 . . . . . . . . . . . Number Dh xmans_pos2 . . . . . . . . . . . Number 2Ah xrans . . . . . . . . . . . . . Byte[19] 88Dh CONST xsnopgs . . . . . . . . . . . . Byte[22] 945h CONST xsstr1 . . . . . . . . . . . . . Byte[7] 8CDh CONST xsstr1a . . . . . . . . . . . . Byte[9] 8D4h CONST xsstr1b . . . . . . . . . . . . Byte[22] 8DDh CONST xsstr2 . . . . . . . . . . . . . Byte[11] 8F3h CONST xsstr2a . . . . . . . . . . . . Byte[13] 8FEh CONST xsstr2b . . . . . . . . . . . . Byte[6] 90Bh CONST xsstr3 . . . . . . . . . . . . . Byte[13] 911h CONST xsstr3a . . . . . . . . . . . . Byte[6] 91Eh CONST xsstr3b . . . . . . . . . . . . Byte[23] 92Eh CONST xsstrhd . . . . . . . . . . . . Byte[6] 928h CONST xsstrpg . . . . . . . . . . . . Byte[4] 924h CONST debug.asm: 12321 lines, 4 passes, 151 ms, 0 warnings, 0 errors

,,<+80h> 0A44 42535741FFFFFFD0 1C db "BSWA",'P'+80h C variant 1c8h, 9, , ASM_MACH4 0049 1C ASMDATA segment 0049 FFFFFFF1 1C db ASM_MACH4 = 8769 1C ainfo = (1c8h) * ASMMOD + 9 004A FFFFFF8769 1C db HIGH ainfo, LOW ainfo 004C 1C ASMDATA ends C endvariant 004C 1C ASMDATA segment 004C FFFFFFFF 1C db -1 004D 1C ASMDATA ends C mne BT ; ofs=4Dh 004D 1C ASMDATA segment 0000004D = 4D 1C CURROFS = $ 004D 1C ASMDATA ends 0A49 4D00 1C dw CURROFS - asmtab = 43 1C MN_BT equ $ - mnlist = "B",'T'+80h 1C tmpstr catstr ,,,,,<+80h> 0A4B 42FFFFFFD4 1C db "B",'T'+80h C variant 1a3h, 10, , ASM_MACH3 004D 1C ASMDATA segment 004D FFFFFFF0 1C db ASM_MACH3 = 7C6E 1C ainfo = (1a3h) * ASMMOD + 10 004E 7C6E 1C db HIGH ainfo, LOW ainfo 0050 1C ASMDATA ends C variant AGRP(2,4), 11, , ASM_MACH3 0050 1C ASMDATA segment 0050 FFFFFFF0 1C db ASM_MACH3 = B0FB 1C ainfo = (240h + 2*8 + 4) * ASMMOD + 11 0051 FFFFFFB0FFFFFFFB 1C db HIGH ainfo, LOW ainfo 0053 1C ASMDATA ends C endvariant 0053 1C ASMDATA segment 0053 FFFFFFFF 1C db -1 0054 1C ASMDATA ends C mne BTC ; ofs=54h 0054 1C ASMDATA segment 00000054 = 54 1C CURROFS = $ 0054 1C ASMDATA ends 0A4D 5400 1C dw CURROFS - asmtab = 47 1C MN_BTC equ $ - mnlist = "BT",'C'+80h 1C tmpstr catstr ,,,,,<+80h> 0A4F 4254FFFFFFC3 1C db "BT",'C'+80h C variant 1bbh, 10, ASM_LOCKABLE, ASM_MACH3 0054 1C ASMDATA segment 0054 FFFFFFF4 1C db ASM_LOCKABLE 0055 FFFFFFF0 1C db ASM_MACH3 = 838E 1C ainfo = (1bbh) * ASMMOD + 10 0056 FFFFFF83FFFFFF8E 1C db HIGH ainfo, LOW ainfo 0058 1C ASMDATA ends C variant AGRP(2,7), 11, ASM_LOCKABLE, ASM_MACH3 0058 1C ASMDATA segment 0058 FFFFFFF4 1C db ASM_LOCKABLE 0059 FFFFFFF0 1C db ASM_MACH3 = B1DF 1C ainfo = (240h + 2*8 + 7) * ASMMOD + 11 005A FFFFFFB1FFFFFFDF 1C db HIGH ainfo, LOW ainfo 005C 1C ASMDATA ends C endvariant 005C 1C ASMDATA segment 005C FFFFFFFF 1C db -1 005D 1C ASMDATA ends C mne BTR ; ofs=5Dh 005D 1C ASMDATA segment 0000005D = 5D 1C CURROFS = $ 005D 1C ASMDATA ends 0A52 5D00 1C dw CURROFS - asmtab = 4C 1C MN_BTR equ $ - mnlist = "BT",'R'+80h 1C tmpstr catstr ,,,,,<+80h> 0A54 4254FFFFFFD2 1C db "BT",'R'+80h C variant 1b3h, 10, ASM_LOCKABLE, ASM_MACH3 005D 1C ASMDATA segment 005D FFFFFFF4 1C db ASM_LOCKABLE 005E FFFFFFF0 1C db ASM_MACH3 = 812E 1C ainfo = (1b3h) * ASMMOD + 10 005F FFFFFF812E 1C db HIGH ainfo, LOW ainfo 0061 1C ASMDATA ends C variant AGRP(2,6), 11, ASM_LOCKABLE, ASM_MACH3 0061 1C ASMDATA segment 0061 FFFFFFF4 1C db ASM_LOCKABLE 0062 FFFFFFF0 1C db ASM_MACH3 = B193 1C ainfo = (240h + 2*8 + 6) * ASMMOD + 11 0063 FFFFFFB1FFFFFF93 1C db HIGH ainfo, LOW ainfo 0065 1C ASMDATA ends C endvariant 0065 1C ASMDATA segment 0065 FFFFFFFF 1C db -1 0066 1C ASMDATA ends C mne BTS ; ofs=66h 0066 1C ASMDATA segment 00000066 = 66 1C CURROFS = $ 0066 1C ASMDATA ends 0A57 6600 1C dw CURROFS - asmtab = 51 1C MN_BTS equ $ - mnlist = "BT",'S'+80h 1C tmpstr catstr ,,,,,<+80h> 0A59 4254FFFFFFD3 1C db "BT",'S'+80h C variant 1abh, 10, ASM_LOCKABLE, ASM_MACH3 0066 1C ASMDATA segment 0066 FFFFFFF4 1C db ASM_LOCKABLE 0067 FFFFFFF0 1C db ASM_MACH3 = 7ECE 1C ainfo = (1abh) * ASMMOD + 10 0068 7EFFFFFFCE 1C db HIGH ainfo, LOW ainfo 006A 1C ASMDATA ends C variant AGRP(2,5), 11, ASM_LOCKABLE, ASM_MACH3 006A 1C ASMDATA segment 006A FFFFFFF4 1C db ASM_LOCKABLE 006B FFFFFFF0 1C db ASM_MACH3 = B147 1C ainfo = (240h + 2*8 + 5) * ASMMOD + 11 006C FFFFFFB147 1C db HIGH ainfo, LOW ainfo 006E 1C ASMDATA ends C endvariant 006E 1C ASMDATA segment 006E FFFFFFFF 1C db -1 006F 1C ASMDATA ends C mne CALL ; ofs=6Fh 006F 1C ASMDATA segment 0000006F = 6F 1C CURROFS = $ 006F 1C ASMDATA ends 0A5C 6F00 1C dw CURROFS - asmtab = 56 1C MN_CALL equ $ - mnlist = "CAL",'L'+80h 1C tmpstr catstr ,,,,,<+80h> 0A5E 43414CFFFFFFCC 1C db "CAL",'L'+80h C variant 0e8h, 12 006F 1C ASMDATA segment = 44EC 1C ainfo = (0e8h) * ASMMOD + 12 006F 44FFFFFFEC 1C db HIGH ainfo, LOW ainfo 0071 1C ASMDATA ends C variant AGRP(3,2), 40 0071 1C ASMDATA segment = B2E0 1C ainfo = (240h + 3*8 + 2) * ASMMOD + 40 0071 FFFFFFB2FFFFFFE0 1C db HIGH ainfo, LOW ainfo 0073 1C ASMDATA ends C variant AGRP(3,3), 14 0073 1C ASMDATA segment = B312 1C ainfo = (240h + 3*8 + 3) * ASMMOD + 14 0073 FFFFFFB312 1C db HIGH ainfo, LOW ainfo 0075 1C ASMDATA ends C variant 09ah, 13 0075 1C ASMDATA segment = 2DC5 1C ainfo = (09ah) * ASMMOD + 13 0075 2DFFFFFFC5 1C db HIGH ainfo, LOW ainfo 0077 1C ASMDATA ends C endvariant 0077 1C ASMDATA segment 0077 FFFFFFFF 1C db -1 0078 1C ASMDATA ends C mne CBW, ASM_D16 ; ofs=78h 0078 1C ASMDATA segment 00000078 = 78 1C CURROFS = $ 0078 FFFFFFF8 1C db ASM_D16 0079 1C ASMDATA ends 0A62 7800 1C dw CURROFS - asmtab = 5C 1C MN_CBW equ $ - mnlist = "CB",'W'+80h 1C tmpstr catstr ,,,,,<+80h> 0A64 4342FFFFFFD7 1C db "CB",'W'+80h C mne CWDE, ASM_D32 ; ofs=79h 0079 1C ASMDATA segment 00000079 = 79 1C CURROFS = $ 0079 FFFFFFF9 1C db ASM_D32 007A 1C ASMDATA ends 0A67 7900 1C dw CURROFS - asmtab = 61 1C MN_CWDE equ $ - mnlist = "CWD",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 0A69 435744FFFFFFC5 1C db "CWD",'E'+80h C variant 098h, 0 007A 1C ASMDATA segment = 2D20 1C ainfo = (098h) * ASMMOD + 0 007A 2D20 1C db HIGH ainfo, LOW ainfo 007C 1C ASMDATA ends C endvariant 007C 1C ASMDATA segment 007C FFFFFFFF 1C db -1 007D 1C ASMDATA ends C mne CLC ; ofs=7Dh 007D 1C ASMDATA segment 0000007D = 7D 1C CURROFS = $ 007D 1C ASMDATA ends 0A6D 7D00 1C dw CURROFS - asmtab = 67 1C MN_CLC equ $ - mnlist = "CL",'C'+80h 1C tmpstr catstr ,,,,,<+80h> 0A6F 434CFFFFFFC3 1C db "CL",'C'+80h C variant 0f8h, 0 007D 1C ASMDATA segment = 49A0 1C ainfo = (0f8h) * ASMMOD + 0 007D 49FFFFFFA0 1C db HIGH ainfo, LOW ainfo 007F 1C ASMDATA ends C endvariant 007F 1C ASMDATA segment 007F FFFFFFFF 1C db -1 0080 1C ASMDATA ends C mne CLD ; ofs=80h 0080 1C ASMDATA segment 00000080 = 80 1C CURROFS = $ 0080 1C ASMDATA ends 0A72 FFFFFF8000 1C dw CURROFS - asmtab = 6C 1C MN_CLD equ $ - mnlist = "CL",'D'+80h 1C tmpstr catstr ,,,,,<+80h> 0A74 434CFFFFFFC4 1C db "CL",'D'+80h C variant 0fch, 0 0080 1C ASMDATA segment = 4AD0 1C ainfo = (0fch) * ASMMOD + 0 0080 4AFFFFFFD0 1C db HIGH ainfo, LOW ainfo 0082 1C ASMDATA ends C endvariant 0082 1C ASMDATA segment 0082 FFFFFFFF 1C db -1 0083 1C ASMDATA ends C mne CLI ; ofs=83h 0083 1C ASMDATA segment 00000083 = 83 1C CURROFS = $ 0083 1C ASMDATA ends 0A77 FFFFFF8300 1C dw CURROFS - asmtab = 71 1C MN_CLI equ $ - mnlist = "CL",'I'+80h 1C tmpstr catstr ,,,,,<+80h> 0A79 434CFFFFFFC9 1C db "CL",'I'+80h C variant 0fah, 0 0083 1C ASMDATA segment = 4A38 1C ainfo = (0fah) * ASMMOD + 0 0083 4A38 1C db HIGH ainfo, LOW ainfo 0085 1C ASMDATA ends C endvariant 0085 1C ASMDATA segment 0085 FFFFFFFF 1C db -1 0086 1C ASMDATA ends C mne CLTS ; ofs=86h 0086 1C ASMDATA segment 00000086 = 86 1C CURROFS = $ 0086 1C ASMDATA ends 0A7C FFFFFF8600 1C dw CURROFS - asmtab = 76 1C MN_CLTS equ $ - mnlist = "CLT",'S'+80h 1C tmpstr catstr ,,,,,<+80h> 0A7E 434C54FFFFFFD3 1C db "CLT",'S'+80h C variant 106h, 0, , ASM_MACH2 0086 1C ASMDATA segment 0086 FFFFFFEF 1C db ASM_MACH2 = 4DC8 1C ainfo = (106h) * ASMMOD + 0 0087 4DFFFFFFC8 1C db HIGH ainfo, LOW ainfo 0089 1C ASMDATA ends C endvariant 0089 1C ASMDATA segment 0089 FFFFFFFF 1C db -1 008A 1C ASMDATA ends C mne CMC ; ofs=8Ah 008A 1C ASMDATA segment 0000008A = 8A 1C CURROFS = $ 008A 1C ASMDATA ends 0A82 FFFFFF8A00 1C dw CURROFS - asmtab = 7C 1C MN_CMC equ $ - mnlist = "CM",'C'+80h 1C tmpstr catstr ,,,,,<+80h> 0A84 434DFFFFFFC3 1C db "CM",'C'+80h C variant 0f5h, 0 008A 1C ASMDATA segment = 48BC 1C ainfo = (0f5h) * ASMMOD + 0 008A 48FFFFFFBC 1C db HIGH ainfo, LOW ainfo 008C 1C ASMDATA ends C endvariant 008C 1C ASMDATA segment 008C FFFFFFFF 1C db -1 008D 1C ASMDATA ends C mne CMOVA ; ofs=8Dh 008D 1C ASMDATA segment 0000008D = 8D 1C CURROFS = $ 008D 1C ASMDATA ends 0A87 FFFFFF8D00 1C dw CURROFS - asmtab = 81 1C MN_CMOVA equ $ - mnlist = "CMOV",'A'+80h 1C tmpstr catstr ,,,,,<+80h> 0A89 434D4F56FFFFFFC1 1C db "CMOV",'A'+80h C variant 147h, 8, , ASM_MACH6 008D 1C ASMDATA segment 008D FFFFFFF3 1C db ASM_MACH6 = 611C 1C ainfo = (147h) * ASMMOD + 8 008E 611C 1C db HIGH ainfo, LOW ainfo 0090 1C ASMDATA ends C endvariant 0090 1C ASMDATA segment 0090 FFFFFFFF 1C db -1 0091 1C ASMDATA ends C mne CMOVAE ; ofs=91h 0091 1C ASMDATA segment 00000091 = 91 1C CURROFS = $ 0091 1C ASMDATA ends 0A8E FFFFFF9100 1C dw CURROFS - asmtab = 88 1C MN_CMOVAE equ $ - mnlist = "CMOVA",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 0A90 434D4F5641FFFFFFC5 1C db "CMOVA",'E'+80h C variant 143h, 8, , ASM_MACH6 0091 1C ASMDATA segment 0091 FFFFFFF3 1C db ASM_MACH6 = 5FEC 1C ainfo = (143h) * ASMMOD + 8 0092 5FFFFFFFEC 1C db HIGH ainfo, LOW ainfo 0094 1C ASMDATA ends C endvariant 0094 1C ASMDATA segment 0094 FFFFFFFF 1C db -1 0095 1C ASMDATA ends C mne CMOVB ; ofs=95h 0095 1C ASMDATA segment 00000095 = 95 1C CURROFS = $ 0095 1C ASMDATA ends 0A96 FFFFFF9500 1C dw CURROFS - asmtab = 90 1C MN_CMOVB equ $ - mnlist = "CMOV",'B'+80h 1C tmpstr catstr ,,,,,<+80h> 0A98 434D4F56FFFFFFC2 1C db "CMOV",'B'+80h C variant 142h, 8, , ASM_MACH6 0095 1C ASMDATA segment 0095 FFFFFFF3 1C db ASM_MACH6 = 5FA0 1C ainfo = (142h) * ASMMOD + 8 0096 5FFFFFFFA0 1C db HIGH ainfo, LOW ainfo 0098 1C ASMDATA ends C endvariant 0098 1C ASMDATA segment 0098 FFFFFFFF 1C db -1 0099 1C ASMDATA ends C mne CMOVBE ; ofs=99h 0099 1C ASMDATA segment 00000099 = 99 1C CURROFS = $ 0099 1C ASMDATA ends 0A9D FFFFFF9900 1C dw CURROFS - asmtab = 97 1C MN_CMOVBE equ $ - mnlist = "CMOVB",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 0A9F 434D4F5642FFFFFFC5 1C db "CMOVB",'E'+80h C variant 146h, 8, , ASM_MACH6 0099 1C ASMDATA segment 0099 FFFFFFF3 1C db ASM_MACH6 = 60D0 1C ainfo = (146h) * ASMMOD + 8 009A 60FFFFFFD0 1C db HIGH ainfo, LOW ainfo 009C 1C ASMDATA ends C endvariant 009C 1C ASMDATA segment 009C FFFFFFFF 1C db -1 009D 1C ASMDATA ends C mne CMOVC ; ofs=9Dh 009D 1C ASMDATA segment 0000009D = 9D 1C CURROFS = $ 009D 1C ASMDATA ends 0AA5 FFFFFF9D00 1C dw CURROFS - asmtab = 9F 1C MN_CMOVC equ $ - mnlist = "CMOV",'C'+80h 1C tmpstr catstr ,,,,,<+80h> 0AA7 434D4F56FFFFFFC3 1C db "CMOV",'C'+80h C variant 142h, 8, , ASM_MACH6 009D 1C ASMDATA segment 009D FFFFFFF3 1C db ASM_MACH6 = 5FA0 1C ainfo = (142h) * ASMMOD + 8 009E 5FFFFFFFA0 1C db HIGH ainfo, LOW ainfo 00A0 1C ASMDATA ends C endvariant 00A0 1C ASMDATA segment 00A0 FFFFFFFF 1C db -1 00A1 1C ASMDATA ends C mne CMOVE ; ofs=A1h 00A1 1C ASMDATA segment 000000A1 = A1 1C CURROFS = $ 00A1 1C ASMDATA ends 0AAC FFFFFFA100 1C dw CURROFS - asmtab = A6 1C MN_CMOVE equ $ - mnlist = "CMOV",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 0AAE 434D4F56FFFFFFC5 1C db "CMOV",'E'+80h C variant 144h, 8, , ASM_MACH6 00A1 1C ASMDATA segment 00A1 FFFFFFF3 1C db ASM_MACH6 = 6038 1C ainfo = (144h) * ASMMOD + 8 00A2 6038 1C db HIGH ainfo, LOW ainfo 00A4 1C ASMDATA ends C endvariant 00A4 1C ASMDATA segment 00A4 FFFFFFFF 1C db -1 00A5 1C ASMDATA ends C mne CMOVG ; ofs=A5h 00A5 1C ASMDATA segment 000000A5 = A5 1C CURROFS = $ 00A5 1C ASMDATA ends 0AB3 FFFFFFA500 1C dw CURROFS - asmtab = AD 1C MN_CMOVG equ $ - mnlist = "CMOV",'G'+80h 1C tmpstr catstr ,,,,,<+80h> 0AB5 434D4F56FFFFFFC7 1C db "CMOV",'G'+80h C variant 14fh, 8, , ASM_MACH6 00A5 1C ASMDATA segment 00A5 FFFFFFF3 1C db ASM_MACH6 = 637C 1C ainfo = (14fh) * ASMMOD + 8 00A6 637C 1C db HIGH ainfo, LOW ainfo 00A8 1C ASMDATA ends C endvariant 00A8 1C ASMDATA segment 00A8 FFFFFFFF 1C db -1 00A9 1C ASMDATA ends C mne CMOVGE ; ofs=A9h 00A9 1C ASMDATA segment 000000A9 = A9 1C CURROFS = $ 00A9 1C ASMDATA ends 0ABA FFFFFFA900 1C dw CURROFS - asmtab = B4 1C MN_CMOVGE equ $ - mnlist = "CMOVG",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 0ABC 434D4F5647FFFFFFC5 1C db "CMOVG",'E'+80h C variant 14dh, 8, , ASM_MACH6 00A9 1C ASMDATA segment 00A9 FFFFFFF3 1C db ASM_MACH6 = 62E4 1C ainfo = (14dh) * ASMMOD + 8 00AA 62FFFFFFE4 1C db HIGH ainfo, LOW ainfo 00AC 1C ASMDATA ends C endvariant 00AC 1C ASMDATA segment 00AC FFFFFFFF 1C db -1 00AD 1C ASMDATA ends C mne CMOVL ; ofs=ADh 00AD 1C ASMDATA segment 000000AD = AD 1C CURROFS = $ 00AD 1C ASMDATA ends 0AC2 FFFFFFAD00 1C dw CURROFS - asmtab = BC 1C MN_CMOVL equ $ - mnlist = "CMOV",'L'+80h 1C tmpstr catstr ,,,,,<+80h> 0AC4 434D4F56FFFFFFCC 1C db "CMOV",'L'+80h C variant 14ch, 8, , ASM_MACH6 00AD 1C ASMDATA segment 00AD FFFFFFF3 1C db ASM_MACH6 = 6298 1C ainfo = (14ch) * ASMMOD + 8 00AE 62FFFFFF98 1C db HIGH ainfo, LOW ainfo 00B0 1C ASMDATA ends C endvariant 00B0 1C ASMDATA segment 00B0 FFFFFFFF 1C db -1 00B1 1C ASMDATA ends C mne CMOVLE ; ofs=B1h 00B1 1C ASMDATA segment 000000B1 = B1 1C CURROFS = $ 00B1 1C ASMDATA ends 0AC9 FFFFFFB100 1C dw CURROFS - asmtab = C3 1C MN_CMOVLE equ $ - mnlist = "CMOVL",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 0ACB 434D4F564CFFFFFFC5 1C db "CMOVL",'E'+80h C variant 14eh, 8, , ASM_MACH6 00B1 1C ASMDATA segment 00B1 FFFFFFF3 1C db ASM_MACH6 = 6330 1C ainfo = (14eh) * ASMMOD + 8 00B2 6330 1C db HIGH ainfo, LOW ainfo 00B4 1C ASMDATA ends C endvariant 00B4 1C ASMDATA segment 00B4 FFFFFFFF 1C db -1 00B5 1C ASMDATA ends C mne CMOVNA ; ofs=B5h 00B5 1C ASMDATA segment 000000B5 = B5 1C CURROFS = $ 00B5 1C ASMDATA ends 0AD1 FFFFFFB500 1C dw CURROFS - asmtab = CB 1C MN_CMOVNA equ $ - mnlist = "CMOVN",'A'+80h 1C tmpstr catstr ,,,,,<+80h> 0AD3 434D4F564EFFFFFFC1 1C db "CMOVN",'A'+80h C variant 146h, 8, , ASM_MACH6 00B5 1C ASMDATA segment 00B5 FFFFFFF3 1C db ASM_MACH6 = 60D0 1C ainfo = (146h) * ASMMOD + 8 00B6 60FFFFFFD0 1C db HIGH ainfo, LOW ainfo 00B8 1C ASMDATA ends C endvariant 00B8 1C ASMDATA segment 00B8 FFFFFFFF 1C db -1 00B9 1C ASMDATA ends C mne CMOVNAE ; ofs=B9h 00B9 1C ASMDATA segment 000000B9 = B9 1C CURROFS = $ 00B9 1C ASMDATA ends 0AD9 FFFFFFB900 1C dw CURROFS - asmtab = D3 1C MN_CMOVNAE equ $ - mnlist = "CMOVNA",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 0ADB 434D4F564E41FFFFFFC5 1C db "CMOVNA",'E'+80h C variant 142h, 8, , ASM_MACH6 00B9 1C ASMDATA segment 00B9 FFFFFFF3 1C db ASM_MACH6 = 5FA0 1C ainfo = (142h) * ASMMOD + 8 00BA 5FFFFFFFA0 1C db HIGH ainfo, LOW ainfo 00BC 1C ASMDATA ends C endvariant 00BC 1C ASMDATA segment 00BC FFFFFFFF 1C db -1 00BD 1C ASMDATA ends C mne CMOVNB ; ofs=BDh 00BD 1C ASMDATA segment 000000BD = BD 1C CURROFS = $ 00BD 1C ASMDATA ends 0AE2 FFFFFFBD00 1C dw CURROFS - asmtab = DC 1C MN_CMOVNB equ $ - mnlist = "CMOVN",'B'+80h 1C tmpstr catstr ,,,,,<+80h> 0AE4 434D4F564EFFFFFFC2 1C db "CMOVN",'B'+80h C variant 143h, 8, , ASM_MACH6 00BD 1C ASMDATA segment 00BD FFFFFFF3 1C db ASM_MACH6 = 5FEC 1C ainfo = (143h) * ASMMOD + 8 00BE 5FFFFFFFEC 1C db HIGH ainfo, LOW ainfo 00C0 1C ASMDATA ends C endvariant 00C0 1C ASMDATA segment 00C0 FFFFFFFF 1C db -1 00C1 1C ASMDATA ends C mne CMOVNBE ; ofs=C1h 00C1 1C ASMDATA segment 000000C1 = C1 1C CURROFS = $ 00C1 1C ASMDATA ends 0AEA FFFFFFC100 1C dw CURROFS - asmtab = E4 1C MN_CMOVNBE equ $ - mnlist = "CMOVNB",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 0AEC 434D4F564E42FFFFFFC5 1C db "CMOVNB",'E'+80h C variant 147h, 8, , ASM_MACH6 00C1 1C ASMDATA segment 00C1 FFFFFFF3 1C db ASM_MACH6 = 611C 1C ainfo = (147h) * ASMMOD + 8 00C2 611C 1C db HIGH ainfo, LOW ainfo 00C4 1C ASMDATA ends C endvariant 00C4 1C ASMDATA segment 00C4 FFFFFFFF 1C db -1 00C5 1C ASMDATA ends C mne CMOVNC ; ofs=C5h 00C5 1C ASMDATA segment 000000C5 = C5 1C CURROFS = $ 00C5 1C ASMDATA ends 0AF3 FFFFFFC500 1C dw CURROFS - asmtab = ED 1C MN_CMOVNC equ $ - mnlist = "CMOVN",'C'+80h 1C tmpstr catstr ,,,,,<+80h> 0AF5 434D4F564EFFFFFFC3 1C db "CMOVN",'C'+80h C variant 143h, 8, , ASM_MACH6 00C5 1C ASMDATA segment 00C5 FFFFFFF3 1C db ASM_MACH6 = 5FEC 1C ainfo = (143h) * ASMMOD + 8 00C6 5FFFFFFFEC 1C db HIGH ainfo, LOW ainfo 00C8 1C ASMDATA ends C endvariant 00C8 1C ASMDATA segment 00C8 FFFFFFFF 1C db -1 00C9 1C ASMDATA ends C mne CMOVNE ; ofs=C9h 00C9 1C ASMDATA segment 000000C9 = C9 1C CURROFS = $ 00C9 1C ASMDATA ends 0AFB FFFFFFC900 1C dw CURROFS - asmtab = F5 1C MN_CMOVNE equ $ - mnlist = "CMOVN",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 0AFD 434D4F564EFFFFFFC5 1C db "CMOVN",'E'+80h C variant 145h, 8, , ASM_MACH6 00C9 1C ASMDATA segment 00C9 FFFFFFF3 1C db ASM_MACH6 = 6084 1C ainfo = (145h) * ASMMOD + 8 00CA 60FFFFFF84 1C db HIGH ainfo, LOW ainfo 00CC 1C ASMDATA ends C endvariant 00CC 1C ASMDATA segment 00CC FFFFFFFF 1C db -1 00CD 1C ASMDATA ends C mne CMOVNG ; ofs=CDh 00CD 1C ASMDATA segment 000000CD = CD 1C CURROFS = $ 00CD 1C ASMDATA ends 0B03 FFFFFFCD00 1C dw CURROFS - asmtab = FD 1C MN_CMOVNG equ $ - mnlist = "CMOVN",'G'+80h 1C tmpstr catstr ,,,,,<+80h> 0B05 434D4F564EFFFFFFC7 1C db "CMOVN",'G'+80h C variant 14eh, 8, , ASM_MACH6 00CD 1C ASMDATA segment 00CD FFFFFFF3 1C db ASM_MACH6 = 6330 1C ainfo = (14eh) * ASMMOD + 8 00CE 6330 1C db HIGH ainfo, LOW ainfo 00D0 1C ASMDATA ends C endvariant 00D0 1C ASMDATA segment 00D0 FFFFFFFF 1C db -1 00D1 1C ASMDATA ends C mne CMOVNGE ; ofs=D1h 00D1 1C ASMDATA segment 000000D1 = D1 1C CURROFS = $ 00D1 1C ASMDATA ends 0B0B FFFFFFD100 1C dw CURROFS - asmtab = 105 1C MN_CMOVNGE equ $ - mnlist = "CMOVNG",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 0B0D 434D4F564E47FFFFFFC5 1C db "CMOVNG",'E'+80h C variant 14ch, 8, , ASM_MACH6 00D1 1C ASMDATA segment 00D1 FFFFFFF3 1C db ASM_MACH6 = 6298 1C ainfo = (14ch) * ASMMOD + 8 00D2 62FFFFFF98 1C db HIGH ainfo, LOW ainfo 00D4 1C ASMDATA ends C endvariant 00D4 1C ASMDATA segment 00D4 FFFFFFFF 1C db -1 00D5 1C ASMDATA ends C mne CMOVNL ; ofs=D5h 00D5 1C ASMDATA segment 000000D5 = D5 1C CURROFS = $ 00D5 1C ASMDATA ends 0B14 FFFFFFD500 1C dw CURROFS - asmtab = 10E 1C MN_CMOVNL equ $ - mnlist = "CMOVN",'L'+80h 1C tmpstr catstr ,,,,,<+80h> 0B16 434D4F564EFFFFFFCC 1C db "CMOVN",'L'+80h C variant 14dh, 8, , ASM_MACH6 00D5 1C ASMDATA segment 00D5 FFFFFFF3 1C db ASM_MACH6 = 62E4 1C ainfo = (14dh) * ASMMOD + 8 00D6 62FFFFFFE4 1C db HIGH ainfo, LOW ainfo 00D8 1C ASMDATA ends C endvariant 00D8 1C ASMDATA segment 00D8 FFFFFFFF 1C db -1 00D9 1C ASMDATA ends C mne CMOVNLE ; ofs=D9h 00D9 1C ASMDATA segment 000000D9 = D9 1C CURROFS = $ 00D9 1C ASMDATA ends 0B1C FFFFFFD900 1C dw CURROFS - asmtab = 116 1C MN_CMOVNLE equ $ - mnlist = "CMOVNL",'E'+80h 1C tmpstr catstr ,,,,,<+80h> 0B1E 434D4F564E4CFFFFFFC5 1C db "CMOVNL",'E'+80h C variant 14fh, 8, , ASM_MACH6 00D9 1C ASMDATA segment 00D9 FFFFFFF3 1C db ASM_MACH6 = 637C 1C ainfo = (14fh) * ASMMOD + 8 00DA 637C 1C db HIGH ainfo, LOW ainfo 00DC 1C ASMDATA ends C endvariant 00DC 1C ASMDATA segment 00DC FFFFFFFF 1C db -1 00DD 1C ASMDATA ends C mne CMOVNO ; ofs=DDh 00DD 1C ASMDATA segment 000000DD = DD 1C CURROFS = $ 00DD 1C ASMDATA ends 0B25 FFFFFFDD00 1C dw CURROFS - asmtab = 11F 1C MN_CMOVNO equ $ - mnlist = "CMOVN",'O'+80h 1C tmpstr catstr ,,,,,<+80h> 0B27 434D4F564EFFFFFFCF 1C db "CMOVN",'O'+80h C variant 141h, 8, , ASM_MACH6 00DD 1C ASMDATA segment 00DD FFFFFFF3 1C db ASM_MACH6 = 5F54 1C ainfo = (141h) * ASMMOD + 8 00DE 5F54 1C db HIGH ainfo, LOW ainfo 00E0 1C ASMDATA ends C endvariant 00E0 1C ASMDATA segment 00E0 FFFFFFFF 1C db -1 00E1 1C ASMDATA ends C mne CMOVNP ; ofs=E1h 00E1 1C ASMDATA segment 000000E1 = E1 1C CURROFS = $ 00E1 1C ASMDATA ends 0B2D FFFFFFE100 1C dw CURROFS - asmtab = 127 1C MN_CMOVNP equ $ - mnlist = "CMOVN",'P'+80h 1C tmpstr catstr ,,,