wei@princeton.UUCP (P Wei) (07/22/85)
Does anyone have set of macro's which can turn MASM(ibmpc) into structured programming language ? (To be more specific: macro's which can simulate if, then, else, do or for loop---) Is it possible that I can get them via e-mail? Thanks in advance for any help. HP Wei
lotto@talcott.UUCP (Jerry Lotto) (07/25/85)
> Does anyone have set of macro's which can turn MASM(ibmpc) into structured > programming language ? (To be more specific: macro's which can simulate > if, then, else, do or for loop---) > ... > HP Wei > IBM MASM 3.0 comes with SAL (structured assembly language) which is exactly what you are requesting. No one set of MACROS is going to be general enough to do what this package does. However, the Microsoft release of MASM comes with SYMDEB, a wonderful debugger (now that the bugs are pretty much out) with symbolics and (soon) stack dumps too! Personally, I would rather have the tools. -- Gerald Lotto - Harvard Chemistry Dept. UUCP: {seismo,harpo,ihnp4,linus,allegra,ut-sally}!harvard!lhasa!lotto ARPA: lotto@harvard.ARPA CSNET: lotto%harvard@csnet-relay
jph@whuxlm.UUCP (Holtman Jim) (07/26/85)
> > Does anyone have set of macro's which can turn MASM(ibmpc) into structured > > programming language ? (To be more specific: macro's which can simulate > > if, then, else, do or for loop---) > > ... > > HP Wei > > > > IBM MASM 3.0 comes with SAL (structured assembly language) > which is exactly what you are requesting. No one set of MACROS is going > to be general enough to do what this package does. However, the Microsoft > release of MASM comes with SYMDEB, a wonderful debugger (now that > the bugs are pretty much out) with symbolics and (soon) stack dumps > too! Personally, I would rather have the tools. > -- > > Gerald Lotto - Harvard Chemistry Dept. > > UUCP: {seismo,harpo,ihnp4,linus,allegra,ut-sally}!harvard!lhasa!lotto > ARPA: lotto@harvard.ARPA > CSNET: lotto%harvard@csnet-relay *** REPLACE THIS LINE WITH YOUR MESSAGE *** .xlist ; ; COPYRIGHT @ 1982 ; Jim Holtman ; ; Structured Control MACROS for the Assembler ; .$on=1 .cnt=1 .lvl=0 .$top=1 xopsyn macro op1,op2 @&op1 equ op2 @&op2 equ op1 endm xopsyn jbe,ja xopsyn jae,jb xopsyn jc,jnc xopsyn je,jne xopsyn jz,jnz xopsyn jg,jle xopsyn jge,jl xopsyn jno,jo xopsyn jpo,jpe xopsyn jns,js purge xopsyn ; create label .$lbl macro id,num id&num: endm .popdo macro if .$top lt 1 %out stack overflow else .$top = .$top-1 .$get %.$top,.dold endif endm .$get macro entry,value value = .&entry endm .$put macro entry,value .&entry = value endm .pushdo macro x ifnb <x> x = .cnt .cnt = .cnt+1 endif .$put %.$top,.dold .$top = .$top+1 endm .$br macro type,id,label,long local lab ifnb <long> j&type lab jmp id&label lab: else @j&type id&label endif endm .doo macro cond,long .pushdo .dold .lvl = .lvl+1 .$br cond,d@,%.dold,long endm .endif macro .popdo .$lbl d@,%.dold .lvl = .lvl-1 endm .if macro arg1,cond,arg2,long ifb <arg2> .doo arg1,cond else cmp arg1,arg2 .doo cond,long endif endm .ifs macro p1,p2,long test p1,p2 .if nz,long endm .ifc macro p1,p2,long test p1,p2 .if z,long endm .else macro long .doif = .cnt .cnt = .cnt+1 ifnb <long> .$jmp d@,%.doif else .$jmp <short d@>,%.doif endif .endif .lvl = .lvl+1 .dold = .doif .pushdo endm .$jmp macro id,num jmp id&num endm .dowhl macro p1,cond,p2,long ifnb <p2> .$do long .if <p1>,cond,<p2>,long else .$do cond .if p1,cond endif endm .enddo macro .popdo .doif = .dold .popdo .xxtemp = .dold and 8000h if .xxtemp eq 0 .$jmp <short d@>,%.dold else .dold = .dold and 7fffh .$jmp d@,%.dold endif .lvl = .lvl-1 .$lbl d@,%.doif endm check$ macro if .$top ne 1 %out stack not empty endif if .lvl ne 0 %out nesting level mismatch endif endm .$do macro long .pushdo .dold ifnb <long> .xxtemp = .$top-1 .$get %.xxtemp,.dold .$put %.xxtemp,<.dold or 8000h> endif .xxtemp = .dold and 7fffh .$lbl d@,%.xxtemp endm .repeat macro .$do .lvl = .lvl+1 endm .until macro p1,cond,p2,long ifidn <p1>,<loop> .popdo .$loop loop&cond,d@,%.dold else ifnb <p2> cmp p1,p2 .popdo .$br cond,d@,%.dold,long else .popdo .$br p1,d@,%.dold,cond endif endif .lvl = .lvl-1 endm .$loop macro type,id,num type id&num endm @pop macro parm irp @@pop,<parm> ifnb <@@pop> pop @@pop endif endm endm @save macro p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12 irp @@save,<p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12> ifnb <@@save> push @@save endif endm @restore macro @pop <p12,p11,p10,p9,p8,p7,p6,p5,p4,p3,p2,p1> endm endm .list