It is easy to write a handful of instructions directly to memory, fill the registers with any necessary values, and manually single-step through this little program:
simics> board.mb.cpu0.core[0][0]->cs[7] = 0 simics> board.mb.cpu0.core[0][0]->cs[8] = 0xffffffff simics> load-file test.bin 0xf000 simics> set-pc 0x10001 simics> %dx = 4711 simics> si [board.mb.cpu0.core[0][0]] cs:0x0000000000010001 p:0x000010001 mov ax,0x1 simics> si [board.mb.cpu0.core[0][0]] cs:0x0000000000010004 p:0x000010004 xor ebx,ebx
As always in Simics, this can be scripted if you expect to run it more than once:
test.simics
:run-command-file targets/qsp-x86/firststeps.simics board.mb.cpu0.core[0][0]->cs[7] = 0 board.mb.cpu0.core[0][0]->cs[8] = 0xffffffff load-file test.bin 0xf000 set-pc 0x10001 %dx = 4711 continue 12 expect %dx 4713 expect %pc 0x1001c quit
$ ./simics test.simics *** Values differ in expect command: 4711 4713 $
Here, we first call another simics script to set up the machine for us, then run our test case. The expects will cause Simics to exit with an error code (as shown) if the conditions are not met; otherwise, the quit will cause Simics to quit successfully.