PL/M-86 COMPILER CODEMACRO SUBROUTINE MODULE 10/5/81 PAGE 1 ISIS-II PL/M-86 V2.0 COMPILATION OF MODULE CMSUBR OBJECT MODULE PLACED IN CMSUBR.OBJ COMPILER INVOKED BY: :F0: CMSUBR.PLM DEBUG OPTIMIZE(2) DATE(10/5/81) PAGEWIDTH(100) XREF $title ('CODEMACRO SUBROUTINE MODULE') 1 cmsubr: do; /* modified 4/7/81 R. Silberstein modified 4/13/81 R. Silberstein modified 5/5/81 R. Silberstein modified 9/2/81 R. Silberstein */ /* This is the module to 1) test if a set of operands matches a given instruction and 2) produce output code for matched instruction The module interfaces the CODEOUTPUT module to physically send code bytes to the HEX output file. */ $include (:f1:macro.lit) = $nolist $include (:f1:equals.lit) = $nolist $include (:f1:cmacd.lit) = $nolist $include (:f1:outp.lit) = $nolist $include (:f1:scan.ext) = $nolist $include (:f1:subr1.ext) = $nolist $INCLUDE (:F1:SUBR2.EXT) = $nolist $include (:f1:outp.ext) = $nolist $include (:f1:ermod.ext) = $nolist $include (:f1:cmsubr.x86) = $nolist PL/M-86 COMPILER CODEMACRO SUBROUTINE MODULE 10/5/81 PAGE 2 $eject 90 1 dcl /* global variables */ bytevar based macroptr byte, /* variables within codemacros */ addrvar based macroptr addr, emitbyte(80) byte, /* buffer of output codebytes */ emitindex byte, /* index of "emitbyte" */ bitcomtab(2) byte data /* legal commands within "DBIT" */ (mnumberbits,mformalbits); PL/M-86 COMPILER CODEMACRO SUBROUTINE MODULE 10/5/81 PAGE 3 $eject /********** MICHELLANEOUS SUBROUTINES: **********/ 91 1 clearcmindex: proc public; 92 2 emitindex=0; 93 2 end clearcmindex; 94 1 emit: proc public; /* emit codebytes for an instruction */ 95 2 dcl i byte; 96 2 i=0ffh; 97 2 do while (i:=i+1) < emitindex; 98 3 call emitcodebyte(emitbyte(i),CSdata); 99 3 end$while; 100 2 end emit; 101 1 emitdummies: proc public; /* emit dummy (NO-OP-) bytes if error */ 102 2 dcl (i,j) byte,nodum(4) byte data(2,5,6,8); 103 2 j=nooper; 104 2 if j>3 then j=3; 106 2 i=0ffh; 107 2 do while (i:=i+1) < nodum(j); 108 3 call emitcodebyte(90h,CSdata); /* 90H = NOP */ 109 3 end$while; 110 2 end emitdummies; 111 1 emitsinglebyte: proc(ch); /* fill local emitbuffer with a new byte */ 112 2 dcl ch byte; 113 2 if noerror then$do 115 3 emitbyte(emitindex)=ch; 116 3 emitindex=emitindex+1; 117 3 end$if; 118 2 end emitsinglebyte; 119 1 emitsingleword: proc (var); /* fill 2 new bytes into emitbuffer */ 120 2 dcl var addr, byt1 byte at(.var), byt2 byte at(.var+1); 121 2 call emitsinglebyte(byt1); 122 2 call emitsinglebyte(byt2); 123 2 end emitsingleword; 124 1 incrmacroptr: proc; 125 2 macroptr=macroptr+1; 126 2 end incrmacroptr; 127 1 getoperadr: proc address; 128 2 dcl pt address; 129 2 pt=.operands(bytevar); 130 2 call incrmacroptr; 131 2 return pt; 132 2 end getoperadr; /* recognize codemacro command type */ 133 1 commandtype: proc(comno,lg,pt) byte public; 134 2 dcl (comno,lg,i) byte,pt address,ch based pt(1) byte; 135 2 i=0ffh; 136 2 do while (i:=i+1) < lg; 137 3 if comno=ch(i) then$do call incrmacroptr; return i; end$if; PL/M-86 COMPILER CODEMACRO SUBROUTINE MODULE 10/5/81 PAGE 4 end$while; 143 2 return lg; 144 2 end commandtype; PL/M-86 COMPILER CODEMACRO SUBROUTINE MODULE 10/5/81 PAGE 5 $eject /******* CODEMACRO COMMAND SUBROUTINES: ********/ 145 1 mDBNrout: proc public; 146 2 call emitsinglebyte(bytevar); 147 2 call incrmacroptr; 148 2 end mDBNrout; 149 1 mDBFrout: proc public; 150 2 dcl pt address,opr based pt operandstruc; 151 2 pt=getoperadr; 152 2 call emitsinglebyte(opr.offset); 153 2 end mDBFrout; 154 1 mDWNrout: proc public; 155 2 call emitsingleword(addrvar); 156 2 call incrmacroptr; 157 2 call incrmacroptr; 158 2 end mDWNrout; 159 1 mDWFrout: proc public; 160 2 dcl pt address,opr based pt operandstruc; 161 2 pt=getoperadr; 162 2 call emitsingleword(opr.offset); 163 2 end mDWFrout; 164 1 mDDFrout: proc public; 165 2 dcl pt address,opr based pt operandstruc; 166 2 pt=getoperadr; 167 2 if (opr.sflag and segmbit) = 0 then call errmsg(misssegminfo); 169 2 call emitsingleword(opr.offset); 170 2 call emitsingleword(opr.segment); 171 2 end mDDFrout; 172 1 mRELBrout: proc public; 173 2 dcl pt address,opr based pt operandstruc,displ addr; 174 2 pt=getoperadr; 175 2 displ=opr.offset-cip-2; 176 2 if (opr.segment <> csegvalue) or (typecalc(displ)=wrd) then$do 178 3 call errmsg(laboutofrange); 179 3 end$if; 180 2 call emitsinglebyte(displ); 181 2 IF ABSADDR (0) = SPACE THEN$DO 183 3 CALL HEX2OUT (OPR.OFFSET, .ABSADDR); 184 3 END$IF; 185 2 end mRELBrout; 186 1 mRELWrout: proc public; 187 2 dcl pt address,opr based pt operandstruc; 188 2 pt=getoperadr; 189 2 if opr.segment <> csegvalue then call errmsg(laboutofrange); 191 2 call emitsingleword(opr.offset-cip-3); 192 2 IF ABSADDR (0) = SPACE THEN$DO 194 3 CALL HEX2OUT (OPR.OFFSET, .ABSADDR); 195 3 END$IF; PL/M-86 COMPILER CODEMACRO SUBROUTINE MODULE 10/5/81 PAGE 6 196 2 end mRELWrout; 197 1 mNOSEGFIXrout: proc public; 198 2 dcl (segr,flag,segt) byte,pt address,opr based pt operandstruc; 199 2 segr=bytevar; 200 2 call incrmacroptr; 201 2 pt=getoperadr; 202 2 if (opr.baseindex and nooverridebit) = 0 then$do 204 3 flag=opr.sflag; 205 3 segt=shr(flag,segtypecount) and 3; 206 3 noerror=(segt=segr); 207 3 end$if; 208 2 end mNOSEGFIXrout; 209 1 mSEGFIXrout: proc public; 210 2 dcl pt address,opr based pt operandstruc,(segr,override,sflag) byte; 211 2 DSovertest: proc byte; 212 3 segr=shr(opr.baseindex,baseregcount) and 1; 213 3 return (((sflag and bregbit) <> 0) and (segr=1)); /* 1 = BP */ 214 3 end DSovertest; 215 2 pt=getoperadr; 216 2 sflag=opr.sflag; 217 2 if (opr.baseindex and nooverridebit) = 0 then$do 219 3 segr=shr(sflag,segtypecount) and 3; 220 3 do case segr; 221 4 do; override=true; segr=ESover; end; /* ES */ 225 4 do; override=true; segr=CSover; end; /* CS */ 229 4 do; override=not DSovertest; segr=SSover; end; /* SS */ 233 4 do; override=DSovertest; segr=DSover; end; /* DS */ 237 4 end$case; 238 3 if override then call emitsinglebyte(segr); end$if; 241 2 end mSEGFIXrout; 242 1 MODRM: proc (regfield,pt); 243 2 dcl pt address,opr based pt operandstruc, (regfield,modfield,rmfield,dispflag,stype,sflag,segr) byte, BASEIND BYTE, offset addr, displow byte at(.offset),disphigh byte at (.offset+1); 244 2 disptype: proc byte; 245 3 if segr=rcs then return 2; /* disp always 2 for variable in CS */ 247 3 if offset = 0 then return 0; 249 3 return typecalc(offset); 250 3 end disptype; 251 2 indextype: proc byte; 252 3 if (sflag and iregbit) <> 0 then$do 254 4 if (sflag and bregbit) <> 0 then return 0; 256 4 return 1; 257 4 end$if; 258 3 return 2; 259 3 end indextype; 260 2 offset=opr.offset; /* pick up operand attributes */ PL/M-86 COMPILER CODEMACRO SUBROUTINE MODULE 10/5/81 PAGE 7 261 2 stype=opr.stype; 262 2 sflag=opr.sflag; 263 2 segr=shr(sflag,segtypecount) and 3; 264 2 BASEIND = OPR.BASEINDEX AND (BASEREGBIT OR INDEXREGBIT); 265 2 if stype=reg then$do 267 3 rmfield=offset; 268 3 modfield=11b; 269 3 dispflag=0; 270 3 else$do 272 3 if (sflag and (iregbit or bregbit)) = 0 then$do 274 4 rmfield=110b; 275 4 modfield=0; 276 4 dispflag=2; 277 4 else$do 279 4 dispflag=disptype; /* get no of DISP bytes */ 280 4 modfield=dispflag; 281 4 do case indextype; /* both base- and index-reg */ 282 5 RMFIELD = BASEIND AND (INDEXREGBIT OR BASEREGBIT); /* index reg only */ 283 5 RMFIELD = 100B OR (BASEIND AND INDEXREGBIT); 284 5 do; /* base reg only */ 285 6 IF (BASEIND AND BASEREGBIT) > 0 THEN$DO 287 7 rmfield=110b; /* mod=00 and r/m=110B is a special case */ 288 7 if dispflag=0 then$do 290 8 dispflag,modfield=1; 291 8 end$if; else$do 294 7 rmfield=111b; 295 7 end$if; 296 6 end; 297 5 end$case; 298 4 end$if; 299 3 end$if; 300 2 regfield=shl(regfield,3) and 38h; 301 2 modfield=shl(modfield,6) and 0c0h; 302 2 call emitsinglebyte(regfield or modfield or rmfield); 303 2 if dispflag > 0 then$do 305 3 call emitsinglebyte(displow); 306 3 if dispflag=2 then call emitsinglebyte(disphigh); end$if; 309 2 end MODRM; 310 1 mMODRM1rout: proc public; 311 2 dcl regfield byte; 312 2 regfield=bytevar; 313 2 call incrmacroptr; 314 2 call MODRM(regfield,getoperadr); 315 2 end mMODRM1rout; 316 1 mMODRM2rout: proc public; 317 2 dcl regfield byte,pt address,opr based pt operandstruc; PL/M-86 COMPILER CODEMACRO SUBROUTINE MODULE 10/5/81 PAGE 8 318 2 pt=getoperadr; 319 2 regfield=opr.offset; 320 2 call MODRM(regfield,getoperadr); 321 2 end mMODRM2rout; 322 1 mDBITrout: proc public; 323 2 dcl (result,crbit) byte,bittab(8) byte data(1,2,4,8,16,32,64,128); 324 2 join: proc(numb,nobit,noshift); 325 3 dcl (numb,nobit,noshift) byte; 326 3 if noshift > 0 then numb=shr(numb,noshift); 328 3 if nobit < 8 then numb=shl(numb,8-nobit); 330 3 do while (crbit <> 0ffh) and (nobit > 0); 331 4 if (numb and 80h) <> 0 then result=result or bittab(crbit); 333 4 crbit=crbit-1; 334 4 nobit=nobit-1; 335 4 numb=shl(numb,1); 336 4 end$while; 337 3 end join; 338 2 NUMBERBITSrout: proc; 339 3 dcl nobit byte; 340 3 nobit=bytevar; 341 3 call incrmacroptr; 342 3 call join(bytevar,nobit,0); 343 3 call incrmacroptr; 344 3 end NUMBERBITSrout; 345 2 FORMBITSrout: proc; 346 3 dcl (nobit,numb) byte,pt address,opr based pt operandstruc; 347 3 nobit=bytevar; 348 3 call incrmacroptr; 349 3 pt=getoperadr; 350 3 numb=opr.offset; 351 3 call join(numb,nobit,bytevar); 352 3 call incrmacroptr; 353 3 end FORMBITSrout; 354 2 result=0; 355 2 crbit=7; /* current bit position */ 356 2 do while bytevar <> mendbit; /* do until ENDBIT command */ 357 3 do case commandtype(bytevar,length(bitcomtab),.bitcomtab); 358 4 call NUMBERBITSrout; 359 4 call FORMBITSrout; 360 4 do; end; 362 4 end$case; 363 3 end$while; 364 2 call incrmacroptr; /* skip ENDBIT command */ 365 2 call emitsinglebyte(result); 366 2 end mDBITrout; PL/M-86 COMPILER CODEMACRO SUBROUTINE MODULE 10/5/81 PAGE 9 $eject /********* ROUTINES TO MATCH OPERANDS TO INSTRUCTION ********/ /* test user operand against codemacro parameter */ 367 1 matchsingleop: proc(opno) byte; 368 2 dcl (match,specletter,modletter,range,rangetype) byte, (rangev1,rangev2,opno) byte, pt address, oper based pt operandstruc; 369 2 rangetest: proc byte; /* perform rangetest */ 370 3 dcl opervalue byte; 371 3 rangev1=bytevar; 372 3 call incrmacroptr; 373 3 if range=doublerange then$do 375 4 rangev2=bytevar; 376 4 call incrmacroptr; 377 4 end$if; 378 3 opervalue=oper.offset; 379 3 if range=doublerange then$do 381 4 return ((opervalue>=rangev1) and (opervalue<=rangev2)); 382 4 else$do 384 4 return (opervalue=rangev1); 385 4 end$if; 386 3 end rangetest; 387 2 modlettertest: proc byte; 388 3 dcl numb addr,(styp,modbyt) byte; 389 3 styp=oper.stype; 390 3 if styp=lab then return true; 392 3 modbyt=oper.sflag and typebit; 393 3 if styp = reg then return (modbyt=modletter); 395 3 if styp = variable then 396 3 return ((modbyt=nomod) or (modbyt=modletter)); 397 3 if styp=number then$do 399 4 numb=oper.offset; 400 4 do case modletter-1; 401 5 return not wrdtest(numb); /* BYTE */ 402 5 return wrdtest(numb); /* WORD */ 403 5 return (typecalc(numb)=byt); /* signed BYTE */ 404 5 return false; /* DWORD */ 405 5 end$case; 406 4 end$if; 407 3 return false; 408 3 end modlettertest; 409 2 speclettertest: proc byte; 410 3 dcl (opertype,locvalue,loctype) byte; 411 3 memtest: proc byte; 412 4 return (opertype=variable); 413 4 end memtest; 414 3 opertype=oper.stype; 415 3 locvalue=oper.offset; 416 3 loctype=oper.sflag and typebit; 417 3 do case specletter; PL/M-86 COMPILER CODEMACRO SUBROUTINE MODULE 10/5/81 PAGE 10 /* A - accumulator (AX or AL) */ 418 4 return ((opertype=reg) and (locvalue=rax)); /* C - code reference,i.e. label */ 419 4 return (opertype=lab); /* D - immediate data */ 420 4 return (opertype=number); /* E - effective address, i.e. memory address or register */ 421 4 return (memtest or (opertype=reg)); /* M - memory address */ 422 4 return memtest; /* R - register except segment register */ 423 4 return ((opertype=reg) and (loctype <> dwrd)); /* S - segment register */ 424 4 return ((opertype=reg) and (loctype = dwrd)); /* X - memory address without indexing */ 425 4 return ((opertype=variable) and ((oper.sflag and (iregbit or bregbit))=0)); 426 4 end$case; 427 3 end speclettertest; 428 2 specletter=bytevar; /* pick up codemacro attributes */ 429 2 call incrmacroptr; 430 2 modletter=bytevar and modletter$bit; 431 2 range=bytevar and range$and; 432 2 rangetype=bytevar and rangetype$and; 433 2 call incrmacroptr; 434 2 pt=.operands(opno); /* address of current user operand */ 435 2 match=true; 436 2 if range <> norange then match=rangetest; 438 2 if modletter <> 0 then match=match and modlettertest; 440 2 if match then match=speclettertest; 442 2 return match; 443 2 end matchsingleop; /* test if operands match a specific codemacro */ 444 1 matchingops: proc byte; 445 2 dcl savept address,(nopara,match,parno) byte; 446 2 savept=macroptr; 447 2 call incrmacroptr; /* macroptr=macroptr+2 */ 448 2 call incrmacroptr; 449 2 nopara=bytevar; /* pick up no of parameters */ 450 2 call incrmacroptr; /* advance to first formal */ 451 2 if (nopara and prefix$on) <> 0 then return true; /* PREFIX */ 453 2 if nopara <> nooper then$do 455 3 match=false; 456 3 else$do 458 3 match=true; 459 3 parno=0ffh; 460 3 do while (parno:=parno+1) < nopara; 461 4 match=match and matchsingleop(parno); 462 4 end$while; 463 3 end$if; 464 2 if not match then macroptr=savept; 466 2 return match; 467 2 end matchingops; PL/M-86 COMPILER CODEMACRO SUBROUTINE MODULE 10/5/81 PAGE 11 /* test if operands match instruction */ 468 1 searchformatch: proc byte public; 469 2 dcl next based macroptr address; 470 2 macroptr=firstmacroptr; 471 2 do forever; 472 3 if matchingops then return true; 474 3 if next=0 then return false; 476 3 macroptr=next; 477 3 end$forever; 478 2 end searchformatch; 479 1 end$module cmsubr; PL/M-86 COMPILER CODEMACRO SUBROUTINE MODULE 10/5/81 PAGE 12 CROSS-REFERENCE LISTING ----------------------- DEFN ADDR SIZE NAME, ATTRIBUTES, AND REFERENCES ----- ------ ----- -------------------------------- 89 0000H 4 ABSADDR. . . . . . BYTE ARRAY(4) EXTERNAL(25) 181 183 192 194 2 ADDR . . . . . . . LITERALLY 32 35 38 41 47 65 68 71 74 89 90 120 150 160 165 173 187 198 210 243 317 346 368 388 90 0000H 2 ADDRVAR. . . . . . WORD BASED(MACROPTR) 155 55 0000H ALPHANUMERIC . . . PROCEDURE BYTE EXTERNAL(14) STACK=0000H 58 0000H ASCIICHAR. . . . . PROCEDURE BYTE EXTERNAL(15) STACK=0000H 243 007FH 1 BASEIND. . . . . . BYTE 264 282 283 285 160 0008H 1 BASEINDEX. . . . . BYTE MEMBER(OPR) 198 0008H 1 BASEINDEX. . . . . BYTE MEMBER(OPR) 202 346 0008H 1 BASEINDEX. . . . . BYTE MEMBER(OPR) 165 0008H 1 BASEINDEX. . . . . BYTE MEMBER(OPR) 173 0008H 1 BASEINDEX. . . . . BYTE MEMBER(OPR) 210 0008H 1 BASEINDEX. . . . . BYTE MEMBER(OPR) 212 217 89 0008H 1 BASEINDEX. . . . . BYTE MEMBER(OPERANDS) 187 0008H 1 BASEINDEX. . . . . BYTE MEMBER(OPR) 150 0008H 1 BASEINDEX. . . . . BYTE MEMBER(OPR) 317 0008H 1 BASEINDEX. . . . . BYTE MEMBER(OPR) 243 0008H 1 BASEINDEX. . . . . BYTE MEMBER(OPR) 264 368 0008H 1 BASEINDEX. . . . . BYTE MEMBER(OPER) 88 BASEREGBIT . . . . LITERALLY 264 282 285 88 BASEREGCOUNT . . . LITERALLY 212 90 0000H 2 BITCOMTAB. . . . . BYTE ARRAY(2) DATA 357 323 0006H 8 BITTAB . . . . . . BYTE ARRAY(8) DATA 332 88 BREGBIT. . . . . . LITERALLY 213 254 272 425 88 BREGCOUNT. . . . . LITERALLY 4 BYT. . . . . . . . LITERALLY 403 120 0004H 1 BYT1 . . . . . . . BYTE AT AUTOMATIC 121 120 0005H 1 BYT2 . . . . . . . BYTE AT AUTOMATIC 122 90 0000H 1 BYTEVAR. . . . . . BYTE BASED(MACROPTR) 129 146 199 312 340 342 347 351 356 357 371 375 428 430 431 432 449 111 0004H 1 CH . . . . . . . . BYTE PARAMETER AUTOMATIC 112 115 80 0000H 1 CH . . . . . . . . BYTE PARAMETER 81 49 0000H 1 CH . . . . . . . . BYTE PARAMETER 50 52 0000H 1 CH . . . . . . . . BYTE PARAMETER 53 58 0000H 1 CH . . . . . . . . BYTE PARAMETER 59 55 0000H 1 CH . . . . . . . . BYTE PARAMETER 56 61 0000H 1 CH . . . . . . . . BYTE PARAMETER 62 134 0000H 1 CH . . . . . . . . BYTE BASED(PT) ARRAY(1) 137 46 0000H 1 CH . . . . . . . . BYTE PARAMETER 47 89 0000H 2 CIP. . . . . . . . WORD EXTERNAL(26) 175 191 91 0000H 10 CLEARCMINDEX . . . PROCEDURE PUBLIC STACK=0002H 1 0000H CMSUBR . . . . . . PROCEDURE STACK=0000H 3 CODE . . . . . . . LITERALLY 133 00C3H 50 COMMANDTYPE. . . . PROCEDURE BYTE PUBLIC STACK=000CH 357 133 0008H 1 COMNO. . . . . . . BYTE PARAMETER AUTOMATIC 134 137 37 0000H COPY . . . . . . . PROCEDURE EXTERNAL(8) STACK=0000H PL/M-86 COMPILER CODEMACRO SUBROUTINE MODULE 10/5/81 PAGE 13 2 CR . . . . . . . . LITERALLY 323 0083H 1 CRBIT. . . . . . . BYTE 330 332 333 355 16 CSDATA . . . . . . LITERALLY 98 108 89 0000H 2 CSEGVALUE. . . . . WORD EXTERNAL(27) 176 189 11 CSOVER . . . . . . LITERALLY 227 16 CSVALUE. . . . . . LITERALLY 37 0000H 2 D. . . . . . . . . WORD PARAMETER 38 73 0000H 2 D. . . . . . . . . WORD PARAMETER 74 70 0000H 2 D. . . . . . . . . WORD PARAMETER 71 67 0000H 2 D. . . . . . . . . WORD PARAMETER 68 64 0000H 2 D. . . . . . . . . WORD PARAMETER 65 2 DCL. . . . . . . . LITERALLY 73 0000H DECOUT . . . . . . PROCEDURE EXTERNAL(20) STACK=0000H 3 DELETEDSYMB. . . . LITERALLY 49 0000H DIGIT. . . . . . . PROCEDURE BYTE EXTERNAL(12) STACK=0000H 243 007BH 1 DISPFLAG . . . . . BYTE 269 276 279 280 288 290 303 306 243 0013H 1 DISPHIGH . . . . . BYTE AT 307 173 000AH 2 DISPL. . . . . . . WORD 175 176 180 243 0012H 1 DISPLOW. . . . . . BYTE AT 305 244 03F0H 34 DISPTYPE . . . . . PROCEDURE BYTE STACK=0006H 279 3 DOUBLEDEFINED. . . LITERALLY 15 DOUBLERANGE. . . . LITERALLY 373 379 16 DRCODEDATA . . . . LITERALLY 16 DRCODESEGM . . . . LITERALLY 16 DRDATADATA . . . . LITERALLY 16 DRDATASEGM . . . . LITERALLY 16 DREXTRADATA. . . . LITERALLY 16 DREXTRASEGM. . . . LITERALLY 16 DRSTACKDATA. . . . LITERALLY 16 DRSTACKSEGM. . . . LITERALLY 16 DSDATA . . . . . . LITERALLY 11 DSOVER . . . . . . LITERALLY 235 211 02CDH 45 DSOVERTEST . . . . PROCEDURE BYTE STACK=0004H 230 234 16 DSVALUE. . . . . . LITERALLY 4 DWRD . . . . . . . LITERALLY 423 424 2 ELSEDO . . . . . . LITERALLY 291 94 000AH 40 EMIT . . . . . . . PROCEDURE PUBLIC STACK=0008H 90 001EH 80 EMITBYTE . . . . . BYTE ARRAY(80) 98 115 80 0000H EMITCODEBYTE . . . PROCEDURE EXTERNAL(23) STACK=0000H 98 108 101 0032H 56 EMITDUMMIES. . . . PROCEDURE PUBLIC STACK=0008H 90 006EH 1 EMITINDEX. . . . . BYTE 92 97 115 116 76 0000H EMITINIT . . . . . PROCEDURE EXTERNAL(21) STACK=0000H 111 006AH 31 EMITSINGLEBYTE . . PROCEDURE STACK=0004H 121 122 146 152 180 239 302 305 307 365 119 0089H 19 EMITSINGLEWORD . . PROCEDURE STACK=000AH 155 162 169 170 191 78 0000H EMITTERMINATE. . . PROCEDURE EXTERNAL(22) STACK=0000H 29 0000H EMPTYLINE. . . . . PROCEDURE BYTE EXTERNAL(5) STACK=0000H 2 ENDCASE. . . . . . LITERALLY 2 ENDDO. . . . . . . LITERALLY 2 ENDFOREVER . . . . LITERALLY 2 ENDIF. . . . . . . LITERALLY 239 307 2 ENDMODULE. . . . . LITERALLY 2 ENDOFFILE. . . . . LITERALLY 2 ENDPROC. . . . . . LITERALLY 2 ENDWHILE . . . . . LITERALLY 141 16 EOFTYPE. . . . . . LITERALLY PL/M-86 COMPILER CODEMACRO SUBROUTINE MODULE 10/5/81 PAGE 14 64 0000H EQUAL. . . . . . . PROCEDURE BYTE EXTERNAL(17) STACK=0000H 83 0000H ERRMSG . . . . . . PROCEDURE EXTERNAL(24) STACK=0000H 168 178 190 83 0000H 1 ERRNO. . . . . . . BYTE PARAMETER 84 3 ERROR. . . . . . . LITERALLY 16 ESDATA . . . . . . LITERALLY 11 ESOVER . . . . . . LITERALLY 223 16 ESVALUE. . . . . . LITERALLY 2 FALSE. . . . . . . LITERALLY 404 407 455 475 43 0000H 2 FCBADR . . . . . . WORD PARAMETER 44 43 0000H FILEABORT. . . . . PROCEDURE EXTERNAL(10) STACK=0000H 46 0000H FILL . . . . . . . PROCEDURE EXTERNAL(11) STACK=0000H 89 0000H 2 FIRSTMACROPTR. . . WORD EXTERNAL(29) 470 198 0074H 1 FLAG . . . . . . . BYTE 204 205 2 FOREVER. . . . . . LITERALLY 471 345 0536H 53 FORMBITSROUT . . . PROCEDURE STACK=000EH 359 2 FORMFEED . . . . . LITERALLY 89 0000H 1 FULLSYMBTAB. . . . BYTE EXTERNAL(31) 127 00A5H 30 GETOPERADR . . . . PROCEDURE WORD STACK=0006H 151 161 166 174 188 201 215 314 318 320 349 67 0000H HEX1OUT. . . . . . PROCEDURE EXTERNAL(18) STACK=0000H 70 0000H HEX2OUT. . . . . . PROCEDURE EXTERNAL(19) STACK=0000H 183 194 134 0072H 1 I. . . . . . . . . BYTE 135 136 137 140 102 0070H 1 I. . . . . . . . . BYTE 106 107 95 006FH 1 I. . . . . . . . . BYTE 96 97 98 3 IDENT. . . . . . . LITERALLY 124 009CH 9 INCRMACROPTR . . . PROCEDURE STACK=0002H 130 139 147 156 157 200 313 341 343 348 352 364 372 376 429 433 447 448 450 88 INDEXREGBIT. . . . LITERALLY 264 282 283 88 INDEXREGCOUNT. . . LITERALLY 251 0412H 29 INDEXTYPE. . . . . PROCEDURE BYTE STACK=0002H 281 2 INIT . . . . . . . LITERALLY 16 INTELDATA. . . . . LITERALLY 16 INTELSEGMENT . . . LITERALLY 88 IREGBIT. . . . . . LITERALLY 252 272 425 88 IREGCOUNT. . . . . LITERALLY 102 0071H 1 J. . . . . . . . . BYTE 103 104 105 107 324 04B6H 92 JOIN . . . . . . . PROCEDURE STACK=000AH 342 351 3 LAB. . . . . . . . LITERALLY 390 419 86 LABOUTOFRANGE. . . LITERALLY 178 190 7 LEFTBRACKET. . . . LITERALLY 150 0000H 2 LENGTH . . . . . . WORD MEMBER(OPR) 346 0000H 2 LENGTH . . . . . . WORD MEMBER(OPR) 160 0000H 2 LENGTH . . . . . . WORD MEMBER(OPR) 210 0000H 2 LENGTH . . . . . . WORD MEMBER(OPR) 165 0000H 2 LENGTH . . . . . . WORD MEMBER(OPR) 317 0000H 2 LENGTH . . . . . . WORD MEMBER(OPR) 187 0000H 2 LENGTH . . . . . . WORD MEMBER(OPR) 173 0000H 2 LENGTH . . . . . . WORD MEMBER(OPR) 198 0000H 2 LENGTH . . . . . . WORD MEMBER(OPR) 368 0000H 2 LENGTH . . . . . . WORD MEMBER(OPER) 243 0000H 2 LENGTH . . . . . . WORD MEMBER(OPR) LENGTH . . . . . . BUILTIN 357 89 0000H 2 LENGTH . . . . . . WORD MEMBER(OPERANDS) 52 0000H LETTER . . . . . . PROCEDURE BYTE EXTERNAL(13) STACK=0000H 2 LF . . . . . . . . LITERALLY PL/M-86 COMPILER CODEMACRO SUBROUTINE MODULE 10/5/81 PAGE 15 133 0006H 1 LG . . . . . . . . BYTE PARAMETER AUTOMATIC 134 136 143 2 LIT. . . . . . . . LITERALLY 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 86 87 88 410 0093H 1 LOCTYPE. . . . . . BYTE 416 423 424 410 0092H 1 LOCVALUE . . . . . BYTE 415 418 89 0000H 2 MACROPTR . . . . . WORD EXTERNAL(30) 90 125 129 146 155 199 312 340 342 347 351 356 357 371 375 428 430 431 432 446 449 465 469 470 474 476 368 0087H 1 MATCH. . . . . . . BYTE 435 437 439 440 441 442 445 0095H 1 MATCH. . . . . . . BYTE 455 458 461 464 466 444 07AEH 108 MATCHINGOPS. . . . PROCEDURE BYTE STACK=0010H 472 367 056BH 111 MATCHSINGLEOP. . . PROCEDURE BYTE STACK=000CH 461 8 MDBF . . . . . . . LITERALLY 149 0106H 21 MDBFROUT . . . . . PROCEDURE PUBLIC STACK=000AH 8 MDBIT. . . . . . . LITERALLY 322 046BH 75 MDBITROUT. . . . . PROCEDURE PUBLIC STACK=0012H 8 MDBN . . . . . . . LITERALLY 145 00F5H 17 MDBNROUT . . . . . PROCEDURE PUBLIC STACK=0008H 8 MDDF . . . . . . . LITERALLY 164 0144H 47 MDDFROUT . . . . . PROCEDURE PUBLIC STACK=000EH 8 MDWF . . . . . . . LITERALLY 159 012FH 21 MDWFROUT . . . . . PROCEDURE PUBLIC STACK=000EH 8 MDWN . . . . . . . LITERALLY 154 011BH 20 MDWNROUT . . . . . PROCEDURE PUBLIC STACK=000EH 411 079FH 15 MEMTEST. . . . . . PROCEDURE BYTE STACK=0002H 421 422 8 MENDBIT. . . . . . LITERALLY 356 8 MENDM. . . . . . . LITERALLY 8 MFORMALBITS. . . . LITERALLY 90 86 MISSSEGMINFO . . . LITERALLY 168 8 MMODRM1. . . . . . LITERALLY 310 042FH 28 MMODRM1ROUT. . . . PROCEDURE PUBLIC STACK=0012H 8 MMODRM2. . . . . . LITERALLY 316 044BH 32 MMODRM2ROUT. . . . PROCEDURE PUBLIC STACK=0012H 8 MNOSEGFIX. . . . . LITERALLY 197 0218H 60 MNOSEGFIXROUT. . . PROCEDURE PUBLIC STACK=000AH 8 MNUMBERBITS. . . . LITERALLY 90 10 MODB . . . . . . . LITERALLY 388 0090H 1 MODBYT . . . . . . BYTE 392 394 396 10 MODD . . . . . . . LITERALLY 243 0079H 1 MODFIELD . . . . . BYTE 268 275 280 290 301 302 368 0089H 1 MODLETTER. . . . . BYTE 394 396 400 430 438 14 MODLETTERBIT . . . LITERALLY 430 14 MODLETTERCOUNT . . LITERALLY 387 063AH 162 MODLETTERTEST. . . PROCEDURE BYTE STACK=0006H 439 242 02FAH 246 MODRM. . . . . . . PROCEDURE STACK=000EH 314 320 10 MODSB. . . . . . . LITERALLY 10 MODW . . . . . . . LITERALLY 8 MRELB. . . . . . . LITERALLY 172 0173H 96 MRELBROUT. . . . . PROCEDURE PUBLIC STACK=000AH 8 MRELW. . . . . . . LITERALLY 186 01D3H 69 MRELWROUT. . . . . PROCEDURE PUBLIC STACK=000EH 8 MSEGFIX. . . . . . LITERALLY 209 0254H 121 MSEGFIXROUT. . . . PROCEDURE PUBLIC STACK=000AH 73 0000H 2 N. . . . . . . . . WORD PARAMETER 74 70 0000H 2 N. . . . . . . . . WORD PARAMETER 71 PL/M-86 COMPILER CODEMACRO SUBROUTINE MODULE 10/5/81 PAGE 16 67 0000H 1 N. . . . . . . . . BYTE PARAMETER 68 64 0000H 1 N. . . . . . . . . BYTE PARAMETER 65 46 0000H 1 N. . . . . . . . . BYTE PARAMETER 47 34 0000H 2 N. . . . . . . . . WORD PARAMETER 35 37 0000H 1 N. . . . . . . . . BYTE PARAMETER 38 3 NEGLECTED. . . . . LITERALLY 469 0000H 2 NEXT . . . . . . . WORD BASED(MACROPTR) 474 476 4 NIL. . . . . . . . LITERALLY 339 0084H 1 NOBIT. . . . . . . BYTE 340 342 346 0085H 1 NOBIT. . . . . . . BYTE 347 351 324 0006H 1 NOBIT. . . . . . . BYTE PARAMETER AUTOMATIC 325 328 329 330 334 102 0002H 4 NODUM. . . . . . . BYTE ARRAY(4) DATA 107 89 0000H 1 NOERROR. . . . . . BYTE EXTERNAL(28) 113 206 10 NOMOD. . . . . . . LITERALLY 396 89 0000H 1 NOOPER . . . . . . BYTE EXTERNAL(32) 103 453 88 NOOVERCOUNT. . . . LITERALLY 88 NOOVERRIDEBIT. . . LITERALLY 202 217 445 0094H 1 NOPARA . . . . . . BYTE 449 451 453 460 12 NOPARAND . . . . . LITERALLY 15 NORANGE. . . . . . LITERALLY 436 324 0004H 1 NOSHIFT. . . . . . BYTE PARAMETER AUTOMATIC 325 326 327 346 0086H 1 NUMB . . . . . . . BYTE 350 351 324 0008H 1 NUMB . . . . . . . BYTE PARAMETER AUTOMATIC 325 327 329 331 335 388 001AH 2 NUMB . . . . . . . WORD 399 401 402 403 3 NUMBER . . . . . . LITERALLY 397 420 338 0512H 36 NUMBERBITSROUT . . PROCEDURE STACK=000EH 358 15 NUMBERRANGE. . . . LITERALLY 7 OAND . . . . . . . LITERALLY 7 OEQ. . . . . . . . LITERALLY 346 0006H 2 OFFSET . . . . . . WORD MEMBER(OPR) 350 317 0006H 2 OFFSET . . . . . . WORD MEMBER(OPR) 319 243 0006H 2 OFFSET . . . . . . WORD MEMBER(OPR) 260 198 0006H 2 OFFSET . . . . . . WORD MEMBER(OPR) 187 0006H 2 OFFSET . . . . . . WORD MEMBER(OPR) 191 194 173 0006H 2 OFFSET . . . . . . WORD MEMBER(OPR) 175 183 165 0006H 2 OFFSET . . . . . . WORD MEMBER(OPR) 169 160 0006H 2 OFFSET . . . . . . WORD MEMBER(OPR) 162 150 0006H 2 OFFSET . . . . . . WORD MEMBER(OPR) 152 210 0006H 2 OFFSET . . . . . . WORD MEMBER(OPR) 89 0006H 2 OFFSET . . . . . . WORD MEMBER(OPERANDS) 243 0012H 2 OFFSET . . . . . . WORD 243 247 249 260 267 368 0006H 2 OFFSET . . . . . . WORD MEMBER(OPER) 378 399 415 7 OGE. . . . . . . . LITERALLY 7 OGT. . . . . . . . LITERALLY 7 OLAST. . . . . . . LITERALLY 7 OLE. . . . . . . . LITERALLY 7 OLENGTH. . . . . . LITERALLY 7 OLT. . . . . . . . LITERALLY 7 OMOD . . . . . . . LITERALLY 7 ONE. . . . . . . . LITERALLY 7 ONOT . . . . . . . LITERALLY 7 OOFFSET. . . . . . LITERALLY 7 OOR. . . . . . . . LITERALLY 368 0000H 9 OPER . . . . . . . STRUCTURE BASED(PT) 378 389 392 399 414 415 416 425 PL/M-86 COMPILER CODEMACRO SUBROUTINE MODULE 10/5/81 PAGE 17 89 0000H 36 OPERANDS . . . . . STRUCTURE ARRAY(4) EXTERNAL(33) 129 434 87 OPERANDSTRUC . . . LITERALLY 89 150 160 165 173 187 198 210 243 317 346 368 3 OPERATOR . . . . . LITERALLY 410 0091H 1 OPERTYPE . . . . . BYTE 412 414 418 419 420 421 423 424 425 370 008EH 1 OPERVALUE. . . . . BYTE 378 381 384 367 0004H 1 OPNO . . . . . . . BYTE PARAMETER AUTOMATIC 368 434 346 0000H 9 OPR. . . . . . . . STRUCTURE BASED(PT) 350 317 0000H 9 OPR. . . . . . . . STRUCTURE BASED(PT) 319 210 0000H 9 OPR. . . . . . . . STRUCTURE BASED(PT) 212 216 217 198 0000H 9 OPR. . . . . . . . STRUCTURE BASED(PT) 202 204 187 0000H 9 OPR. . . . . . . . STRUCTURE BASED(PT) 189 191 194 173 0000H 9 OPR. . . . . . . . STRUCTURE BASED(PT) 175 176 183 165 0000H 9 OPR. . . . . . . . STRUCTURE BASED(PT) 167 169 170 160 0000H 9 OPR. . . . . . . . STRUCTURE BASED(PT) 162 150 0000H 9 OPR. . . . . . . . STRUCTURE BASED(PT) 152 243 0000H 9 OPR. . . . . . . . STRUCTURE BASED(PT) 260 261 262 264 7 OPTR . . . . . . . LITERALLY 7 OSEG . . . . . . . LITERALLY 7 OSHL . . . . . . . LITERALLY 7 OSHORT . . . . . . LITERALLY 7 OSHR . . . . . . . LITERALLY 7 OTYPE. . . . . . . LITERALLY 40 0000H OUTTEXT. . . . . . PROCEDURE EXTERNAL(9) STACK=0000H 210 0077H 1 OVERRIDE . . . . . BYTE 222 226 230 234 238 7 OXOR . . . . . . . LITERALLY 445 0096H 1 PARNO. . . . . . . BYTE 459 460 461 6 PCODEMACRO . . . . LITERALLY 6 PCSEG. . . . . . . LITERALLY 6 PDB. . . . . . . . LITERALLY 6 PDBIT. . . . . . . LITERALLY 6 PDD. . . . . . . . LITERALLY 6 PDSEG. . . . . . . LITERALLY 6 PDW. . . . . . . . LITERALLY 6 PEJECT . . . . . . LITERALLY 6 PEND . . . . . . . LITERALLY 6 PENDIF . . . . . . LITERALLY 6 PENDM. . . . . . . LITERALLY 6 PEQU . . . . . . . LITERALLY 6 PESEG. . . . . . . LITERALLY 6 PIF. . . . . . . . LITERALLY 6 PIFLIST. . . . . . LITERALLY 6 PINCLUDE . . . . . LITERALLY 6 PLIST. . . . . . . LITERALLY 6 PMODRM . . . . . . LITERALLY 6 PNOIFLIST. . . . . LITERALLY 6 PNOLIST. . . . . . LITERALLY 6 PNOSEGFIX. . . . . LITERALLY 6 PORG . . . . . . . LITERALLY 6 PPAGESIZE. . . . . LITERALLY 6 PPAGEWIDTH . . . . LITERALLY 6 PRB. . . . . . . . LITERALLY 12 PREFIXAND. . . . . LITERALLY 13 PREFIXON . . . . . LITERALLY 451 6 PRELB. . . . . . . LITERALLY 6 PRELW. . . . . . . LITERALLY PL/M-86 COMPILER CODEMACRO SUBROUTINE MODULE 10/5/81 PAGE 18 2 PROC . . . . . . . LITERALLY 17 19 21 23 26 29 31 34 55 58 67 70 73 76 78 80 83 91 94 101 111 119 124 127 133 145 149 154 159 164 172 186 197 209 211 242 244 251 310 316 322 324 338 345 367 369 387 409 411 444 468 6 PRS. . . . . . . . LITERALLY 6 PRW. . . . . . . . LITERALLY 6 PSEGFIX. . . . . . LITERALLY 3 PSEUDO . . . . . . LITERALLY 6 PSIMFORM . . . . . LITERALLY 6 PSSEG. . . . . . . LITERALLY 346 0016H 2 PT . . . . . . . . WORD 346 349 350 317 0014H 2 PT . . . . . . . . WORD 317 318 319 210 0010H 2 PT . . . . . . . . WORD 210 212 215 216 217 198 000EH 2 PT . . . . . . . . WORD 198 201 202 204 187 000CH 2 PT . . . . . . . . WORD 187 188 189 191 194 173 0008H 2 PT . . . . . . . . WORD 173 174 175 176 183 165 0006H 2 PT . . . . . . . . WORD 165 166 167 169 170 160 0004H 2 PT . . . . . . . . WORD 160 161 162 150 0002H 2 PT . . . . . . . . WORD 150 151 152 133 0004H 2 PT . . . . . . . . WORD PARAMETER AUTOMATIC 134 137 128 0000H 2 PT . . . . . . . . WORD 129 131 242 0004H 2 PT . . . . . . . . WORD PARAMETER AUTOMATIC 243 260 261 262 264 46 0000H 2 PT . . . . . . . . WORD PARAMETER 47 368 0018H 2 PT . . . . . . . . WORD 368 378 389 392 399 414 415 416 425 434 6 PTITLE . . . . . . LITERALLY 5 RAH. . . . . . . . LITERALLY 5 RAL. . . . . . . . LITERALLY 368 008AH 1 RANGE. . . . . . . BYTE 373 379 431 436 15 RANGEAND . . . . . LITERALLY 431 14 RANGESPECBIT . . . LITERALLY 14 RANGESPECCOUNT . . LITERALLY 369 05DAH 96 RANGETEST. . . . . PROCEDURE BYTE STACK=0006H 437 368 008BH 1 RANGETYPE. . . . . BYTE 432 15 RANGETYPEAND . . . LITERALLY 432 368 008CH 1 RANGEV1. . . . . . BYTE 371 381 384 368 008DH 1 RANGEV2. . . . . . BYTE 375 381 5 RAX. . . . . . . . LITERALLY 418 5 RBH. . . . . . . . LITERALLY 5 RBL. . . . . . . . LITERALLY 5 RBP. . . . . . . . LITERALLY 5 RBX. . . . . . . . LITERALLY 5 RCH. . . . . . . . LITERALLY 5 RCL. . . . . . . . LITERALLY 5 RCS. . . . . . . . LITERALLY 245 5 RCX. . . . . . . . LITERALLY 5 RDH. . . . . . . . LITERALLY 5 RDI. . . . . . . . LITERALLY 5 RDL. . . . . . . . LITERALLY 5 RDS. . . . . . . . LITERALLY 5 RDX. . . . . . . . LITERALLY 2 REENT. . . . . . . LITERALLY 3 REG. . . . . . . . LITERALLY 265 393 418 421 423 424 317 0081H 1 REGFIELD . . . . . BYTE 319 320 PL/M-86 COMPILER CODEMACRO SUBROUTINE MODULE 10/5/81 PAGE 19 311 0080H 1 REGFIELD . . . . . BYTE 312 314 242 0006H 1 REGFIELD . . . . . BYTE PARAMETER AUTOMATIC 243 300 302 15 REGISTERRANGE. . . LITERALLY 5 RES. . . . . . . . LITERALLY 323 0082H 1 RESULT . . . . . . BYTE 332 354 365 7 RIGHTBRACKET . . . LITERALLY 243 007AH 1 RMFIELD. . . . . . BYTE 267 274 282 283 287 294 302 5 RSI. . . . . . . . LITERALLY 5 RSP. . . . . . . . LITERALLY 5 RSS. . . . . . . . LITERALLY 64 0000H 2 S. . . . . . . . . WORD PARAMETER 65 37 0000H 2 S. . . . . . . . . WORD PARAMETER 38 445 001CH 2 SAVEPT . . . . . . WORD 446 465 19 0000H SCAN . . . . . . . PROCEDURE EXTERNAL(1) STACK=0000H 17 0000H SCANINIT . . . . . PROCEDURE EXTERNAL(0) STACK=0000H 468 081AH 43 SEARCHFORMATCH . . PROCEDURE BYTE PUBLIC STACK=0014H 88 SEGMBIT. . . . . . LITERALLY 167 88 SEGMCOUNT. . . . . LITERALLY 368 0004H 2 SEGMENT. . . . . . WORD MEMBER(OPER) 346 0004H 2 SEGMENT. . . . . . WORD MEMBER(OPR) 317 0004H 2 SEGMENT. . . . . . WORD MEMBER(OPR) 243 0004H 2 SEGMENT. . . . . . WORD MEMBER(OPR) 210 0004H 2 SEGMENT. . . . . . WORD MEMBER(OPR) 198 0004H 2 SEGMENT. . . . . . WORD MEMBER(OPR) 187 0004H 2 SEGMENT. . . . . . WORD MEMBER(OPR) 189 173 0004H 2 SEGMENT. . . . . . WORD MEMBER(OPR) 176 165 0004H 2 SEGMENT. . . . . . WORD MEMBER(OPR) 170 160 0004H 2 SEGMENT. . . . . . WORD MEMBER(OPR) 150 0004H 2 SEGMENT. . . . . . WORD MEMBER(OPR) 89 0004H 2 SEGMENT. . . . . . WORD MEMBER(OPERANDS) 243 007EH 1 SEGR . . . . . . . BYTE 245 263 210 0076H 1 SEGR . . . . . . . BYTE 212 213 219 220 223 227 231 235 239 198 0073H 1 SEGR . . . . . . . BYTE 199 206 198 0075H 1 SEGT . . . . . . . BYTE 205 206 88 SEGTYPEBIT . . . . LITERALLY 88 SEGTYPECOUNT . . . LITERALLY 205 219 263 368 0003H 1 SFLAG. . . . . . . BYTE MEMBER(OPER) 392 416 425 346 0003H 1 SFLAG. . . . . . . BYTE MEMBER(OPR) 317 0003H 1 SFLAG. . . . . . . BYTE MEMBER(OPR) 243 007DH 1 SFLAG. . . . . . . BYTE 252 254 262 263 272 243 0003H 1 SFLAG. . . . . . . BYTE MEMBER(OPR) 262 210 0078H 1 SFLAG. . . . . . . BYTE 213 216 219 210 0003H 1 SFLAG. . . . . . . BYTE MEMBER(OPR) 216 198 0003H 1 SFLAG. . . . . . . BYTE MEMBER(OPR) 204 187 0003H 1 SFLAG. . . . . . . BYTE MEMBER(OPR) 173 0003H 1 SFLAG. . . . . . . BYTE MEMBER(OPR) 165 0003H 1 SFLAG. . . . . . . BYTE MEMBER(OPR) 167 160 0003H 1 SFLAG. . . . . . . BYTE MEMBER(OPR) 150 0003H 1 SFLAG. . . . . . . BYTE MEMBER(OPR) 89 0003H 1 SFLAG. . . . . . . BYTE MEMBER(OPERANDS) SHL. . . . . . . . BUILTIN 300 301 329 335 SHR. . . . . . . . BUILTIN 205 212 219 263 327 15 SINGLERANGE. . . . LITERALLY 21 0000H SKIPRESTOFLINE . . PROCEDURE EXTERNAL(2) STACK=0000H 26 0000H SKIPUNTIL. . . . . PROCEDURE BYTE EXTERNAL(4) STACK=0000H 2 SPACE. . . . . . . LITERALLY 181 192 PL/M-86 COMPILER CODEMACRO SUBROUTINE MODULE 10/5/81 PAGE 20 3 SPEC . . . . . . . LITERALLY 9 SPECA. . . . . . . LITERALLY 9 SPECC. . . . . . . LITERALLY 9 SPECD. . . . . . . LITERALLY 9 SPECE. . . . . . . LITERALLY 23 0000H SPECIALTOKEN . . . PROCEDURE BYTE EXTERNAL(3) STACK=0000H 368 0088H 1 SPECLETTER . . . . BYTE 417 428 409 06DCH 195 SPECLETTERTEST . . PROCEDURE BYTE STACK=0006H 441 9 SPECM. . . . . . . LITERALLY 9 SPECR. . . . . . . LITERALLY 9 SPECS. . . . . . . LITERALLY 9 SPECX. . . . . . . LITERALLY 16 SSDATA . . . . . . LITERALLY 11 SSOVER . . . . . . LITERALLY 231 16 SSVALUE. . . . . . LITERALLY 16 STARTTYPE. . . . . LITERALLY 3 STRING . . . . . . LITERALLY 2 STRUC. . . . . . . LITERALLY 89 150 160 165 173 187 198 210 243 317 346 368 388 008FH 1 STYP . . . . . . . BYTE 389 390 393 395 397 368 0002H 1 STYPE. . . . . . . BYTE MEMBER(OPER) 389 414 346 0002H 1 STYPE. . . . . . . BYTE MEMBER(OPR) 317 0002H 1 STYPE. . . . . . . BYTE MEMBER(OPR) 243 007CH 1 STYPE. . . . . . . BYTE 261 265 243 0002H 1 STYPE. . . . . . . BYTE MEMBER(OPR) 261 210 0002H 1 STYPE. . . . . . . BYTE MEMBER(OPR) 198 0002H 1 STYPE. . . . . . . BYTE MEMBER(OPR) 187 0002H 1 STYPE. . . . . . . BYTE MEMBER(OPR) 173 0002H 1 STYPE. . . . . . . BYTE MEMBER(OPR) 165 0002H 1 STYPE. . . . . . . BYTE MEMBER(OPR) 160 0002H 1 STYPE. . . . . . . BYTE MEMBER(OPR) 150 0002H 1 STYPE. . . . . . . BYTE MEMBER(OPR) 89 0002H 1 STYPE. . . . . . . BYTE MEMBER(OPERANDS) 3 SYMBOL . . . . . . LITERALLY 87 SYMBOLSTRUC. . . . LITERALLY 89 150 160 165 173 187 198 210 243 317 346 368 40 0000H 2 T. . . . . . . . . WORD PARAMETER 41 2 TAB. . . . . . . . LITERALLY 43 0000H 2 TEXTADR. . . . . . WORD PARAMETER 44 2 THENDO . . . . . . LITERALLY 113 137 176 181 192 202 217 252 265 272 285 288 303 373 379 397 453 26 0000H 1 TOK. . . . . . . . BYTE PARAMETER 27 23 0000H 1 TOK. . . . . . . . BYTE PARAMETER 24 2 TRUE . . . . . . . LITERALLY 222 226 391 435 452 458 471 473 80 0000H 1 TYP. . . . . . . . BYTE PARAMETER 81 88 TYPEBIT. . . . . . LITERALLY 392 416 31 0000H TYPECALC . . . . . PROCEDURE BYTE EXTERNAL(6) STACK=0000H 176 249 403 88 TYPECOUNT. . . . . LITERALLY 3 UDEFSYMB . . . . . LITERALLY 61 0000H UPPER. . . . . . . PROCEDURE BYTE EXTERNAL(16) STACK=0000H 31 0000H 2 VAL. . . . . . . . WORD PARAMETER 32 119 0004H 2 VAR. . . . . . . . WORD PARAMETER AUTOMATIC 120 3 VARIABLE . . . . . LITERALLY 395 412 425 4 WRD. . . . . . . . LITERALLY 176 34 0000H WRDTEST. . . . . . PROCEDURE BYTE EXTERNAL(7) STACK=0000H 401 PL/M-86 COMPILER CODEMACRO SUBROUTINE MODULE 10/5/81 PAGE 21 402 MODULE INFORMATION: CODE AREA SIZE = 0845H 2117D CONSTANT AREA SIZE = 000EH 14D VARIABLE AREA SIZE = 0097H 151D MAXIMUM STACK SIZE = 0014H 20D 933 LINES READ 0 PROGRAM ERROR(S) END OF PL/M-86 COMPILATION