<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>CPU registers Archives - NeuralLantern.com</title>
	<atom:link href="https://www.NeuralLantern.com/tag/cpu-registers/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.NeuralLantern.com/tag/cpu-registers/</link>
	<description></description>
	<lastBuildDate>Sun, 27 Jul 2025 00:12:11 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://www.NeuralLantern.com/wp-content/uploads/2025/04/cropped-2025-04-04-Lantern-03-32x32.png</url>
	<title>CPU registers Archives - NeuralLantern.com</title>
	<link>https://www.NeuralLantern.com/tag/cpu-registers/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Mastering x86-64 Assembly: A Beginner&#8217;s Guide to CPU Registers</title>
		<link>https://www.NeuralLantern.com/mastering-x86-64-assembly-a-beginners-guide-to-cpu-registers/</link>
					<comments>https://www.NeuralLantern.com/mastering-x86-64-assembly-a-beginners-guide-to-cpu-registers/#respond</comments>
		
		<dc:creator><![CDATA[mike]]></dc:creator>
		<pubDate>Sun, 27 Jul 2025 00:12:09 +0000</pubDate>
				<category><![CDATA[Assembly Language]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Videos]]></category>
		<category><![CDATA[ABI]]></category>
		<category><![CDATA[assembly language]]></category>
		<category><![CDATA[assembly programming]]></category>
		<category><![CDATA[callee saved registers]]></category>
		<category><![CDATA[coding optimization]]></category>
		<category><![CDATA[computer architecture]]></category>
		<category><![CDATA[CPU registers]]></category>
		<category><![CDATA[general purpose registers]]></category>
		<category><![CDATA[low-level programming]]></category>
		<category><![CDATA[programming tutorial]]></category>
		<category><![CDATA[RAX register]]></category>
		<category><![CDATA[RBX register]]></category>
		<category><![CDATA[stack pointer]]></category>
		<category><![CDATA[x86-64 assembly]]></category>
		<category><![CDATA[Yasm assembly]]></category>
		<guid isPermaLink="false">https://www.NeuralLantern.com/?p=190</guid>

					<description><![CDATA[<p>Learn x86-64 assembly with this beginner’s guide to CPU registers. Master RAX, RBX, ABI rules, and optimize code. Perfect for low-level programming enthusiasts.</p>
<p>The post <a href="https://www.NeuralLantern.com/mastering-x86-64-assembly-a-beginners-guide-to-cpu-registers/">Mastering x86-64 Assembly: A Beginner&#8217;s Guide to CPU Registers</a> appeared first on <a href="https://www.NeuralLantern.com">NeuralLantern.com</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Mastering x86-64 Assembly: A Beginner&#039;s Guide to CPU Registers" width="1380" height="776" src="https://www.youtube.com/embed/jPysL_y4rRA?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p>Ready to dive into x86-64 assembly? This beginner-friendly video breaks down CPU registers like RAX, RBX, and more in Yasm assembly. Learn how to use general-purpose registers, respect the ABI to avoid debugging nightmares, and optimize code by minimizing RAM hits. We’ll cover callee-saved registers, function arguments, and why you shouldn’t mess with the stack pointer. Perfect for coders looking to master low-level programming. Grab the free book mentioned and subscribe for more assembly tips! #AssemblyProgramming #x86</p>



<p>Introduction to Registers 00:00:00<br>x86-64 Yasm Assembly 00:00:04<br>Recommended Book 00:00:09<br>Move Instruction Example 00:01:04<br>64-bit Registers Overview 00:01:52<br>General Purpose Registers 00:02:24<br>Two&#8217;s Complement for Integers 00:03:37<br>Floating Point Registers Introduction 00:03:54<br>ABI Importance 00:04:55<br>Function Return Values 00:08:01<br>C++ to Assembly Translation 00:08:43<br>Avoiding System RAM 00:11:45<br>Optimizing with Registers 00:13:04<br>Callee Saved Registers 00:14:16<br>Preserving Registers with Push/Pop 00:16:40<br>Stack and Local Variables 00:22:00<br>Function Arguments in Registers 00:25:12<br>Stack Pointer and Base Pointer 00:31:29<br>Instruction Pointer (RIP) 00:36:30<br>Temporary Registers (R10, R11) 00:36:49<br>Accessing 32-bit Register Portions 00:38:29<br>Floating Point Registers Details 00:42:53<br>Conclusion and Call to Subscribe 00:45:35</p>



<p>Thanks for watching!</p>



<p>Find us on other social media here:</p>



<ul class="wp-block-list">
<li>https://www.NeuralLantern.com/social</li>
</ul>



<p>Please help support us!</p>



<ul class="wp-block-list">
<li>Subscribing + Sharing on Social Media</li>



<li>Leaving a comment or suggestion</li>



<li>Subscribing to our Blog</li>



<li>Watching the main &#8220;pinned&#8221; video of this channel for offers and extras</li>
</ul>



<p>Hello there.</p>



<p>Let&#8217;s talk about registers in assembly.</p>



<p>More specifically, x8664 Yasm assembly.</p>



<p>Okay, so first off, check out this book.</p>



<p>It&#8217;s a wonderful book.</p>



<p>The author is a genius.</p>



<p>It&#8217;s called x8664 assembly language programming with Ubuntu.</p>



<p>It&#8217;s free.</p>



<p>website and you know grab your copy it&#8217;s wonderful it&#8217;s released under a copy left license</p>



<p>author&#8217;s a genius whenever i&#8217;m trying to remember things about cpu registers for assembly</p>



<p>i always go to this section i say callie saved i search for callie saved i already had it there</p>



<p>callie saved and it ends up being section 12.8.2 register usage so before we do that let me just</p>



<p>that let me just give you a little quick example so you kind of know what I&#8217;m</p>



<p>talking about here hopefully everybody&#8217;s seen this instruction by now this is a</p>



<p>move instruction in Yasm x86 64 assembly it just moves data from one place to</p>



<p>another it takes two operands so you know we have like operand one and</p>



<p>operand two basically operand one is the destination operand so we could put</p>



<p>destination there if we wanted to operand two is the source we could put</p>



<p>that actually won&#8217;t, you know, compile or assemble,</p>



<p>but I&#8217;m just saying that&#8217;s what those positions are for.</p>



<p>So here&#8217;s an example of a register receiving the value 10.</p>



<p>We use the move instruction and we say,</p>



<p>we would like to move something into the REX register.</p>



<p>We would like to move the value 10 into the REX register.</p>



<p>And there you have it. There&#8217;s a move instruction. Okay.</p>



<p>So REX is a register.</p>



<p>that it is a 64-bit register in our 64-bit CPUs every single register or</p>



<p>sorry every single general purpose register and the plot registers they</p>



<p>have 64 bits available for us to use 64 bits like you know ones and zeros it&#8217;s</p>



<p>like a very very very big number a long time ago we had 32 bit registers and so</p>



<p>these are like you know twice as mathematically robust or whatever you</p>



<p>allows the registers to address, you know, the 64 bit memory addressing space,</p>



<p>which helps us go beyond four gigabytes of RAM in our modern computers,</p>



<p>helps us go far beyond what we can even achieve right now.</p>



<p>So we have a register called RAX and there&#8217;s a list of other registers on this</p>



<p>page here. So basically, you know,</p>



<p>we have the RAX register and the RBX register and the RCX register and so</p>



<p>forth. I have a hard time remembering all these names,</p>



<p>remembering all these names so I go to this book when I forget but otherwise</p>



<p>you know you can kind of think of like ABCD and then just surround them with</p>



<p>RNX you know our kind of for register and X for extra big maybe so we&#8217;ve got</p>



<p>the RAX RBX RCX and RDX registers and then we have a bunch of other ones</p>



<p>through R15 but first before we do that let me just emphasize that these are</p>



<p>general purpose registers to be used for integers or data you can put</p>



<p>characters in there for strings you can put just like you know whatever data you</p>



<p>want inside the machine we use twos complement to represent integers so it&#8217;s</p>



<p>it&#8217;s fine the instructions that you will do for addition and other mathematical</p>



<p>but don&#8217;t put floating point numbers in these registers because the computer the</p>



<p>system the machine won&#8217;t know how to operate on that data the thing is</p>



<p>integers are stored as twos complement I&#8217;m going to talk about that more in</p>



<p>another video and floats are stored in something called I triple E seven five</p>



<p>four standard which is just like a crazy different way of storing floating point</p>



<p>numbers that makes more sense for floating point numbers but because the</p>



<p>differently in the machine you can&#8217;t really use normal instructions like you</p>



<p>can&#8217;t add two floats together the same with the same instruction that you would</p>



<p>add two integers together you would have to use special floating point registers</p>



<p>and special floating point instructions I&#8217;ll talk about floats at the end of</p>



<p>this video I hope but basically just keep in mind these are general purpose</p>



<p>registers to be used for integers in data only okay so what am I talking</p>



<p>Okay, so what am I talking about?</p>



<p>What are we seeing here on the side here?</p>



<p>Why does it say return value?</p>



<p>What is going on with Kali saved and fourth argument and third argument and so forth?</p>



<p>So there&#8217;s a standard that you&#8217;re supposed to use when you program.</p>



<p>You can get yourself into a lot of hot water or you can dramatically increase your debugging</p>



<p>time if you don&#8217;t do this.</p>



<p>standard called the ABI which I think is short for application binary interface but basically I just</p>



<p>like to say the ABI respect the ABI there&#8217;s a plan that people came up with that says this is how you</p>



<p>should use these registers don&#8217;t use them in a different way and that way if everybody is writing</p>



<p>you know modules and they&#8217;re all going to interact together like I write a module you write a module</p>



<p>the abi then it&#8217;s it&#8217;s pretty much guaranteed that we can we can expect certain things like</p>



<p>our registers won&#8217;t become corrupted after a function call or that we&#8217;re not going to corrupt</p>



<p>someone else&#8217;s uh function or you know whatever right so you can also use this to benefit yourself</p>



<p>even if you&#8217;re the only person who is writing your code and you&#8217;re not calling on anyone else&#8217;s</p>



<p>function um then you know like how are you going to remember like what was i using this register</p>



<p>Was I supposed to save that one?</p>



<p>Was I supposed to preserve it?</p>



<p>How was I going to return data from that function?</p>



<p>Was I going to use this register or the other register?</p>



<p>It&#8217;s hard to remember what you,</p>



<p>what you yourself even did like a month ago.</p>



<p>So if you respect this plan,</p>



<p>then your functions will work not only</p>



<p>with other people&#8217;s functions,</p>



<p>but with your own functions from a month ago.</p>



<p>The other thing too, is we have system calls, right?</p>



<p>So you have like a system call.</p>



<p>Let&#8217;s say we want to move something into REX.</p>



<p>something into REX, maybe I want to exit the system or something.</p>



<p>Just forget about this.</p>



<p>This is not a system call video.</p>



<p>Suppose I want to do a system call, right?</p>



<p>The system call itself is also going to respect the ABI.</p>



<p>So if you start calling other</p>



<p>services in the system call instruction, like if you want to open a file,</p>



<p>close a file, read a file, write a file, whatever.</p>



<p>If you don&#8217;t respect the ABI and the system call is respecting the ABI,</p>



<p>might have some of your data corrupted so it&#8217;s a really really good idea to respect the abi</p>



<p>in fact think about it this way what if uh what if you wrote a bunch of functions for a long long</p>



<p>time and then like a year later you couldn&#8217;t you couldn&#8217;t remember what you were doing you know</p>



<p>last year oh what was the return register uh and it costs you a bunch of extra time debugging</p>



<p>eventually you&#8217;ll probably decide to write your write your own standard okay from now on i&#8217;m always</p>



<p>going to use this register for return values and i&#8217;m going to use this register for the first</p>



<p>and i&#8217;m going to use this register for the first argument and i&#8217;m going to write you probably</p>



<p>come up with a plan right that&#8217;s basically the abi the abi covers more than just how to use</p>



<p>registers but um register usage is covered in the abi so why would you put yourself through</p>



<p>a bunch of heartache and then eventually come up with your own plan when you could have just</p>



<p>been following the correct plan in the first place right so everybody should respect the abi</p>



<p>I wanted to talk next about the return value.</p>



<p>Okay, so let me write up a little function here.</p>



<p>Let me just say that we have a C++ function.</p>



<p>And we&#8217;ll just say it&#8217;s like void f.</p>



<p>And we&#8217;ll say it calls on g.</p>



<p>And then we&#8217;ll have another function called g.</p>



<p>And actually, maybe it&#8217;s not void.</p>



<p>Maybe it actually does return a long.</p>



<p>returns the number five or something. Okay.</p>



<p>Hopefully you&#8217;ve seen some kind of a higher level language before like C++</p>



<p>so that you can understand what&#8217;s going on here.</p>



<p>We&#8217;re just making two functions and one is calling the other.</p>



<p>And the second one is just returning a value to the first one.</p>



<p>So in assembly, the equivalent of this would be,</p>



<p>let&#8217;s make a label with the name of the function and then a little colon,</p>



<p>and then just put a return instruction at the end of it. Wham,</p>



<p>it, wham, you&#8217;ve got a function. It&#8217;s not going to work very well, but you do have a function at</p>



<p>this point. So F, uh, I&#8217;m going to try to copy the C++, uh, function. So it&#8217;s a really good idea.</p>



<p>Whenever you&#8217;re writing a function in assembly, try to imagine what the prototype would be for</p>



<p>C++ and just put it as a comment at the top. So I know how the F function is going to behave in</p>



<p>my assembly module because I put a comment up there just kind of reminding me what the prototype</p>



<p>for C++. It doesn&#8217;t really do anything. It just sort of runs. So that&#8217;s okay. And then I&#8217;ll make</p>



<p>another function down here. I&#8217;ll do the long G again in a comment, and then I&#8217;ll do the actual</p>



<p>assembly version. I&#8217;ll say G colon, and then I&#8217;ll return. So just by putting that comment up,</p>



<p>I kind of can remind myself now that the G function is supposed to return some kind of a value.</p>



<p>up here, you know, do how about let&#8217;s say, I don&#8217;t want to start adding a bunch of local</p>



<p>variables right now.</p>



<p>Pretend that we&#8217;re going to print the return value of the call to G somehow we&#8217;re going</p>



<p>to use C out or whatever.</p>



<p>We&#8217;re going to send it to a variable, whatever.</p>



<p>I&#8217;m just going to try to keep the assembly as simple as possible.</p>



<p>But anyway, the point is G returns something.</p>



<p>you know, a value in your assembly function.</p>



<p>Well, remember that higher level languages,</p>



<p>part of why they&#8217;re so awesome</p>



<p>is they do a lot of extra work for us under the hood</p>



<p>and they actually provide illusions to us</p>



<p>that make programming easier.</p>



<p>For example, there are no functions</p>



<p>going on inside the actual machine.</p>



<p>I mean, I guess from a certain point of view there are,</p>



<p>but basically the machine is just sort of like moving data</p>



<p>and jumping to instructions</p>



<p>and jumping back from somewhere.</p>



<p>And, you know, it&#8217;s just sort of like jumping around</p>



<p>and executing instructions.</p>



<p>and executing instructions there&#8217;s no actual function it&#8217;s so it&#8217;s like if you want to pretend</p>



<p>that you have a function in assembly well there is a return instruction that will help you jump</p>



<p>back to wherever you came from most recently but we have to we have to implement more is what i&#8217;m</p>



<p>saying so how do we return a value in an assembly function we just have to load up the return value</p>



<p>it as return value that just means we have to load rax up with something so for example we wanted to</p>



<p>return the number five so i&#8217;m just going to load it up with the number five and then return</p>



<p>now we&#8217;ve pretty much translated a c plus plus function into uh an assembly function i mean</p>



<p>that&#8217;s really what&#8217;s happening under the hood when you compile your c plus plus program</p>



<p>it&#8217;s um it&#8217;s just you know translating all the c plus plus into assembly</p>



<p>Another thing that I should probably point out is that you should use registers as often as possible</p>



<p>and you should try your best not to touch memory.</p>



<p>Of course at some point you have to touch memory when you want to save your final result or send</p>



<p>it off somewhere or whatever but you know imagine that you have an assembly function and you&#8217;re</p>



<p>doing lots and lots of calculations you&#8217;re performing an algorithm or something your</p>



<p>program will be so much more efficient by like a factor of a hundred or probably more if you don&#8217;t</p>



<p>if you don&#8217;t hit system ram because every time you hit system ram like a global variable or the</p>



<p>stack or something then um your cpu you know typically in the uncashed uh scenario your cpu</p>



<p>has to go talk to the system bus on your motherboard and then you know send a message</p>



<p>to system ram and then wait for the system ram to figure out what it&#8217;s doing and then get a response</p>



<p>back so when your program is executing on the cpu you can encounter a stall which is like your</p>



<p>like a hundred clock cycles or more like it&#8217;s a long time at least in the most basic case</p>



<p>and how do you avoid that just use registers only when you&#8217;re doing lots of calculations the</p>



<p>registers are built into the cpu they&#8217;re part of the cpu&#8217;s hardware so they are lightning fast</p>



<p>compared to system ram or your disk or whatever</p>



<p>i probably say this a lot but you know part of the reason you would even want to code an assembly</p>



<p>Maybe you have a big program that does a lot of stuff and eventually you profile the program</p>



<p>and you realize, Hey, this one part of the program is really slow because it gets called</p>



<p>constantly and it&#8217;s not super efficient.</p>



<p>That might be a good use case for writing a hybrid program where you have multiple modules.</p>



<p>Some of your modules are in a higher level language and some of your modules are in assembly.</p>



<p>So you take your most important function that slows down your program that gets called all</p>



<p>like a big loop or something and you rewrite it to assembly so that you can</p>



<p>have more control over how often you touch system RAM to try to make the</p>



<p>whole thing more efficient and you know reduce the number of instructions and</p>



<p>just like whatever and you can improve the product of the efficiency of your</p>



<p>program so anyway you want to try to avoid hitting system RAM your registers</p>



<p>are built in the CPU there&#8217;s 64 bits that gives us 64 bits of address space</p>



<p>can reach you know back in the day we had 32 bit systems that means you could only have a memory</p>



<p>stick that was about four gigabytes so now we can go much further so um yeah that&#8217;s what&#8217;s going on</p>



<p>with our registers on the cpu back to the return value okay so we have return value here goes into</p>



<p>the rax register and then the next thing here is it&#8217;s saying that the rbx register is something</p>



<p>remember we said that uh we have to respect the abi right like you have to respect this convention</p>



<p>uh because if you don&#8217;t you&#8217;re going to cost yourself debug time and your</p>



<p>functions probably won&#8217;t be interoperable interoperable with other people&#8217;s functions</p>



<p>or the system call uh instruction well so one of the things about the abi is some of the registers</p>



<p>are designated as the function that is being called has to be the thing that saves the register&#8217;s</p>



<p>registers value so that it doesn&#8217;t corrupt for the caller. Imagine this if I had a function</p>



<p>called f I&#8217;m going to do like f and g here suppose the function f is going to move something into</p>



<p>let&#8217;s say r12 or actually let&#8217;s do rbx move the value 10 into rbx and then it&#8217;ll call g for some</p>



<p>reason maybe g doesn&#8217;t take any arguments maybe g is just kind of doing stuff let&#8217;s just say that</p>



<p>g just moves a different value into rbx so the thing is when the call comes back like after we</p>



<p>get to this next line let&#8217;s say we&#8217;re going to do something with do something do something with</p>



<p>rbx by the time we get to this line dude can i get the line numbers on this oh yeah i forgot okay</p>



<p>so by the time we get to line seven uh the register rbx is ruined these registers are not</p>



<p>local variables they&#8217;re not like uh you know tied to any scope or function call these registers are</p>



<p>just basically global variables that are sitting on the cpu for lightning fast performance but that</p>



<p>means the rbx i use inside of f is the same rbx i use inside of g so that means if g messes up the</p>



<p>value of rbx and then if f calls g then f now has a bad value for rbx this is a broken program</p>



<p>broken program because we did not respect the ABI.</p>



<p>The ABI says that RBX is callee saved,</p>



<p>which means if I use RBX in the G,</p>



<p>then I have to preserve the value so that by the time I return,</p>



<p>the value is the same as it was when the call first came in.</p>



<p>So how do we do that?</p>



<p>We&#8217;ll do that with a push pop pair.</p>



<p>I&#8217;ll probably make more videos in the future about pushing and popping,</p>



<p>but I&#8217;m going to try to keep it simple for now.</p>



<p>We just say, let&#8217;s push RBX onto the stack.</p>



<p>at the beginning and then we&#8217;ll pop it off the stack at the very end.</p>



<p>This basically means we&#8217;re going to take the value of RBX.</p>



<p>We&#8217;re going to send it onto the stack.</p>



<p>So, so yeah, we are hitting system RAM.</p>



<p>It&#8217;s a little slower at that point.</p>



<p>The ABI will save us a little time for the other registers.</p>



<p>I&#8217;ll try to explain that in a second, but basically we&#8217;re preserving the value here</p>



<p>with push and then we&#8217;re popping it back off.</p>



<p>So we&#8217;re restoring it.</p>



<p>So that means even though we ruined the value at line 14, when F does its line</p>



<p>When F does its line 7, it&#8217;s going to have the correct value of RBX.</p>



<p>It&#8217;s going to have the value 10.</p>



<p>The book and I like to call this the prologue, just meaning this is a little section of code</p>



<p>where we&#8217;re going to set things up.</p>



<p>We&#8217;re going to start getting ready to do more instructions.</p>



<p>And then this at the bottom is going to be called the epilogue.</p>



<p>This is just like the finale.</p>



<p>We&#8217;re like, we&#8217;re kind of cleaning up.</p>



<p>We&#8217;re finishing up right before we return.</p>



<p>If you wanted to return a value from G, then you could put, you know, the move inside of</p>



<p>RAX somewhere else.</p>



<p>Like you could put it like below the epilogue or just above the epilogue.</p>



<p>It&#8217;s fine.</p>



<p>As long as you&#8217;re sure that RAX is not getting trampled upon.</p>



<p>So it&#8217;s important to note also that if I do a, let&#8217;s say a system call right after that,</p>



<p>let&#8217;s say I call G and then I do a system call with, you know, like, you know, some</p>



<p>you know some other number as the call code i want to open a file i want to close a file</p>



<p>i want to read or write a file whatever i want to ask the system to do something for me the</p>



<p>system is also going to respect the abi which means i&#8217;m guaranteed that rbx is not modified</p>



<p>when the system call comes back if if the system call you know if the syscall instruction didn&#8217;t</p>



<p>respect the abi then my rbx could be ruined i&#8217;d have to do a bunch of stuff to preserve it so this</p>



<p>some of these registers let me go down a little bit here like this R10 the</p>



<p>temporary register and also the RDI if you decided to use that in the body of</p>



<p>your program which you&#8217;re allowed to these are not designated as callee saved</p>



<p>which means system call could actually ruin the value of those registers so</p>



<p>suppose for the sake of argument I really decided that I needed to use I</p>



<p>10 because that&#8217;s marked as a temporary I&#8217;ll put a value in our 10 and then I&#8217;ll say you know</p>



<p>do something</p>



<p>With our 10 I&#8217;m sorry our 10</p>



<p>Then that means by the time I&#8217;m done with my call to G</p>



<p>I should assume that our 10 is ruined because even though you&#8217;re you can see right here that that G doesn&#8217;t actually do anything</p>



<p>To our 10 we should assume that we have to respect the ABI which means the other function could have ruined it</p>



<p>Ruined it. This is especially true if you call someone else&#8217;s module or system call or whatever same thing for the system call</p>



<p>so if I call system call</p>



<p>and I use</p>



<p>R10 at some point before and then after then I have to assume R10 is destroyed by the time I get back in system call</p>



<p>So that&#8217;s no good</p>



<p>The cure to that when we&#8217;re talking about a temporary or something that is not designated as callee saved is that the caller has to save</p>



<p>hit a system RAM just to make a call.</p>



<p>Anything that we think we need when we&#8217;re finished.</p>



<p>So I&#8217;m going to do a push.</p>



<p>This is not the only way to do it, but I&#8217;m going to do a push R10 here.</p>



<p>And then afterwards, I&#8217;m going to do pop R10.</p>



<p>So that sucks.</p>



<p>And then I have to do the same thing for the system call.</p>



<p>I can go push R10 and then pop R10.</p>



<p>And of course, if you were clever, you probably would, you know, put the call to G inside</p>



<p>of that system call push pop pair.</p>



<p>So you could have one less push pop pair.</p>



<p>push pop pair but I&#8217;m just saying there&#8217;s no guarantee r10 is going to survive so you always</p>



<p>have to preserve it if you ever want to use it again so this is like another way that the abi</p>



<p>kind of can help you save time notice how here in the uh in the g function which I probably should</p>



<p>have prototyped let me just say it looks like to me it&#8217;s a void and it doesn&#8217;t take any arguments</p>



<p>to prototype your functions in comments.</p>



<p>Maybe let me do the same thing to F up here.</p>



<p>So F looks like it&#8217;s not returning anything and it&#8217;s not taking anything.</p>



<p>Okay. Whoops.</p>



<p>Those are C++ comments that would not compile.</p>



<p>All right. So notice how I&#8217;m using RBX.</p>



<p>So I decided to preserve RBX, but there&#8217;s also other registers that are marked as</p>



<p>marked as Kali saved like R12 through 15 and RBP and whatever,</p>



<p>but I&#8217;m not preserving those.</p>



<p>The reason I don&#8217;t have to preserve those is because I&#8217;m not using them.</p>



<p>So the, uh, the, uh, the ABI can save you a little time here.</p>



<p>Like for example, I&#8217;m preserving R10 because I&#8217;m supposed to assume that I,</p>



<p>that I, that they could be destroyed by the time the function comes back.</p>



<p>What if instead of using R10, I used R12.</p>



<p>have to surround any calls with a push pop pair because I can trust that whoever is going to</p>



<p>modify R12 will preserve it for me. But then notice down here G is not actually using R12.</p>



<p>So G doesn&#8217;t even do push pop on R12. So we save hits to memory. We don&#8217;t even have to touch memory</p>



<p>to preserve R12 because the ABI is helping us sort of stay a little bit more efficient.</p>



<p>So this is great, right? F is a broken function at this point though, because I&#8217;m using</p>



<p>at this point though because I&#8217;m using two registers that are callee saved I</p>



<p>can&#8217;t assume that whoever called F is gonna know that I&#8217;m modifying RBX and</p>



<p>R12 so I should do a prolog and an epilog up here I&#8217;m gonna say push RBX</p>



<p>and then I&#8217;m gonna push R12 and then down here at the bottom I&#8217;m gonna do an</p>



<p>epilog epilog and I&#8217;m gonna pop RBX and I&#8217;m gonna pop R12</p>



<p>but I&#8217;ve done something wrong.</p>



<p>The thing is, I&#8217;m not going to talk about the stack too much in this video,</p>



<p>but the stack is a particular type of data structure</p>



<p>that will return to you data in a reverse order than you sent into it.</p>



<p>This is great for helping us keep track of function calls and return addresses,</p>



<p>as I&#8217;ll probably try to explain in this video.</p>



<p>But basically, the data comes out backwards.</p>



<p>The data comes out backwards. So if I do it like this</p>



<p>Then actually by the time the return statement instruction gets executed</p>



<p>RBX will have the value that was intended for R12 and R12 will have the value that was intended for RBX</p>



<p>It&#8217;ll be backwards. So you have to do your push pops in the reverse order to notice how</p>



<p>It&#8217;s kind of like a shell that goes outwards. It&#8217;s like R12 is first on the inside and then RBX is next on the outside</p>



<p>That&#8217;s just what you have to do to preserve everything.</p>



<p>So the F function works now.</p>



<p>The G function, I think it works now.</p>



<p>We have a prologue and epilogue.</p>



<p>Okay, so we talked about the ABI.</p>



<p>We talked about calls.</p>



<p>We talked about the registers.</p>



<p>Talked about callee saved.</p>



<p>We talked about the fact that we don&#8217;t have to save the other ones.</p>



<p>I think I can talk about…</p>



<p>um so uh one thing that i should make sure to mention is that these are general purpose registers</p>



<p>they&#8217;re to be used for integers integer data or like characters or just like regular data</p>



<p>they use certain instructions that are not to be used with floating point data so you actually</p>



<p>should not store floating point numbers inside of your general purpose registers you should only</p>



<p>store floating points in special registers which i&#8217;ll talk about at the end of this video</p>



<p>So keep that in mind.</p>



<p>Floating point numbers are stored differently in the system.</p>



<p>They&#8217;re stored with a scheme called IEEE 754 floating point.</p>



<p>So like the numbers wouldn&#8217;t make sense.</p>



<p>Integers and floats are stored differently.</p>



<p>So the hardware is wired differently to operate on two different types of data.</p>



<p>So anyway, I just want to say that this is only for integers and general purpose data.</p>



<p>So now let&#8217;s look at the other types of registers.</p>



<p>rc x and rd x and rsi and rdi are designated as arguments first second third and fourth</p>



<p>okay so let me uh let me write like a quick c plus function here and this is going to be uh let&#8217;s</p>



<p>say we have like a function that returns some value we&#8217;ll call it uh we&#8217;ll call it f and we&#8217;ll</p>



<p>say that f takes in some arguments let&#8217;s say that it takes in three arguments um again uh</p>



<p>integers right now because we&#8217;re only using integer registers.</p>



<p>We can&#8217;t use floating point arguments or return values.</p>



<p>Just keep that in mind.</p>



<p>So I&#8217;m just going to do like three arguments long A and B and C.</p>



<p>OK, so we can take in three arguments and maybe we&#8217;re just going to return,</p>



<p>you know, a plus B plus C.</p>



<p>OK, simple C++ function.</p>



<p>Let&#8217;s do this in assembly.</p>



<p>We&#8217;ll make a label and we&#8217;ll do a little comment that just reminds us.</p>



<p>of sorry of the</p>



<p>Function that we&#8217;re trying to implement we stick a little return instruction at the end of it so that</p>



<p>it will jump back to the caller and</p>



<p>then we&#8217;ll say</p>



<p>Well when the caller of this function</p>



<p>Called us and gave us a and B and C. How do we get a and B and C?</p>



<p>Well a is the first integer argument, so it&#8217;s just going to be the RDI register</p>



<p>So we&#8217;ll literally just use a move instruction</p>



<p>just use a move instruction.</p>



<p>Let&#8217;s say we want to, for whatever reason, use the R12 register</p>



<p>and we&#8217;ll do something with it later.</p>



<p>We&#8217;ll print it, we&#8217;ll save it, we&#8217;ll do whatever.</p>



<p>Let&#8217;s just grab the incoming argument.</p>



<p>So we&#8217;ll just grab RDI.</p>



<p>So I&#8217;m going to put a little comment up above here, you know, grab</p>



<p>a and do something</p>



<p>with it and I&#8217;ll just write down here more instructions just to just to denote</p>



<p>Just to denote that we&#8217;re doing something with the a value, but I&#8217;m not going to write it down here because I don&#8217;t want this to get huge.</p>



<p>So we&#8217;ll do the same thing with the b.</p>



<p>Maybe I should remember that programming is case sensitive.</p>



<p>We&#8217;ll do something with the b.</p>



<p>It&#8217;s not RDI.</p>



<p>It&#8217;s the second argument.</p>



<p>So that&#8217;s actually RSI.</p>



<p>And then we&#8217;ll do something else.</p>



<p>We could have used R13 or other registers if we wanted to.</p>



<p>I&#8217;m just showing you how to grab incoming arguments.</p>



<p>So then we&#8217;ll grab the c and do something with it also.</p>



<p>C and do something with it also it&#8217;s not going to be RDI it&#8217;s going to be RDX and you can do this</p>



<p>up to like I think six arguments let me just double check here yeah so like R9 ends up being</p>



<p>the sixth argument and if you want more than that then the caller will have to put stuff on the stack</p>



<p>and in fact if you if you kind of like understand what&#8217;s happening here let me just do like a main</p>



<p>Let&#8217;s say we do cout whatever f returns.</p>



<p>You know, this is like a typical function call, right?</p>



<p>So we&#8217;ll call f.</p>



<p>f will jump in there.</p>



<p>It&#8217;ll jump into its body.</p>



<p>It&#8217;ll do some sort of a manipulation with the incoming arguments.</p>



<p>It&#8217;ll return a final value.</p>



<p>Then that final value gets printed out.</p>



<p>So what&#8217;s 5 plus 6 plus 7?</p>



<p>That&#8217;s 11 plus 7.</p>



<p>What is that, like 18?</p>



<p>I&#8217;m bad at math.</p>



<p>So let&#8217;s just say that&#8217;s 18 gets printed.</p>



<p>So what happens is, um, we return, Oh, I forgot to return.</p>



<p>I&#8217;m going to say compute the, uh,</p>



<p>compute the sum of the things.</p>



<p>Uh, and I&#8217;ll just say like block cause I don&#8217;t want to put a bunch of addition</p>



<p>instructions here. Uh, and we&#8217;ll just like store in, uh,</p>



<p>in R13, let&#8217;s say. So then when we have finally computed our result, I&#8217;ll just move R13 into the</p>



<p>return value. And what I&#8217;m really trying to say here is if you imagine a function that behaves</p>



<p>this way in C++, then what I&#8217;ve written down below is really what&#8217;s actually happening in</p>



<p>assembly. Your compiler compiles the code down to assembly language first, and then it assembles it</p>



<p>down to machine code. So really this is what&#8217;s happening under the hood. It&#8217;s not like a special</p>



<p>under the hood it&#8217;s not like a special trick when you call a function in C++</p>



<p>literally the A B and C have been loaded up just before the the jump</p>



<p>instruction to go to that you know line 9 they&#8217;ve been loaded up with the</p>



<p>appropriate values so that&#8217;s part of like you know the magic of what higher</p>



<p>level languages give us it&#8217;s just makes things a little bit easier okay so I&#8217;ve</p>



<p>If I had only used RDI and RSI and RDX, those are not designated as callee saved.</p>



<p>So I wouldn&#8217;t have had to preserve those, but because I chose to use R12 and R13, I</p>



<p>have to preserve those for the caller, even if the caller is not going to use them.</p>



<p>So I&#8217;m going to do, I&#8217;m going to do push R12 and I&#8217;m going to do push R13.</p>



<p>And then at the bottom, let me do like a prologue here.</p>



<p>is kind of helpful because it kind of helps you remember like, oh, did I forget the prologue?</p>



<p>Did I forget the epilogue? They got a match. And then I guess the fact that you can see the words</p>



<p>prologue and epilogue also helps remind you that everything is supposed to be in reverse order</p>



<p>in the epilogue. So again, notice how R13 is on the inside and R12 is on the outside</p>



<p>of the push pop pair. So now my program is good. And we&#8217;ve, you know, successfully translated</p>



<p>We&#8217;ve, you know, successfully translated a nice function call there.</p>



<p>And we&#8217;ve done a bunch of nonsense in the middle that I&#8217;m not writing down at this point.</p>



<p>We are respecting the ABI.</p>



<p>So if somebody else uses our function in their module, then they can be pretty confident</p>



<p>that we&#8217;re not going to ruin their registers and so forth.</p>



<p>We talked about the return value.</p>



<p>We talked about that these general purpose registers are not for floats.</p>



<p>We talked about pushes and pops.</p>



<p>and pops. We&#8217;ve talked about function arguments,</p>



<p>which right now we can only do integer arguments and return values.</p>



<p>We&#8217;ve talked about, uh, well, he talked about the stack a little bit.</p>



<p>So let me, let me just point out that, um,</p>



<p>suppose you have a function. I just want to mention this briefly.</p>



<p>Suppose you have a function F let&#8217;s say it&#8217;s, it&#8217;s void.</p>



<p>So it doesn&#8217;t return anything and it has an integer a equals five.</p>



<p>I think the reason that I wanted to do this is to show you how dangerous it is to mess</p>



<p>with the wrong register like the stack register.</p>



<p>So suppose we have two variables and then we&#8217;ll do something with a and b.</p>



<p>So now suppose we have two threads.</p>



<p>We have an execution thread one and an execution thread two.</p>



<p>If you&#8217;re not familiar with threads, that just basically means your computer is literally</p>



<p>executing your function or sorry, it&#8217;s executing twice at the exact same time.</p>



<p>Maybe not the exact same time if you only have a single core on your CPU, but you could</p>



<p>imagine that that&#8217;s possible, especially if you have many cores, that&#8217;s an operating systems</p>



<p>video.</p>



<p>But basically pretend that we have an execution thread.</p>



<p>So it&#8217;s like going through your program, executing one instruction at a time.</p>



<p>Then you launch another execution thread that also executes your program one instruction</p>



<p>at a time.</p>



<p>at a time so at some point it&#8217;s possible that um thread one and thread two could be executing f</p>



<p>at the exact same time right so i&#8217;m not going to talk too much about this because this is not an</p>



<p>os video but basically this could create a race condition where thread one and thread two kind</p>



<p>of step on each other&#8217;s toes and they both try to modify the value of a uh at the wrong time and</p>



<p>because the other thread modified it.</p>



<p>So this is why local variables in a function actually live on the stack.</p>



<p>A and B are not global variables.</p>



<p>They&#8217;re actually temporary local variables that are sitting on the stack.</p>



<p>And the way the stack works, I&#8217;m not going to talk about it too much in this video,</p>



<p>is that, well, every function kind of has its own area of the stack.</p>



<p>So when the function comes in, on the stack sits the return address</p>



<p>return address so that the function knows where to jump back to when it returns and any local</p>



<p>variable that the function makes. So if you think about it, when thread one calls F, we actually</p>



<p>end up with a different version of A and a different version of B. We could imagine them</p>



<p>as being, you know, A sub one and B sub one. But when thread two comes in and, you know,</p>



<p>creates those local variables, we can imagine that we get two different versions of A and B also.</p>



<p>of a and b also so this is how the computer prevents multiple threads from stepping on each</p>



<p>other&#8217;s toes if you&#8217;re using local variables local variables are just local to the function</p>



<p>this also helps if a function calls itself a bunch of times maybe one call or another might want to</p>



<p>see a different version of a or b and it would be just incredibly difficult to keep track of that</p>



<p>if you were using globals but when you use locals well they&#8217;re just basically different variables</p>



<p>trying to lead up to is the stack is pretty important if you corrupt the</p>



<p>stack then you probably are going to crash the entire program you might make</p>



<p>it so that a function doesn&#8217;t know where to return from like when you do the</p>



<p>return statement it might jump to some other part of the code that doesn&#8217;t even</p>



<p>make sense and then everything crashes or you might mess up some data in a local</p>



<p>variable like if you mess up if you mess up the stack you might be messing up the</p>



<p>that the caller is depending on and so then the caller continues to execute and</p>



<p>it sees the wrong value and it just crashes or you might even mess up your</p>



<p>own local variables so don&#8217;t miss with the stack the reason I&#8217;m saying that now</p>



<p>is because this very this register right here the RBP sorry that&#8217;s not it the</p>



<p>RSP register that&#8217;s the stack pointer eventually you can learn how to</p>



<p>manipulate the stack pointer in order to create your own local variables that&#8217;s</p>



<p>variables that&#8217;s okay once you know what you&#8217;re doing but unless you know exactly what you&#8217;re</p>



<p>doing you probably shouldn&#8217;t touch the stack pointer especially you shouldn&#8217;t mess with it</p>



<p>right before you call a function or right before you return from your own function be very careful</p>



<p>with that the rbp uh register is similarly dangerous uh it won&#8217;t like automatically destroy</p>



<p>your program but it is uh it&#8217;s usually i mean it&#8217;s quite often used as sort of like a bookmark for</p>



<p>mark for where the stack pointer was pointing in other modules and other</p>



<p>functions.</p>



<p>So if you fail to preserve the base pointer,</p>



<p>the RBP and then you returned from your function,</p>



<p>then you might have actually messed up the stack pointer for the caller or some</p>



<p>other caller somewhere in like the ancestry of your call graph.</p>



<p>So be very careful. I mean,</p>



<p>I guess all callee preserved variables or registers you should be very careful,</p>



<p>careful about, but these are like kind of the two worst ones to forget about.</p>



<p>first ones to forget about.</p>



<p>There&#8217;s also another register that is not listed on this page called the</p>



<p>instruction pointer. It&#8217;s RIP.</p>



<p>It basically is a register that holds</p>



<p>the memory location of the next instruction to be executed.</p>



<p>So if you modify that, then you just told your program to go execute</p>



<p>in some random crazy place and probably everything is going to crash.</p>



<p>R10 and R11.</p>



<p>I can&#8217;t remember already if I explain this, but I&#8217;ll just say it again.</p>



<p>But I&#8217;ll just say it again, R10 and R11 are just temporary registers.</p>



<p>You don&#8217;t have to preserve them.</p>



<p>But the callee, if you call another function, they don&#8217;t have to preserve the registers either,</p>



<p>which means it can be really fast to use R10 and R12 if you&#8217;re kind of like already running out of registers.</p>



<p>If you don&#8217;t have to make a function call anywhere, so you know no one is going to ruin your R10 and R11,</p>



<p>then you can also use R10 and R11 to sort of like, you know,</p>



<p>reduce your hits to system RAM to speed up your program.</p>



<p>So R10 and R11, they should probably be used last.</p>



<p>R12, 13, 14, 15, I usually use those first.</p>



<p>Once I start running out of those, Kali saved.</p>



<p>Then I&#8217;ll start eating into the arguments.</p>



<p>I&#8217;ll say, you know, I&#8217;m going to start using RBX</p>



<p>and then I&#8217;m going to use RDI and RSI and whatever.</p>



<p>It&#8217;s okay if you use, you know, the argument registers.</p>



<p>as long as you&#8217;ve already done something with your incoming arguments or you don&#8217;t have any.</p>



<p>So just keep that in mind.</p>



<p>You&#8217;re allowed to use them.</p>



<p>I mean, this is all just a standard.</p>



<p>As long as you obey what the rule is, then you&#8217;ll be all right.</p>



<p>The rule is you got to callee save those.</p>



<p>The rule is that one&#8217;s just temporary.</p>



<p>The rule is this one&#8217;s an argument and so forth.</p>



<p>Okay.</p>



<p>locals and how we use these registers. Let me try to just show you one more</p>



<p>thing real fast. So I said before that the size of the REX register is 64 bits</p>



<p>because it takes up the whole available register bits in the CPU but there are</p>



<p>other versions of this register that we could use. What if you only wanted to use</p>



<p>32 bits in your register? What if you wanted to pack like two different 32</p>



<p>32-bit numbers in the same 64-bit register.</p>



<p>You could do that.</p>



<p>There are also older modules and instructions</p>



<p>that will operate only on 32-bits.</p>



<p>So how do you reference only 32-bits of a register?</p>



<p>Well, if I search for, oh shoot, what was it?</p>



<p>Is it EDI?</p>



<p>No, no.</p>



<p>Shoot.</p>



<p>It&#8217;s in here somewhere.</p>



<p>This is like a good lesson in actually preparing before you record a video.</p>



<p>So I&#8217;m going to do architecture overview, CPU registers.</p>



<p>Oh, it was at the beginning of this section.</p>



<p>I always skip down to 2.4, 12 point something, and I should have gone to 2.3.1.1.</p>



<p>So obviously I&#8217;m not going to remember all of this, but basically notice at the top,</p>



<p>we have the REX register, all 64 bits of it.</p>



<p>But if you wanted to access the lowest six, sorry, the lowest 32 bits, then in your code,</p>



<p>instead of putting REX, you put EAX.</p>



<p>So for example, you know, move REX, whoops, REX, let&#8217;s say the number five, but over</p>



<p>here we&#8217;re going to move EAX, the number five.</p>



<p>five uh here it&#8217;s going to set the whole 64 bits to just like a bunch of zeros and then there&#8217;s</p>



<p>going to be a few bits that help represent five the lowest bits so it&#8217;s going to erase like the</p>



<p>whole thing all 64 bits but if you use the eax instruction then only the lowest 32 bits will</p>



<p>actually be modified which means whatever data you had in the higher 60 the higher 32 bits of the</p>



<p>of the register itself they&#8217;re just going to stay there it&#8217;s going to be considered</p>



<p>point so sometimes if you&#8217;re going to work with something that&#8217;s going to be using only 32 bits</p>



<p>of your register you better make sure that the other bits are uh are cleared out if you intend</p>



<p>to use rax right after that and and vice versa so keep in mind that we have other forms of the same</p>



<p>register a designation but just to let the cpu know that we only want to touch 32 bits worth we</p>



<p>And this, this kind of table covers all of the registers,</p>



<p>REX, RBX, RCX, and so forth.</p>



<p>I think it doesn&#8217;t cover the instruction pointer</p>



<p>and something else in there, but you know, most of them.</p>



<p>However, you know, for my purposes,</p>



<p>I usually just use 64 bits</p>



<p>because I&#8217;m not like super advanced</p>



<p>unless I have to divide or do something.</p>



<p>Okay, so that&#8217;s the last thing I wanted to mention</p>



<p>about the general purpose registers.</p>



<p>Let&#8217;s see.</p>



<p>Callie saved.</p>



<p>So the not sure if I said this before already, but basically the.</p>



<p>So just to emphasize the, uh, the RBP register is the base pointer register.</p>



<p>You&#8217;re probably going to mess up, uh, the caller because the caller often uses RBP as</p>



<p>a bookmark for the stack pointer.</p>



<p>mark for the stack pointer you definitely don&#8217;t want to mess with a stack pointer unless you</p>



<p>actually know what you&#8217;re doing in order to create local variables um there&#8217;s another variable</p>



<p>another register in here called rip which is the instruction pointer register so if you</p>



<p>if you mess that one up then the program is going to start executing in some crazy place that doesn&#8217;t</p>



<p>even make sense okay so now that we&#8217;ve talked about general purpose registers by the way i</p>



<p>called special purpose registers, not general purpose.</p>



<p>General purpose is like RAX, RBX, all these ones that you can just randomly use as long</p>



<p>as you respect the ABI.</p>



<p>But the base pointer and the stack pointer, those are kind of special.</p>



<p>And the RIP, the instruction pointer, that&#8217;s a special register.</p>



<p>You shouldn&#8217;t mess with those unless you really know what you&#8217;re doing or you&#8217;ll get yourself</p>



<p>in trouble.</p>



<p>But now that we&#8217;ve talked about those, let&#8217;s talk about the floating point registers just</p>



<p>real fast.</p>



<p>about using floats until a lot later but basically</p>



<p>i at least want to mention that we do have registers that will work with floating point</p>



<p>operations let me see there we go okay so it&#8217;s 18.2 floating point registers um essentially</p>



<p>we use xmm0 through xmm13 for floating point numbers there&#8217;s not going to be any</p>



<p>not going to be any crazy letters like RDI, RSI that you have to memorize. You can just use zero</p>



<p>through 15 and it&#8217;s totally fine. When you want to return a floating point number from a function,</p>



<p>you will load up XMM0 as the return value. You won&#8217;t even touch RAX. The arguments are the same.</p>



<p>They&#8217;re just kind of ordered. It&#8217;s like the first argument is going to be XMM0. The second argument</p>



<p>is going to be XMM1 and so forth all the way up to XMM15. If you need more than 15 arguments,</p>



<p>some sorcery with the stack or with some kind of system like the global variable or something</p>



<p>and also for floating point registers we use different instructions so what I really want</p>



<p>you to know because this is mostly about the regular registers is that if you have floating</p>



<p>point numbers and you want to multiply them or do some other operation on them the normal</p>



<p>instructions for regular registers won&#8217;t actually work you&#8217;ll have to look up a different set of</p>



<p>and i&#8217;m going to do this in another video some other time uh if you want to move uh data with</p>



<p>a floating point register you can&#8217;t just use the regular move instruction you got to use either</p>



<p>move ss or move sd um and and both operands have to be floats or actually i think the one on the</p>



<p>right can be memory but um move ss basically means a single piece of data single precision</p>



<p>So you can move like multiple pieces of data at a time.</p>



<p>I&#8217;m not going to really cover that.</p>



<p>Um, but you can move single precision floating points, which means there are 32 bit floating</p>



<p>points or you can move double precision floating points, which means they&#8217;re a full 64 bit</p>



<p>floating point number.</p>



<p>There&#8217;s also bigger registers, but I&#8217;m not going to talk about that.</p>



<p>Yeah.</p>



<p>Well, yeah.</p>



<p>Later processors 256.</p>



<p>I think mine has that, but I&#8217;m not going to talk about that.</p>



<p>I think mine are like YMM or something.</p>



<p>So yeah, with that, those are the basics of registers and some stuff to keep in mind.</p>



<p>In future videos, I&#8217;m going to talk more in depth about making functions and calling functions</p>



<p>and all that stuff, respecting the ABI.</p>



<p>But for now, here is your primer.</p>



<p>I hope it was useful on CPU registers.</p>



<p>Thank you for watching this video.</p>



<p>I&#8217;ll see you in the future.</p>



<p>I hope you had a little bit of fun and you learned a little bit of stuff.</p>



<p>hey everybody thanks for watching this video again from the bottom of my heart I really</p>



<p>appreciate it I do hope you did learn something and have some fun if you could do me a please a</p>



<p>small little favor could you please subscribe and follow this channel or these videos or whatever</p>



<p>it is you do on the current social media website that you&#8217;re looking at right now it would really</p>



<p>mean the world to me and it&#8217;ll help make more videos and grow this community so we&#8217;ll be able</p>



<p>longer videos, better videos, or just I&#8217;ll be able to keep making videos in general.</p>



<p>So please do me a kindness and subscribe. You know sometimes I&#8217;m sleeping in the</p>



<p>middle of the night and I just wake up because I know somebody subscribed or</p>



<p>followed. It just wakes me up and I get filled with joy. That&#8217;s exactly what</p>



<p>happens every single time. So you could do it as a nice favor to me or you could</p>



<p>you could troll me if you want to just wake me up in the middle of the night.</p>



<p>Just subscribe and then I&#8217;ll just wake up. I promise that&#8217;s what will happen.</p>



<p>Also, if you look at the middle of the screen right now, you should see a QR code which you can scan in order to go to the website</p>



<p>Which I think is also named somewhere at the bottom of this video</p>



<p>and it&#8217;ll take you to my main website where you can just kind of like see all the videos I published and</p>



<p>services and tutorials and things that I offer and all that good stuff and</p>



<p>If you have a suggestion for</p>



<p>Clarifications or errata or just future videos that you want to see</p>



<p>please leave a comment or if you just want to say, Hey, what&#8217;s up, what&#8217;s going on? You know,</p>



<p>just send me a comment, whatever. I also wake up for those in the middle of the night. I get,</p>



<p>I wake up in a cold sweat and I&#8217;m like, it would really, it really mean the world to me. I would</p>



<p>really appreciate it. So again, thank you so much for watching this video and, um, enjoy the cool</p>



<p>music as, as I fade into the darkness, which is coming for us all.</p>



<p>Thank you.</p>
<p>The post <a href="https://www.NeuralLantern.com/mastering-x86-64-assembly-a-beginners-guide-to-cpu-registers/">Mastering x86-64 Assembly: A Beginner&#8217;s Guide to CPU Registers</a> appeared first on <a href="https://www.NeuralLantern.com">NeuralLantern.com</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.NeuralLantern.com/mastering-x86-64-assembly-a-beginners-guide-to-cpu-registers/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Caching &#038; Memory Hierarchy: How CPUs, RAM, &#038; Disks Boost Performance</title>
		<link>https://www.NeuralLantern.com/caching-memory-hierarchy-how-cpus-ram-disks-boost-performance/</link>
					<comments>https://www.NeuralLantern.com/caching-memory-hierarchy-how-cpus-ram-disks-boost-performance/#respond</comments>
		
		<dc:creator><![CDATA[mike]]></dc:creator>
		<pubDate>Sat, 28 Jun 2025 14:00:00 +0000</pubDate>
				<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Videos]]></category>
		<category><![CDATA[cache hit]]></category>
		<category><![CDATA[cache miss]]></category>
		<category><![CDATA[caching]]></category>
		<category><![CDATA[computer performance]]></category>
		<category><![CDATA[computer science]]></category>
		<category><![CDATA[CPU cache]]></category>
		<category><![CDATA[CPU registers]]></category>
		<category><![CDATA[hard drive]]></category>
		<category><![CDATA[internet caching]]></category>
		<category><![CDATA[memory hierarchy]]></category>
		<category><![CDATA[memory storage]]></category>
		<category><![CDATA[processor cache]]></category>
		<category><![CDATA[RAM vs disk]]></category>
		<category><![CDATA[system RAM]]></category>
		<category><![CDATA[tech explainer]]></category>
		<guid isPermaLink="false">https://www.NeuralLantern.com/?p=168</guid>

					<description><![CDATA[<p>Explore caching &#038; memory hierarchy! How CPU registers, RAM, &#038; disks boost speed. Clear, fun guide for all!</p>
<p>The post <a href="https://www.NeuralLantern.com/caching-memory-hierarchy-how-cpus-ram-disks-boost-performance/">Caching &amp; Memory Hierarchy: How CPUs, RAM, &amp; Disks Boost Performance</a> appeared first on <a href="https://www.NeuralLantern.com">NeuralLantern.com</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
https://www.youtube.com/watch?v=ayLwAJVMdAA
</div></figure>



<p>Join us for a fun dive into caching &amp; the memory hierarchy! Learn how CPU registers, RAM, &amp; hard drives balance speed &amp; storage to make your computer lightning fast. From cache hits to internet browsing, we break it down in a clear, beginner-friendly way. Subscribe for more tech explainers &amp; hit that like button to support the channel! Scan the QR code for more tutorials &amp; resources. Let’s geek out together!</p>



<p>Introduction to Caching 00:00:00<br>What is Caching? 00:00:10<br>Memory Units: Size vs. Speed 00:00:14<br>CPU Registers vs. System Memory 00:00:33<br>Benefits of Caching 00:01:05<br>Access Patterns and Algorithms 00:01:24<br>Cache Hit and Miss 00:02:48<br>Data Movement in Cache 00:04:51<br>Cache Purging 00:05:57<br>Multiple Cache Levels 00:07:15<br>Internet Caching Example 00:09:28<br>Memory Hierarchy Pyramid 00:12:34<br>Volatile Memory and Registers 00:13:16<br>Processor Cache and RAM 00:13:48<br>Slower Storage Types 00:14:38<br>Conclusion and Subscribe Request 00:15:12</p>



<p>Thanks for watching!</p>



<p>Find us on other social media here:</p>



<ul class="wp-block-list">
<li>https://www.NeuralLantern.com/social</li>
</ul>



<p>Please help support us!</p>



<ul class="wp-block-list">
<li>Subscribing + Sharing on Social Media</li>



<li>Leaving a comment or suggestion</li>



<li>Subscribing to our Blog</li>



<li>Watching the main &#8220;pinned&#8221; video of this channel for offers and extras</li>
</ul>



<p>Hello there. I&#8217;d like to talk to you about caching and the hierarchy of memory.</p>



<p>So for starters, what is caching?</p>



<p>Simply put, sometimes we have memory units or storage units that are very, very big because they&#8217;re cheap,</p>



<p>but that also makes them very, very slow.</p>



<p>And sometimes we have storage units that are very, very fast and thus expensive and thus very, very, very small.</p>



<p>and thus very, very, very small.</p>



<p>For example, if we had like a, let&#8217;s say a CPU</p>



<p>and we were just talking about the memory</p>



<p>that the CPU itself could hold in its CPU registers,</p>



<p>we have a very small number of registers inside of the CPU</p>



<p>compared to system RAM or disks or whatever.</p>



<p>So we can&#8217;t actually hold that much memory,</p>



<p>but at the same time, the CPU registers are lightning fast,</p>



<p>lightning fast, even compared to system memory.</p>



<p>So that kind of sucks, right?</p>



<p>right because the system memory is way slower than the CPU registers why can&#8217;t</p>



<p>we just have more registers well it&#8217;s too expensive so caching is something</p>



<p>that you can kind of use to get the best of both worlds you can have something</p>



<p>that&#8217;s very very fast be your primary place that you try to store things and</p>



<p>look for things to get them and set them and then when it runs out of space you</p>



<p>can just kind of push things to something that&#8217;s a little bit slower but</p>



<p>there&#8217;s a pattern of access that actually makes sense.</p>



<p>Hopefully you&#8217;re not accessing your data and instructions in a totally random way.</p>



<p>So that when you access in a pattern,</p>



<p>then algorithms inside the machine and the operating system can kind of figure out</p>



<p>which items are best to take out of the small storage device.</p>



<p>And that way we can sort of keep the most frequently or the most often</p>



<p>or the most recently used things inside of the fastest device.</p>



<p>This is kind of a way to get the best of both worlds, kind of a way to leverage the best of both worlds.</p>



<p>Okay, so what am I kind of talking about?</p>



<p>Let&#8217;s just suppose for the sake of argument, let me draw this a little bit.</p>



<p>Suppose for the sake of argument, you have something that&#8217;s really, really slow, but it&#8217;s huge.</p>



<p>A huge storage thing.</p>



<p>Maybe this is your disk.</p>



<p>Maybe this is your system RAM.</p>



<p>I don&#8217;t know.</p>



<p>There&#8217;s many levels to this.</p>



<p>a little bit faster and thus a little bit more expensive but it&#8217;s slower and then maybe you have</p>



<p>something else that is like really really fast but it&#8217;s super expensive so we can only make a</p>



<p>really really small version of it right so imagine that uh you know you are the i don&#8217;t know we&#8217;ll</p>



<p>say the user the user of these things is actually usually just like the cpu or something but let&#8217;s</p>



<p>say that you&#8217;re the user and you want to look and see if some piece of data you want is stored in</p>



<p>is stored in there. Maybe you have memory location of 45 or something or 44 that you</p>



<p>want to check for. You&#8217;re like what what is the data at memory location 44? I&#8217;m</p>



<p>totally making this up that we wouldn&#8217;t look at memory location 44 but suppose</p>



<p>you are. So if memory location 44 or this item whatever that you&#8217;re looking for is</p>



<p>in the super small and fast thing then awesome you don&#8217;t need to look any</p>



<p>further. But if it&#8217;s not we&#8217;ll call that a cache miss. We&#8217;ll say well it&#8217;s not in</p>



<p>we&#8217;ll say well it&#8217;s not in there whoops it&#8217;s not in there so we call that a miss for a cache and</p>



<p>that means we just have to check the next thing we&#8217;ll say all right well if it&#8217;s not in there is</p>



<p>it in the next fastest thing the thing that&#8217;s like a little bit slower and a little bit bigger if it&#8217;s</p>



<p>in there we call that a hit we would call it a hit if we found it on the first try also but if it&#8217;s</p>



<p>in there we call it a hit and if it&#8217;s not in there we call it another miss so we&#8217;ll say miss and then</p>



<p>And then finally we&#8217;ll check maybe the biggest thing that we have available and we&#8217;ll go all right is it is it in the giant thing?</p>



<p>And usually it is going to be in the giant thing because if we&#8217;re talking about program instructions or program data or something like that</p>



<p>You know the data is at least going to be on your disk drive in almost every case right so or your hard drive</p>



<p>so</p>



<p>You could imagine maybe this green thing is the</p>



<p>CPU registers or the CPU cache or something very very very fast and you can imagine this blue thing here is</p>



<p>is perhaps system RAM.</p>



<p>It&#8217;s like a little bit bigger, a little bit faster.</p>



<p>And then the red thing is your hard disk,</p>



<p>which does definitely have all the data,</p>



<p>but it&#8217;s really, really, really slow.</p>



<p>And we&#8217;re hoping not to try to touch the red thing</p>



<p>because it&#8217;s going to cost us a lot more time.</p>



<p>And then same thing for the blue.</p>



<p>So the first time we look for this piece of data,</p>



<p>you know, we missed twice</p>



<p>because it was only in the red thing,</p>



<p>you know, the disk, that we&#8217;ll call it.</p>



<p>But then suppose we come along later</p>



<p>later and we look for that piece of data again maybe we&#8217;re inside of a loop maybe our function</p>



<p>gets called multiple times and for whatever reason we check whenever when we when we originally found</p>



<p>the data in the red box by the way it was sent up through the cache and sort of copied into all the</p>



<p>other devices so you know when we couldn&#8217;t find our data anywhere in the green or blue the it was</p>



<p>copied from the red to the blue and then to the green also so it&#8217;s actually everywhere and then</p>



<p>And then the next time we try to look for that same piece of data, we&#8217;ll have a hit because it&#8217;s just sitting in the CPU or sorry, not the CPU, but just the fastest thing, which you could imagine as being the CPU or the CPU cache or something.</p>



<p>Right. So notice how once we have a hit, there&#8217;s not really any need to go look onto the slower devices.</p>



<p>based on how often you need that data or how recently you&#8217;ve used that data or whatever.</p>



<p>So great. We have a lot of hits. We&#8217;re now getting lightning speed because we&#8217;re just like reading</p>



<p>only from that green area. Suppose some time passes and you start filling up the green thing,</p>



<p>the fastest thing with lots of other data and it overflows because it is a small place for data.</p>



<p>So eventually we&#8217;ll have to start purging some of the data that we&#8217;re not using anymore. And maybe</p>



<p>is awful i&#8217;m still getting used to this pen let me just try one more time oh when i lift up the</p>



<p>pen it kind of drags a bit um so we&#8217;ve kind of filled up the green area and there&#8217;s not enough</p>



<p>room for all the data that we want the system realizes that ox44 hasn&#8217;t been used in a while</p>



<p>it doesn&#8217;t seem to be a part of the current working window data set and so we&#8217;ll just</p>



<p>purge it so the system just says all right let&#8217;s just erase that from the green</p>



<p>it from the green the fastest storage device it might not erase it from the</p>



<p>blue because the blue is bigger it can hold more data before we start having to</p>



<p>erase things right so that means there&#8217;s a pretty good chance it&#8217;s sitting in the</p>



<p>blue so if we try to access it again I&#8217;ll just put a red X here to indicate</p>



<p>that we have a miss so we miss the fastest device that sucks then we check</p>



<p>the next fastest device and it&#8217;s in there so we&#8217;re gonna call that a hit so</p>



<p>we didn&#8217;t get to use the fastest device but at the same time we also didn&#8217;t have to use</p>



<p>the slowest device so this is still kind of a win right suppose oh and then by the way once we find</p>



<p>that hit once we actually hit it from the blue device then the data gets carried back to the</p>



<p>green device the fastest device because the system now considers ox44 that address or that value</p>



<p>whatever to be part of the working set of data that we&#8217;re currently using so the moment we hit</p>



<p>it gets brought up to the fastest device in the hopes that maybe we&#8217;ll try to request it again</p>



<p>in the near future and save a bunch of processing time.</p>



<p>So suppose for the sake of argument, then a bunch more time passes</p>



<p>and it has to be purged again from the fastest device.</p>



<p>So, you know, we&#8217;re accessing lots of data.</p>



<p>We&#8217;re filling up that green thing again.</p>



<p>Eventually there&#8217;s not enough room.</p>



<p>We have to purge some old stuff.</p>



<p>So we purge the 44 there.</p>



<p>And then even more time passes.</p>



<p>And we have to also purge it from the medium speed device, the blue square.</p>



<p>Because that also can fill up at some point.</p>



<p>So that sucks.</p>



<p>We&#8217;ll never purge from the giant storage device,</p>



<p>which is like your disk drive usually or your hard drive.</p>



<p>So it&#8217;ll still be there.</p>



<p>Which means eventually when we try to request 44 again,</p>



<p>we&#8217;ll go through the original process.</p>



<p>We&#8217;ll just say, you know, going through…</p>



<p>Well, I&#8217;ll just write the word miss.</p>



<p>I&#8217;ll just write the word miss.</p>



<p>We&#8217;ll just go miss here.</p>



<p>And then we look here and it&#8217;s another miss.</p>



<p>And then we look here and it&#8217;s a hit.</p>



<p>I&#8217;ll put hit.</p>



<p>So in that case, when a lot of time passed</p>



<p>and all the other caches kind of filled up,</p>



<p>then we didn&#8217;t really get any benefit,</p>



<p>any performance boost from using caches.</p>



<p>In fact, we took a little bit of a penalty</p>



<p>on those two misses because we got to check one thing,</p>



<p>whoops, and then check another thing, whoops.</p>



<p>And then finally we hit the red thing,</p>



<p>red thing which is giant and has the data we wanted we could have just gone</p>



<p>there in the first place and saved a couple of you know some CPU cycles</p>



<p>because we wouldn&#8217;t have had to do the two misses but checking and missing is</p>



<p>part of the process of using a cache and so it&#8217;s worth it because you know most</p>



<p>of the time we&#8217;ll hopefully be hitting a lot of cache in the green area and even</p>



<p>more cache in the blue area so that&#8217;s the basic idea of caching kind of within</p>



<p>Let&#8217;s see what else that I want to show you here.</p>



<p>We got slow, medium, and large.</p>



<p>And maybe just another example that you might relate to more.</p>



<p>Suppose you go to an internet website and on the website there&#8217;s lots of images and</p>



<p>things like that.</p>



<p>Well, those images are usually cached on your local machine inside of your browser&#8217;s</p>



<p>cache area.</p>



<p>What am I even talking about?</p>



<p>First time you go to a website ever, the images get loaded from the internet.</p>



<p>very very very big because it&#8217;s like at this point in well I think since 2020 it</p>



<p>was over 64 zettabytes and a zettabyte is a trillion gigabytes so 64 trillion</p>



<p>gigabytes of data on the internet so huge right but the internet is kind of</p>



<p>slow even if you have a lightning fast connection it&#8217;s probably still slower</p>



<p>than accessing your local hard drive definitely way slower than accessing</p>



<p>your local memory although most people when I recorded this video have internet</p>



<p>slower than their disk drive or their SSD. Anyway, so the internet is huge, but it&#8217;s slow.</p>



<p>And I guess it&#8217;s cheap compared to the amount of storage and the speed you get.</p>



<p>So you download the image from the website from the internet. And that&#8217;s like takes a lot of time.</p>



<p>If you do that every single time, and there&#8217;s lots of images, you might feel like your internet</p>



<p>experience is slow, you might see images kind of like loading. You know, even in the modern era,</p>



<p>if they take just like a moment to load, then you kind of think like, whoa, there&#8217;s like a lot of</p>



<p>delay here, right? So, but then the first time we would call that, I guess, a miss on your local</p>



<p>cache, and then we would hit on the internet. So the first time you load it, it actually,</p>



<p>your browser will actually save a copy of that data to your local disk area. And well, the next</p>



<p>time you go to that website, instead of looking directly to the internet to get the images,</p>



<p>get the images your browser will look to see if you have a copy saved already locally on your on</p>



<p>your disk drive or your hard drive and if that&#8217;s true then your computer will just load the images</p>



<p>from the local machine and not from the internet and then your pages will seem like they load a lot</p>



<p>lot faster so that&#8217;s kind of the concept of caching in a slightly different way you know the fast</p>



<p>expensive thing is your is your hard drive the slow cheap thing is the internet you can imagine</p>



<p>many levels i mean this diagram that i drew there&#8217;s three levels in your cpu you have cpu</p>



<p>registers the fastest thing and then you have l1 cache which are almost as fast as the registers</p>



<p>and you have like some amount of kilobytes that you can store and then your cpu your cpu also has</p>



<p>l2 cache usually and then depending on what kind of cpu you have you might have l3 cache so that&#8217;s</p>



<p>four levels right there and then beyond that you know there&#8217;s system ram that can cache some data</p>



<p>cache some data for your CPU. It&#8217;s a lot slower than the CPU caches, but you know, it&#8217;s larger.</p>



<p>And, uh, uh, you know, eventually we can just get basically down to your hard drive,</p>



<p>uh, in the slowest case. So let&#8217;s see, what else can I tell you real fast? Oh,</p>



<p>I wanted to show you a diagram. Let&#8217;s see. So let me show you this diagram right here.</p>



<p>I found a diagram of this on Wikipedia. It&#8217;s called computer memory hierarchy.</p>



<p>And so this is what I talked about in the beginning of the video. We want to talk about</p>



<p>the beginning of the video we want to talk about like the hierarchy of memory</p>



<p>the hierarchy is kind of like a pyramid the reason it&#8217;s a pyramid is so that we</p>



<p>can kind of remember that stuff on the top is very small notice how the thing</p>



<p>on the top it has less area to work with and the things at the bottom have a lot</p>



<p>more area to work with so the thing that&#8217;s written in the middle here</p>



<p>actually let me go to let me go to the actual image of it because I think I</p>



<p>like it the way it looks a little bit better oh no I wanted to do this because</p>



<p>I wanted to do this because I already had it.</p>



<p>Okay.</p>



<p>So the things at the top have a very small size and a very small capacity.</p>



<p>And you can imagine some examples are processor registers, like our CPU registers.</p>



<p>But they&#8217;re very, very fast and they&#8217;re very expensive.</p>



<p>And there&#8217;s this little term written down here or this little description saying power on immediate term.</p>



<p>That just basically means this is volatile memory.</p>



<p>And so, you know, the moment you disable, the moment you disconnect power,</p>



<p>shut down your computer, you just lose that.</p>



<p>It&#8217;s just gone forever.</p>



<p>Then kind of, you know, getting a little bit bigger and also a little bit cheaper,</p>



<p>but also a little bit slower.</p>



<p>We have the small size, small capacity category.</p>



<p>You could imagine this is your processor cache, which is just, you know,</p>



<p>the cache on your processor is just a little data storage area.</p>



<p>You know, like I said before, that sort of backs up the CPU registers.</p>



<p>it&#8217;s where the registers first look for their cache. Still very fast and very expensive,</p>



<p>only a little bit cheaper and thus slower than the CPU registers. Then we have like medium size</p>



<p>and small size and large size and whatever. Different sizes and categories. So kind of</p>



<p>going from the fastest to the slowest here, once we hit cache, then we can consider this to be</p>



<p>the disk, but random access memory or system RAM is just a lot slower than the CPU, but</p>



<p>it&#8217;s faster than the disk.</p>



<p>And then you can imagine other things that are a little bit slower, but a little bit</p>



<p>larger could be flash memory, USB memory and so forth.</p>



<p>And then and then pretty slow here, the slowest that I ever deal with personally or hard drives,</p>



<p>even your SSD being way faster than your old disk drives is still considered very slow</p>



<p>compared to system RAM, but they&#8217;re huge, right?</p>



<p>But they&#8217;re huge, right?</p>



<p>And then kind of like at the very bottom of this pyramid is tape backup,</p>



<p>incredibly slow, but incredibly large for the money.</p>



<p>And that&#8217;s why this is sometimes used still.</p>



<p>And that, my friends, is the hierarchy of memory.</p>



<p>I hope you learned a little bit of stuff and you had a little bit of fun.</p>



<p>I&#8217;ll see you in the next video.</p>



<p>Hey, everybody.</p>



<p>Thanks for watching this video again from the bottom of my heart.</p>



<p>I really appreciate it.</p>



<p>I really appreciate it. I do hope you did learn something and have some fun</p>



<p>If you could do me a please a small little favor</p>



<p>Could you please subscribe and follow this channel or these videos or whatever it is?</p>



<p>You do on the current social media website that you&#8217;re looking at right now</p>



<p>It would really mean the world to me and it&#8217;ll help make more videos and grow this community</p>



<p>So we&#8217;ll be able to do more videos longer videos better videos or just I&#8217;ll be able to keep making videos in general</p>



<p>so please do do me a kindness and</p>



<p>Do me a kindness and subscribe.</p>



<p>You know, sometimes I&#8217;m sleeping in the middle of the night</p>



<p>and I just wake up because I know somebody subscribed or followed.</p>



<p>It just wakes me up and I get filled with joy.</p>



<p>That&#8217;s exactly what happens every single time.</p>



<p>So you could do it as a nice favor to me</p>



<p>or you could troll me if you want to just wake me up in the middle of the night.</p>



<p>Just subscribe and then I&#8217;ll just wake up.</p>



<p>I promise that&#8217;s what will happen.</p>



<p>Also, if you look at the middle of the screen right now,</p>



<p>you should see a QR code which you can scan in order to go to the website,</p>



<p>which I think is also named somewhere at the bottom of this video and it&#8217;ll take</p>



<p>you to my main website where you can just kind of like see all the videos I</p>



<p>published and the services and tutorials and things that I offer and all that</p>



<p>good stuff and if you have a suggestion for clarifications or errata or just</p>



<p>future videos that you want to see please leave a comment or if you just</p>



<p>want to say hey what&#8217;s up what&#8217;s going on you know just send me a comment</p>



<p>those in the middle of the night i get i wake up in a cold sweat and i&#8217;m like it would really it</p>



<p>really mean the world to me i would really appreciate it so again thank you so much for</p>



<p>watching this video and um enjoy the cool music as as i fade into the darkness which is coming for us</p>



<p>Thank you.</p>
<p>The post <a href="https://www.NeuralLantern.com/caching-memory-hierarchy-how-cpus-ram-disks-boost-performance/">Caching &amp; Memory Hierarchy: How CPUs, RAM, &amp; Disks Boost Performance</a> appeared first on <a href="https://www.NeuralLantern.com">NeuralLantern.com</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.NeuralLantern.com/caching-memory-hierarchy-how-cpus-ram-disks-boost-performance/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Master Data Sizes in x86-64 CPUs: Bytes, Words, D Words, and Quad Words Explained</title>
		<link>https://www.NeuralLantern.com/master-data-sizes-in-x86-64-cpus-bytes-words-d-words-and-quad-words-explained/</link>
					<comments>https://www.NeuralLantern.com/master-data-sizes-in-x86-64-cpus-bytes-words-d-words-and-quad-words-explained/#respond</comments>
		
		<dc:creator><![CDATA[mike]]></dc:creator>
		<pubDate>Mon, 09 Jun 2025 00:07:07 +0000</pubDate>
				<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Videos]]></category>
		<category><![CDATA[64-bit computing]]></category>
		<category><![CDATA[assembly language]]></category>
		<category><![CDATA[bytes]]></category>
		<category><![CDATA[coding tutorial]]></category>
		<category><![CDATA[computer architecture]]></category>
		<category><![CDATA[CPU basics]]></category>
		<category><![CDATA[CPU registers]]></category>
		<category><![CDATA[D word]]></category>
		<category><![CDATA[data sizes]]></category>
		<category><![CDATA[low-level programming]]></category>
		<category><![CDATA[programming for beginners]]></category>
		<category><![CDATA[quad word]]></category>
		<category><![CDATA[tech education]]></category>
		<category><![CDATA[words]]></category>
		<category><![CDATA[x86-64]]></category>
		<guid isPermaLink="false">https://www.NeuralLantern.com/?p=148</guid>

					<description><![CDATA[<p>Learn data sizes in x86-64 CPUs: bytes, words, D words, quad words. Clear guide for coders on assembly &#038; registers. Subscribe for more!</p>
<p>The post <a href="https://www.NeuralLantern.com/master-data-sizes-in-x86-64-cpus-bytes-words-d-words-and-quad-words-explained/">Master Data Sizes in x86-64 CPUs: Bytes, Words, D Words, and Quad Words Explained</a> appeared first on <a href="https://www.NeuralLantern.com">NeuralLantern.com</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Master Data Sizes in x86-64 CPUs: Bytes, Words, D Words, and Quad Words Explained" width="1380" height="776" src="https://www.youtube.com/embed/v3fMANsXIwU?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p>Get a clear, fun breakdown of data sizes in x86-64 CPUs! This video covers bytes (8 bits), words (16 bits), D words (32 bits), and quad words (64 bits), plus how they fit into assembly and CPU registers. Perfect for programmers, students, or anyone curious about low-level computing. I’ll walk you through the basics with relatable examples, no jargon overload. Subscribe for more coding &amp; tech videos, and scan the QR code to visit my site for extra tutorials! Leave a comment with your thoughts!</p>



<p>Introduction 00:00:00<br>Data Sizes Overview 00:00:01<br>Byte Definition 00:00:44<br>Bits to Bytes Conversion 00:01:27<br>Word Size Explanation 00:02:20<br>Double Word (D Word) 00:04:03<br>Quad Word Definition 00:04:44<br>CPU Registers and Memory 00:05:21<br>Conclusion and Outro 00:06:07<br>Call to Action 00:06:32</p>



<p>Thanks for watching!</p>



<p>Find us on other social media here:</p>



<ul class="wp-block-list">
<li>https://www.NeuralLantern.com/social</li>
</ul>



<p>Please help support us!</p>



<ul class="wp-block-list">
<li>Subscribing + Sharing on Social Media</li>



<li>Leaving a comment or suggestion</li>



<li>Subscribing to our Blog</li>



<li>Watching the main &#8220;pinned&#8221; video of this channel for offers and extras</li>
</ul>



<p>Hello there.</p>



<p>I&#8217;d like to talk to you about data sizes within the context of x86,</p>



<p>64 CPUs,</p>



<p>just like 64 bit CPUs for assembly and just whatever.</p>



<p>So what&#8217;s going on inside of the machine and how do we describe the sizes of</p>



<p>various clumps of data? So for starters, you know,</p>



<p>of your computer, there&#8217;s just a bunch of ones and zeros represented in all the wires,</p>



<p>in all the circuitry.</p>



<p>The human beings with feelings decide, oh, you know, I&#8217;m going to take a group of this</p>



<p>many bits, this many ones and zeros, and I&#8217;m going to say that it is something else.</p>



<p>I&#8217;m going to call it an abstract unit.</p>



<p>So the first thing that we do is we have something called a byte.</p>



<p>That just means eight bits.</p>



<p>So we can say one byte equals eight bits.</p>



<p>equals eight bits. I don&#8217;t know why I hit the shift key there. That&#8217;s probably going to mess</p>



<p>up my annotator. Nope. Okay. So what is eight bits? Just as a little reminder, you know, we&#8217;ll</p>



<p>just say one, two, three, four, five, six, seven, eight, or it could be, you know, something more</p>



<p>random looking one, two, three, four, five, six, seven, eight, you know, so like inside of the</p>



<p>machine, we have eight ones and zeros for eight bits. And when we group them together, we&#8217;ll just</p>



<p>Okay, no problem.</p>



<p>So that means by the way, if somebody says,</p>



<p>oh, my internet connection is this many megabits a second.</p>



<p>If you wanna know how many bytes a second,</p>



<p>try dividing by eight.</p>



<p>Or if somebody says I have this many megabytes a second</p>



<p>of transfer speed, try dividing that by eight.</p>



<p>You know, so multiply or divide by eight</p>



<p>to get the right number.</p>



<p>Okay, so if we had two bytes together,</p>



<p>that&#8217;s just gonna be 16 bits.</p>



<p>No problem there.</p>



<p>I&#8217;m just going to copy paste these bits and you don&#8217;t have to do this.</p>



<p>But for me personally, I like to put a little space in between bite groupings just to help</p>



<p>my human brain kind of see, oh, I&#8217;m looking at two bites right here when I&#8217;m referring</p>



<p>to different data sizes.</p>



<p>So then eventually we kind of need an idea of, you know, let&#8217;s come up with a different</p>



<p>word that means more than one bite.</p>



<p>ironically based on what I just said the the term we&#8217;re going to use is word a word</p>



<p>the size of a word just kind of depends on the system that you&#8217;re on on my system</p>



<p>the size of a word is two bytes so I&#8217;m going to say one word equals two bytes</p>



<p>and you can imagine that&#8217;s 16 bits maybe I should start doing the double equal sign here just to be</p>



<p>Okay, so equals two bytes.</p>



<p>It also equals 16 bits.</p>



<p>And you can imagine it&#8217;s basically the same thing</p>



<p>that we just wrote up above.</p>



<p>So I&#8217;m gonna erase this actually, 16.</p>



<p>Oh, I put an E there, embarrassing.</p>



<p>Okay, so one word is two bytes.</p>



<p>Again, the size of a word depends on your system.</p>



<p>If you&#8217;re not sure, you should probably look it up.</p>



<p>What&#8217;s the word size on my system?</p>



<p>But again, the typical system here in 2024</p>



<p>6664 machines running Ubuntu, um, or just like Linux is going to be like, you know,</p>



<p>two bytes. Okay. So now, uh, we have like words that we can do. So if I had, uh,</p>



<p>let&#8217;s say I had two words, uh, two words is going to be double of what we just wrote. Right. So</p>



<p>that means we&#8217;re going to have this many, whoops, I blew it. We&#8217;re going to have this many bits.</p>



<p>So two words, two words is going to be equal to, um, 32 bits.</p>



<p>And it&#8217;s also going to be equal to four bytes because, you know, we multiplied everything</p>



<p>by two.</p>



<p>So this is like four bytes.</p>



<p>So now we need another term to represent this two words, which is four bytes, which</p>



<p>is 32 bits.</p>



<p>We can also call that a D word.</p>



<p>Actually, I&#8217;ll say D word like that.</p>



<p>And what does D word mean?</p>



<p>is twice the size of the word length on your system.</p>



<p>So like if we decided our word length is two bytes,</p>



<p>then a D word is four bytes and that&#8217;s it.</p>



<p>Four bytes is 32 bits.</p>



<p>You might notice this is similar to like old school CPUs</p>



<p>that ran in 32 bits and maxed out their RAM</p>



<p>at about four gigabytes.</p>



<p>So let&#8217;s come up with one more term here.</p>



<p>Let&#8217;s come up with the term quad word.</p>



<p>Actually, we&#8217;re not coming up with the term.</p>



<p>We&#8217;re just using it.</p>



<p>What is a quad word?</p>



<p>A quad word is two D words.</p>



<p>So we&#8217;re just kind of doubling it again.</p>



<p>I forgot that extra equal sign there.</p>



<p>Quad word is two D words, which means it&#8217;s also four words.</p>



<p>And it also means it&#8217;s eight bytes.</p>



<p>64 bits.</p>



<p>And then I guess if I want to represent this to you,</p>



<p>I can just kind of like copy paste that twice.</p>



<p>And this is the size of the memory address space that we have on modern CPUs.</p>



<p>This is also the size of your general purpose registers in modern 64-bit CPUs.</p>



<p>So if somebody says, hey, I got a quad word.</p>



<p>I want you to store it somewhere.</p>



<p>You can instantly think to yourself, well, obviously I could put it in memory.</p>



<p>I could put it in memory.</p>



<p>You could also just put it directly into a CPU register.</p>



<p>And that&#8217;s it.</p>



<p>This also means that you could put two D words into one CPU register if you were very clever.</p>



<p>You could also do the same thing.</p>



<p>You could put like four words inside of one CPU register.</p>



<p>Because the CPU registers, they&#8217;re always the same size no matter how you use them.</p>



<p>They&#8217;re kind of hardwired.</p>



<p>So I hope this has been, you know, kind of helpful.</p>



<p>These are the basics of different data type sizes that we have in CPUs and</p>



<p>assembly language. I&#8217;ll see you in the next video.</p>



<p>Hey everybody. Thanks for watching this video again from the bottom of my heart.</p>



<p>I really appreciate it. I do hope you did learn something and have some fun.</p>



<p>If you could do me a please, a small little favor,</p>



<p>Follow this channel or these videos or whatever it is you do on the current social media website that you&#8217;re looking at right now</p>



<p>It would really mean the world to me and it&#8217;ll help make more videos and grow this community</p>



<p>So we&#8217;ll be able to do more videos longer videos better videos or just I&#8217;ll be able to keep making videos in general</p>



<p>So, please do do me a kindness and and subscribe</p>



<p>You know sometimes I&#8217;m sleeping in the middle of the night and I just wake up because I know somebody subscribed or followed</p>



<p>and I get filled with joy. That&#8217;s exactly what happens every single time. So you could do it as</p>



<p>a nice favor to me, or you could, you could troll me if you want to just wake me up in the middle</p>



<p>of the night, just subscribe. And then I&#8217;ll, I&#8217;ll just wake up. I promise that&#8217;s what will happen.</p>



<p>Also, uh, if you look at the middle of the screen right now, you should see a QR code,</p>



<p>which you can scan in order to go to the website, which I think is also named somewhere at the</p>



<p>bottom of this video. And it&#8217;ll take you to my main website where you can just kind of like see</p>



<p>and tutorials and things that I offer and all that good stuff and if you have a suggestion for</p>



<p>clarifications or errata or just future videos that you want to see please leave a comment or</p>



<p>if you just want to say hey what&#8217;s up what&#8217;s going on you know just send me a comment whatever I also</p>



<p>wake up for those in the middle of the night I get I wake up in a cold sweat and I&#8217;m like this</p>



<p>it would really it really mean the world to me I would really appreciate it so again thank you so</p>



<p>thank you so much for watching this video and enjoy the cool music as as i fade into the</p>



<p>darkness which is coming for us all</p>



<p>Thank you.</p>
<p>The post <a href="https://www.NeuralLantern.com/master-data-sizes-in-x86-64-cpus-bytes-words-d-words-and-quad-words-explained/">Master Data Sizes in x86-64 CPUs: Bytes, Words, D Words, and Quad Words Explained</a> appeared first on <a href="https://www.NeuralLantern.com">NeuralLantern.com</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.NeuralLantern.com/master-data-sizes-in-x86-64-cpus-bytes-words-d-words-and-quad-words-explained/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
