More abstractly, the machine executes only low level code, obtained after converting high level code to low level code using a software called a compiler.
Adding a few points here:
The XSM simulator permits you to run assembly level code; but real machines require the code to be further low level - binary executable file. XSM allows assembly level programs because it is a simulator (implemented in C).
This decision to design such a simulator was made because debugging binary programs in binary would be harder when you do the lab.
XSM deviates from real machines in other real aspects as well. No real machine allows you to store a string in a single memory word. Real machines require you allocate a sequence of words to store a string.
This feature also makes your coding and debugging easier. (Programming would be hard if you were forced to read the name of each program letter by letter, create a string in memory to store the name and so on.
Moreover, such stuff are just programming work that won't contribute much to your OS understanding.)
However, it is important to understand what is done and what is not done.