Unlike other contemporary languages such as Pascal, C or BASIC, PL/M had no standard input or output routines. It included features targeted at the low-level hardware specific to the target microprocessors, and as such, it could support direct access to any location in memory, I/O ports and the processor interrupt flags in a very efficient manner. PL/M was the first higher level programming language for microprocessor-based computers and was the original implementation language for those parts of the CP/M operating system which were not written in assembler. Many Intel and Zilog Z80 based embedded systems were programmed in PL/M during the 1970s and 1980s. For instance, the firmware of the Service Processor component of CISC AS/400 was written in PL/M.
While some PL/M compilers were "native", meaning that they ran on systems using that same microprocessor, e.g. for the Intel ISIS operating system, there were also "cross compilers", for instance PLMX, which ran on other operating environments such as CP/M, Microsoft's DOS, and Digital Equipment Corporation's VAX/VMS.
PL/M is no longer supported by Intel, but aftermarket tools like PL/M-to-C translators exist (for examples, see External links, below).
FIND:PROCEDURE(PA,PB)BYTE;DECLARE(PA,PB)BYTE;/* FIND THE STRING IN SCRATCH STARTING AT PA AND ENDING AT PB */DECLAREJADDRESS,(K,MATCH)BYTE;J=BACK;MATCH=FALSE;DOWHILENOTMATCHAND(MAXM>J);LAST,J=J+1;/* START SCAN AT J */K=PA;/* ATTEMPT STRING MATCH AT K */DOWHILESCRATCH(K)=MEMORY(LAST)AND
NOT(MATCH:=K=PB);/* MATCHED ONE MORE CHARACTER */K=K+1;LAST=LAST+1;END;END;IFMATCHTHEN/* MOVE STORAGE */DO;LAST=LAST-1;CALLMOVER;END;RETURNMATCH;ENDFIND;