assembly a low-level programming language designed to simplify the instructions fed into a computer's cpu in other words it's a human-readable abstraction on top of machine code so programmers don't have to manually count ones and zeroes the first assembly language was created by kathleen booth in 1947 for the all-purpose electronic computer over the next decade it evolved into many different formats to power the super computers of the day like the ibm 7090 which had a 20 million dollar price tag in today's dollars writing code and assembly was standard until the emergence of high level languages like fortran a few years later however assembly is still used today for direct access to the bare metal hardware and to address low-level performance issues often on device drivers and embedded systems and it's also used to run native software in a web browser via webassembly what's tricky is that each assembly language only works on a specific cpu architecture like arm for apple silicon and raspberry pi or x86 for intel chips to get started you'll first need an assembler like the net wide assembler for x86 chips an assembly program is divided into three sections the text section contains the actual logic for the program by convention it contains an entry point called start which is where the code will start executing next we have the block starting symbol section which contains variables that might change throughout the lifecycle of the app and finally the data section is where we can initialize constants or data that does not change to declare a constant like a string we start with a label then use db for defined byte to place the hello world string into memory by itself it doesn't do anything and to print it to the standard output we will also need it to length we can use equate to convert a symbol into a constant the dollar sign will subtract the current position from the hello label providing the length of the string and now these constants can be referenced from the start label in the main program each line of code contains an instruction along with one or more operands and there are hundreds of instructions built into the language now to perform operations quickly the cpu has a limited number of registers which are like 64-bit chunks of memory built directly into the cpu instead of the ram we can insert data into a register with the move instruction by providing operands for the register name and the data to store there in this case number one is used because it corresponds to system write on linux next we need to tell the system where to write in which case we'll move one into the rdi register which corresponds to the standard output in the terminal the next register stores the message to right along with its length now execute the code stored in the cpu by calling the operating system kernel almost done but we'll get a segmentation fault if we try to run it at this point update the racks register with 60 for system exit and provide an error code of zero for a success now use the assembler to compile or assemble your code into an object file then use the linker to convert it into the final executable this has been assembly language in 100 seconds if you want to see more short videos like this hit the like button and subscribe thanks for watching and i will see you in the next one