Three-address code

Arguments of operations (argn) are variable identifiers. All variables are considered to be of the same type (integers), so there is no need to declare variables before using. A program is a sequence of commands (each on a new line) of the following form:
let arg1 K assign integer (constant) value K to variable arg1
mov arg1 arg2 assign one variable to another: arg2 := arg1
add arg1 arg2 arg3 add one variable to another: arg3 := arg1 + arg2
sub arg1 arg2 arg3 subtract one variable from another: arg3 := arg1 - arg2
mul arg1 arg2 arg3 multiply two variables: arg3 := arg1 · arg2
div arg1 arg2 arg3 divide one variable by another: arg3 := arg1 / arg2
More accurately, arg3 is the integer part of arg1 / arg2. If arg2 = 0, exit with error.
jmp N jump to the N-th line of code.
Lines of codes are enumerated starting with the 0-th one.
cmp arg1 arg2 N< N= N> conditional jump: compare arg1 and arg2 and jump, depending on the result, to N<-th N=-th, or N>-th line of code.
out arg1 print value of arg1
inp arg1 request an integer value from the user and store it in arg1