Department of Electrical and Computer Engineering The University of Texas at Austin Y. N. Patt, D. N. Armstrong Sample Test Program Information Last Updated: 20 April 2002 The purpose of these programs is to help you discover misinterpretations of the x86 manual, and give you some idea what the final test programs will be like. I don't think I need to tell you this but I'll say it anyway: they don't test everything. You are responsible for writing your own test programs to thoroughly test your machine. Only one of these tests takes an exception [forthcoming]. A second test does some tricky data cache manipulations, and the third just has a wider assortment of instructions. In the next two weeks you will get two more programs: 1) report: You will need to show the simulation output of this test in your final report. Next week [soon] I will let you know which signals we want to see. 2) final_test: I will check the simulation output of this test in the lab. This will be done a few hours before your final design review. These two test programs will contain features found in the three sample programs combined; however, in MY opinion, they don't contain any ISA "gotchas." The three sample program files contain the data to be loaded into your SRAMs. The first column of numbers is the physical address of the data, and the second set of numbers is the data in hex format. Following the data is the pseudo-assembly code for the instructions. If you cut out this section and assemble it on an x86 assembler, you won't get exactly the same binary instructions. One reason is that there are multiple ways to generate some instructions (e.g. with different size displacement or immediate values); the second reason is that the mnemonics are not correct for the call, return, and rotate-by-1 instructions. The next set of comments describe the architectural state that changes after the execution of each instruction. I list data values as hex numbers beginning with "0x". Fragments of memory are written with the lowest-address byte first, each byte separated by an underscore. Note that EFLAGS, the general purpose registers, main memory (except for the addresses listed in the file) and caches start out uninitialized at the beginning of the program. The segment registers get initialized to zero. Your simulator does not have to read in these files directly. You will need to reformat it for your specific memory configuration. Let me know if you run into problems interpreting the behavior of these programs.