Welcome to module zero of Nand to Tetris part two in which we are going to talk about machine language basics. Now, a note to graduates of Nand to Tetris Part I. Even if you feel completely competent with the heck programming and low level programming you still have to bear with me at least through this preliminary unit and then you can decide how much more you want to take from this primer. Because almost all the material that we're going to cover in this module is something that we covered already in part one. But once again, bear with me until the end of this unit. All right, so here is the big picture of a Nand to Tetris Part II. Here are the various modules that we are going to go through throughout the course beginning with module zero. Now module zero, deals with a very exciting interface in applied computer science and this is the point where hardware meets software. In particular, we meet the hardware or we use the hardware platform through its interface which is machine language. And we need this machine language and we need Module 0 in order to set the stage and build a foundation for the next two modules in which we are going to build the computers virtual machine. And in order to explained this delicate handshake take a look at this slide here. And you will notice that what we have here is some VM code written in a language what they called a virtual machine language of which I don't expect you to understand anything. This is something that we're going to describe later on. But notice that we are going to discuss this language as well as the task of translating programs written in this language into machine language into assembly. So in particular, the VM translator is going to be a program that you guys will write under our guidance in some language like Java or Python. This program will treat the VM code as input and it will start marching through this input and generating, assembly called from it. So for example it will start with push one and generate the assembly code that you see here then it will go on to pulse push two and generate from it this code segment and so on and so forth. So you see that in order to accomplish this task, you have to be able to generate code in assembly. You have to be able to write code in assembly language. And so in modules one and two we are going to do two things. First of all we'll talk about the virtual machine, architecture, obstruction and commends, the commends of the VM language. And then we're going to talk about building this machine by realizing it using a VM translator. And in order to do this we have to once again generate code in assembly. So module zero is about explaining the notion of low-level programming in assembly language, and writing a program or two in order to gain this fundamental competence without which you will not be able to write your VM translator. Now in order to do this, we are going to supply you with nine instruction units, which culminate in what is known as project four. And you have to understand that all these units are exact replicas of exactly the same units that we taught in Nand to Tetris Part I. And in Nand to Tetris Part I, these units were the substance of module four that's the project is called project four. And with that in mind I think that the group of people who are listening to this video now fall into three possible categories. First of all there are people who took Nand to Tetris Part I probably recently. And they are happy campers, they enjoy the course, they understand the machine language quite well and are eager to start working on Nand to Tetris Part II. Well if that is the case, we recommend that you review only unit eight of the table of contents you have here, and we highly recommend that you also review your project four in unit nine the numbering is a bit confusing here. And you may also consider re-submitting project four if you want, this is an optional project but just make sure that you remember how to write programs in the hack assembly language. So that's this group. The second group consists of people who took Nand to Tetris Part I in the past but by now the part of their brains that was committed to a machine language is now occupied by some other thoughts. Well, if that is the case, you have to remove the rust and the best way to do it is to review this subset of units that you see here. And we highly recommend that you do again project four and submit it, but once again, this project is optional in Nand to Tetris Part II. And finally, there is this group of people who did not take a Nand to Tetris Part I and decides to jump into Nand to Tetris Part II heads on. Well, there's no need to be gloomy about. You can certainly do that but if this is your choice. Then we insist that you learn carefully all the units that you see here and in particular you must do project four. If you will not gain the requisite knowledge of low-level programming, you won't be able to proceed with Nand to Tetris Part II. So it's up to you to fulfill this prerequisite knowledge. All right, so with that, that's the end of this preliminary unit. Please locate yourself in one of these three tracks, according to your level of low level programming expertise. Decide what you want to learn from these remaining units, and once you do this, I will meet you in Module 1 in which we'll begin building our virtual machine.