![[Toc]](../../toc.gif)
![[Index]](/idx.gif)
PMI Constructs and Library Functions
PMI constructs are keywords that are used for program flow control in PMI
command sections. There are three flow control constructs: WHILE loop,
unconditional jump GOTO, and conditional IF GOTO label jump. The
constructs can be nested. Label reference can only be forward; in other
words, a label must have been encountered before its referring construct.
WHILE <condition> ;while loop condition is true, proceed
... ;else continue after ENDWHILE statement
...
...
ENDWHILE
GOTO <label> ;jump to label
IF <condition> GOTO <label> ;if condition true, jump to label
For example:
if (r1 != 0x88) goto done
Two library functions facilitate string and binary compares: STRCMP and
MEMCMP. These functions are especially useful in searching for signature
sequences when identifying the adapter or comparing other string-literal
names. STRCMP is used to compare a zero-ended character string (must be in
double quotes) source with a destination specified as its physical
address. MEMCMP is used to compare binary fields. The source
string-literal for MEMCMP is assumed to be a string of 1s and 0s. If there
is a need to search for a hexadecimal or another string, these must be
converted to their binary form first. Byte alignment of both the source
and target in the physical memory is assumed. Both functions return the
result in r0: zero if the match was completely successful or nonzero
otherwise. The length of the search is determined by the length of the
source string.
String compares are performed after both source and target are converted
to uppercase.
STRCMP(<destination>, <source>};
<destination> ::= <address> ;physical address
<source> ::= <string>)
MEMCMP(<destination>, <source>};
<source> ::= <binary-string>
<address> ::= <PMI keyvariable> | <constant>
For example:
MEMCMP (0xc0154,"1001001111010001"); //compare 2 bytes at 0xc0154 with 0x93d1
Created using Inf-PHP v.2 (c) 2003 Yuri Prokushev
Created using Inf-HTML v.0.9b (c) 1995 Peter Childs