description={'halt':'power off the machine','nop':'keep the CPU idle for one cycle','iret':'return from an interrupt','ret':'return from a subroutine','cla':'call the subroutine whose address is stored in next word','nintr':'raise interrupt number `num`','rintr':'raise interrupt whose number is stored in `reg`','clr':'call the subroutine whose address is stored in `target`','reset':'set register `reg` to zero','set':'assign the word following the instruction to register `reg`','push':'push the value stored in register `reg` onto the stack','pop':'pop one word from the stack into register `reg`','inc':'increment register `reg` by 1','dec':'decrement register `reg` by 1','rand':'assign register `reg` with a random value','zset':'do `set reg` if `test` holds zero','nzset':'do `set reg` if `test` does not hold zero','mov':'copy the value of register `source` to `target`','not':'set `target` to the binary negation of `source`','ld':'load the word whose address is in `address` into `target`','st':'store the value of `source` onto the address in `address`','add':'set `target` to `left` + `right` with carry in `CR`','sub':'set `target` to `left` - `right`','mul':'set `target` to `left` * `right`','div':'set `target` to `left` / `right`','and':'set `target` to `left` AND `right`','or':'set `target` to `left` OR `right`','lshift':'set `target` to `left` << `right` (left-shift)','rshift':'set `target` to `left` >> `right` (right-shift)','eq':'set `target` to `left` == `right` (FFFF is True, 0000 is False)','gt':'set `target` to `left` > `right` (FFFF is True, 0000 is False)','zmov':'do `mov source target` if `test` holds zero','nzmov':'do `mov source target` if `test` does not hold zero','ldi':'load the word at address `BP`+`shift` (signed) into `target`','sti':'store `source` onto address `BP`+`shift` (signed)','bus':'activate the bus passing/updating `command`/`address`/`data` registers'}
description={'halt':'power off the machine','nop':'keep the CPU idle for one cycle','iret':'return from an interrupt','ret':'return from a subroutine','cla':'call the subroutine whose address is stored in next word','nintr':'raise interrupt number `num`','rintr':'raise interrupt whose number is stored in `reg`','clr':'call the subroutine whose address is stored in `target`','reset':'set register `reg` to zero','set':'assign the word following the instruction to register `reg`','push':'push the value stored in register `reg` onto the stack','pop':'pop one word from the stack into register `reg`','inc':'increment register `reg` by 1','dec':'decrement register `reg` by 1','rand':'assign register `reg` with a random value','zset':'do `set reg` if `test` holds zero','nzset':'do `set reg` if `test` does not hold zero','mov':'copy the value of register `source` to `target`','not':'set `target` to the binary negation of `source`','ld':'load the word whose address is in `address` into `target`','st':'store the value of `source` onto the address in `address`','add':'set `target` to `left` + `right` with carry in `CR`','sub':'set `target` to `left` - `right` with carry in `CR`','mul':'set `target` to `left` * `right` with carry in `CR`','div':'set `target` to `left` / `right` with remainder in `CR`','and':'set `target` to `left` AND `right`','or':'set `target` to `left` OR `right`','lshift':'set `target` to `left` << `right` (left-shift)','rshift':'set `target` to `left` >> `right` (right-shift)','eq':'set `target` to `left` == `right` (FFFF is True, 0000 is False)','gt':'set `target` to `left` > `right` (FFFF is True, 0000 is False)','zmov':'do `mov source target` if `test` holds zero','nzmov':'do `mov source target` if `test` does not hold zero','ldi':'load the word at address `BP`+`shift` (signed) into `target`','sti':'store `source` onto address `BP`+`shift` (signed)','bus':'activate the bus passing/updating `command`/`address`/`data` registers'}