The mBot robot is based on the AT328P microcontroller. A microcontroller differs from the CPU in your computer because it has a fixed amount of limited memory which is split between variable storage (SRAM) and program memory (PRGMEM). In the case of the AT328P, you have 2K of RAM for variables and 32K RAM for program instructions.
The mBot comes with a default program loaded into its memory. The Upgrade Firmware and Reset Default Program options from within mBlock overwrite anything that is currently in memory. You can only load programs via the USB cable at this time because the onboard programmer that loads the program into the microcontroller’s memory can’t be accessed by Bluetooth or WiFi at this time.
The mBot can operate in autonomous mode and tethered mode. Tethered mode is usually used for some sort of tele-operation (remote control) via the USB cable, a WiFi connection via the WiFi dongle, or via Bluetooth if you have the Bluetooth module. The mBot has a single socket set for either the WiFi module or the Bluetooth module. In any case, these are serial connections that allows an external device (computer, phone, etc.) to communicate with the mBot.
The mBlock environment is essentially the Scratch 2.0 offline editor with robot extensions, a code generator, and hooks into the Arduino development environment. When running a program within the mBlock environment, the environment sends operation codes over the serial connection. This type of operation usually requires the mBot to have the default program installed so that it can interpret the codes and take the appropriate actions. The mBlock environment will also allow you to create and upload programs that allow the mBot to be autonomous although I want to note that the autonomous programs can interact with other external devices, such as the IR Remote control, with proper programming and the right set of modules.
I hope this explanation helps.
Chuck