08:34 Actually, MUL and DIV also affect EDX. The MUL instruction stores the higher half of the result in EDX, while DIV stores the remainder from division there. If one dosn't know about that, one can be very surprised that suddenly their EDX is getting clobbered with "random" numbers after division/multiplication.
@OmbreeTV5 жыл бұрын
Omg thank you so much, i've been trying to understand a code for a couple of days and couldn't figure out why edx was being pushed and pop before and after a multiplication
@小鳥ちゃん4 жыл бұрын
*boops*
@mikicerise62504 жыл бұрын
OMG, thanks soo much. If not for your comment I would still be mystified at the bizarre results of my test code. xD "Multiplication never works... division only works sometimes... duuhhh..." xD
@mikicerise62504 жыл бұрын
Another thing I've discovered on the MacOSX x64 side of things (still using NASM) is if you divide 64 bit integers the quotient is apparently given by RAX:RDX, for reasons I still don't understand, so since both RAX and RDX are 64 bit integers, aside from giving you the wrong answer, if anything substantial is in RDX it's a ticket to overflow-land unless you initialize RDX at 0 first.
@Kokurorokuko2 жыл бұрын
How is storing higher half of the result useful?
@kraio-sfu5 жыл бұрын
“Assembly language is basically just a human-readable form of machine code” As a complete beginner who has just looked at Assembly code for the first time, I am crying both tears of laughter and pain at this statement
@mansodev4 жыл бұрын
@Kraio have you tried lua or python? Their more higher level and easy to learn.
@nickstill26664 жыл бұрын
I hope you didnt give up but you'll want to start somewhere besides x86 assembly. There are loads of languages that make more sense and are more natural to write for a beginner.
@kraio-sfu4 жыл бұрын
nick still Which one would you suggest? I have recently started wanting to make my own computer on a breadboard, but I want to be able to actually make programs for it. Do you think the Motorola 68010 would be an okay pick?
@kraio-sfu4 жыл бұрын
The Planebagel Oh I absolutely love Python, it’s my main programming language. I just find it funny because calling Assembly “human-readable” is a very generous statement
@nickstill26664 жыл бұрын
@@kraio-sfu hell ya! A big project but could be rewarding. My personal preference (arm chair opinion) would be to start with a 6502. The Assembly lang is straight forward and there is a community around ROM creation for the 6502 with python and you can even by a kit for breadboarding it
@c0n-5truct-0r63 жыл бұрын
I just had hours over hours of Assembly lessons at University... 6 Videos and I finaly get how it works! Well done! Thanks a lot!
@serdart7220 Жыл бұрын
Thanks for this great, very comprehensible, video. Organization of the video (introduction and then development of the body part of this training) really is very nice, 👌👍
@sgyniguez6 жыл бұрын
Didn't make sense to me the first time I watched it. After reading through parts of a book, following a tutorial on tutorialspoint, this made SO much more sense. Thank you my man.
@omarelric5 жыл бұрын
Salvador Yniguez hey dude, what book was it?
@mrkewi14 жыл бұрын
@@omarelric The Art Of Assembly
@omarelric4 жыл бұрын
Fazil Sultan hey, I somehow came across the same book anyways 😂
@omarelric4 жыл бұрын
Samyakt Jain “the art of assembly”
@samyaktjain6984 жыл бұрын
@@omarelric I am beginner , please help me , where I learn Reverse engineering ?
@memy4460 Жыл бұрын
Absolutely brilliant. Nothing, I mean nothing at all worked on my computer from this tutorial.
@robert-jh3rr2 ай бұрын
should be Intel cpu ...if u have amd won't work
@ivandres736 жыл бұрын
Excelent, straight to the point and no "suscribe bull".... Great presentation and introduction
@ivandres733 жыл бұрын
@reena mola because you reference processors registries (eax, ebx, etc) without brackets ([ ]). You use brackets when referencing memory address ([0x400008]).
@ivandres733 жыл бұрын
@reena mola "mov eax,[ebx]". imagine ebx=0x40000. So we are saying: "mov eax, [0x40000]". imagine memory at 0x40000 = 20. So we are saying: "move eax, 20". Note, syntax might change a bit of how to reference a registry depending on the tool (at&t, intel, oracle...). But that is not the case for the example above.
@ivandres733 жыл бұрын
@reena mola No, registries do not have addresses, they are just... "there". Memory has addresses, and the more memory you have (2GB, 4GB, 8GB, etc) the more "addresses" you have.
@ivandres733 жыл бұрын
@reena mola no. you are talking about the "sections" that a registry has. Every 32bit x86 registry has 4 sections, and those are different from memory addresses. memory addresses refers to the RAM. registries do not have addresses. registries can store addresses. references to sections of a registry is with 'ax, al, ah', and other special words; not with brackets. any RAM address is refered with brackets[ ]. [eax+4] = go to the RAM, at the location of eax+4. eax+4 = add 4 to the value stored in eax. (not sure if this is even permitted)
@ivandres733 жыл бұрын
@reena mola Make good use of knowledge! 🤙🏽
@chevalier56915 жыл бұрын
This video is not really an "intro" but fortunately it's exactly what I need.
@blackham75 жыл бұрын
Eurgh You're such a squidward
@marcussmithwick63266 жыл бұрын
Finally a good tutorial on x86
@asheralbrecht25543 жыл бұрын
You are the only person that i could find online that can explain things extremely well! Thanks so much!
@FoxhoundULM4 жыл бұрын
Hey Davy, what a masterpiece of a tutorial series, I wanted to have an idea of what Assembly programming looked like and better understand very low level programming, well man i wasn't expecting to find such a brillant tutorial in video ! Thanks, and if you want to carry on with more advance stuffs in assembly, please don't hold your breath !
@xrafter4 жыл бұрын
Assembly is a processor language but in human format.
@PAUNOMOLUSCO5 жыл бұрын
I gave my thumb’s up to every episode of this series.
@ahmedomar2225 жыл бұрын
Thanks for making this video series for free. I am really glad. It is a massive help to me. Plus you really simplify it which good for a beginner like me.
@vojtechstoklasa3417 Жыл бұрын
I am programmer for quite some time, but your videos seem to be the right way for me to move into asssembly more! Cheers
@meno437 Жыл бұрын
Crack your own programs good way of learning
@alexcocinda3845 жыл бұрын
Thank you so much man, this really helped me to get the basics of this thing. I may be able to pass my college exam now.
@Learnerofthings3 жыл бұрын
I know this is 3 years old, but this is a very good series and should be continued :)
@CircularLogic546 жыл бұрын
I love your enthusiasm at the end
@DavyBot7 жыл бұрын
Example code: github.com/code-tutorials/assembly-intro Slides: docs.google.com/presentation/d/19nVBqrXdsvRHhAXPDwQodSoux-b_PXF9dBe-bfZJS2M
@godwhomismike7 жыл бұрын
I really hope you teach computer science courses at your local college(s).
@Darkleaf-Music6 жыл бұрын
godwhomismike From what I understand, computer science is more about mathematics and high level abstraction stuff. Most of the courses I've seen teach with Java, though I did know of least one school which focused on embedded systems.
@godwhomismike6 жыл бұрын
I've had plenty of CS instructors that were not that great with math, but could code extremely well.
@bradley1995 Жыл бұрын
@10:37 Wow amazing descriptions on the code. Seeing it in such fashion helped me understand the translation between that and c code. I believe there will be great insight learned from your video's! Thank you friend
@myles91937 жыл бұрын
Been trying to teach myself x86 for a while, definitely not the 'nicest' language but a great feeling when it works
@drozcan6 жыл бұрын
reverse engineering feels like pro
@wooseliedestine93825 жыл бұрын
@@drozcan Yes indeed
@bradley1995 Жыл бұрын
I'm learning to create a simple "compiler" using java for a lex/parser and to generate asm code. I'm super excited!
@suntexi6 ай бұрын
I feel privileged that the first language I learnt was IBM 1401 autocoder. I then went onto IBM 360 Assembler and so the concepts of x86 Assemble language are relatively easy. 360 processors had 16 general purpose registers and 4 (I think) floating point registers. Addresses of storage were calculated as base and displacement, that is, four bits denoting the base register and twelve bit denoting the offset from the address in that register.
@g4yktzgjx67 жыл бұрын
First part was informative but. You left out what the different keywords means once you get to 10:08. msg db "Hello World!",10,0 //Here we append ' '(newline) and the numeral 0 to our string in order to 0 terminate it(0-terminated string) - which is good practice. Also you didn't create a string of bytes but an array of bytes. You defined bytes(db). So you defined an array containing characters "Hello world! ". Which you could also have done like so although very messy: msg db 'H', 'e' , 'l',' l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!', 0x0a len equ $ - msg // equ is used to define contants. "$" evaluates to the assembly position at the beginning of the line containing the expression(current address). Also maybe tell us why it works. It is not obvious for everyone that you're taking the address exactly after making your string and subtracting the address of the very start of the string. Please remember to tell us what each keyword does and means.
@DavyBot7 жыл бұрын
You don't need to end your string with a 0x00 unless you're dealing with C library functions. The system call for writing to stdout requires the length and that 0x00 doesn't matter. Also... What do you think the difference between a string and an array of character bytes is? :) Also, to each their own. I write the bytes out in hex format as 0x0a instead of just 10 or even 0xa because I'm used to working with hex editors (as people working with low level languages like this tend to be). But, yes, I could have explained in more detail that the $ was for taking the location after the string.
@g4yktzgjx67 жыл бұрын
There is no difference between a string and an array of characters. But in the video you called it a string of bytes. Which I find wrong. It is an array of bytes or a sequence of bytes representing a string.
@DavyBot7 жыл бұрын
They're all valid terms. You probably hear people use "string of bytes" more when they've had to deal with unicode strings in addition to ascii strings. But you're just being picky (or not being picky enough?), it isn't "wrong". en.wikipedia.org/wiki/String_(computer_science)#Representations www.google.com/search?tbm=bks&q=%22string+of+bytes%22
@homelessrobot4 жыл бұрын
A more relevant section of that wikipedia article is probably: en.wikipedia.org/wiki/String_(computer_science)#Non-text_strings (maybe it wasn't there two years ago) The meaning of the word 'string' has evolved to mean 'a sequence of character elements' (or whatever) over time, but its really just another word for vector, array, or sequence. In particular if you are working on x86 in machine instructions, you should probably already be somewhat familiar with this because there are a whole class of string operations for x86 that aren't related t zero terminated character encoding anything. They are just for operating over a contiguous, addressable sequences of elements of a given size.
@beasusan5214 жыл бұрын
happy I've found your videos. from this video alone, I already understood more, then in my lecture to this topic. Thanks for uploading such a great video series and taking your time explaining it so good!
@043_fazlerabbi52 жыл бұрын
He is best
@hjrgf Жыл бұрын
@@043_fazlerabbi5 yeah the video is formatted to make it easy to learn all of the assembly stuff I remembered much more stuff than other tutorials 10/10 tutorial
@kingbeencent4 жыл бұрын
This video suddenly appeared on my playlist after watching virus testing videos, I am interested in remember the Assembly Language, thanks for this content!!!!!
@tardis20057 ай бұрын
Though these have been here a bit, I've just recently found them. Well explained, Davy. Should keep me busy for a while. I've always liked the closest to the metal. Thought C was as far as I could go with any proficiency, but maybe not. It is good practice for VIM.
@J0rD5t3R2 жыл бұрын
This video just saved my whole day. Thank you! Now on to the rest of the playlist...
@myartchannel82055 жыл бұрын
Hurray! Now we're getting somewhere, assembly is a set of different languages. I'm definitely bookmarking this.
@a.v7998 Жыл бұрын
This was really very intresting! I think learning assembly teaches you a lot about computers!
@regretkagami10045 жыл бұрын
I'm so glad you've made these videos. I been using asmtutor which is good, but it goes down a lot easier when you've got a good video series to follow along to. Dope shit man, thank you
@Rogue_Art3 жыл бұрын
One thing you should mention is that there are two ways to write x86-64 assembly. The one you've shown in your video is the Intel syntax which is a lot nicer and readable, but is read right-to-left. The other one, which is just as common, is the AT&T and GNU syntax which is more complex and is read left-to-right.
@tree93804 жыл бұрын
I came here from michael reeves saying this is a easy language and my friend says its not, naturally im going to torture myself to spite my friend. This will be my first coding language, wish me luck
@undefinedchannel99164 жыл бұрын
cmon atleast learn a high-level language to get used to big brain code logic like loops and if statements and stuff like that
@tree93804 жыл бұрын
@@undefinedchannel9916 my suffering is and will be immeasureable till im done and move on to less suffering like c++
@tree93804 жыл бұрын
@steev i do hate myself imdeed
@wassuupman7644 жыл бұрын
@@tree9380 start with python or JS dude... you will lose motivation
@xrafter4 жыл бұрын
Do c first it will help you understanding the assembly and amd64 abi . Abi is just a way of two programs to talk to each other in assembly .
@shvideo13 жыл бұрын
Thank you for this great tutorial. Covered a lot of information and produced a working executable. You are a great teacher!
@10hourslooney254 жыл бұрын
Thank you. And no needless Videohive inspired introductions! Straight to the point.
@gregwoolley4 жыл бұрын
Nice video! Good pace, well structured and clearly explained, thank you!
@kr1spybac0n4 жыл бұрын
Your explained this way better than my professor ever did
@Vermilicious4 жыл бұрын
Short and easy-to-follow presentations. Good job.
@trifalgarh5 жыл бұрын
I wish we had a professor for assembly & computer architecture like you in my Uni 😅
@MrGSA13104 жыл бұрын
I wish I had a professor who teach me something instead of forcing me to watch this kind of videos in order to have any hope of success for his exam 😢
@grandmakisses99733 жыл бұрын
@@MrGSA1310 that’s what I’m scared for I’m going to university soon :( wish me luck
@MoveTrueRecords_ Жыл бұрын
Bro u just explained this easy
@finlayhutchinson73702 жыл бұрын
Very helpful I watched a few tutorials and this is the easiest one to understand thank you.
@jefferystone15 жыл бұрын
Good job - ignore the haters - we all have to start somewhere which is why many are here.
@maelstrom57 Жыл бұрын
I hadn't been this excited to print "hello world" before.
@jpalacios1174 жыл бұрын
You reeeeaaaly hace to watch it more than once... Great video!
@gumboe20073 жыл бұрын
Great video Davy, clear and easy to follow. Thanks for putting it together
@crabmothflunderbum77705 жыл бұрын
Outstanding video series, thank you so much, it really helped. You are a pioneer of knowledge
@BytebroUK2 ай бұрын
There's probably no-one who cares about this, but. My first ever 'proper' programming gig was in about 1979 and was a "This is stupidly slow. Speed it up, if you can" kinda thing. I turned 4 lines of FORTRAN 'IF' statements into about a page and a half of inline assembler, and instead of taking around 24 hours, it now ran in about 2 hours and produced the same answers. Go me!
@Videosuser4 жыл бұрын
You've saved my college semester, sir. Thank you.
@germondhipolito98836 күн бұрын
03:00 does it mean that The Stack is physically on the CPU, like the registers? It's different from the stack in RAM?
@HonsHon2 жыл бұрын
when I first got it to compile, I was so happy haha
@Fabik112 жыл бұрын
That was pretty cool.
@yelircaasi5 жыл бұрын
This is great, and very helpful. Thanks for making it.
@rexseppe70842 жыл бұрын
Thanks, finally someone with a good tutorial!
@booleanscene88824 жыл бұрын
The information in this video is spot on
@Mbro-dq2do2 ай бұрын
You can also install NASM natively on ANY Mac via homebrew package manager.$- brew install nasm
@sameermubeen84959 ай бұрын
very useful and informative video, amazing work
@wqatch4 жыл бұрын
2:42 32-bit's max is 4,294,967,296, while 64 bit's max is 18,446,744,073,709,551,616. 64 bit's max is actually 32 bit max' squared.
@peterparker-fg5kr3 жыл бұрын
conclusion 64 bit are no more useful than 32 bits
@wqatch3 жыл бұрын
@@peterparker-fg5kr *laughs in >4GB of ram*
@husamalzahrani25034 жыл бұрын
Really thanks man we really were need this courses for learninh you really amazing and great persone dont stop 🔥👍👍👍👍🔥🔥
@dezcraft_dev Жыл бұрын
Davy you are a wonderful teacher
@tomaszx77604 жыл бұрын
Nice. Many years ago i write some Asm code in dos. And use int 13h mode to create games.
@lucasbpsx85663 жыл бұрын
Wow, you teach Go and x86, you're a god
@Bod885 жыл бұрын
I really enjoyed this. I'm currently reading the PDF Reverse Engineering For Beginners (understanding Assembly Language) and it gets a bit heavy at times when it talks about different CPU architecture sets and different compiler output. But your video is straight to the point. Thanks
@sealkeen4 жыл бұрын
5:44 *accumulator register, the first important one. Something that is missing is the general purpose registers' description/declaration/definition.
@ArneChristianRosenfeldtАй бұрын
I wish that new students learn a sane language with Registers R00 .. R31 .
@MosinShooter1093 жыл бұрын
Oh man what a find! Knowledgeable and understandable.
@slowedmood74402 жыл бұрын
1 week of college in 10min thank you
@gustavosalmeron20132 жыл бұрын
Everytime I try to learn assembly, I thank Dennis Ritchie for creating C.
@DividedWarrior5 жыл бұрын
Very helpful video. You are the best! Very fun language. Wish me luck!
@pendergastj4 жыл бұрын
What a great video. Thank you for making this! Subscribed.
@tracetv81155 жыл бұрын
10:32 I am a little bit confused. How does the System know, if we want to store the value 4 into the eax to calculate with it or if we want a system call? I don't get it?
@infrakazos4 жыл бұрын
Finally, some good fking -food- _tutorial_
@trulyspinach5 жыл бұрын
Thank you for the great video, very clear explanations.
@PerreRust4 жыл бұрын
Great video, no bullshit, and excellently explained!
@N3fario6 жыл бұрын
Thanks for the tutorial, it's pretty useful. Sometimes there's things that aren't explicitly explained though, which I have to google. For example, knowing what $? in bash is, or what equ/db do es in assembly. Still, nice tutorial
@elikelik35745 жыл бұрын
Thanks a lot for such a great explanation. I have seen a lot of super videos but I'm not clever enough to understand them, but now eventually I start to understand =D . Again Thanks a lot.
@Dom-zy1qy4 ай бұрын
When he says "the syntax can differ between different assemblers" does he mean some will default to using AT&T syntax, others intel syntax? Or is he referring to something else?
@Daniel-m4l1p Жыл бұрын
Awesome content, thanks for sharing this!
@ahmedghallab5342Ай бұрын
شكرا كان ذالك رائعا Thanks it was amazing
@awecwec372011 ай бұрын
very clear and efficient thank u
@satejtawade5 жыл бұрын
Good video. Thnx sir. Kindly upload more video on assembly language
@IronJmo6 ай бұрын
For anyone else who ran into this issue like I did, mov eax, 4 is for 32 bit. If you're working on a 64 bit like I am the system call number is different. mov eax, 1
@lilraahdreadlockvideosandm16485 жыл бұрын
I’m about to watch this 😁
@eddiemorales47285 жыл бұрын
Have you watched it yet?
@lilraahdreadlockvideosandm16485 жыл бұрын
Eddie Morales yea I watched all 6 videos
@lilraahdreadlockvideosandm16485 жыл бұрын
Eddie Morales your about to watch ?
@eddiemorales47285 жыл бұрын
@@lilraahdreadlockvideosandm1648 nice.. I watched the first and bookmarked and subscribed for later.. I got worried.. you told us you were going to watch a month ago and disappeared 😆
@kmengkomsot14792 жыл бұрын
Thanks for the tutorial🥰🥰🥰
@EzProgrammingPro10 ай бұрын
Subbed, this is useful for reverse engineering and game hacking
@PureASM-ShellCoder5 жыл бұрын
Excellent video, thanks man ! 👍👏
@isme3643 жыл бұрын
Comments are full of assholes your explanations are great started taking programing seriously recently and i was able to i understand you perfectly thank you
@Rachaelshaw79 ай бұрын
Oh my gawd i just realised my teacher at school was teaching us assembly language... Holy crap
@UniqueGlover5 жыл бұрын
Great video, easy to follow
@joriskbos11156 жыл бұрын
I've seen assembly code that just uses syscall instead of int 0x80 and as far as I know it does exactly the same. Does it matter what I use? My best guess is that syscall might be something specific to nasm and int 0x80 is more common across assemblers.
@Rokannon Жыл бұрын
I am thinking about watching this series. Did anyone watch the whole thing? Is it worth the watch? Thank you.
@ivancizse3 жыл бұрын
How to make the following program in 8086. Input: Characters (10 maximum) Output: Simulates the operation of a queue of a maximum of 10 characters allowing the user insert and delete elements, with the permanent display of the queue on the screen (cursor handling).
@wisdommonger5 жыл бұрын
I'd love to see the final right half of the video, but it's populated by overlays. I've got annotations turned off, but they still show up.
@myartchannel82055 жыл бұрын
You know, I'm glad I know other languages as well. I might find a way to automate some of this.
@masqueradethemusketeer31015 жыл бұрын
i wanted a basic tutorial...but this guy jumped from basic arithmetic operations to making things that i didn't undertand...
@techtimefly4 жыл бұрын
@9:14 what is the value of ecx before adding to ebx?
@samaellovecraft10 ай бұрын
Thanks for the knowledge!
@toopkarcher Жыл бұрын
Very nice video. Hope the flashing isn't a big thing for the rest of the series. #epilepsyWarning 😂
@willychrosnik1925 Жыл бұрын
thanks bro. amazing video
@sivaaj85042 жыл бұрын
To the point. Excellent video.
@johnrothe69814 жыл бұрын
Great contents, great communication!
@srshk2574 жыл бұрын
Very cool series. I wish my professors taught like you. Any plans on doing a series on ARM64 or x86_64 assembly?
@ShivanshPlays12 жыл бұрын
I think this series is about x86_64
@flameofthephoenix8395 Жыл бұрын
Hm, I'm trying to directly alter the bytes of a .exe in order to write a program, hopefully I can skip that whole assembler nonsense and get straight to machine code, however I keep getting an error when I try to run a .exe in administrator mode that the .exe cannot be found it will state the exact file path of the .exe I'm attempting to run, which is odd because I can see very clearly the .exe is located on that branch in file explorer. It may be worth mentioning the way I'm going about all this is creating a .txt file that has nothing in it, changing the extension to .exe manually, then opening the file for Binary as #1 in Excel and putting a bunch of bytes of programming into the .exe file, this seems more likely to work than other methods like inputting the byte information into an ASCII .txt before changing to a .exe due to some ASCII characters potentially getting messed with by the .txt before the transformation to a .exe happens.
@colza10255 жыл бұрын
For those who are curious about the list of available system calls. asm.sourceforge.net/syscall.html